db2在线备份及还原

只有在归档日志模式下才能做在线备份

1.查看数据库设置日志模式为归档日志模式还是循环日志模式

db2 get db cfg for test|grep -i LOGARCHMETH

db2在线备份及还原_第1张图片

则说明为非归档模式, 默认情况下为循环日志

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在线备份及还原_第2张图片

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

db2在线备份及还原_第3张图片

3.删除数据库模拟破坏

$ db2 drop db dbname

$ db2 connect to dbname

db2在线备份及还原_第4张图片

4.恢复数据库

$ db2 restore db 数据库名   from /home/db2inst1/backup/ taken at 20140212190154 (数据备份的时间戳)

$ db2 connect to 数据库名

此时会有报错,需要前滚日志

$ db2 rollforward database dbname to end of logs and complete

db2在线备份及还原_第5张图片

如果报:

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在线备份及还原_第6张图片

 

 

 

总结

第一步:开启归档日志   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

 

你可能感兴趣的:(db2在线备份及还原)