Home

【DB2 数据库】00 模拟故障排查系列:环境准备

这篇文章用于搭建一套可重复使用的 DB2 故障演练环境,目标不是单纯把数据库装起来,而是提前把数据盘、备份盘和用户体系准备好,方便后续继续做故障模拟与恢复练习。

背景

因为工作需要学习 DB2 数据库运维,但生产环境不适合频繁制造故障,所以更合理的方式是先搭一套测试环境,再手动模拟问题进行演练。

环境说明

系统版本

  • 准备的环境为 SUSE Linux Enterprise Server 12 (x86_64) SP5
  • DB2 软件版本为 v9.7 FP6

当前只有一个系统盘。为了尽量模拟生产环境布局,这里额外添加两块硬盘,一块作为 DB2_DATA,一块作为 DB2_BACKUP

两块盘分别创建各自独立的 LVM,避免后面做故障演练时互相影响。

如果 lsblk 没有立刻显示新盘,可以先重新扫描 SCSI 总线:

for host in /sys/class/scsi_host/host*/scan; do echo "- - -" | sudo tee $host; done

创建数据盘和备份盘

1. 创建 DB2_DATA 的 LVM

DB2Server:~ # pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

# 创建VG
DB2Server:~ # vgcreate VG_DB2_DATA /dev/sdb
  Volume group "VG_DB2_DATA" successfully created

# 创建LV
DB2Server:~ # lvcreate -l 100%FREE -n LV_DB2_DATA VG_DB2_DATA
  Logical volume "LV_DB2_DATA" created.

# # 格式化逻辑卷为 ext4
DB2Server:~ # mkfs.ext4 /dev/VG_DB2_DATA/LV_DB2_DATA
mke2fs 1.43.8 (1-Jan-2018)
丢弃设备块: 完成
创建含有 7863296 个块(每块 4k)和 1966080 个inode的文件系统
文件系统UUID:f3ef598f-af2c-4daf-8ec6-461ce8e1f077
超级块的备份存储于下列块:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000
正在分配组表: 完成
正在写入inode表: 完成
创建日志(32768 个块)完成
写入超级块和文件系统账户统计信息: 已完成

2. 创建 DB2_BACKUP 的 LVM

# 创建PV
DB2Server:~ # pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.

# 创建VG
DB2Server:~ # vgcreate VG_DB2_BACKUP /dev/sdc
  Volume group "VG_DB2_BACKUP" successfully created

# 创建LV
DB2Server:~ # lvcreate -l 100%FREE -n LV_DB2_BACKUP VG_DB2_BACKUP
  Logical volume "LV_DB2_BACKUP" created.

# # 格式化逻辑卷为 ext4
DB2Server:~ # mkfs.ext4 /dev/VG_DB2_BACKUP/LV_DB2_BACKUP
mke2fs 1.43.8 (1-Jan-2018)
丢弃设备块: 完成
创建含有 7863296 个块(每块 4k)和 1966080 个inode的文件系统
文件系统UUID:f3ef598f-af2c-4daf-8ec6-461ce8e1f077
超级块的备份存储于下列块:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000
正在分配组表: 完成
正在写入inode表: 完成
创建日志(32768 个块)完成
写入超级块和文件系统账户统计信息: 已完成

创建挂载点并写入自动挂载

这一步除了挂载文件系统,也顺手把后面安装 DB2 需要的用户和用户组准备好。

