db2 backup/restore 备份和恢复补充

时间:2022-10-10 19:07:36

一、概述

db2 backup/restore 备份与恢复只适用于相同操作系统平台的数据库;
只适用于恢复原库,或者在新机器db2实例里面恢复,不适用于搭建一个新的数据库
命令格式: db2 backup db < 数据库名 > to < 目录名 >
注:在备份前需断开所有与数据库的连接 , 断开连接后再备份,目录名是备份后的文件的存放目录.
例如:
db2 backup database sample to /backup
如果数据库正在被使用,可能会报错
"SQL1035N The database is currently in use. SQLSTATE=57019"需要停掉服务,用命令:
db2 force application all

二、实际操作

1、备份操作

1.使用db2 backup指令备份(testdb数据库名,db2inst1实例名)
首先关闭所有到数据库的连接,将数据库置为“静默”状态:
$ db2 connect to testdb user db2inst1 using thepasswd
$ db2 quiesce database immediate force connections
$ db2 connect reset
现在可以开始备份了:
$ db2 backup database testdb to "/home/backup" user db2inst1 using thepasswd
解除数据库的“静默”状态:
$ db2 connect to testdb user db2inst1 using thepasswd
$ db2 unquiesce database
$ db2 connect reset
说明:
以上指令将会把数据库testdb备份到指定目录 /home/backup下,所以请确保当前登陆用户(db2inst1)对该目录有读写的权限。

##有些时候设置为静默失败,有正在连接
##如果设置静默失败可以尝试停掉所有连接
db2 force application all
或者重启服务
db2stop force
db2start

2、恢复操作

使用db2 restore指令恢复
db2 restore database 库名(此处的库名就是备份命令中的库名,必须一致)
相同库名恢复:
$ db2 restore database testdb from "/home/backup"
说明:
这将会从指定的位置恢复数据库testdb。

不同库名恢复:
$ db2 restore database testdb from "/home/db2inst1/finger" into testdb_new
说明:
这个指令将会建立一个新库,名为testdb_new,其结构、内容来自原先testdb的备份。
db2 restore database testdb from "/data/20180717/shuju" taken at 20180717183305 on "/data/20180717/shuju" dbpath on
"/zwdb" into testdb_new
db2指定需要还原的路径

##恢复操作的一些问题
备份语句会将数据库的表空间创建语句和路径也备份下来
恢复到新机器的db2实例没任何问题
恢复到当前db2实例,将原来的数据库覆盖掉也没问题
如果只是想在当前db2数据库新建一个实例,尽量不要用restore,如果使用了restore,备份语句里面的表空间路径和原来的一致
如果原库没有连接,新的会把原库覆盖掉,只是名字变了,如果原库有业务连接
会导致新恢复的库创建表空间成功,但是表空间状态处于drop depend状态,根本无法使用