安装部署

下载

1
2
3
4
5
v9.7版本:https://pan.baidu.com/s/1NYwPKRbwgZvBNj3obAEj4Q    提取码:24cn 

v10.5版本:https://pan.baidu.com/s/1ji4_4nBoh5-Lcjjv4bcdhw 提取码:s1u0

v11.1版本:https://pan.baidu.com/s/1Jj7tMPMTnUgYKnEwk6VZ2Q 提取码:mm0b

创建组和用户

1
2
3
4
5
6
7
8
9
[root@oracle_host expc]# groupadd -g 110 db2iadm1 
[root@oracle_host expc]# groupadd -g 111 db2fadm1
[root@oracle_host expc]# groupadd -g 112 dasadm1
[root@oracle_host expc]# useradd -g db2iadm1 -m -d /home/db2inst1 db2inst1
[root@oracle_host expc]# useradd -g db2fadm1 -m -d /home/db2fenc1 db2fenc1
[root@oracle_host expc]# useradd -g dasadm1 -m -d /home/dasusr1 dasusr1
[root@oracle_host expc]# passwd db2inst1
[root@oracle_host expc]# passwd db2fenc1
[root@oracle_host expc]# passwd dasusr1

前置检查

1
2
3
[root@oracle_host expc]# tar zxvf v10.5_linuxx64_expc.tar.gz  -C /data0/app/
[root@oracle_host expc]# cd /data0/app/expc/
[root@oracle_host expc]# ./db2prereqcheck

image-20250402161714595

image-20250402165630338

image-20250402170607861

报错解决

缺包

1
2
3
4
5
[root@oracle_host expc]# mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
[root@oracle_host expc]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@oracle_host expc]# yum clean all
[root@oracle_host expc]# yum makecache
[root@oracle_host expc]# yum install pam-1.1.8-23.el7.i686

虚拟机扩容

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
##扩容根分区
#添加一块50G磁盘
fdisk -l 查看信磁盘为 /dev/sdb

#分区
fdisk /dev/sdb ,p,1,w

#创建pv
pvcreate /dev/sdb1

#查看vg名
vgs

#pv添加到vg
vgextend <vg名> /dev/sdb1

#查看lv名
lvdisplay

#给lv增加50G
lvextend -L +50G <LV Path>
lvextend -L +50G </dev/centos/root>
或增加到最大
lvextend -l +100%FREE <LV Path>
lvextend -l +100%FREE /dev/centos/root

#调整文件系统
对于 ext2、ext3、ext4 文件系统
resize2fs <LV Path>
resize2fs /dev/centos/root

对于 XFS 文件系统
xfs_growfs <LV Path>
xfs_growfs /dev/centos/root

image-20250402220600113

已完全满足要求。

安装

1
2
[root@oracle_host expc]# cd /data0/app/expc/
[root@oracle_host expc]# ./db2_install

image-20250402233855826

image-20250402222141880

基础操作

实例创建

1
2
[root@oracle_host instance]# cd /data0/app/ibm/db2/v10.5/instance
[root@oracle_host instance]# ./db2icrt -u db2fenc1 db2inst1

image-20250402223443214

删除实例

1
2
3
4
5
#查看实例名
[root@oracle_host instance]# db2ilist

[root@oracle_host instance]# cd /data0/ibm/db2/v10.5/instance
[root@oracle_host instance]# ./db2idrop db2inst1

image-20250402233329416

卸载DB2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
[root@oracle_host install]# pwd
/data0/ibm/db2/v10.5/install
[root@oracle_host install]# ll
total 168
-r-xr-xr-x 1 bin bin 20225 Nov 30 2014 db2chgpath
-r-xr--r-- 1 bin bin 38080 Nov 30 2014 db2_deinstall
-r-xr--r-- 1 bin bin 16040 Nov 30 2014 db2_deinstall_exec
-r-xr-xr-x 1 bin bin 10761 Nov 30 2014 db2ls
-r-xr-xr-x 1 bin bin 66566 Apr 2 22:17 db2ls_exec
-r-xr-xr-x 1 bin bin 9507 Nov 30 2014 db2un.rsp
drwxr-xr-x 2 root root 271 Apr 2 23:33 logs
drwxr-xr-x 2 bin bin 38 Nov 30 2014 tsamp
[root@oracle_host install]# ./db2_deinstall -a
DBI1016I Program db2_deinstall is performing uninstallation. Please
wait.


The execution completed successfully.

For more information see the DB2 uninstallation log at

创建数据库

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
#切换到db2inst1用户
[root@oracle_host v10.5]# su - db2inst1
Last login: Wed Apr 2 23:48:09 CST 2025 on pts/2

