最近在使用DB2时遇到一个问题:如何把服务器上备份下来的数据库在本地复原上呢?
在网上找啊找啊找啊好像没有真正的恢复,通过自己的研究终于整明白了,和大家分享一下,希望对初学者有所帮助。
由于是通过别的机器备份出来的文件进行复原一个新数据库所以不能通过控制中心复原。
首先将备份的数据库文件放在E:/DB2BAK里
然后打开命令行窗口执行
会出现如下错误信息
这说明在新机器中原来的表空间不存在
回到服务器上通过如下命令查看原来的表空间
这里会看到
等字样把它记下来
回到自己的机器在D:/DB2DATA以上面表空间名称为文件名创建文件夹
回到自己的机器命令行执行如下命令
D:/DB2DATA是新数据的位置记住这里除了文件夹以外什么都不能有哦。
OK执行下面最后一步
至此新的数据库就出来了
在网上找啊找啊找啊好像没有真正的恢复,通过自己的研究终于整明白了,和大家分享一下,希望对初学者有所帮助。
由于是通过别的机器备份出来的文件进行复原一个新数据库所以不能通过控制中心复原。
首先将备份的数据库文件放在E:/DB2BAK里
然后打开命令行窗口执行
- db2 restore database 原数据库名称 from E:/DB2BAK taken at 20090909090909(时间戳) into 新数据库名称 redirect without rolling forward
db2 restore database 原数据库名称 from E:/DB2BAK taken at 20090909090909(时间戳) into 新数据库名称 redirect without rolling forward
会出现如下错误信息
- SQL1277N 复原已检测到一个或多个表空间容器是不可访问的,或者已将它们的状态设置为
- “必须定义存储器”。
- DB20000I RESTORE DATABASE 命令成功完成。
SQL1277N 复原已检测到一个或多个表空间容器是不可访问的,或者已将它们的状态设置为 “必须定义存储器”。 DB20000I RESTORE DATABASE 命令成功完成。
这说明在新机器中原来的表空间不存在
回到服务器上通过如下命令查看原来的表空间
- db2 connect to 数据库名称
- db2 list tablespaces
db2 connect to 数据库名称 db2 list tablespaces
这里会看到
- 当前数据库的表空间
- 表空间标识 = 0
- 名称 = SYSCATSPACE
- 类型 = 系统管理空间
- 内容 = 任何数据
- 状态 = 0x0000
- 详细解释:
- 正常
- 表空间标识 = 1
- 名称 = TEMPSPACE1
- 类型 = 系统管理空间
- 内容 = 系统临时数据
- 状态 = 0x0000
- 详细解释:
- 正常
当前数据库的表空间 表空间标识 = 0 名称 = SYSCATSPACE 类型 = 系统管理空间 内容 = 任何数据 状态 = 0x0000 详细解释: 正常 表空间标识 = 1 名称 = TEMPSPACE1 类型 = 系统管理空间 内容 = 系统临时数据 状态 = 0x0000 详细解释: 正常
等字样把它记下来
回到自己的机器在D:/DB2DATA以上面表空间名称为文件名创建文件夹
回到自己的机器命令行执行如下命令
- db2 set tablespace containers for 0 using (path "D:/DB2DATA/SYSCATSPACE")
- DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
- db2 set tablespace containers for 1 using (path "D:/DB2DATA/TEMPSPACE1")
db2 set tablespace containers for 0 using (path "D:/DB2DATA/SYSCATSPACE") DB20000I SET TABLESPACE CONTAINERS 命令成功完成。 db2 set tablespace containers for 1 using (path "D:/DB2DATA/TEMPSPACE1")
D:/DB2DATA是新数据的位置记住这里除了文件夹以外什么都不能有哦。
OK执行下面最后一步
- RESTORE DATABASE 原数据库名称 CONTINUE
RESTORE DATABASE 原数据库名称 CONTINUE
至此新的数据库就出来了