DB2学习

本文最后更新于:2 年前

DB2学习

参考:《DB2从入门到精通》 - 明日科技

DB2转换为DECIMAL: https://qa.1r1g.com/sf/ask/3114613141/

DB2数据库学习总结(一) - round函数用法: https://blog.csdn.net/qq_36501591/article/details/82773762

DB2数据类型: https://www.cnblogs.com/xiaojianblogs/p/6288108.html

https://blog.csdn.net/weixin_40983306/article/details/87862270

DB2数据库中的常用的数据类型: https://blog.csdn.net/WziH_CSDN/article/details/111191816

DB2中数据类型DECIMAL的用法: https://blog.csdn.net/love_hanyu/article/details/84362922

什么时候索引会失效?: ttps://www.zhihu.com/question/377039636

索引失效的情况及解决(超详细): https://blog.csdn.net/sy_white/article/details/122112440

1. DB2数据类型

参考:https://www.cnblogs.com/xiaojianblogs/p/6288108.html

DB2数据库的内置数据类型主要分成数值型(numeric)、字符串型(character string)、图形字符串(graphic string)、二进制字符串型(binary string)和日期时间型(datetime)。还有一种叫做 DATALINK 的特殊数据类型。DATALINK 值包含了对存储在数据库以外的文件的逻辑引用。

1) 数值型(numeric)

数值型数据类型包括 SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL 和 DOUBLE。所有数值都有符号和精度。精度是指除符号以外的二进制或十进制的位数。如果数字的值大于等于零,就认为符号为正。

  • 小整型,SMALLINT:小整型是两个字节的整数,精度为 5 位。小整型的范围从 -32,768 到 32,767。
  • 大整型,INTEGER 或 INT:大整型是四个字节的整数,精度为 10 位。大整型的范围从 -2,147,483,648 到 2,147,483,647。
  • 巨整型,BIGINT:巨整型是八个字节的整数,精度为 19 位。巨整型的范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
  • 小数型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s) 或 NUM(p,s):小数型的值是一种压缩十进制数,它有一个隐含的小数点。压缩十进制数将以二-十进制编码(binary-coded decimal,BCD)记数法的变体来存储。小数点的位置取决于数字的精度(p)和小数位(s)。小数位是指数字的小数部分的位数,它不可以是负数,也不能大于精度。最大精度是 31 位。小数型的范围从 -10^31+1 到 10^31-1。
  • 单精度浮点数(Single-precision floating-point),REAL:单精度浮点数是实数的 32 位近似值。数字可以为零,或者在从 -3.402E+38 到 -1.175E-37 或从 1.175E-37 到 3.402E+38 的范围内。
  • 双精度浮点数(Double-precision floating-point),DOUBLE,DOUBLE PRECISION 或 FLOAT:双精度浮点数是实数的 64 位近似值。数字可以为零,或者在从 -1.79769E+308 到 -2.225E-307 或从 2.225E-307 到 1.79769E+308 的范围内。

2) 字符串型(character string)

字符串是字节序列。字符串包括 CHAR(n) 类型的定长字符串和 VARCHAR(n)、LONG VARCHAR 或 CLOB(n) 类型的变长字符串。字符串的长度就是序列中的字节数。

  • 定长字符串,CHARACTER(n) 或 CHAR(n):定长字符串的长度介于 1 到 254 字节之间。如果没有指定长度,那么就认为是 1 个字节。
  • 变长字符串,VARCHAR(n)、CHARACTER VARYING(n) 或 CHAR VARYING(n):VARCHAR(n) 类型的字符串是变长字符串,最长可达 32,672 字节。
  • LONG VARCHAR:LONG VARCHAR 类型的字符串是变长字符串,最长可达 32,700 字节。
  • 字符大对象字符串(Character Large Object String),CLOB(n[K M G]):CLOB 是变长字符串,最长可以达到 2,147,483,647 字节。如果只指定了 n,那么 n 的值就是最大长度。如果指定了 nK,那么最大长度就是 n1,024(n 的最大值为 2,097,152)。如果指定了 nM,那么最大长度就是 n1,048,576(n 的最大值为 2,048)。如果指定了 nG,那么最大长度就是 n*1,073,741,824(n 的最大值是 2)。CLOB 用于存储基于大单字节字符集(single-byte character set,SBCS)字符的数据或基于混合(多字节字符集(MBCS)和 SBCS)字符的数据。

3) 图形字符串(graphic string)

图形字符串是表示双字节字符数据的字节序列。图形字符串包括类型为 GRAPHIC(n) 的定长图形字符串和类型为 VARGRAPHIC(n)、LONG VARGRAPHIC 和 DBCLOB(n) 的变长图形字符串。字符串的长度就是序列中双字节字符的数目。

  • 定长图形字符串,GRAPHIC(n):定长图形字符串的长度介于 1 到 127 个双字节字符之间。如果没有指定长度,就认为是 1 个双字节字符。
  • 变长图形字符串,VARGRAPHIC(n):VARGRAPHIC(n) 类型的字符串是变长图形字符串,最大长度可达 16,336 个双字节字符。
  • LONG VARGRAPHIC:LONG VARGRAPHIC 类型的字符串是变长图形字符串,最大长度可达 16,350 个双字节字符。
  • 双字节字符大对象字符串,DBCLOB(n[K M G]):双字节字符大对象是变长双字节字符图形字符串,最长可达 1,073,741,823 个字符。如果只指定了 n,那么 n 就是最大长度。如果指定了 nK,那么最大长度就是 n1,024(n 的最大值为 1,048,576)。如果指定了 nM,那么最大长度就是 n1,048,576(n 的最大值为 1,024)。如果指定了 nG,那么最大长度就是 n*1,073,741,824(n 的最大值是 1)。DBCLOB 用于存储基于大 DBCS(双字节字符集,double-byte character set)字符的数据。二进制字符串是字节序列。

4) 二进制字符串(binary string)

二进制字符串包括 BLOB(n) 类型的变长字符串,它用于容纳非传统型的数据,诸如图片、语音或混合媒体等,还可以容纳用户定义的类型及用户定义的函数的结构化数据。

  * 二进制大对象,BLOB(n[K M G]):二进制大对象是变长字符串,最长可达 2,147,483,647 字节。如果只指定了 n,那么 n 就是最大长度。如果指定了 nK,那么最大长度就是 n1,024(n 的最大值为 2,097,152)。如果指定了 nM,那么最大长度就是 n1,048,576(n 的最大值为 2,048)。如果指定了 nG,那么最大长度就是 n*1,073,741,824(n 的最大值是 2)。

5) 日期时间型(datetime)