#启动实例
[db2inst1@oracle_host ~]$ db2start
SQL1063N DB2START processing was successful.

#创建样本库
[db2inst1@oracle_host ~]$ db2sampl

Creating database "SAMPLE"...
Connecting to database "SAMPLE"...
Creating tables and data in schema "DB2INST1"...
Creating tables with XML columns and XML data in schema "DB2INST1"...

"db2sampl" processing complete.

#创建mydb1库
[db2inst1@oracle_host ~]$ db2 create db mydb1
DB20000I The CREATE DATABASE command completed successfully.
[db2inst1@oracle_host ~]$ db2 list db directoty
SQL0104N An unexpected token "directoty" was found following "DB". Expected
tokens may include: "DIRECTORY". SQLSTATE=42601

#查看所有数据库
[db2inst1@oracle_host ~]$ db2 list db directory

System Database Directory

Number of entries in the directory = 2

Database 1 entry:

Database alias = MYDB1
Database name = MYDB1
Local database directory = /home/db2inst1
Database release level = 10.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =

Database 2 entry:

Database alias = SAMPLE
Database name = SAMPLE
Local database directory = /home/db2inst1
Database release level = 10.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =

#连接mydb1库
[db2inst1@oracle_host ~]$ db2 connect to mydb1

Database Connection Information

Database server = DB2/LINUXX8664 10.5.5
SQL authorization ID = DB2INST1
Local database alias = MYDB1

#SQL操作
[db2inst1@oracle_host ~]$ db2 "create table user(id int,name varchar(10))"
[db2inst1@oracle_host ~]$ db2 "insert into user values(1,'u1')"
[db2inst1@oracle_host ~]$ db2 "insert into user values(2,'u2')"
[db2inst1@oracle_host ~]$ db2 "select id,name from user"

#断开连接
[db2inst1@oracle_host ~]$ db2 connect reset
DB20000I The SQL command completed successfully.

[db2inst1@oracle_host ~]$ db2 terminate
DB20000I The TERMINATE command completed successfully.

常用操作指令

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
#版本查询
方法1. db2level
方法2. 连接数据库后查询系统表
db2 connect to <数据库名> user <用户名> using <密码>
db2 "SELECT VERSION FROM SYSIBM.SYSVERSIONS"

#查看数据库管理器配置
db2 get dbm cfg

#查看数据库配置
数据库配置参数影响特定数据库的行为。要查看某个数据库的配置,可以使用以下命令,先连接到目标数据库,再获取其配置:
db2 connect to <数据库名>
db2 get db cfg

#查看实例配置
虽然前面提到的数据库管理器配置已经涵盖了实例的部分重要配置,但有时候你可能还想查看更具体的实例相关配置。可以通过以下命令查看
db2set -all

##修改配置
#修改单个配置参数
db2 update dbm cfg using <参数名> <新值>

示例:修改 SVCENAME 参数
SVCENAME 参数用于指定 DB2 实例监听的服务名。若要将其修改为 db2c_db2inst1,可执行以下命令:
db2 update dbm cfg using SVCENAME db2c_db2inst1

#修改多个配置参数
db2 update dbm cfg using <参数名1> <新值1> <参数名2> <新值2> ...
示例:同时修改 SVCENAME 和 MAX_CONNECTIONS 参数
MAX_CONNECTIONS 参数用于指定允许的最大连接数。若要将 SVCENAME 修改为 db2c_db2inst1,同时将 MAX_CONNECTIONS 修改为 500,可执行以下命令:
db2 update dbm cfg using SVCENAME db2c_db2inst1 MAX_CONNECTIONS 500

#使配置修改生效
在执行 update dbm cfg 命令之后,配置修改并不会立即生效。你需要停止并重新启动 DB2 实例,让新的配置生效,命令如下:
db2stop
db2start

#查看实例
db2ilist

#临时设置当前实例(需要重新启动 DB2 实例)
db2set DB2INSTANCE=db2inst1
db2stop
db2start

#连接实例
db2 attach to db2inst1

#断开实例连接
db2 detach
db2 terminate

与 db2 terminate 的区别:db2 terminate 会终止当前用户与 DB2 实例的所有连接,包括与多个数据库的连接;而 db2 detach 主要用于断开与某个特定数据库的连接

#启动实例
db2start

#停止数据库实例
db2stop

#自启动
db2iauto -on db2inst1

#创建数据库
db2 create database <数据库名>

#删除数据库
db2 drop database <数据库名>

#连接到数据库
db2 connect to <数据库名> user <用户名> using <密码>
db2 connect to testdb user db2inst1 using password123

#断开与数据库的连接
db2 connect reset