DB2Server:~ # mkdir -p /DB2_DATA
DB2Server:~ # mkdir -p /DB2_BACKUP
DB2Server:~ # groupadd -g 901 db2iadm1
DB2Server:~ # groupadd -g 902 db2fadm1
DB2Server:~ # groupadd -g 903 db2dadm1
DB2Server:~ # useradd -g db2iadm1 -u 101 -d  /home/db2inst1 -m  db2inst1
DB2Server:~ # useradd -g db2fadm1 -u 102 -d  /home/db2fenc1 -m  db2fenc1
DB2Server:~ # useradd -g db2dadm1 -u 103 -d  /home/db2dasusr1 -m  db2dasusr1
DB2Server:~ # passwd db2inst1
新的 密码:
无效的密码: 密码基于一个词典里的单词呀
重新输入新的 密码:
passwd:已成功更新密码
DB2Server:~ # passwd db2fenc1
新的 密码:
无效的密码: 密码基于一个词典里的单词呀
重新输入新的 密码:
passwd:已成功更新密码
DB2Server:~ # passwd db2dasusr1
新的 密码:
无效的密码: 密码基于一个词典里的单词呀
重新输入新的 密码:
passwd:已成功更新密码
DB2Server:~ # more /etc/group | grep db2
db2iadm1:x:901:
db2fadm1:x:902:
db2dadm1:x:903:
DB2Server:~ # more /etc/passwd | grep db2
db2inst1:x:101:901::/home/db2inst1:/bin/bash
db2fenc1:x:102:902::/home/db2fenc1:/bin/bash
db2dasusr1:x:103:903::/home/db2dasusr1:/bin/bash
DB2Server:~ # chown -R db2inst1:db2iadm1 /DB2_DATA/
DB2Server:~ # chown -R db2inst1:db2iadm1 /DB2_BACKUP/
DB2Server:~ # vim /etc/fstab
DB2Server:~ # cat /etc/fstab
/dev/system/swap     swap                 swap       defaults              0 0
/dev/system/root     /                    ext4       acl,user_xattr        1 1
/dev/system/home     /home                ext4       acl,user_xattr        1 2
/dev/VG_DB2_DATA/LV_DB2_DATA /DB2_DATA/   ext4       defaults              0 0
/dev/VG_DB2_BACKUP/LV_DB2_BACKUP /DB2_BACKUP/ ext4   defaults              0 0
DB2Server:~ # mount -a
DB2Server:~ # df -Th
文件系统                                类型      容量  已用  可用 已用% 挂载点
devtmpfs                                devtmpfs  7.7G  8.0K  7.7G    1% /dev
tmpfs                                   tmpfs     7.8G   80K  7.8G    1% /dev/shm
tmpfs                                   tmpfs     7.8G   18M  7.7G    1% /run
tmpfs                                   tmpfs     7.8G     0  7.8G    0% /sys/fs/cgroup
/dev/mapper/system-root                 ext4      9.8G  4.6G  4.7G   50% /
/dev/mapper/system-home                 ext4       25G   45M   24G    1% /home
tmpfs                                   tmpfs     1.6G   20K  1.6G    1% /run/user/484
tmpfs                                   tmpfs     1.6G     0  1.6G    0% /run/user/0
/dev/mapper/VG_DB2_DATA-LV_DB2_DATA     ext4       30G   45M   28G    1% /DB2_DATA
/dev/mapper/VG_DB2_BACKUP-LV_DB2_BACKUP ext4       30G   45M   28G    1% /DB2_BACKUP
DB2Server:~ #

安装 DB2 数据库

DB2Server:~ # tar -zxvf v9.7fp6_linuxx64_server.tar.gz ^C
DB2Server:~ # cd server/
DB2Server:~/server # ll
总用量 64
drwxr-xr-x  6 bin bin 4096 7月   2 2012 db2
-r-xr-xr-x  1 bin bin 5340 7月   2 2012 db2ckupgrade
-r-xr-xr-x  1 bin bin 5293 7月   2 2012 db2_deinstall
-r-xr-xr-x  1 bin bin 5163 7月   2 2012 db2_install
-r-xr-xr-x  1 bin bin 5127 7月   2 2012 db2ls
-r-xr-xr-x  1 bin bin 5145 7月   2 2012 db2prereqcheck
-r-xr-xr-x  1 bin bin 5145 7月   2 2012 db2setup
drwxr-xr-x 15 bin bin 4096 7月   2 2012 doc
-r-xr-xr-x  1 bin bin 5181 7月   2 2012 installFixPack
DB2Server:~/server # ./db2
db2/            db2ckupgrade    db2_deinstall   db2_install     db2ls           db2prereqcheck  db2setup
DB2Server:~/server # ./db2_install
WARNING:
   The required library file libstdc++.so.5 is not found on the system.
WARNING:
DBT3534W  The db2prereqcheck utility determined that ASLR is set to ON and that this could cause issues with some tools.
WARNING:
   The 32-bit library file libpam.so is not found on the system.
   Check the following web site for the up-to-date system requirements
   of IBM DB2 9.7
   http://www.ibm.com/software/data/db2/udb/sysreqs.html
   http://www.software.ibm.com/data/db2/linux/validate
  Aborting the current installation ...
  Run installation with the option "-f sysreq" parameter to force the installation.