日期时间型数据类型包括 DATE、TIME 和 TIMESTAMP。日期时间值可在某些算术和字符串操作中使用,而且兼容某些字符串,但它们既不是字符串,也不是数字。

  • DATE:DATE 是一个由三部分组成的值(年、月和日)。年份部分的范围是从 0001 到 9999。月份部分的范围是从 1 到 12。日部分的范围是从 1 到 n,其中 n 的值取决于月份。DATE 列长 10 个字节。
  • TIME:TIME 是一个由三部分组成的值(小时、分钟和秒)。小时部分的范围是从 0 到 24。分钟和秒部分的范围都是从 0 到 59。如果小时为 24,分钟和秒的值都是 0。TIME 列长 8 个字节。
  • TIMESTAMP:TIMESTAMP 是一个由七部分组成的值(年、月、日、小时、分钟、秒和微秒)。年份部分的范围是从 0001 到 9999。月份部分的范围是从 1 到 12。日部分的范围是从 1 到 n,其中 n 的值取决于月份。小时部分的范围是从 0 到 24。分钟和秒部分的范围都是从 0 到 59。微秒部分的范围是从 000000 到 999999。如果小时是 24,那么分钟值、秒的值和微秒的值都是 0。TIMESTAMP 列长 26 个字节。日期时间值的字符串表示:尽管 DATE、TIME 和 TIMESTAMP 的值的内部表示对用户是透明的,日期、时间和时间戳记也可以用字符串来表示,CHAR 标量函数(请参阅 SQL 的“词类(parts of speech)”)可以用于创建日期时间值的字符串表示。
  • 日期值的字符串表示是一个以数字开始,长度不少于 8 个字符的字符串。日期值的月份和日部分中前面的零可以省略。
  • 时间值的字符串表示是以数字开头,长度不少于 4 个字符的字符串。时间值的小时部分前面的零可以省略,秒部分可以完全省略。如果秒的值没有指定,那么就认为是 0。
  • 时间戳记值的字符串表示是以数字开头,长度不少于 16 个字符的字符串。完整的时间戳记字符串表示形式为 yyyy-mm-dd-hh.mm.ss.nnnnnn。时间戳记值的月、日或小时等几部分前面的零可以省略,微秒可以截断或完全省略。如果任何时间戳记值的微秒部分尾零被省略掉了,那么将假定空缺的数位上为零

2.Oracle和DB2数据类型的比较

Oracle 和DB2 数据类型的比较

Oracle DB2/400
Oracle数据类型 注意事项 DB2 UDB数据类型 注意事项
DATE DATE
TIME
TIMESTAMP
如果只使用MM/DD/YYY,那么使用DATE类型。
如果只使用HH:MM:SS, 那么使用TIME类型。
如果要使用日期和时间,则使用时间戳类型(TIMESTAMP)
能使用Oracle中的TO_CHAR()函数来取DATE的字串来分别和DB2/400的DATE、TIME相匹配。
VARCHAR2(n) n<=4000 CHAR(n)
VARCHAR(n)
若n<=32766,则使用DB2/400中的CHAR类型、VARCHAR
LONG n<=2GB VARCHAR(n)
CLOB(n)
若n<=32K,则使用DB2/400中的CHAR类型、VARCHAR。
若32K=< n <=2GB,则使用CLOB。
ROW&
LONG ROW
n<=255 CHAR(n) FOR BIT DATA
VARCHAR(n) FOR BIT DATA
BLOB(n)
若n<=32K, 则使用CHAR(n) FOR BIT DATA 或
VARCHAR(n) FOR BIT DATA
若n<=2GB, 则使用BLOB(n)
BLOB n<=4GB BLOB(n) 若n<=2GB, 则使用BLOB(n)
CLOB n<=4GB CLOB(n) 若n<=2GB, 则使用CLOB(n)
NCLOB n<=4GB DBCLOB(n) 若n<=2GB, 则使用DBCLOB(n/2)
NUMBER SMALLINT/INTEGER/BIGINT
DECIMAL(p,s)/NUMBER(p,s)
Float(n)/ REAL/DOUBLE
若Oracle中定义NUMBER(p) 或 NUMBER(p,s), 则使用SAMLLINT/INTEGER/BIGINT
若Oracle中定义NUMBER(p,s), 则使用DECIMAL(p,s)
若Oracle中定义NUMBER,则使用FLOAT(n)/REAL/DOUBLE

说明:
  NUMBER

  Oracle中的NUMBER类型可以对应DB2/400中的很多类型,这种对应关系要依赖于Oracle中number将用于保存何种类型的数据,是整型还是带有小数位的实型数据,另外还要考虑类型所占用的存储空间,例如:SAMLLINT占2 byte, INTEGER占4 byte; BIGINT占8 byte;Oracle中的NUMBER类型所占用的存储空间要根据它的定义而定,例如缺省精度下的NUMBER有38个数字长,占用20 byte的空间。具体的对应关系请参照上表。
  ROW and LOB类型
  DB2/400提供VARCHAR和CLOB与Oracel中的RAW和LONG RAW相对应。Oracle也支持大对象:BLOB、CLOB、CLOB和NCLOB, Oracle中的BLOB和CLOB可以提供4GB的空间,而DB2/400中的BLOB和CLOB只能存放2GB的数据;DB2/400中的DBCLOB与Oracle中的NCLOB 2GB相对应。Oracle 中的BFILE数据类型用于管理数据库以外的二进制数据,数据库中的表将指向数据库外部的存放的BFILE文件,DB2/400也提供一个类似的数据类型DATALINK相对应。
  ROWID
  Oracle ROWIND虚拟列用于对表中的某一列进行唯一标示,DB2/400中也有这样的数据类型ROWID,它与Oracle中的ROWID的功能相似。DB2/400中的ROWID可以存放40 byte的数据用来唯一标示表中的每一行,它没有ccsid属性,这些信息中没有关于datafile、 block 或 row的信息。例如:
CREATE TABLE LIBRARYNAME/ORDERS2 (ORDERNO ROWID, SHIPPED_TO VARCHAR (36) , ORDER_DATE DATE) ORDERNO的数据类型为ROWID,用于存放订单号,每当插入一行时,系统自动生成一个值,存放进这个字段。可以用OPERATION NAVIGATOR查看它的内容。
  Character type
  DB2/400的CHAR、VARCHAR类型与Oracle中的VARCHAR2(n)类型相对应,但是Oracle中的VARCHAR2(n)类型仅用于存放较小的字符串,这里的n小于4000,因此在这种情况下,最好用定长的CHAR(N)类型与Oracle的VARCHAR2(n)相对应,这样不仅可以提高效率,还可以节省存储空间,若使用VARCHAR(n)类型最好用ALLOCATE参数,这样可以提高数据库的性能,它可以减少内存和硬盘之间的输入/输出操作。
要注意DB2/400中的字符串中文输入问题,要想在DB2/400上输入中文应用这样的SQL创建表,这里的CCSID 935,代表简体中文。

3. DB2数据类型转换

DB2数据库伪表:SYSIBM.SYSDUMMY1

