DB2
分类:突袭反恐任务

最近,专业中三个档期的顺序的数据 Table 和 Stored Procedure 在 DB2 数据库,要求拜谒之。上面把施用进度中相见的多少个难题整治下:

(说真话,DB2 并不曾 SQLServer 好用,也大概本身是太小白了,有待于提升...)

条件搭建

(1)DB2Client

DB2 客户端:DB2 v9.1

设置到位后,可以透过cmd命令行查看 DB2Client 相关音讯:

  • db2level:查看DB2Client版本信,包括32/64位

在初阶一向运维 db2cmd 来运维 db2cmd.exe 运行 db2命令行程序,实施 db2:

突袭反恐任务 1

后来,可以执行连接数据库、访谈数据等操作。

db2命令行连接数据库

catalog tcpip node runnode_My remote IP server Port
catalog database calldb_Dest as calldb_My at node runnode_My

再凭 客户名和登入密码 就可以访谈数据库了。个中,DB2 数据库默许端口是 50000。

connect to calldb_My user 用户名 using 密码

(2)Quest Central

DB2 可视化工具:Quest Central for DB2 v5.0.2.4

关于注册码

  • Quest Central for DB2:2-95710-05964-91891-64750 和 Bergelmir/CORE
  • Knowledge Xpert for DB2:147851648424638496327 和 stenny

安装之后,运营遭逢如下难题:

突袭反恐任务 2

解决措施:程序上点击鼠标右键-->属性-->包容性;勾选以致极方式运作那么些程序(包容windowsXP);勾选以管理员身份运维程序,就可以缓慢解决。

具体操作

经过 db2发令 连接到数据后,在 Quest Central 首页会展现已延续的应和数据库的再而三结点。

除 Quest Central 外,还也许有其他 DB2可视化学工业具,可扩高校习。

基本功运用

以前多是用 SQLServer,初次操作 DB2 数据库,虽说语法非常多相近,还是各个不顺手。

至于DB2,相关材料和图书推荐:

  • 牛新庄 -《鲁人持竿DB2》《深远分析DB2》《DB2品质调节与优化》
  • 《DB2 Express-C 火速入门》

此外,可参考:DB第22中学华夏族民共和国社区;

贰个服务器能够建五个实例,一个实例下得以建四个数据库,多个数据库能够包涵五个表空间。

多少个注意事项

  • SQL 语句必供给以 ; 结尾
  • declare 定义变量不要带 @,那是与 SQL Server 的分别
  • SQLSTATE 和 SQLCODE 能够提供 SQL 命令的运行情况
  • 存款和储蓄进程调用:call ProcedureName(inVal, ..., inVal, ?, ... , ?);,当中,? 是出口参数占位符
  • NULL 对于完整性约束和询问带来负效应,建议表中最棒尚未空值,在建表时加上非空约束
  • 表存款和储蓄在表数据空间,索引存款和储蓄在目录数据空间
  • 分区升高系统性格

常用命令

(1)查询

// 查看表字段信息
[1]. describe table schemaName.tableName;
[2]. describe select * from schemaName.tableName;
// 查看表索引信息
[1]. describe indexes for table schemaName.tableName show detail;
[2]. select * from syscat.indexes where tabname='大写的表名';

(2)删除

// 删除索引
drop index schemaName.indexName;

(3)重命名

// 重命名 表名
rename table schemaName.oldTabName to newTabName;
// 重命名 字段
alter table schemaName.TabName
    rename column oldColName to newColName;

其间,表 oldTabName 不要有外键约束和视图引用。别的,尽量幸免字段重命名。

建表

已知存在表 tabSqh,成立 tabSqh 的别本 tabSqh_Copy:

CREATE TABLE tabSqh_Copy like tabSqh;
INSERT INTO tabSqh_Copy select * from tabSqh;

在乎,该措施只复制表结商谈表数据,tabSqh_Copy 未有有关的表约束,须要手动加多:

alter table tabName
    add constraint P_tabName primary key(IDKey);
alter table tabName1
        add constraint F_IDKey foreign key (IDKey)
                references tabName2 (IDKey)
on delete restrict on update restrict;        

其他连锁约束增添方法如是之。

SELECT 高档用法

此地介绍 select 在 DB2 中的 3 种尖端用法:

(1)复制表结构

CREATE TABLE new_table_name LIKE table_name; 

(2)创制结果表

CREATE TABLE new_table_name AS (
    SELECT * FROM table_name
) DEFINITION ONLY; 

(3)创制物化查询表(MQT)

create table new_table_name AS (
    select * from table_name
) data initially deferred refresh deferred;   
refresh table new_table_name; 

物化表SELECT语句看似三个查询,未有当真产生表,类型展现为Query,但它完全能够当表来用。 

删表

(1)删除单行数据或批量删减数据:方法2比办法1性质好

