然后手动应用日志alter database recover automatic standby database;
在测试过程中发现oracle10G下把丢失的归档日志文件考入指定目录会自动注册,不需手动注册。)
d.查询主备库的进程信息
SQL> select process,status from v$managed_standby;
--查询主备库上的进程信息
主库:
SQL>select process,status from v$managed_standby;
PROCESS STATUS
--------- ------------
ARCH CLOSING
ARCH CLOSING
ARCH CLOSING
ARCH CLOSING
LNS WRITING
备库:
SQL> select process,status from v$managed_standby;
PROCESS STATUS
--------- ------------
ARCH CONNECTED
ARCH CONNECTED
ARCH CLOSING
ARCH CONNECTED
RFS IDLE
RFS IDLE
MRP0 APPLYING_LOG
注意以上2个红色部分
f.查看dataguard的状态信息
SQL > select message_num,message from v$dataguard_status;
g.检查备库是否有日志缺失
SQL > select * from v$archive_gap;
6.主备库的切换
switchover (计划中的切换,不会丢失数据)
failover (当主库出现故障的时候需要主备库切换角色)
a.switchover的切换
主库端:
select switchover_status from v$database;
如果是to standby表可以正常切换.
直接执行alter database commit to switchover to physical standby;
否则执行:alter database commit to switchover to physical standby with session shutdown;
shutdown immediate;
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session;
备库端:
select switchover_status from v$database;
如果是to_primary表可以正常切换.
执行: alter database commit to switchover to primary;
否则执行: alter database commit to switchover to primary with session shutdown;
shutdown immediate;
startup;
b.failover的切换
(1)判断主数据库确实出现严重的硬件故障或其他原因导致主数据库无法启动。
(2)在物理备用数据库上检查是否有archive redo log gaps
SQL>SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
(3)消除archive redo log gaps
从主数据库上或其他备份的地方把没有传到物理备用数据库的archive redo log传到物理备用数据库上,并注册到物理备用数据库的controlfile中。
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'archive redo log文件名称';
重复2,3步骤直到V$ARCHIVE_GAP视图无记录存在。
(4)在物理备用数据库上发起failover操作
SQL > ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
(5)把物理备用数据库转化成主用角色
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
(6)把新的主用数据库重新启动
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
(7)对新的主用数据库做全备份.
7.归档日志的处理
a.物理备库中已经应用的归档日志需定期删除.
rman> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
删除7天前的归档日志文件。删除之后最好做一个全备份。
b. 先手动删除归档日志文件,然后再RMAN里执行下面2条命令以更新控制文件
crosscheck archivelog all;
delete expired archivelog all;
c. 取消对备库传送日志
ALTER SYSTEM SET log_archive_dest_state_2=’DEFER’ ;
8.常见故障:
a.备库重启后,在主库上归档出现ORA-03113错误
SQL> select dest_name,status,error from v$archive_dest;
DEST_NAME STATUS ERROR
------------------------------ --------
LOG_ARCHIVE_DEST_1 VALID
LOG_ARCHIVE_DEST_2 ERROR ORA-03113: end-of-file on communication channel
解决办法:在主库执行
SQL> alter system set log_archive_dest_state_2= enable;
这个命令式手动触发主库区尝试连接备库。
其实这种情况下,只要保证主备库之间的网络和配置是正确的。dataguard会自动恢复这个错误。这个周期默认是300秒,也可以在log_archive_dest_2的参数中添加reopen参数指定这个主备库之间失败后继续尝试的周期。