1
2
3
select 1 from SYSIBM.SYSDUMMY1;
# 在不更改代码的情况下创建一张名为DUAL的视图功能与SYSIBM.SYSDUMMY1相同。
select 1 from SYSIBM.DUAL;

DUAL 表

参考:https://www.ibm.com/docs/zh/db2/11.1?topic=SSEPGG_11.1.0/com.ibm.db2.luw.apdv.porting.doc/doc/r0052874.htm

任何对 DUAL 表进行的未限定引用将解析为一个内置视图,该视图返回一行以及一列。该列的名称为 DUMMY,值为“X”。DUAL 表类似于 SYSIBM.SYSDUMMY1 表。

要启用 DUAL 表支持,请将 DB2_COMPATIBILITY_VECTOR 注册表变量设置为十六进制值 0x02(位位置 2),然后停止并重新启动该实例:

1
2
3
db2set DB2_COMPATIBILITY_VECTOR=02
db2stop
db2start

要激活针对 Oracle 应用程序的所有兼容性功能,请将 DB2_COMPATIBILITY_VECTOR 注册表变量设置为 ORA,然后停止并重新启动该实例:

1
2
3
db2set DB2_COMPATIBILITY_VECTOR=ORA
db2stop
db2start

将对 DUAL 表进行的未限定表引用解析为 SYSIBM.DUAL。

如果存在用户定义的名为 DUAL 的表,那么 Db2® 服务器会解析对该用户定义表的表引用。

示例:

通过从 DUAL 中进行选择来生成随机数。

1
SELECT RAND() AS RANDOM_NUMBER FROM SYSIBM.DUAL;

image-20221105171553894

检索 CURRENT SCHEMA 专用寄存器的值。

1
2
SET SCHEMA = MYSCHEMA;
SELECT CURRENT SCHEMA AS CURRENT_SCHEMA FROM DUAL;

image-20221105171639758

对应的Oracle伪表:

1
SELECT SYSDATE FROM DUAL;

1) 数字转DECIMAL类型

https://blog.csdn.net/weixin_40983306/article/details/87862270

decimal(p,s)

p表示:不包括小数点,不包括符号位,所能存数字的总位数(包括小数部分和整数部分)
s表示:小数部分数字的位数,由此可知整数部分的位数为p-s;

举个例子:

decimal(5,2) 能够表示的数的范围 -999.99到999.99;

1
2
3
4
5
# DECIMAL(10,2) 不含小数点总共10位,小数位2
select CAST(1234567890 AS DECIMAL(10,2)) from SYSIBM.SYSDUMMY1;

# 两位小数
select CAST(12345678.12 AS DECIMAL(10,2)) from SYSIBM.SYSDUMMY1;

数字长度超出报错:

1
select CAST(123456789 AS DECIMAL(10,2)) from SYSIBM.SYSDUMMY1;

SQL 错误 [22003]: 在数字数据类型转换期间发生溢出。. SQLCODE=-413, SQLSTATE=22003, DRIVER=4.26.14

2) decimal函数

decimal(5.15, 15, 2)

1
2
3
4
5
6
7
8
9
10
select CAST(1234567890 AS DECIMAL(10,2)) from SYSIBM.SYSDUMMY1;

decimal(5.15, 15, 2)
decimal(5.15/3.27, 15, 2)
round((5.15/3.27, 2)
float(5.15)
double(5.15)
coalesce(5.15, 0)
case when a= 0 then 0 else 1 end;

https://www.ibm.com/docs/zh/db2/11.1?topic=dum-get-hash-value-function-compute-hash-value-given-string

https://www.ibm.com/docs/zh/db2/11.5

D:\Program Files\instantclient_19_10\network\admin

4. 索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

-- 索引
-- 索引是表的一个或多个列的键值的有序列表,可以针对一个列或者多个列建索引。
-- 如果没有索引:对表添加数据时,该数据将被追加到表的最后。不存在固有的数据顺序。搜索特定数据行时,必须检查从第一行到最后一行的所有行。
-- 创建索引的原因有两个:
-- 确保一个或多个列值的唯一性
-- 提高表查询的性能。DB2优化器使用索引提高查询时的性能,或者以索引的顺序显示查询结果。

-- 索引可以定义为惟一的或非唯一的
-- 非唯一的索引允许重复的键值;
-- 唯一的索引只允许一个键值在列表中出现一次。唯一的索引允许出现单个空值。然而,第二个空值会导致重复现象,因此不允许。
-- 创建索引可以使用create index语句
-- 为表中的列指定primary key或unique约束,会隐式地创建索引。
-- 索引可以创建为升序、降序或双向。选择哪个选项取决于应用程序如何访问数据。
-- 为员工id创建索引
create index iemployee on employee(id)
-- 在默认情况下,索引按升序创建,但也可以创建降序索引。甚至可以为索引中的各个列指定不同的顺序。
create index iemployee on employee(id desc, name asc)
-- 升序索引利于min列函数的结果;降序索引利于max列函数的结果。如果应用程序还需要数据按与索引相反的顺序排序,那么DB2允许创建双向索引。
create index iemployee on employee(id) allow reverse scans
-- 在索引中包含列
-- 在创建索引时,可以选择包含额外的列数据,这些额外的列数据将与键存储在一起,但实际上它们不是键本身的一部分,所以不被排序。在索引中包含额外列的主要原因是为了提高某些查询的性能:因为索引页面中已经提供了数据值,DB2就不需要访问数据页面。只能为唯一索引定义包含的列。
-- 假设我们经常做如下查询:
select id, name from employee order by id
-- 建议创建如下索引
create unique index iemployeeid on employee(id) include(name)
-- 创建一个索引花费的时间比较长,DB2必须读取每一行来提取键,对这些键进行排序,然后将键值列表写到数据库中。如果表比较大,那么将使用临时表空间对键进行排序。
-- 索引存储在表空间中。如果表驻留在数据库管理的表空间中,就可以选择将索引放在不同的表空间中。在创建表时,可以使用indexes in子句指定索引放置的表空间。
-- 索引是值的额外副本,所以当表中的数据被更新时,它们也必须被更新。如果表数据经常被更新,就要考虑额外的索引会对更新性能产生什么样的影响。

-- 索引分类:
-- 唯一索引和非唯一索引
-- 集群索引和非集群索引
-- 分区索引和非分区索引
-- 双向索引
-- 基于表达式的索引

5. 表空间和表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- https://www.ibm.com/products/db2-database/pricing
-- https://epwt-www.mybluemix.net/software/support/trial/cst/programwebsite.wss?siteId=1120&tabId=2932&p=null&h=null#

-- 查看所有表空间
db2 list tablespaces
-- 创建表,指定特定的表空间
db2 "create table employee(id integer) in userspace1"
-- 查询employee表的所在的表空间
db2 "select tabname, tbspace from syscat.tables where tabname = 'employee'"

-- 修改表结构
-- 查看表结构信息
db2 describe table employee
-- 为表添加一列
db2 "alter table employee add depart_id integer"
-- 修改表某列的数据类型
db2 "alter table employee alter name set data type varchar(20) alter gender set not null"
-- 删除表,表中的数据和表定义都会被删除。如果为表定义了索引或者约束,也会同时被删除。
db2 "drop table employee"

6. DB2操作命令

参考:https://blog.csdn.net/weixin_39881859/article/details/111515762

1) 打开DB2命令窗口

