前言
备份还原db2数据库一般有两种方式,一种是使用db2 backup + db2 restore,另一种是db2move + db2look。前者备份的数据库文件不能使用后者的方式进行还原。
- 实例所有者用户:db2inst1
- 待备份数据库:testdb,授权用户:zsusr/zspwd
备份
方式1: 使用db2 backup
- 切换到实例用户:
su - db2inst1
- 显示所有连接数据库的客户端
db2 list application
- 显示所有激活的数据库:
db2 list active databases
- 强制关闭所有数据库实例(断开所有客户端连接)
db2 force application all
- 关闭完实例后立即备份
# 备份完成后会显示: Backup successful. The timestamp for this backup image is : ... # 注意时间戳 # 语法: db2 backup db <db name> to <path> db2 backup db testdb to /home/db2inst1/backup
方式2: 使用db2 move
- 连接到数据库(不连也行)
db2 connect to testdb
- 用db2look生成表结构dll脚本(执行这一步之前最好先找个空目录)
# -d: 指定数据库 # -e: 抽取数据库对象的DDL # -a: 所有的用户和模式 # -o: 指定输出文件名称 db2look -d testdb -a -e -o db2look_testdb.sql
- 备份数据
db2move testdb export -sn testdb -u zsusr -p zspwd
还原
方式1(对应备份方式1)
db2 restore db dbbak from /home/db2inst1 taken at 20200401160847 into dbbak01
方式2(对应备份方式2)
- 连接数据库(数据库需要先创建)
db2 connect to testdb user zsusr using zspwd
- 使用db2look生成的ddl文件生成表结构
db2 -tvf db2look_testdb.sql
- 导入数据
db2move testdb load
补充
- 还原出来的新库,查看部分表时可能会报错:
SQL0668N Operation not allowed for reason code "1" on table xxx SQLSTATE=57016
- 解决:需要执行:
set integrity for <schema_name>.<table_name> immediate checked
- 原因:部分表依赖其他表,而其他表还没还原出来,所以表呈暂挂状态。