[ 来源:http://www.it55.com | 作者: | 时间:2007-12-18 | 收藏 | 推荐 ] 【大 中 小】
步骤 1. 执行完全数据库备份
要执行完全脱机数据库备份,可以使用以下命令:
TERMINATE
FORCE APPLICATION ALL
BACKUP DATABASE testdb1 TO c:\testdb1\backup
需要注意备份文件名称中生成的 ID。它类似于:20060411154219。这个 ID 只是备份映像的时间戳,恢复过程中需要使用它。
步骤 2. 模拟故障
要模拟故障场景,可以完全删除数据库:
TERMINATE
FORCE APPLICATION ALL
DROP DATABASE testdb1
现在,尝试连接数据库:
CONNECT TO testdb1
将报告以下错误,它提示找不到此数据库:
Error: SQL1013N Database alias name or Database name "testdb1" could not found.
步骤 3. 创建一个新的数据库
CREATE DATABASE testdb1
LIST DB DIRECTORY
步骤 4. 恢复数据库
恢复数据库备份映像。在本例中,我使用时间戳 20060411154219 恢复备份映像:
RESTORE DATABASE testdb1 FROM c:\testdb1\backup TAKEN AT 20060411154219 INTO testdb1
将返回以下报警消息
SQL2523W: Restoring to an existing database that is different from the database on the backup image. The target database will be overwritten by the backup version. The roll-forward recovery logs associated with the target database will be overwritten.
按 Y 键继续运行。该操作将把数据库备份恢复到前一步骤中创建的数据库。成功恢复映像之后,数据库将与备份时的数据库完全一致。
步骤 5. 连接到数据库
尝试连接到数据库:
CONNECT TO testdb1
可能会返回以下错误消息:
SQL1117N A connection to or activation of database "testdb1" cannot be made because of Roll-Forward Pending SQLSTATE=57019.
出现错误的原因可能是,必须使用某些日志文件进行一致性检查。使用以下命令将数据库恢复到一致状态:
ROLLFORWARD DATABASE testdb1 COMPLETE
再次尝试连接到数据库:
CONNECT TO testdb1
步骤 6. 数据库和对象验证
验证之前的对象仍然存在且可用,比如说:
LIST TABLESPACES SHOW DETAIL
LIST TABLES
上一条命令应该会提示,所有表空间均处于正常状态并且可以访问容器。所有表及表中的数据集合应该与执行备份时的状态一致。
场景 2. 表空间容器意外丢弃或损坏的表空间容器
本场景将展示当一个或多个表空间容器丢失或损坏时如何恢复数据库系统。出现此情况的原因可以是人为错误(比如说,某个用户删除了某个目录或文件)或数据文件损坏问题。本场景基于 表 2 中的配置。
表 2. 场景 2 中所使用的系统配置
| 组件 | 描述 |
|---|---|
| 操作系统 | Windows XP Service Pack 2 / RHEL 4.0 |
| DB2 版本和等级 | DB2 UDB Enterprise Server Edition (ESE) V8.2.6 fixpak 13 / DB2 V9.1 ESE fixpak 1 |
| 数据库名称 | TESTDB1 |
| 表空间名称 | TS1 |
| TS1 中的容器 | c1.dat, c2.dat, c3.dat, c4.dat |
CONNECT TO testdb1
LIST TABLESPACES SHOW DETAIL
步骤 2. 获取所有表空间容器信息的目录
LIST TABLESPACE CONTAINERS FOR 1 SHOW DETAIL
注意:上面命令中的 “1” 是本环境中表空间 TS1 的表空间 ID。它是通过之前 LIST TABLESPACES SHOW DETAIL 命令中的输出获得的。所使用的每个表空间 ID 都需要重复这个命令。
步骤 3. 备份表空间
TERMINATE
FORCE APPLICATION ALL
BACKUP DATABASE testdb1 TABLESPACE ts1 TO c:\testdb1\backup\ts1
如您所见。本场景假定用户对大多数重要的表空间都执行了备份(供恢复使用)。
步骤 4. 模拟表空间故障
手动模拟此场景,即表空间容器文件被某个用户意外删除:
DEL C:\TESTDB1\TS1\C1.DAT
DEL C:\TESTDB1\TS1\C2.DAT
DEL C:\TESTDB1\TS1\C3.DAT
随后,当我们连接到数据库并尝试执行与表空间 TS1 相关的操作时,将返回错误。比如说:
CONNECT TO testdb1
CREATE TABLE tab1(c1 INTEGER) IN ts1
返回以下错误消息:
SQL0290N Table space access is not allowed.
还可以使用以下命令检查表空间状态:
LIST TABLESPACES SHOW DETAIL
删除容器后,上面的命令将显示 TS1 的状态为 0x400 ,该代码表示脱机且不可访问状态。由于删除了三个容器,因此表空间不再处于正常状态(0x000)。
(编辑:IT资讯之家 www.it55.com)