1
2
C:\Users\db2admin>db2cmd
C:\Users\db2admin>

2) 操作数据库实例

1
2
3
4
5
6
7
8
9
# 启动数据库实例
C:\Users\db2admin>db2start
2022-08-24 21:03:49 0 0 SQL1026N 数据库管理器已活动。
SQL1026N 数据库管理器已活动。

C:\Users\db2admin>

# 停止数据库实例
C:\Users\db2admin>db2stop

3) 连接数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 连接到数据库
db2 connect to [dbname] user [username] using [password]
# 示例
C:\Users\db2admin>db2 connect to SAMPLE

数据库连接信息

数据库服务器 = DB2/NT64 11.5.7.0
SQL 授权标识 = DB2ADMIN
本地数据库别名 = SAMPLE

C:\Users\db2admin>

# 断开数据库连接
db2 connect reset

# 删除数据库
db2 drop database [dbname]
# (执行此操作要小心) 如果不能删除,断开所有数据库连接或者重启db2

# 备份数据库
db2 backup db
# 备注:执行以上命令之前需要断开数据库连接
1、 db2 backup db btpdbs
2、 db2move btpdbs export
db2look -d btpdbs -e -x [-a] -o crttbl.sql

# 在线备份数据库
db2 -v "BACKUP DATABASE ONLINE TO WITH 2 BUFFERS BUFFER 1024 INCLUDE LOGS WITHOUT PROMPTING"

# 恢复数据库
db2 restore db
1、 db2 restore db btpdbs without rolling forward
2、 db2 -tvf crtdb.sql
crtdb.sql文件内容:create db btpdbs on /db2catalog
db2 -stvf crttbl.sql
db2move btpdbs import

# 在线恢复数据库
db2 "RESTORE DB TO LOGTARGET WITHOUT PROMPTING"
db2 "ROLLFORWARD DB TO END OF LOGS AND STOP" ...

# 导出数据文件
db2move export
[-sn ]
[-tn ]

# 导入数据文件
db2move import

# 获取db2数据库管理配置环境信息
db2 get dbm cfg

# 获取db2某个数据库数据库管理配置环境信息
db2 get db cfg for
# 或者:连接至某个数据库以后执行db2 get db cfg

# 更改db2日志空间的大小
# 备注:以下命令为了防止db2数据库过份使用硬盘空间而设,仅用于开发者自己机器上的db2,如果是服务器,则参数需要修改。
db2 UPDATE DB CFG FOR USING logretain OFF logprimary 3 logsecond 2 logfilsiz 25600;
# 如果页大小是4KB,则以上命令创建3个100M的日志文件,占用300MB硬盘空间。25600*4KB=102400KB。

# 获取数据库管理器的快照数据
db2 –v get snapshot for dbm

# 显示进行程号
db2 list applications show detail

4) 列出所有数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
C:\Users\db2admin>db2 list db directory

系统数据库目录

目录中的条目数 = 1

数据库 1 条目:

数据库别名 = SAMPLE
数据库名称 = SAMPLE
本地数据库目录 = D:
数据库发行版级别 = 15.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =


C:\Users\db2admin>

# 列出所有激活的数据库
C:\Users\db2admin>db2 list active databases

5) 查看表空间列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
C:\Users\db2admin>db2 list tablespaces
SQL1024N 不存在数据库连接。 SQLSTATE=08003

C:\Users\db2admin>
C:\Users\db2admin>db2 list tablespaces

当前数据库的表空间

表空间标识 = 0
名称 = SYSCATSPACE
类型 = 数据库管理空间
内容 = 所有持久数据。常规表空间。
状态 = 0x0000
详细解释:
正常

表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理空间
内容 = 系统临时数据
状态 = 0x0000
详细解释:
正常

表空间标识 = 2
名称 = USERSPACE1
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常

表空间标识 = 3
名称 = IBMDB2SAMPLEREL
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常

表空间标识 = 4
名称 = IBMDB2SAMPLEXML
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常

表空间标识 = 5
名称 = SYSTOOLSPACE
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常


C:\Users\db2admin>

# 创建临时表空间
DB2 CREATE USER TEMPORARY TABLESPACE STMASPACE PAGESIZE 32 K MANAGED BY DATABASE USING (FILE 'D:\DB2_TAB\STMASPACE.F1' 10000)

EXTENTSIZE 256

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
# cmd查看所有数据库 db2_DB2常用命令
1、 打开命令行窗口

#db2cmd

2、 打开控制中心

# db2cmd db2cc

3、 打开命令编辑器

db2cmd db2ce

=====操作数据库命令=====

4、 启动数据库实例

#db2start

