转载:http://www.dbdream.org/?p=548
搭建DATA GUARD,利用RMAN备份恢复备库时,由于RMAN不会备份REDO文件,还原后的备库缺少REDO日志文件,对于用归档日志同步数据的备库,影响不是很大,依然可以应用日志同步主库的数据变更,但是如果主/备库切换的话,就不行了,对于这样控制文件里记录了REDO的信息,但是在存储上却没有对应的文件的备库,此时删除控制文件中的REDO信息是不允许的。
SQL> alter database drop logfile group 1;
alter database drop logfile group 1
*
ERROR at line 1:
ORA-01156: recovery or flashback in progress may need access to files
那该如何解决这个问题呢,也很简单,不让删这些没有文件的REDO信息,还是让建的,那么就先在主库和备库都建3组新的REDO日志。
SQL> alter database add logfile group 4 '+DATA/fhacdb/redo04.log' size 1024M;
Database altered.
SQL> alter database add logfile group 5 '+DATA/fhacdb/redo05.log' size 1024M;
Database altered.
SQL> alter database add logfile group 6 '+DATA/fhacdb/redo06.log' size 1024M;
Database altered.
现在主库和备库的控制文件记录的REDO日志信息如下:
主库:
SQL> select GROUP#,SEQUENCE#,STATUS,ARCHIVED from v$log;
GROUP# SEQUENCE# STATUS ARC
---------- ---------- ---------------- ---
1 17476 ACTIVE YES
2 17474 INACTIVE YES
3 17475 INACTIVE YES
4 17477 ACTIVE YES
5 17478 ACTIVE YES
6 17479 CURRENT NO
备库:
SQL> select GROUP#,SEQUENCE#,STATUS,ARCHIVED from v$log;
GROUP# SEQUENCE# STATUS ARC
---------- ---------- ---------------- ---
1 17476 CLEARING YES
2 17474 CLEARING YES
3 17475 CLEARING YES
4 17477 CLEARING YES
5 17478 CLEARING YES
6 17479 CURRENT YES
备库不让删REDO日志,不代表主库也不让删,切换主库日志,当STATUS状态为INACTIVE时,删掉前3组REDO日志。
SQL> alter database drop logfile group 1;
Database altered.
SQL> alter database drop logfile group 2;
Database altered.
SQL> alter database drop logfile group 3;
Database altered.
此时备库还是那6组日志信息,包括前3组没有文件的日志信息和后建立的3组正确的REDO日志,而主库现在只有3组后建立的REDO信息,这样就好办啦,主库重建备库STANDBY控制文件,发给备库,备库只要应用这个控制文件就没有前3组错误的REDO信息啦。
SQL> select GROUP#,SEQUENCE#,STATUS,ARCHIVED from v$log;
GROUP# SEQUENCE# STATUS ARC
---------- ---------- ---------------- ---
4 17477 CLEARING YES
5 17478 CLEARING YES
6 17479 CURRENT YES