只有在归档日志模式下才能做在线备份
1.查看数据库设置日志模式为归档日志模式还是循环日志模式
db2 get db cfg for test|grep -i LOGARCHMETH
则说明为非归档模式, 默认情况下为循环日志
2.更改日志模式为归档模式
开启归档
cd /home/db2inst1
mkdir dbname
cd dbname
mkdir logs
db2 update db cfg using LOCKTIMEOUT 30 LOCKLIST 163840 MAXLOCKS 20 LOGFILSIZ 20480 LOGPRIMARY 10 LOGSECOND 10 LOGARCHMETH1 disk:/home/db2inst1/dbName/logs/
//设置归档日志路径,启用归档日志
db2 update db cfg for 数据库名 using logretain on //启用归档日志
db2 update db cfg for sample using trackmod on //启用增量备份功能
db2 update db cfg for 数据库名 using userexit on //启用用户出口
然后重启数据库进行冷备(离线备份)
db2stop (db2stop force)
db2start
cd /home/db2inst1
mkdir backup
$ db2 backup db 数据库名 to /home/db2inst1/backup
生成备份文件和归档日志
然后再连接数据库
db2 connect to dbname
3.删除数据库模拟破坏
$ db2 drop db dbname
$ db2 connect to dbname
4.恢复数据库
$ db2 restore db 数据库名 from /home/db2inst1/backup/ taken at 20140212190154 (数据备份的时间戳)
$ db2 connect to 数据库名
此时会有报错,需要前滚日志
$ db2 rollforward database dbname to end of logs and complete
如果报:
SQL4970N Rollforward recovery stopped on the database named "TEST" because
the rollforward utility cannot reach the specified stop point (end-of-log or
point-in-time) on the following database partitions: "0".
解决办法:恢复日志
$ db2 restore db test logs from /opt/dbbak/ taken at 20160513020408 logtarget /opt/dbbak/
复制恢复的归档文件
$ cp /opt/dbbak/S0000000.LOG /home/db2inst1/db2inst1/NODE0000/SQL00002/LOGSTREAM0000/LOGSTREAM0000
启动进入数据库
db2 connect to dbname
总结
第一步:开启归档日志 db2 update db cfg for test_db using logretain on
第二步:重启数据库
第三步:进行一次离线备份 db2 backup db test_db to D:\DB2_BAK
第四步:连接数据库,进行在线备份
db2 connect to test_db user administrator using wyz
db2 backup database test_db online to D:\DB2_BAK include logs