DB2Server:~/server #

安装过程中提示缺少 libstdc++.so.5libpam.so 相关依赖,所以需要先补齐兼容库,再决定是否强制安装。

DB2Server:~/server # wget https://download.opensuse.org/repositories/devel:/gcc/SLE-12/x86_64/libstdc++33-32bit-3.3.3-43.1.x86_64.rpm
--2026-03-20 16:27:58--  https://download.opensuse.org/repositories/devel:/gcc/SLE-12/x86_64/libstdc++33-32bit-3.3.3-43.1.x86_64.rpm
正在解析主机 download.opensuse.org (download.opensuse.org)... 2a07:de40:b250:131:10:151:131:30, 195.135.223.226
正在连接 download.opensuse.org (download.opensuse.org)|2a07:de40:b250:131:10:151:131:30|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:https://ftp.gwdg.de/pub/opensuse/repositories/devel%3A/gcc/SLE-12/x86_64/libstdc%2B%2B33-32bit-3.3.3-43.1.x86_64.rpm [跟随至新的 URL]
--2026-03-20 16:28:00--  https://ftp.gwdg.de/pub/opensuse/repositories/devel%3A/gcc/SLE-12/x86_64/libstdc%2B%2B33-32bit-3.3.3-43.1.x86_64.rpm
正在解析主机 ftp.gwdg.de (ftp.gwdg.de)... 2a06:93c7:f0::f79, 134.76.12.6
正在连接 ftp.gwdg.de (ftp.gwdg.de)|2a06:93c7:f0::f79|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:194717 (190K) [application/x-redhat-package-manager]
正在保存至: “libstdc++33-32bit-3.3.3-43.1.x86_64.rpm”
100%[==================================================================================================================>] 194,717     97.1KB/s 用时 2.0s
2026-03-20 16:28:04 (97.1 KB/s) - 已保存 “libstdc++33-32bit-3.3.3-43.1.x86_64.rpm” [194717/194717])
DB2Server:~/server # rpm -ivh libstdc++33-32bit-3.3.3-43.1.x86_64.rpm
警告:libstdc++33-32bit-3.3.3-43.1.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 6300dadb: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:libstdc++33-32bit-3.3.3-43.1     ################################# [100%]
DB2Server:~/server # ./db2_install
WARNING:
   The required library file libstdc++.so.5 is not found on the system.
WARNING:
DBT3534W  The db2prereqcheck utility determined that ASLR is set to ON and that this could cause issues with some tools.
WARNING:
   The 32-bit library file libpam.so is not found on the system.
   Check the following web site for the up-to-date system requirements
   of IBM DB2 9.7
   http://www.ibm.com/software/data/db2/udb/sysreqs.html
   http://www.software.ibm.com/data/db2/linux/validate
  Aborting the current installation ...
  Run installation with the option "-f sysreq" parameter to force the installation.
DB2Server:~/server # find /usr/lib -name "libstdc++.so.5*"
/usr/lib/libstdc++.so.5.0.7
/usr/lib/libstdc++.so.5
DB2Server:~/server # find /lib /usr/lib -name "libpam.so*"
/lib/libpam.so.0
/lib/libpam.so.0.83.1
DB2Server:~/server # ln -sf /lib/libpam.so.0 /lib/libpam.so
DB2Server:~/server # ln -sf /usr/lib/libstdc++.so.5.0.7 /usr/lib/libstdc++.so.5
DB2Server:~/server # ./db2_install -f sysreq
WARNING:
   The required library file libstdc++.so.5 is not found on the system.
WARNING:
DBT3534W  The db2prereqcheck utility determined that ASLR is set to ON and that this could cause issues with some tools.
   Check the following web site for the up-to-date system requirements
   of IBM DB2 9.7
   http://www.ibm.com/software/data/db2/udb/sysreqs.html
   http://www.software.ibm.com/data/db2/linux/validate
  The force option "-f sysreq" is used to force the installation ...