// 方法1
DELETE FROM tabName WHERE 过滤条件  
// 方法2
DELETE FROM  
(  
    SELECT * FROM tabName WHERE 过滤条件  
);

(3)全表数据删除

// 方法1
DELETE FROM tabName;
// 方法2
DROP TABLE ...
CREATE TABLE ...
// 方法3
ALTER TABLE tabName ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;

(4)直接删除表

DROP TABLE tabName;

临时表

DB2的一时表基于会话(session),且会话之间相互隔绝。当会话截止时,不经常表的数码被剔除,有时表也会被剔除。

不经常表的坚决守住:

  • 封存中间结果集,以便职务的承接管理
  • 防止复杂的SQL语句,将一条较为复杂的SQL语句分解成多条轻易的SQL语句,升高运营效用

    // 创造有的时候表
    DECLARE GLOBAL TEMPORARY TABLE session.TmpTableName LIKE rvc.TableName INCLUDING COLUMN DEFAULTS
    WITH REPLACE
    ON COMMIT PRESERVE ROWS NOT LOGGED;
    // 向不常表中插入数据 INSERT INTO session.TmpTableName SELECT * FROM rvc.TableName WHERE <过滤条件>;

当中,NOT LOGGED 表示不记录日志,WITH REPLACE 代表若已存在不经常表则替换之,ON COMMIT PRESE福睿斯VE ROWS 表示commit后依旧保留表中的数据。之后,不时表能够看成是普通表,查询、联表均可。

关于session一时表的多少个难点:

关于session一时表调节选项 ON COMMIT PRESEWranglerVE ROWS的演讲:

专心,全局临时表允许成立索引、但不一致敬创设主键和唯龙马精神约束。创制的一时半刻表同原表有同样的表结构,不过相关列的天性(主键、外键、唯新闯事物正在蒸蒸日上约束、索引等)新闻是未曾的。

此外消息可参看:DECLARE GLOBAL TEMPORARY TABLE - IBM;

DGTT 与 CGTT

上述有时表均为 DGTT(已扬言的全局不经常表),DB 9.7 初阶支持CGTT(已开立的大局有的时候表)。

共同点:

  •  支持基于会话的数量
  •  协助索引,但不补助唯黄金时代约束或主键

三头都扶助基于会话的数据。

CGTT 优点:

  •  长久化的,在系统装置时优先创设、供之后分享之,而 DGTT 是在某贰次应中声称、仅供该会话使用;
  •  幸免在各顾客会话初步时声称不时表的需要;
  •  选择与日常表同样的格局法则,而 DGTT 必需是定点的形式 SESSION;

创建 CGTT:

CREATE GLOBAL TEMPORARY TABLE <table_name> (
    <column_name>  <column_datatype>,
    <column_name>  <column_datatype>,
…  )
ON COMMIT [PRESERVE|DELETE] ROWS
ON ROLLBACK [PRESERVE|DELETE] ROWS 
[NOT LOGGED|LOGGED] 
DISTRIBUTE BY HASH ( col1,..)
IN <tspace-name>;

别的详细音信可参照:DB2 临时表 - DGTT 和 CGTT;

索引

目录是铁定的事情键值的联谊,每四个键值指向表的生气勃勃行。

目录是如火如荼把双刃剑,当表的目录过多时,数据删除、插入和立异频率会减低,当索引过少照旧设计不成马上会影响多少的询问功效。尽量不要在含有 null 值的字段上建立(单列)索引,因为索引不会蕴藏该条记录的新闻。

对此构成索引,引导列(组合索引中排在最左边包车型客车列)对查询语句中where条件的震慑最大。由此,应该对索引键中的列按重复值由少到多的种种排序,该排序会使索引键提供最好品质。

优点:

  •  加速查询速度
  •  幸免不须求的表扫描 或 排序操作
  •  减少死锁的发生
  •  唯风流洒脱性索引保障数据的唯意气风发性

缺点:

  •  额外的存款和储蓄空间
  •  索引成立和爱护的耗费时间

突袭反恐任务,计算消息

数据库对象的总括参数音讯,如表的数据量大小、占用的页数、表的行数、索引的状态和内地的分区景况等。

五个SQL在写完并运维之后,大家只是告诉DB2去做怎样,并不是哪些去做。具体如何做,决意于优化器。优化器为了转移最优的实行安插,供给调整当前的种类音讯、目录中的总计音信等。runstats 命令便是用来访谈数据库对象的状态新闻,对优化器生成最优的进行安顿第旭日初升。

对数据表频仍的insert, update,会促成数据仓库储存储中冒出物理碎片,runstats可以对数据库进行数量整合,有帮忙数据块一而再化、进步多少存取的成效,原理类似于OS中的磁盘碎片整理。