[5、 停止数据库实例

#db2stop

如果你不能停止数据库由于激活的连接,在运行db2stop前执行db2 force application all就可以了 /db2stop force

6、 创建数据库

#db2 create db [dbname]

7、 连接到数据库

#db2 connect to [dbname] user [username] using [password]

8、 断开数据库连接

#db2 connect reset

9、 列出所有数据库

#db2 list db directory

10、 列出所有激活的数据库

#db2 list active databases

11、 列出所有数据库配置

#db2 get db cfg

12、 删除数据库

#db2 drop database [dbname]

(执行此操作要小心) 如果不能删除,断开所有数据库连接或者重启db2

=========操作数据表命令==========

13、 列出所有用户表

#db2 list tables

14、列出所有系统表

#db2 list tables for system

15、列出所有表

#db2 list tables for all

16、 列出系统表

#db2 list tables for system

17、列出用户表

#db2 list tables for user

18、 列出特定用户表

#db2 list tables for schema [user]

19、 创建一个与数据库中某个表(t2)结构相同的新表(t1)

#db2 create table t1 like t2

20、将一个表t1的数据导入到另一个表t2

#db2 "insert into t1 select * from t2"

21、 查询表

#db2 "select * from table name where ..."

22、 显示表结构

#db2 describe table tablename

23、 修改列

#db2 alter table [tablename] alter column [columname] set data type varchar(24)

======脚本文件操作命令=======

24、 执行脚本文件

#db2 -tvf scripts.sql

25、帮助命令

* 查看命令帮助

#db2 ? db2start

* 查看错误码信息

#db2 ? 22001

* memo: 详细命令请使用"db2 ? "进行查看。

=========================

26、备份数据库

#db2 backup db

备注:执行以上命令之前需要断开数据库连接

27、在线备份数据库

#db2 -v "BACKUP DATABASE ONLINE TO WITH 2 BUFFERS BUFFER 1024 INCLUDE LOGS WITHOUT PROMPTING"

28、恢复数据库

#db2 restore db

29、在线恢复数据库

#db2 "RESTORE DB TO LOGTARGET WITHOUT PROMPTING"

#db2 "ROLLFORWARD DB TO END OF LOGS AND STOP" ...

30、导出数据文件

#db2move export

[-sn ]

[-tn ]

31、导入数据文件

#db2move import

32、获取db2数据库管理配置环境信息

#db2 get dbm cfg

33、.获取db2某个数据库数据库管理配置环境信息

#db2 get db cfg for

或者:连接至某个数据库以后执行db2 get db cfg

34、更改db2日志空间的大小

备注:以下命令为了防止db2数据库过份使用硬盘空间而设,仅用于开发者自己机器上的db2,如果是服务器,则参数需要修改。

#db2 UPDATE DB CFG FOR USING logretain OFF logprimary 3 logsecond 2 logfilsiz 25600;

如果页大小是4KB,则以上命令创建3100M的日志文件,占用300MB硬盘空间。25600*4KB=102400KB。

35、创建临时表空间

#DB2 CREATE USER TEMPORARY TABLESPACE STMASPACE PAGESIZE 32 K MANAGED BY DATABASE USING (FILE 'D:\DB2_TAB\STMASPACE.F1' 10000)

EXTENTSIZE 256

36、获取数据库管理器的快照数据

#db2 –v get snapshot for dbm

37、显示进行程号

#db2 list applications show detail

===================================================

一、加载数据:

1、 以默认分隔符加载,默认为“,”号

db2 "import from btpoper.txt of del insert into btpoper"

2、 以指定分隔符“|”加载

db2 "import from btpoper.txt of del modified by coldel| insert into btpoper"

二、卸载数据:

1、 卸载一个表中全部数据

db2 "export to btpoper.txt of del select * from btpoper"

db2 "export to btpoper.txt of del modified by coldel| select * from btpoper"

2、 带条件卸载一个表中数据

db2 "export to btpoper.txt of del select * from btpoper where brhid='907020000'"

db2 "export to cmmcode.txt of del select * from cmmcode where codtp='01'"

db2 "export to cmmcode.txt of del modified by coldel| select * from cmmcode where codtp='01'"

三、查询数据结构及数据:

db2 "select * from btpoper"

db2 "select * from btpoper where brhid='907020000' and oprid='0001'"

db2 "select oprid,oprnm,brhid,passwd from btpoper"

四、删除表中数据:

db2 "delete from btpoper"

db2 "delete from btpoper where brhid='907020000' or brhid='907010000'"

五、修改表中数据:

db2 "update svmmst set prtlines=0 where brhid='907010000' and jobtp='02'"

db2 "update svmmst set prtlines=0 where jobtp='02' or jobtp='03'"

六、联接数据库

db2 connect to btpdbs

七、清除数据库联接

db2 connect reset 断开数据库连接

db2 terminate 断开数据库连接

db2 force applications all 断开所有数据库连接

八、备份数据库

1、 db2 backup db btpdbs

2、 db2move btpdbs export

db2look -d btpdbs -e -x [-a] -o crttbl.sql

九、恢复数据库

1、 db2 restore db btpdbs without rolling forward

2、 db2 -tvf crtdb.sql

crtdb.sql文件内容:create db btpdbs on /db2catalog

db2 -stvf crttbl.sql

db2move btpdbs import

十、DB2帮助命令:

db2 ?

db2 ? restroe

db2 ? sqlcode (例:db2 ? sql0803) 注:code必须为4位数,不够4位,前面补0

十一、bind命令:将应用程序与数据库作一捆绑,每次恢复数据库后,建议都要做一次bind

(1) db2 bind br8200.bnd

(2) /btp/bin/bndall /btp/bnd

/btp/bin/bndall /btp/tran/bnd

十二、查看数据库参数:

db2 get dbm cfg

db2 get db cfg for btpdbs

十三、修改数据库参数:

db2 update db cfg for btpdbs using LOGBUFSZ 20

db2 update db cfg for btpdbs using LOGFILSIZ 5120

改完后,应执行以下命令使其生效:

db2 stop

db2 start

补充:

db2 set schema btp 修改当前模式为"btp"

db2 list tablespaces show detail 查看当前数据库表空间分配状况

db2 list tablespace containers for 2 show detail 查看tablespace id=2使用容器所在目录

db2 list application

db2 list db directory 列出所有数据库

db2 list active databases 列出所有活动的数据库

db2 list tables for all 列出当前数据库下所有的表

db2 list tables for schema btp 列出当前数据库中schema为btp的表

db2 list tablespaces show detail 显示数据库空间使用情况

db2 list packages for all

db2 "import from tab76.ixf of ixf commitcount 5000 insert into achact"

db2 "create table achact_t like achact"

db2 "rename table achact_t to achact"

db2 "insert into achact_t select * from achact where txndt>=(select lstpgdt from

acmact where actno=achact.actno)"

db2 get snapshot for dynaimic sql on jining

删除一个实例:

# cd /usr/lpp/db2_07_01/instance

# ./db2idrop InstName

列出所有DB2实例:

# cd /usr/lpp/db2_07_01/bin

# ./db2ilist

为数据库建立编目

$ db2 catalog db btpdbs on /db2catalog

取消已编目的数据库btpdbs

$ db2 uncatalog db btpdbs

查看版本

# db2level

显示当前数据库管理实例

$ db2 get instance

设置实例系统启动时是否自动启动。

$ db2iauto -on 自动启动

$ db2iauto -off 不自动启动

数据库优化命令:

reorg、runstats

当数据库经过一段时间使用,数据空间会变得越来越庞大。一些delete掉 的数据仍存放在数据库中,占用数据空间,影响系统性能。

因此需要定期 运行reorg、runstats命令,清除已delete的数据,优化数据结构。

db2 reorg table 表名

db2 runstats on table 表名 with distribution and indexes all

因为要优化的表比较多,所以在/btp/bin目录下提供了一个sh程序runsall,

可在当天业务结束后,运行runsall,对数据库进行优化

46、对一张表运行统计信息

#db2 -v runstatson table TAB_NAMEand indexes all

47、查看是否对数据库执行了RUNSTATS

#db2 -v "select tbname, nleaf, nlevels,stats_timefrom sysibm.sysindexes"

48、更改缓冲池的大小

缓冲池中,当syscat.bufferpools的npages是-1时,由数据库的配置参数bufferpage控制缓冲池的大小。

将npages的值更改为-1的命令:

#db2 -v connect to DB_NAME

#db2 -v select * from syscat.bufferpools

#db2 -v alter bufferpoolIBMDEFAULTBP size -1

#db2 -v connect reset

#db2 -v terminate

更改数据库配置参数BufferPages的命令如下:

