DB2语言

现阶段,工作中一个品类的数量 Table 和 Stored Procedure 在 DB2
数据库,需要拜访之。下面把利用过程中相见的多少个问题整治下:

Win10下安装VS2013后不可能安装VS2013中文简体语言包,提醒Windows程序兼容情势已打开。

(说实话,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 疾速入门》

此外,可参考:DB2中国社区

一个服务器可以建五个实例,一个实例下可以建五个数据库,一个数据库可以涵盖五个表空间。

多少个注意事项

  • 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 PRESERVE ROWS
表示commit后依旧保留表中的数据。之后,临时表能够看做是普通表,查询、联表均可。

至于session临时表的多少个问题:http://www.db2china.net/Question/28913

关于session临时表控制选项 ON COMMIT PRESERVE
ROWS的解释:http://www.db2china.net/Article/9916

瞩目,全局临时表允许成立索引、但不同意创设主键和唯一约束。成立的暂时表同原表有平等的表结构,不过相关列的习性(主键、外键、唯一约束、索引等)音信是未曾的。

另外音信可参看: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;

1,随便找个文本夹将简体闽南语语言包放入其中,发送急迅情势到桌面,右击快速模式

推行计划

在关系型数据库调优过程中,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安装目录 …\IBM\SQLLIB\MISC\ 下有 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 包(对革新存储过程举行计划才使得)。

分选属性,并在对象一栏最终添加文(Gavin)本 -Uninstall,点击确定(注意有个空格)

 语言 3

  

2,打开迅速模式,出现三个选项,一个修复一个卸载,点击修复,中间修复过程中,程序可能提醒语言不般配当前版本,间接规定即可。

注意安装过程中并非打开vs2013

 语言 4

 

3,安装完未来打开vs2013,此时应有在Tools-Option选项中来看闽南语选项了,选用简体中文即可。倘诺顺利完成那一个进程,此时您早就足以打开VS2013在Tools-Option选项中见到中文选项了。

  假若界面一贯停留在Microsoft VS2013
准备画面,强制关闭安装界面重启电脑,此时打开vs2013应当已经是华语界面了

语言 5

 

语言 6

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图