// 针对表
runstats on table schemaName.tableName;
// 针对表和索引信息
runstats on table schemaName.tableName [with distribution] and [detailed] indexes all;
// 针对某个单一索引
runstats on table schemaName.tableName for/and indexes schemaName.indexName;

试行安插

在关系型数据库调优进度中,SQL语句是事关性能难题的尤为重要原因,而试行布署则是演说SQL语句施行进度的言语。

  •  分歧数据库之间对于进行安顿的表示方法各不相同
  •  每一遍导入存款和储蓄进程,生成的累积进度实践安插不必然完全一样,受当前的数据库参数、总括新闻的熏陶

SQL语句的进行进度豆蔻梢头共包括五个关键环节:

  •  数据读取方式(scan):表扫描 or 索引围观
  •  表之间什么开展连接(join):富含Nest Loop 、Merge Join、Hash join及半接连等、多表间的连接各种采取

关于多表间连接的依次选拔主题材料:

任由在一样条SQL语句中包蕴了稍稍张表连接,同有时刻唯有两张表张开连续,但多表间的连年各种也是决定质量的严重性缘由。数据库对于表的次第的精选,依照七个表之直接二连三后得出的行数举办排序,假诺总计音讯与事实上境况不是相当的大,有非常的大希望会导致由于一而再种种不当而招致的属性难题。

有关音信请参谋:DB2推行安排浅析;

对此有些复杂的SQL,提议选用Quest Central 中的 SQL Turning 效能,相比较直观。

SQL语句实践安顿的别的查看方法:

(1)db2expln

db2expln推行布置分为三局部:

  •  当前征集实践陈设的言语
  •  实行铺排详细音信
  •  实践安排图:从下往上,从左往右,依据号码从大到小的逐后生可畏举行阅读

在cmd命令行运维 db2expln 命令,能够查阅该命令的使用协理。

db2expln -d 数据库名称 -u 用户名 密码 -q "sql语句"[-f "文件名.sql"] -t -o 输出文件名.out

内部,文件名.sql 中的多条独立的SQL语句各占1行,行末不要带分号。

db2expln -d dbName -u sqh cmb@2018 -q "sql语句" -g -t -o tmp_sqh.out
db2expln -d dbName -u sqh cmb@2018 -f "sqh.sql" -g -t -o tmp_sqh.out

对上述命令的分解:

  • -t:输出到终点,-o:输出到文件
  • -q:执行八个SQL语句,-f:实行有个别保存了多条SQL语句的文书
  • -g:图形化展现
  • -z:钦定SQL语句间的相间符

参考:采纳 db2expln 的 DB2 SQL品质优化示例;

(2)db2exfmt

该措施要求在DB2设置目录 ...IBMSQLLIBMISC 下有 explain.dll 文件,有待于进一步深造。

有关查看存款和储蓄进度的施行布署

第豆蔻梢头,获取存款和储蓄过程相呼应的包

SELECT bname, bschema, pkgname, pkgschema 
FROM syscat.packagedep
WHERE btype='T' AND pkgname in (
     select bname from sysibm.sysdependencies where dname in (
            select specificname from syscat.procedures where procname='存储过程名称' AND procschema='存储过程模式名称'
     )
);

下一场,再经过如下命令获取包中的施行安插

db2expln -d 数据库名称 -u 用户名 密码 -g -c 包模式名称 -p 包名称 -s 0 -t -o tmp_sqh.out

稳重,上述代码获取存款和储蓄进程对应的包,某个意况下询问不到音讯,至于怎么还不知情,再提供另黄金年代种情势

select c.PROCSCHEMA, c.PROCNAME, b.* 
from syscat.STATEMENTS b, syscat.PROCEDURES c, syscat.ROUTINEDEP d
where b.pkgname = d.bname
      AND c.SPECIFICNAME = d.SPECIFICNAME
      AND c.PROCSCHEMA   = d.ROUTINESCHEMA
      AND c.PROCSCHEMA   = '存储过程模式名称' AND c.PROCNAME = '存储过程名称'; 

总计之,鉴于数据仓库储存款和储蓄进程实施布署的多变性,提出:

  •  runstats + rebind
  •  删除重新建立 

runstats 命令参见上述总计音讯部分,上面给出其余常用命令

// 重新绑定包
rebind package pkgSchemaName.pkgName;
// 更新 package cache 中的执行计划
flush package cache dynamic;

瞩目,runstats 仅是立异实行陈设的二只(对动态SQL生效、但对存款和储蓄进度无效),另龙精虎猛方面还需 rebind 包(相持异存款和储蓄进度举办陈设才使得)。

本文由金沙APP发布于突袭反恐任务,转载请注明出处:DB2

上一篇:爱过你以后我再也没考虑过别人 下一篇:没有了
猜你喜欢
热门排行
精彩图文