16.5 两个实际的例子

在本节中通过两个实际的例子分别模拟数据文件损坏和磁盘损坏的情况,完整地介绍如何对表空间进行完全备份和增量备份,以及如何利用这些备份和重做日志对数据文件进行恢复。

16.5.1 模拟数据文件损坏的例子

首先对表空间进行备份。一方面,以sys用户对表空间users进行完全备份和增量备份,另一方面,以普通用户scott登录,在表空间users中创建一个表,并写入一些数据。每次增量备份的内容就是新修改的数据。以下是对表空间进行备份和恢复的步骤:

1)sys用户利用RMAN工具连接目标数据库,对表空间users进行0级备份。


$rman target sys/1234@orcl catalog rman/1234@test

RMAN>RUN{

ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;

ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;

BACKUP INCREMENTAL LEVEL 0 tablespace users

FORMAT'/home/oracle/users0%T_%p';

RELEASE CHANNEL ch1;

RELEASE CHANNEL ch2;

}


2)以scott用户登录目标数据库,在表空间users中创建表t1。

3)sys用户对表空间users进行1级备份。


RMAN>RUN{

ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;

ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;

BACKUP INCREMENTAL LEVEL 1 tablespace users

FORMAT'/home/oracle/users1%T_%p';

RELEASE CHANNEL ch1;

RELEASE CHANNEL ch2;

}


4)scott用户向表t1中写入两行数据,并提交事务。

5)sys用户对表空间users进行2级备份(相应的命令省略)。

6)scott用户向表t1中写入另外两行数据,并提交事务。

在上面的命令中,对表空间既做了完全备份,又做了增量备份,以后在对数据文件进行恢复时,先利用0级备份,再依次利用后面所做的增量备份进行恢复。而在最后一步中scott用户写入的数据是没有备份的,只能依靠重做日志进行恢复。

为了模拟数据文件损坏,需要关闭数据库,然后在操作系统中删除表空间USERS中的数据文件,或者对其改名,然后利用SQLPlus或RMAN启动数据库实例。在SQLPlus或RMAN中将看到类似以下错误信息:


ORA-01157:cannot identify/lock data file 4-see DBWR trace file

ORA-01110:data file 4:'/home/oracle/users01.dbf


接下来对损坏的数据文件进行恢复。首先要保证备份集中的文件都位于FORMAT命令所指定的位置。为了不影响用户对整个数据库的访问,在将损坏的数据文件置为OFFLINE状态后,或者将表空间置为OFFLINE之后,将数据库打开。然后对表空间或数据文件进行恢复,最后将表空间的状态置为ONLINE。恢复结束后,以scott用户登录目标数据库,检查t1表中的数据是否完全被恢复。下面是对表空间users进行恢复的命令序列:


RMAN>RUN{

ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;

ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;

SQL'ALTER TABLESPACE users OFFLINE';

SQL'ALTER DATABASE OPEN';

RESTORE TABLESPACE users;

RECOVER TABLESPACE users;

SQL'ALTER TABLESPACE users ONLINE';

RELEASE CHANNEL ch1;

RELEASE CHANNEL ch2;

}