#db2 -v update db cfgfor dbnameusing BUFFPAGE bigger_value

#db2 -v terminate

49、看数据库监视内容列表

#db2 -v get monitor switches

50、打开某个数据库监视内容

#db2 -v update monitor switches using bufferpoolon

51、获取数据库快照

#db2 -v get snapshot for all databases > snap.out

#db2 -v get snapshot for dbm>> snap.out

#db2 -v get snapshot for all bufferpools>> snap.out

#db2 -v terminate

52、重置数据库快照

#db2 -v reset monitor all

53、计算缓冲池命中率

理想情况下缓冲池命中率在95%以上,计算公式如下:

(1 -((buffer pool data physical reads + buffer pool index physical reads)

/(buffer pool data logical reads + pool index logical reads))) *100%

=========数据库实例========================

54、创建db2实例

#db2icrt

55、删除db2实例

#db2idrop

56、设置当前db2实例

#set db2intance=db2

57、显示db2拥有的实例

#db2ilist

58、恢复离线增量备份数据库的命令

#DB2 RESTORE DATABASE YNDC INCREMENTAL AUTOMATIC FROM D:\backup\autobak\db2 TAKEN AT 20060314232015

59、创建样本数据库

在unix平台,使用:

#sqllib/bin/db2sampl

在windows,os/2平台,使用:db2sampl e,e是可选参数,指定将创建数据库的驱动器

60、设置联合数据库为可用(默认联合数据库不可用)

#db2 update dbm cfg using federated yes

61、列出数据库中所有的表

#db2 list tables

62、数据迁移方法1

export脚本示例

#db2 connect to testdb user test password test

#db2 "export to aa1.ixf of ixf select * from table1"

#db2 "export to aa2.ixf of ixf select * from table2"

#db2 connect reset

import脚本示例

#db2 connect to testdb user test password test

#db2 "load from aa1.ixf of ixf replace into table1 COPY NO without prompting "

#db2 "load from aa2.ixf of ixf replace into table2 COPY NO without prompting "

#db2 connect reset

查询表中是否有该字段

select 1 from syscat.columns where colname='ID_NO' and tabname='MKTSRV_GLOBAL_DOWN_RECORD' and tabschema='DB2INST1';

查询重复的数据

select user_code,count(*) from cd_sys_person group by user_code having count(*)>1

语句压缩与指定的表相关联的数据

reorg table TABLE_NAME

解锁表

load from /dev/null of del terminate into TABLE_NAME

创建索引

Create index 索引名 on 表名(字段1,字段2)

刷新表

runstats on table talblename and indexes all

runstats on table aiapp.mda_xxxxx and index all

查看索引

select * from syscat.indexes where tabname='ZHYXZS_KB_SC_END';

重新连接

connect reset

中断数据库连接

disconnect db2_gcb

建立视图

create view V_zjt_tables as select tabschema,tabname from zjt_tables;

建立触发器

CREATE TRIGGER zjt_tables_del

AFTER DELETE ON zjt_tables

REFERENCING OLD AS O

FOR EACH ROW MODE DB2SQL

Insert into zjt_tables1

values(substr(o.tabschema,1,8),substr(o.tabname,1,10))

建立唯一性索引

CREATE UNIQUE INDEX I_ztables_tabname ON zjt_tables(tabname);

查看列

select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as 类型,LENGTH as 长度 from columns where tabname='ZJT_TABLES';

查看表结构

db2 describe table user1.department

db2 describe select * from user.tables

查看表的索引

db2 describe indexes for table user1.department

查看索引

select indname from indexes where indname='I_ZTABLES_TABNAME';

查看视图

select viewname from views where viewname='V_ZJT_TABLES';

查看存贮过程

SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15) FROM SYSCAT.PROCEDURES;

类型转换(cast)

ip datatype:varchar

select cast(ip as integer)+50 from log_comm_failed

关于从db2 导入导出数据的问题

DB2中所谓的数据移动,包括:

1. 数据的导入(Import)

2. 数据的导出(Export)

3. 数据的装入(Load)

10、db2 connect reset 或 db2 terminate --断开与数据库的连接

11、db2set db2codepage=1208 --修改页编码为1208

12、db2 describe table --查看表结构

13、db2 list tables --查看数据库中所有表结构

list tables for system --列出所有系统表

14、db2 list tablespaces --列出表空间

二、高级篇

15fetch first 10 rows only --列出表中前10条数据

例如:select * from fetch first 10 rows only

16、coalesce(字段名,转换后的值) --对是null的字段进行值转换

例如:select coalesce(id,1) from --对表中id如果为null转换成1

17、dayofweek(日期) --计算出日期中是周几(1是周日,2是周一.......7是周六)

dayofweek_iso --计算出日期中是周几(1是周一.......7是周日)

例如:dayofweek(date(2008-01-16)) --它会返回是4,代表星期三

dayofweek_iso(date(2008-01-16)) --它会返回是3,代表星期三

18、dayofyear(日期) --一年中的第几天,范围在1-366范围之内

注意:参数中日期的格式是YYYY-MM-DD的形式,如果不是需要进行转换,否则函数不能使用

例如:日期是20080116必须要进行转换

dayofweek(concat(concat(concat(substr(openDate,1,4),'-'),concat(substr(openDate,5,2),'-')),substr(openDate,7,2))) as week)

这样格式正确的。

19、concatt(参数1,连接值) --把参数1加上连接值组成一个新值。

例如: concat('aa','b') --返回是aab

把oracle表导入到db2数据库中,有些字段类型需要进行转换,具体看:oracle与db2数据类型转换

启动DB2服务:db2start

关闭DB2服务: db2stop

一、加载数据:

1、 以默认分隔符加载,默认为“,”号

db2 "import from btpoper.txt of del insert into btpoper"

2、 以指定分隔符“|”加载

db2 "import from btpoper.txt of del modified by coldel| insert into btpoper"

二、卸载数据:

1、 卸载一个表中全部数据

db2 "export to btpoper.txt of del select * from btpoper"

db2 "export to btpoper.txt of del modified by coldel| select * from btpoper"

2、 带条件卸载一个表中数据

db2 "export to btpoper.txt of del select * from btpoper where brhid='907020000'"

db2 "export to cmmcode.txt of del select * from cmmcode where codtp='01'"

db2 "export to cmmcode.txt of del modified by coldel| select * from cmmcode where codtp='01'"

三、查询数据结构及数据:

db2 "select * from btpoper"

db2 "select * from btpoper where brhid='907020000' and oprid='0001'"

db2 "select oprid,oprnm,brhid,passwd from btpoper"

四、删除表中数据:

db2 "delete from btpoper"

db2 "delete from btpoper where brhid='907020000' or brhid='907010000'"

五、修改表中数据:

db2 "update svmmst set prtlines=0 where brhid='907010000' and jobtp='02'"

