RMAN备份恢复之归档日志对BLOCKRECOVER的影响
2007-06-19 12:33:18 来源:WEB开发网核心提示: SQL> SELECT SEQUENCE# FROM V$LOG;SEQUENCE#--328329327首先建立一张测试表,在这个表中,RMAN备份恢复之归档日志对BLOCKRECOVER的影响(3),ID在940和1006之间的记录存储在DATAFILE 5 BLOCK 27中,
SQL> SELECT SEQUENCE# FROM V$LOG;
SEQUENCE#
----------
328
329
327
首先建立一张测试表,在这个表中,ID在940和1006之间的记录存储在DATAFILE 5 BLOCK 27中。在归档322中记录了TEST表的ID等于1000的记录的更新,这个更新发生在DATAFILE 5 BLOCK 27上。随后在归档323中,删除了ID等于1的记录,这条记录与BLOCK 27无关。在归档324中,更新了ID等于10000的记录,这个修改与BLOCK 27也无关。在归档325中,新建TEST2表,并插入数据。归档326就是一个空文件。
因此,除了归档322外,从323到325都与BLOCK 27的修改无关。根据Oracle的文档,这些归档的缺失将不会影响BLOCK 27的恢复。
为了验证文档的说法,下面将归档322到326修改名称,使得Oracle在恢复时无法找到归档日志。
最后执行的几次ALTER SYSTEM SWITCH LOGFILE操作,是确保SEQUENCE为326的联机重做日志已经被重用,避免Oracle利用联机重做日志来代替归档日志。
准备工作完毕,下面开始模拟坏块。仍然是通过UtralEdit对数据文件进行修改,先是定位数据块的偏移地址:
SQL> SHOW PARAMETER BLOCK_SIZE
NAME TYPE VALUE
------------------------------------ ----------- --------------------------
db_block_size integer 8192
SQL> SELECT TO_CHAR(8192 * 27, 'XXXXX') FROM DUAL;
TO_CHA
------
36000
下面对地址36000后面的数据进行修改,并保存。
执行SQL语句,可以看到下面的错误:
SQL> SELECT COUNT(*) FROM TEST;
SELECT COUNT(*) FROM TEST
*
ERROR 位于第 1 行:
更多精彩
赞助商链接