#创建表
db2 "create table <表名> (<列名1> <数据类型1>, <列名2> <数据类型2>, ...)"
db2 "create table employees (id integer, name varchar(50), age integer)"

#备份数据库
db2 backup database <数据库名> to <备份路径>
db2 backup database testdb to /backup

#恢复数据库
db2 restore database <数据库名> from <备份路径> taken at <备份时间戳>
#从指定备份恢复 testdb 数据库:
db2 restore database testdb from /backup taken at 20250401120000

#查看实例下的所有库
方法一: db2 list db directory
方法二: 通过系统表查询
连接到一个数据库,这里假设连接到 SAMPLE 数据库
db2 connect to SAMPLE
查询系统表获取数据库信息
db2 "SELECT * FROM SYSIBM.SYSDATABASES"

##系统保留模式
#SYSIBM
这是 DB2 里最为基础且重要的保留模式,其中存储了大量与数据库系统相关的元数据,涵盖表、列、索引、视图等数据库对象的定义信息。很多系统表都存于这个模式下,例如:
SYSIBM.SYSTABLES:该表记录了数据库中所有表的定义信息,像表名、模式名、创建时间等。
SYSIBM.SYSCOLUMNS:保存了数据库中所有列的详细信息,如列名、数据类型、长度等。

#SYSCAT
SYSCAT 模式同样存储着系统目录信息,它是为了方便用户查询系统元数据而设计的。相较于 SYSIBM 模式,SYSCAT 模式下的表结构更为简洁,可读性更强。例如:
SYSCAT.TABLES:与 SYSIBM.SYSTABLES 类似,不过其结构更便于用户使用。
SYSCAT.COLUMNS:和 SYSIBM.SYSCOLUMNS 作用相同,但更易于查询。

#SYSSTAT
SYSSTAT 模式主要存储与数据库统计信息相关的系统表,这些统计信息对查询优化器在生成查询执行计划时起着关键作用。例如:
SYSSTAT.TABLES:包含了表的统计信息,如行数、页数量等。
SYSSTAT.INDEXES:存储了索引的统计信息,像索引键的分布情况等。

#SYSTOOLS
SYSTOOLS 模式中包含了一些系统工具和存储过程,这些工具和存储过程可用于数据库的管理和维护。例如,其中可能包含用于备份、恢复、监控等操作的存储过程。

#SYSPROC
SYSPROC 模式存储着系统存储过程,这些存储过程提供了一系列用于数据库管理和操作的功能。例如,用于创建、修改、删除数据库对象的存储过程就存于这个模式下。

##删除 Schema
DROP SCHEMA <schema_name> RESTRICT | CASCADE;
RESTRICT:如果指定 RESTRICT,只有当该 Schema 中没有任何对象时,才能成功删除 Schema。如果 Schema 中存在对象,删除操作会失败,并返回错误信息。
CASCADE:如果指定 CASCADE,DB2 会先删除该 Schema 中的所有对象(表、视图、存储过程等),然后再删除 Schema 本身。

##查看表结构
法1:
db2 connect to <数据库名> user <用户名> using <密码>
db2 "DESCRIBE TABLE EMPLOYEES"

法2:
查询系统表 SYSCAT.COLUMNS
SELECT COLNAME, TYPENAME, LENGTH, SCALE, NULLS
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = '<模式名>' AND TABNAME = '<表名>';


##标识列(Identity Column)使用
-- 创建一个名为employees的表
CREATE TABLE employees (
-- emp_id列是标识列,起始值为1,每次递增1
emp_id INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
-- 员工姓名列,数据类型为VARCHAR,最大长度为50
emp_name VARCHAR(50),
-- 部门ID列,数据类型为INTEGER
dept_id INTEGER
);
#获取插入的标识值
SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1;
每个表只能有一个标识列。
标识列的数据类型必须是整数类型(如INTEGER、SMALLINT等)。
不能对标识列使用UPDATE语句修改其值。


DB2 体系结构中的最高一层是系统,
个系统表示 DB2的一个安装。在由很多机器组成的网络环境中,我们有时也称系统为数据库分区。一个系统可以包含多个DB2实例,每个实例能够管理一个或多个数据库。

#查看所有schema
[db2inst1@oracle_host ~]$ db2 "select schemaname from syscat.schemata"

#查看所有表
[db2inst1@oracle_host ~]$ db2 "select tabschema,tabname from syscat.tables where tabschema='DB2INST1' and type='T'"

#查看端口
[db2inst1@oracle_host ~]$ db2 get dbm cfg|grep -i svcename
TCP/IP Service name (SVCENAME) =
SSL service name (SSL_SVCENAME) =