1. 预备知识
将表空间设置为只读,可以防止用户对表空间中的数据文件执行写入操作。然而,这也使得系统进程同样无法完成文件头的写入操作。这将对系统在执行checkpoint,resetlogs之类修改文件头的等操作产生影响。
要全面理解只读表空间的恢复问题,我们首先要搞清楚表空间、数据文件状态的改变,与控制文件之间存在着哪些联系:
1.1 控制文件自动备份
首先,当表空间状态发生改变时,系统将启动控制文件自动备份操作。
sys@STUDY>alter tablespace users read only;
Tablespace altered.
我们来查看alert.log文件:
Thu Jun 24 13:05:38 2010
alter tablespace users read only
Thu Jun 24 13:05:38 2010
Starting control autobackup
Control autobackup written to DISK device
handle 'C:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREASTUDYAUTOBACKUP2010_06_24O1_MF_S_722523938_625SX4G5_.BKP'
Completed: alter tablespace users read write
如果alert.log文件被删除了也不要紧,我们可以在V$BACKUP_CONTROLFILE_DETAILS视图中查询系统自动备份控制文件的详细信息。
sys@STUDY>select btype_key, id1, id2, creation_time from v$backup_controlfile_details;
BTYPE_KEY ID1 ID2 CREATION_TIME
--------- ---------- ---------- -------------------
63 722516269 68 2008-04-22 16:50:16
64 722516931 69 2008-04-22 16:50:16
65 722523938 70 2008-04-22 16:50:16
为了显示方便,以上结果部分被省略了。
当数据文件被置为read only后,系统将修改文件头,将系统当前的SCN记录在Checkpoint_change#和last_change#中。注意,此处系统并未执行CKPT。
sys@STUDY>select file#, checkpoint_change#, last_change#, offline_change#, online_change# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# ONLINE_CHANGE#
---------- -------------- ---------- --------------- --------------
1 2147692 534906 534907
2 2147692 534906 534907
3 2147692 534906 534907
4 2151527 2151527 2145970 2150425
5 2147692 0 0
7 2147692 0 0
8 2147692 0 0
进一步实验我们可以发现:只要表空间状态发生改变(online, offline,read only, read write),系统均会自动进行控制文件的备份操作。
如果我们将数据文件的状态设为offline:
alter database datafile 4 offline;
alert.log文件中将记录,但系统并不进行控制文件的自动备份。
Thu Jun 24 15:38:27 2010
alter database datafile 4 offline
Thu Jun 24 15:38:27 2010
Completed: alter database datafile 4 offline
下一次重新online数据文件时:
alter database datafile 4 online;
alert.log文件中将记录,并执行控制文件的自动备份。
Thu Jun 24 15:45:54 2010
alter database datafile 4 online
Thu Jun 24 15:45:54 2010
Starting control autobackup
Control autobackup written to DISK device
handle 'C:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREASTUDYAUTOBACKUP2010_06_24O1_MF_S_722533554_62639MC7_.BKP'
Completed: alter database datafile 4 online
了解控制文件备份的位置,对于我们运用using backup controlfile来实现数据库的不完全恢复非常重要。如果所有的备份控制文件都丢失了,那么只能通过执行控制文件重建脚本来完成恢复操作。
1.2 控制文件记录数据文件
对于只读表空间,由于无法对其进行更改,因此系统假设其不需要恢复,其中的数据文件并没有包含在控制文件中。
sys@STUDY>alter database backup controlfile to trace;
对应的跟踪文件中有关数据文件的代码段:
DATAFILE
'C:ORACLEPRODUCT10.2.0ORADATASTUDYSYSTEM01.DBF',
'C:ORACLEPRODUCT10.2.0ORADATASTUDYUNDOTBS01.DBF',
'C:ORACLEPRODUCT10.2.0ORADATASTUDYSYSAUX01.DBF',
'C:ORACLEPRODUCT10.2.0ORADATASTUDYEXAMPLE01.DBF',
'C:ORACLEPRODUCT10.2.0ORADATASTUDYRMAN01.DBF',
'C:ORACLEPRODUCT10.2.0ORADATASTUDYPERFSTATS01.DBF'
可以看到,其中没有记录USER01.DBF的信息。
进一步,我们尝试将Users表空间变为offline;然后导出控制文件,我们发现Users中的数据文件同样没有记录在控制文件中。这是由于系统同样认为脱机表空间也同样不需要恢复。
1.3 小结
如下图所示,表空间与控制文件间的关系如下:
表空间状态 | 控制文件操作 | ||
自动备份 | 记录数据文件 | ||
offline | √ | × | |
online | read only | √ | × |
read write | √ | √ |
综上所述,系统对只读表空间和脱机表空间的恢复过程中的操作是非常类似的。
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20162/viewspace-1034620/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20162/viewspace-1034620/