db2 "update svmmst set prtlines=0 where jobtp='02' or jobtp='03'"

六、联接数据库

db2 connect to btpdbs

七、清除数据库联接

db2 connect reset 断开数据库连接

db2 terminate 断开数据库连接

db2 force applications all 断开所有数据库连接

八、备份数据库

1、 db2 backup db btpdbs

2、 db2move btpdbs export

db2look -d btpdbs -e -x [-a] -o crttbl.sql

九、恢复数据库

1、 db2 restore db btpdbs without rolling forward

2、 db2 -tvf crtdb.sql

crtdb.sql文件内容:create db btpdbs on /db2catalog

db2 -stvf crttbl.sql

db2move btpdbs import

十、DB2帮助命令:

db2 ?

db2 ? restroe

db2 ? sqlcode (例:db2 ? sql0803) 注:code必须为4位数,不够4位,前面补0

十一、bind命令:将应用程序与数据库作一捆绑,每次恢复数据库后,建议都要做一次bind

(1) db2 bind br8200.bnd

(2) /btp/bin/bndall /btp/bnd

/btp/bin/bndall /btp/tran/bnd

十二、查看数据库参数:

db2 get dbm cfg

db2 get db cfg for btpdbs

十三、修改数据库参数:

db2 update db cfg for btpdbs using LOGBUFSZ 20

db2 update db cfg for btpdbs using LOGFILSIZ 5120

改完后,应执行以下命令使其生效:

db2 stop

db2 start

补充:

db2 set schema btp 修改当前模式为"btp"

db2 list tablespaces show detail 查看当前数据库表空间分配状况

db2 list tablespace containers for 2 show detail 查看tablespace id=2使用容器所在目录

db2 list application

db2 list db directory 列出所有数据库

db2 list active databases 列出所有活动的数据库

db2 list tables for all 列出当前数据库下所有的表

db2 list tables for schema btp 列出当前数据库中schema为btp的表

db2 list tablespaces show detail 显示数据库空间使用情况

db2 list packages for all

db2 "import from tab76.ixf of ixf commitcount 5000 insert into achact"

db2 "create table achact_t like achact"

db2 "rename table achact_t to achact"

db2 "insert into achact_t select * from achact where txndt>=(select lstpgdt from

acmact where actno=achact.actno)"

db2 get snapshot for dynaimic sql on jining

删除一个实例:

# cd /usr/lpp/db2_07_01/instance

# ./db2idrop InstName

列出所有DB2实例:

# cd /usr/lpp/db2_07_01/bin

# ./db2ilist

为数据库建立编目

$ db2 catalog db btpdbs on /db2catalog

取消已编目的数据库btpdbs

$ db2 uncatalog db btpdbs

查看版本

# db2level

显示当前数据库管理实例

$ db2 get instance

设置实例系统启动时是否自动启动。

$ db2iauto -on 自动启动

$ db2iauto -off 不自动启动

数据库优化命令:

reorg、runstats

当数据库经过一段时间使用,数据空间会变得越来越庞大。一些delete

的数据仍存放在数据库中,占用数据空间,影响系统性能。因此需要定期

运行reorg、runstats命令,清除已delete的数据,优化数据结构。

db2 reorg table 表名

db2 runstats on table 表名 with distribution and indexes all

因为要优化的表比较多,所以在/btp/bin目录下提供了一个sh程序runsall,

可在当天业务结束后,运行runsall,对数据库进行优化

7. DB2查看端口号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156

C:\Users\db2admin>db2 get dbm cfg
DB21061E 未初始化命令行环境。

C:\Users\db2admin>db2cmd

C:\Users\db2admin>

C:\Users\db2admin>db2 get dbm cfg

数据库管理器配置

节点类型 = 带有本地客户机和远程
客户机的企业服务器版

数据库管理器配置发行版级别 = 0x1500

CPU 速度(毫秒/指令) (CPUSPEED) = 1.613843e-007
通信带宽(MB/秒) (COMM_BANDWIDTH) = 1.000000e+002

最大并发活动数据库数 (NUMDB) = 32
联合数据库系统支持 (FEDERATED) = NO
事务处理器监视器名 (TP_MON_NAME) =

缺省对方付费帐户 (DFT_ACCOUNT_STR) =

Java Development Kit 安装路径(JDK_PATH) = D:\PROGRA~1\IBM\SQLLI
B\java\jdk

诊断错误捕获级别 (DIAGLEVEL) = 3
通知级别 (NOTIFYLEVEL) = 3
诊断数据目录路径 (DIAGPATH) = D:\DEV\DB2\\IBM\DB2\D
B2COPY1\DB2\ $m
当前成员已解析 DIAGPATH = D:\DEV\DB2\\IBM\DB2\DB2COPY1\D
B2\DIAG0000\
备用诊断数据目录路径 (ALT_DIAGPATH) =
当前成员已解析 ALT_DIAGPATH =
轮转 db2diag 和通知日志的大小(MB) (DIAGSIZE) = 0

缺省数据库监视器开关
缓冲池 (DFT_MON_BUFPOOL) = OFF
锁定 (DFT_MON_LOCK) = OFF
排序 (DFT_MON_SORT) = OFF
语句 (DFT_MON_STMT) = OFF
表 (DFT_MON_TABLE) = OFF
时间戳记 (DFT_MON_TIMESTAMP) = ON
工作单元 (DFT_MON_UOW) = OFF
监视实例和数据库的运行状况 (HEALTH_MON) = OFF

SYSADM 组名 (SYSADM_GROUP) =
SYSCTRL 组名 (SYSCTRL_GROUP) =
SYSMAINT 组名 (SYSMAINT_GROUP) =
SYSMON 组名 (SYSMON_GROUP) =

客户机用户标识-密码插件 (CLNT_PW_PLUGIN) =
客户机 Kerberos 插件 (CLNT_KRB_PLUGIN) = IBMkrb5
组插件 (GROUP_PLUGIN) =
本地授权的 GSS 插件 (LOCAL_GSSPLUGIN) =
服务器插件方式 (SRV_PLUGIN_MODE) = UNFENCED
GSS 插件的服务器列表 (SRVCON_GSSPLUGIN_LIST) =
服务器用户标识-密码插件 (SRVCON_PW_PLUGIN) =
服务器连接认证 (SRVCON_AUTH) = NOT_SPECIFIED
集群管理器 =

数据库管理器认证 (AUTHENTICATION) = SERVER
备用认证 (ALTERNATE_AUTH_ENC) = NOT_SPECIFIED
没有权限就允许编目 (CATALOG_NOAUTH) = NO
信赖所有客户机 (TRUST_ALLCLNTS) = YES
可信的客户机认证 (TRUST_CLNTAUTH) = CLIENT
绕过联合认证 (FED_NOAUTH) = NO

缺省数据库路径 (DFTDBPATH) = D:

