一、备份数据库
1.离线全备份
1)首先确保没有用户使用DB2:
db2 list applications for db autosr
2)1.手动关闭大机后台程序
2.停止iplature平台
3.停止ICV画面工程
4.手动关闭成像程序datamanager
强制断掉所有连接
db2 force application all
确认没有用户使用DB2,执行备份命令
db2 backup db autosr
数据库备份文件就存在cmd的运行路径C:\Users\Administrator下,若cmd的运行路径为D:\,则数据库备份文件存在路径D:\下
也可以使用以下命令指定数据库备份路径:
db2 backup db lianxi to D:\DB2test
一个新创建的空的数据库离线全备份后得到的备份数据库文件大小是160M,如下图:
2.在线全备份
离线备份和在线备份的区别在于备份操作对数据库的使用影响不同,离线备份要求在数据库无连接的状态下操作,会导致备份时连接数据库的程序和画面不能正常工作,在线备份则可以在数据库有连接时备份,不影响数据库的使用。
1)DB2默认只能进行离线全备份,在进行在线全备份之前,需要先修改DB2数据库日志配置,如下:
获取当前配置
db2 get db cfg for lianxi|find /I "arch"
Varchar2 兼容性 = OFF
第一个日志归档方法 (LOGARCHMETH1) = DISK:D:\DB2\dblog\
logarchmeth1 的归档压缩 (LOGARCHCOMPR1) = OFF
logarchmeth1 的选项 (LOGARCHOPT1) =
第二个日志归档方法 (LOGARCHMETH2) = OFF
logarchmeth2 的归档压缩 (LOGARCHCOMPR2) = OFF
logarchmeth2 的选项 (LOGARCHOPT2) =
故障转移日志归档路径 (FAILARCHPATH) =
错误时重试日志归档次数 (NUMARCHRETRY) = 5
日志归档重试延迟(秒) (ARCHRETRYDELAY) = 20
修改LOGARCHMETH1参数为别的路径,注意,路径一定要发生改变,不能修改为当前路径,否则无法在线备份,命令如下:
db2 update db cfg for lianxi using logarchmeth1 DISK:D:\DB2test
DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。
再次获取配置信息,如下:
db2 get db cfg for lianxi|find /I "arch"
Varchar2 兼容性 = OFF
第一个日志归档方法 (LOGARCHMETH1) = DISK:D:\DB2test\
logarchmeth1 的归档压缩 (LOGARCHCOMPR1) = OFF
logarchmeth1 的选项 (LOGARCHOPT1) =
第二个日志归档方法 (LOGARCHMETH2) = OFF
logarchmeth2 的归档压缩 (LOGARCHCOMPR2) = OFF
logarchmeth2 的选项 (LOGARCHOPT2) =
故障转移日志归档路径 (FAILARCHPATH) =
错误时重试日志归档次数 (NUMARCHRETRY) = 5
日志归档重试延迟(秒) (ARCHRETRYDELAY) = 20
LOGARCHMETH1参数路径已变为修改值
在修改的D:\DB2test路径下生成了日志文件夹和日志文件
2)尝试连接数据库
db2 connect to lianxi
SQL1116N 连接或激活数据库 "LIANXI" 失败,这是因为该数据库处于 BACKUP PENDING
状态。 SQLSTATE=57019
这时,要求我们做一次数据库的离线全备份,断掉所有数据库连接,执行 db2 backup db lianxi to D:\DB2test
再次连接数据库,可正常连接
3)列出数据库连接
db2 list applications for db lianxi
授权标识 应用程序名 应用程序 应用程序标识 数据库 代理程序
句柄 名称 序号
-------- -------------- ---------- -------------------------------------------------------------- -------- -----
DB2ADMIN db2jcc_applica 559 127.0.0.1.17993.230118065704 LIANXI 1
DB2ADMIN db2jcc_applica 539 127.0.0.1.17992.230118065644 LIANXI 1
当前数据库有连接,执行在线备份数据库命令:
db2 backup db lianxi online to D:\DB2test
在有连接的状态下备份成功,备份文件大小是170M,比离线全备份略大
2.恢复数据库
1.拷贝数据库至DB2服务器,例如路径“C:\Users\Administrator”下
2.打开“db2cmd”,默认路径就是上面的例子,如数据库不在这个目录下,需切换目录
在“D:\DB2\IBM\SQLLIB\license”路径下不存在数据库映像文件,恢复失败,输入命令切换路径
3.列出所有对数据库的连接:db2 list applications
4.输入“db2 restore db AUTOSR taken at 20220221103759”,回车,稍等几分钟,日志显示恢复数据库成功
3.在线备份的数据库恢复后连接报错,如下:
1)前滚数据库 db2 rollforward db dsdb stop
报错:SQL1273N 由于 "0" 数据库分区和 "0" 日志流中缺少 "S0002295.LOG"
日志文件,因此,无法继续执行用于读取 "DSDB" 数据库的日志的操作。
在数据库安装目录如D:\DB2查找"S0002295.LOG"日志文件,拷贝
2)获取数据库配置db2 get db cfg for dsdb
将拷贝的日志文件放到“第一个日志归档方法”路径下如:D:\DB2\dblog\DB2\DSDB\NODE0000\LOGSTREAM0000\C0000010
3)再次前滚数据库 db2 rollforward db dsdb stop
前滚命令成功完成,再次连接数据库,可正常连接
2.前滚数据库 db2 rollforward db dsdb stop报了另外的错误
SQL1276N 在前滚经过大于或等于 "2022-11-17-03.14.30.000000 UTC" 的时间点之前,
数据库DSDB不能脱离前滚暂挂状态,因为节点 "0" 中包含比指定时间更新的信息
1)前滚日志 db2 rollforward db dsdb to end of logs and complete
报错:SQL4970N 名为DSDB的数据库上的前滚恢复已停止,因为前滚实用程序无法到达以下数据库分区上的指定停止点(日志结束或时间点):“0”
2)恢复日志 db2 restore db dsdb logs from H:\项目备份\德盛备份\DSDB taken at 20221117111430 logtarget H:\项目备份\德盛备份\DSDB
执行后在H:\项目备份\德盛备份\DSDB路径下生成NODE0000\LOGSTREAM0000\S0002295.LOG日志文件
复制文件,粘贴到D:\DB2\dblog\DB2N\DSDB\NODE0000\LOGSTREAM0000\C0000010路径下
3)再次前滚日志 db2 rollforward db dsdb to end of logs and complete,前滚状态变为未暂挂,同上一个步骤3)结果,再次连接数据库,可正常连接