用于安装产品的缺省目录 /opt/ibm/db2/V9.7
***********************************************************
要选择另一个目录用于安装吗?[是/否]

指定下列其中一个关键字以安装 DB2 产品。
  AESE
  ESE
  CONSV
  WSE
  EXP
  PE
  CLIENT
  RTCL
按“帮助”以重新显示产品名称。
按“退出”以退出。
***********************************************************
ESE
WARNING:
   The required library file libstdc++.so.5 is not found on the system.
WARNING:
DBT3534W  The db2prereqcheck utility determined that ASLR is set to ON and that this could cause issues with some tools.
   Check the following web site for the up-to-date system requirements
   of IBM DB2 9.7
   http://www.ibm.com/software/data/db2/udb/sysreqs.html
   http://www.software.ibm.com/data/db2/linux/validate
正在初始化 DB2 安装。
 要执行的任务总数为:48
要执行的所有任务的总估计时间为:2005
任务 #1 启动
描述:正在检查许可协议的接受情况
估计时间 1
任务 #1 结束
任务 #2 启动
描述:具备 root 用户特权的情况下进行安装时的基本客户机支持
估计时间 3
任务 #2 结束
任务 #3 启动
描述:DB2 必需的组件。
估计时间 11
任务 #3 结束
任务 #4 启动
描述:产品消息 英语
估计时间 12
任务 #4 结束
任务 #5 启动
描述:基本客户机支持
估计时间 200
任务 #5 结束
任务 #6 启动
描述:Java 运行时支持
估计时间 121
任务 #6 结束
任务 #7 启动
描述:Java 帮助(HTML)- 英语
估计时间 7
任务 #7 结束
任务 #8 启动
描述:具备 root 用户特权的情况下进行安装时的基本服务器支持
估计时间 7
任务 #8 结束
任务 #9 启动
描述:全局安全工具箱
估计时间 51
任务 #9 结束
任务 #10 启动
描述:Java 支持
估计时间 12
任务 #10 结束
任务 #11 启动
描述:SQL 过程
估计时间 3
任务 #11 结束
任务 #12 启动
描述:ICU 实用程序
估计时间 40
任务 #12 结束
任务 #13 启动
描述:Java 公共文件
估计时间 23
任务 #13 结束
任务 #14 启动
描述:基本服务器支持
估计时间 259
任务 #14 结束
任务 #15 启动
描述:IBM Java? 软件开发包(SDK)
估计时间 35
任务 #15 结束
任务 #16 启动
描述:控制中心帮助(HTML)- 英语
估计时间 13
任务 #16 结束
任务 #17 启动
描述:连接支持
估计时间 3
任务 #17 结束
任务 #18 启动
描述:通信支持 TCP/IP
估计时间 3
任务 #18 结束
任务 #19 启动
描述:并行扩展
估计时间 3
任务 #19 结束
任务 #20 启动
描述:EnterpriseDB 代码
估计时间 3
任务 #20 结束
任务 #21 启动
描述:复制工具
估计时间 22
任务 #21 结束
任务 #22 启动
描述:公共关系型包装器
估计时间 3
任务 #22 结束
任务 #23 启动
描述:控制中心
估计时间 51
任务 #23 结束
任务 #24 启动
描述:命令行处理器加强版
估计时间 6
任务 #24 结束
任务 #25 启动
描述:DB2 数据源支持
估计时间 6
任务 #25 结束
任务 #26 启动
描述:DB2 LDAP 支持
估计时间 4
任务 #26 结束
任务 #27 启动
描述:“DB2 实例安装”向导
估计时间 8
任务 #27 结束
任务 #28 启动
描述:集成动漫复制支持
估计时间 53
任务 #28 结束
任务 #29 启动
描述:Spatial Extender 客户机
估计时间 3
任务 #29 结束
任务 #30 启动
描述:基本应用程序开发工具
估计时间 35
任务 #30 结束
任务 #31 启动
描述:DB2 更新服务
估计时间 4
任务 #31 结束
任务 #32 启动
描述:第一步
估计时间 3
任务 #32 结束
任务 #33 启动
描述:DB2 企业服务器版的产品特征符
估计时间 4
任务 #33 结束
任务 #34 启动
描述:样本数据库源
估计时间 4
任务 #34 结束
任务 #35 启动
描述:DB2 文本搜索
估计时间 70
任务 #35 结束
任务 #36 启动
描述:Informix 数据源支持
估计时间 4
任务 #36 结束
任务 #37 启动
描述:正在设置 DB2 库路径
估计时间 180
任务 #37 结束
任务 #38 启动
描述:正在安装或更新 SA MP
估计时间 40
任务 #38 结束
任务 #39 启动
描述:正在执行控制任务
估计时间 20
任务 #39 结束
任务 #40 启动
描述:正在更新全局注册表
估计时间 20
任务 #40 结束
任务 #41 启动
描述:正在安装 IBM Tivoli Monitoring for Databases
估计时间 600
任务 #41 结束
任务 #42 启动
描述:正在启动 DB2 故障监视器
估计时间 10
任务 #42 结束
任务 #43 启动
描述:正在更新 db2ls 链接
估计时间 1
任务 #43 结束
任务 #44 启动
描述:正在注册 DB2 许可证
估计时间 5
任务 #44 结束
任务 #45 启动
描述:正在设置缺省全局概要文件注册表变量
估计时间 1
任务 #45 结束
任务 #46 启动
描述:正在初始化实例列表
估计时间 5
任务 #46 结束
任务 #47 启动
描述:正在注册 DB2 更新服务
估计时间 30
任务 #47 结束
任务 #48 启动
描述:正在更新全局概要文件注册表
估计时间 3
任务 #48 结束
在此计算机上安装 "DB2 Enterprise Server Edition "
时发生了较小的错误。某些功能部件可能无法正常工作。
有关更多信息,请参阅 "/tmp/db2_install.log.15493" 上的 DB2
安装日志。
DB2Server:~/server #