数据库监视器堆大小 (4KB) (MON_HEAP_SZ) = AUTOMATIC(66)
“Java 虚拟机”堆大小 (4KB) (JAVA_HEAP_SZ) = 65536
审计缓冲区大小 (4KB) (AUDIT_BUF_SZ) = 0
全局实例内存(% 或 4KB) (INSTANCE_MEMORY) = AUTOMATIC(1215444)
成员实例内存(% 或 4KB) = GLOBAL
代理程序的堆栈大小 (AGENT_STACK_SZ) = 16
排序堆阈值 (4KB) (SHEAPTHRES) = 0

目录高速缓存支持 (DIR_CACHE) = YES

应用程序支持层堆大小 (4KB) (ASLHEAPSZ) = 15
最大请求者 I/O 块大小(以字节计) (RQRIOBLK) = 65535
已调速实用程序对工作负载的影响 (UTIL_IMPACT_LIM) = 10

代理程序的优先级 (AGENTPRI) = SYSTEM
代理程序池大小 (NUM_POOLAGENTS) = AUTOMATIC(100)
池中的初始代理程序数 (NUM_INITAGENTS) = 0
最大协调代理程序数 (MAX_COORDAGENTS) = AUTOMATIC(200)
最大客户机连接数 (MAX_CONNECTIONS) = AUTOMATIC(MAX_COORDAG
ENTS)

保留受防护的进程 (KEEPFENCED) = YES
合用受防护的进程的数目 (FENCED_POOL) = AUTOMATIC(MAX_COORDAG
ENTS)
受防护的进程的初始数目 (NUM_INITFENCED) = 0

索引重新创建时间和重做索引构建 (INDEXREC) = RESTART

事务管理器数据库名称 (TM_DATABASE) = 1ST_CONN
事务再同步时间间隔(秒) (RESYNC_INTERVAL) = 180

SPM 名称 (SPM_NAME) = PC_20211
SPM 日志大小 (SPM_LOG_FILE_SZ) = 256
SPM 再同步代理程序限制 (SPM_MAX_RESYNC) = 20
SPM 日志路径 (SPM_LOG_PATH) =

TCP/IP 服务名称 (SVCENAME) = db2c_DB2
发现方式 (DISCOVER) = SEARCH
发现服务器实例 (DISCOVER_INST) = ENABLE

SSL 服务器 keydb 文件 (SSL_SVR_KEYDB) =
SSL 服务器隐藏文件 (SSL_SVR_STASH) =
SSL 服务器证书标签 (SSL_SVR_LABEL) =
SSL 服务名称 (SSL_SVCENAME) =
SSL 密码规范 (SSL_CIPHERSPECS) =
SSL 版本 (SSL_VERSIONS) =
SSL 客户机 keydb 文件 (SSL_CLNT_KEYDB) =
SSL 客户机隐藏文件 (SSL_CLNT_STASH) =

最大查询并行度 (MAX_QUERYDEGREE) = ANY
启用分区内并行性 (INTRA_PARALLEL) = NO

每个查询的最大异步 TQ 数 (FEDERATED_ASYNC) = 0

FCM 缓冲区的数目 (FCM_NUM_BUFFERS) = AUTOMATIC(4096)
FCM 缓冲区大小 (FCM_BUFFER_SIZE) = 32768
FCM 通道的数目 (FCM_NUM_CHANNELS) = AUTOMATIC(2048)
FCM 并行性 (FCM_PARALLELISM) = AUTOMATIC(1)
节点连接耗用时间(秒) (CONN_ELAPSE) = 10
最大节点连接重试次数 (MAX_CONNRETRIES) = 5
节点间的最大时差(分钟) (MAX_TIME_DIFF) = 60

db2start/db2stop 超时(分钟) (START_STOP_TIME) = 10

WLM 分派器已启用 (WLM_DISPATCHER) = NO
WLM 分派器并行性 (WLM_DISP_CONCUR) = COMPUTED
WLM 分派器 CPU 份额已启用 (WLM_DISP_CPU_SHARES) = NO
WLM 分派器最低使用率 (%) (WLM_DISP_MIN_UTIL) = 5

通信缓冲区出口库列表 (COMM_EXIT_LIST) =
当前有效体系结构级别 (CUR_EFF_ARCH_LVL) = V:11 R:5 M:7 F:0 I:0 SB:0
当前有效代码级别 (CUR_EFF_CODE_LVL) = V:11 R:5 M:7 F:0 I:0 SB:0

密钥库类型 (KEYSTORE_TYPE) = NONE
密钥库位置 (KEYSTORE_LOCATION) =

Python 运行时的路径 (PYTHON_PATH) =
R 运行时的路径 (R_PATH) =

多重部件上载部件大小 (MULTIPARTSIZEMB) = 100


C:\Users\db2admin>

查看DB2数据库占用的端口号,分为windows和linux系统查看方式,如下:

一、linux系统查看DB2占用端口号:

1.db2start启动了数据库管理器,并且通讯方式配置为TCP/IP。

2.首先切换到db2inst1用户 su - db2inst1

3.查找TCP/IP Service name db2 get dbm cfg | grep -i service

4.通过上一句命令的输出(如db2c_db2inst1)在/etc/services文件中找对应的端口号 grep db2c_db2inst1 /etc/services

输出 db2c_db2inst1 50000/tcp

其中50000就是db2数据库所占用的端口号

二、windows系统查看DB2占用端口号方式如下:

1、使用命令 db2 get dbm cfg

找到”SVCENAME” 查找到TCP/IP 服务名

2、到系统配置文件里找到service name 对应的 port number

windows:查看 c:\windows\system32\drivers\etc\services

aix: 查看 /etc/services

如下:

DB2_DB2 60000/tcp

DB2_DB2_1 60001/tcp

DB2_DB2_2 60002/tcp

DB2_DB2_END 60003/tcp

1
2
3
4
5
6
7
8
9
10
11
12
c:\windows\system32\drivers\etc\services

DB2_DB2 20000/tcp
DB2_DB2_1 20001/tcp
DB2_DB2_2 20002/tcp
DB2_DB2_3 20003/tcp
DB2_DB2_4 20004/tcp
DB2_DB2_END 20005/tcp
directplaysrvr 47624/tcp #Direct Play Server
directplaysrvr 47624/udp #Direct Play Server

db2c_DB2 25000/tcp

dbeaver连接异常:

1
2
[jcc][t4][2043][11550][4.26.14] 异常 java.net.ConnectException:打开端口 25,000 上服务器 localhost/127.0.0.1 的套接字时出错,消息为:Connection refused: connect。 ERRORCODE=-4499, SQLSTATE=08001
Connection refused: connect

8. SQL in与exists相关性能问题总结

参考: https://www.cnblogs.com/syforacle/p/5820624.html


DB2学习
https://chris-z-su.github.io/2022/09/25/数据库/DB2学习/
作者
Chris
发布于
2022年9月25日
许可协议