因为业务对接的需要,公司需要还原db2的备份文件。在还原的过程中遇到很多坑,所以在这里给大家分享一下,也算是少走弯路。首先我安装了db2V10.1版本的数据库,所以在还原的时候就因为版本问题导致我在检测镜像文件的时候一直存在问题,在这里我把报错信息给大家展示一下:
当我检测镜像文件的时候出现了Unable to migrate media header from image 和failed to verify media header.Cannot continue的错误。下面是我查阅官网发现的错误信息的网址,可能是10.1版本的一个bug。
https://www-01.ibm.com/support/docview.wss?uid=swg1IC84463。
后来经过询问,得知备份文件是在8.2的版本的db2数据库下还原的,所以卸载重装了8.2版本的数据库。安装出现了一个小问题,无法创建数据库,报错内容为:SQL3012C 发生系统错误(原因码 ="").不能处理后续的SQL语句。解决办法:取消勾选操作系统安全性就可以了,可能是设置db2管理员组没有权限的原因。
还原数据库的名称要与备份数据库的名称保持一致,同时路径也要保持一致。
1,首先创建数据库
db2 create db <dbname>
using codeset utf-8 territory CN collate using identity
2,连接数据库
db2 connect to <dbname>
3,设置缓冲池
db2 create bufferpool bp32k all nodes size -1 pagesize 32k
3,创建表空间
db2 create regular tablespace <dbname>
pagesize 32k managed by database using(file ‘E:\xx\xxx\databasebspae.file’ 10g) bufferpool bp32k
如果提示报错则按以下命令执行:
db2 create large tablespace <dbname>
pagesize 32k managed by automatic storage bufferpool bp32k
4,查看数据库的表空间
db2 get snapshot for tablespaces on <dbname>
(数据库名)
ps:创建和备份文件一样的数据库;还原的数据库和备份数据库保持一致,同时还原的路径和被还原的路径也是要一致的。
5,检测镜像文件是否可用。
db2ckbkp -h 170703.001(db2备份的文件名)
6,还原db2备份文件
db2 restore database <dbname>
from E:\backup TAKEN AT 20191029170703 TO F:\backup INTO<dbname>
WITH 2 BUFFERS BUFFER 1024 WITHOUT PROMPTING
(时间戳的名字不是文件的名字)
(注意:数据库原文件磁盘与还原磁盘应在同一磁盘下,否则表空间会缺失)
7,断开数据库连接
db2 force application all
8,查看数据库的所有表
db2 list tables
8,还原数据的时候出现找不到数据库映像文件的匹配项。解决方法:备份文件的路径只写原本就存在的路径,而后面备份自动生成的层级目录不用写。
9,复原的数据库与备份映象上的数据库不同,解决方法:将备份文件与新建数据库的路径和数据库名称保持一致
10,出现警告将文件的还原路径,还原数据以及新建数据库以及备份数据库的路径都写全就好了。
如:db2 restore database fgws from E:\backup TAKEN AT 20191029170702
TO F:\backup INTO<dbname>
WITH 2 BUFFERS BUFFER 1024 WITHOUT PROMPTING,写全即可.
11,db2查询时报sql0204N administrator.contract 是未定义的名称,解决方法:在查询的表前加上表的模式名
最后复原成功,在生成db2实例的文件夹内多了两个表空间文件,而我比较好奇的是为什么没有指定到我的还原路径F盘中,虽说如此,但是复原的数据还算是大功告成了。觉得有帮助的朋友可以给我点个赞,哈哈!