导授权

DB2Server:/opt/ibm/db2/V9.7/adm # ./db2licm -a ~/db2ese_c.lic
LIC1402I  License added successfully.
LIC1426I  This product is now licensed for use as outlined in your License Agreement.  USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/opt/ibm/db2/V9.7/license/zh_CN.utf8"
DB2Server:/opt/ibm/db2/V9.7/adm #

创建实例

DB2Server:/opt/ibm/db2/V9.7/instance # /opt/ibm/db2/V9.7/instance/db2icrt -u db2fenc1 db2inst1
DBI1070I  Program db2icrt completed successfully.

修改权限

# 1. 将 /DB2_DATA 及其子目录的所有者更改为 db2inst1,所属组更改为 db2iadm1
chown -R db2inst1:db2iadm1 /DB2_DATA

# 2. 对 /DB2_BACKUP 目录也做同样的处理,为后续可能的备份恢复演练做准备
chown -R db2inst1:db2iadm1 /DB2_BACKUP

# 3. (可选)赋予 755 权限,确保实例用户有绝对控制权,其他用户只能读和执行
chmod -R 755 /DB2_DATA
chmod -R 755 /DB2_BACKUP

建库与建表空间(需切换到db2inst1用户执行)

# 1. 切换到实例用户(这会自动加载 DB2 环境变量)
su - db2inst1

# 2. 启动数据库管理器
db2start

# 3. 创建靶场数据库 FAULTDB
db2 "CREATE DATABASE FAULTDB USING CODESET UTF-8 TERRITORY CN"

# 4. 连接到刚刚创建的数据库
db2 "CONNECT TO FAULTDB"

# 5. 在专用的数据挂载点下,按照“挂载点/实例名/数据库名/用途”的规范创建专用文件夹
mkdir -p /DB2_DATA/FAULTDB/tbspdata

# 6. 创建自定义 DMS 表空间,将物理文件明确指向刚刚创建的专用目录
db2 "CREATE REGULAR TABLESPACE TBS_FAULT_01 MANAGED BY DATABASE USING (FILE '/DB2_DATA/FAULTDB/tbspdata/tbs_fault_01.dat' 100M)"

查看数据库

db2inst1@DB2Server:~> db2 list db directory
 System Database Directory
 Number of entries in the directory = 1
Database 1 entry:
 Database alias                       = FAULTDB
 Database name                        = FAULTDB
 Local database directory             = /home/db2inst1
 Database release level               = d.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =
db2inst1@DB2Server:~>
Linux VMware LVM ext4 网络 存储