在备份数据库的时候,备份的表空间使用的所有表空间容器都将保存在一个记录中。在复原过程中,备份中列出的所有表空间将被检查是否可以访问。如果因为其他的一些原因有一个或多个容器不可使用,复原将失败。解决办法是在复原过程中重新定向表空间容器。包括了添加,修改,删除表空间的容器。
另外一种情况是在备份中所选列的容器在系统中并不存在,但用户仍然需要在这些容器中复原。比如在备份之外的地方进行恢复,新的系统中可能没有定义所需的容器 。解决办法:在复原时重定向表空间容器到另外一个支持的容器。
db2 => create database product automatic storage no on 'd:\PRODUCT' user tablesp
ace managed by database using (file 'd:\PRODUCT\userdata.dat' 512)
SQL1052N 数据库路径 "D:\PRODUCT" 不存在。
SQL1052N 数据库路径 "" 不存在。--遇到的一个错误
说明:
该命令的 "" 参数中指定的路径无效。不存在该名称的路径,或者在
DB2_CREATE_DB_ON_PATHS 注册表变量被禁用时,指定了路径(仅限于 Windows)。
在 Windows 或 UNIX 环境下的分区数据库环境中,分区数据库组中的每个节点都
必须有相同的硬盘驱动器规范(路径)可用并且具有可用空间,才能成功执行
CREATE DATABASE 命令。硬盘驱动器路径是在数据库管理器配置中指定的。如果
DFTDBPATH 为空白,那么缺省值将是实例拥有的机器上安装了 DB2 的硬盘驱动器路径(即,db2 安装路径)。
无法处理该命令。
用户响应:
用正确的数据库路径重新提交该命令。
在 Windows 或 UNIX 环境下的分区数据库环境中,遵循下列步骤:
* 确定所需要的硬盘驱动器规范(路径)。该路径是在错误消息中指定的。
* 确定数据库分区的哪个节点遇到了问题。通常可以在实例拥有的节点的
db2diag.log 文件中找到此信息。
* 更正遇到问题的节点上的驱动器问题,或着更改数据库管理器配置中的驱动器
规范,以使分区数据库组的每个节点上都可以使用同一驱动器并且具有足够的
空间。
* 重新发出该命令。
* 在 Windows 上,如果所有将访问该数据库的应用程序都基于版本 9 或更高版
本的外部 API,那么可以启用 DB2_CREATE_DB_ON_PATHS 环境变量以支持将路
径作为数据库路径。
db2 => create database product
automatic storage no on 'd:\'
user tablespace managed by database
using (file 'd:\PRODUCT\userdata.dat' 512)
DB20000I CREATE DATABASE命令成功完成。
db2 => backup database product to "d:\backup"
备份成功。此备份映像的时间戳记是:20100921111126
db2 => restore database product from d:\backup into newprod redirect without rolling forward
SQL1277W 正在执行重定向复原操作。现在,可以查看表空间配置,并且不使用自动存储器
的表空间可以重新配置它们的容器。
DB20000I RESTORE DATABASE命令成功完成。
db2 => list tablespaces
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理空间
内容 = 所有持久数据。常规表空间。
状态 = 0x2001100
详细解释:
复原暂挂
必须定义存储器
可以定义存储器
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理空间
内容 = 系统临时数据
状态 = 0x2001100
详细解释:
复原暂挂
必须定义存储器
可以定义存储器
表空间标识 = 2
名称 = USERSPACE1
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x2001100
详细解释:
复原暂挂
必须定义存储器
可以定义存储器
注意:上面提示所有的表空间都处于 必须定义存储器 状态。为了继续进行,使用如下方式重定义容器。
db2 => set tablespace containers for 0 using (path "D:\newprod01")
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
db2 => set tablespace containers for 1 using (path "D:\newprod02")
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
db2 => set tablespace containers for 2 using (file "D:\newprod03\user.dat" 5120)
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
完成了容器的重定义,进行重定向复原。
db2 => restore database product continue
DB20000I RESTORE DATABASE命令成功完成。
db2 => list tablespaces
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理空间
内容 = 所有持久数据。常规表空间。
状态 = 0x0000
详细解释:
正常
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理空间
内容 = 系统临时数据
状态 = 0x0000
详细解释:
正常
表空间标识 = 2
名称 = USERSPACE1
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常
检查表空间的状态,重定向复原成功!