dataguard 自动裂缝检测和解决

来源:互联网 发布:左连接查询sql语句 编辑:程序博客网 时间:2024/04/28 23:31


 

    当Primary Database的某些日志没有成功发送到Standby Database, 这时候发生饿了归档裂缝(Archive Gap)。

缺失的这些日志就是裂缝(Gap。 Data Guard能够自动检测,解决归档裂缝,不需要DBA的介入。这需要配置FAL_CLIENT FAL_SERVER 这两个参数(FAL: Fetch Archive Log)。

FAL 这个名字可以看出,这个过程是Standby Database主动发起的“取”日志的过程,Standby Database 就是FAL_CLIENT. 它是从FAL_SERVER中取这些Gap, 10g中,这个FAL_SERVER可以是Primary Database, 也可以是其他的Standby Database

如:FAL_SERVER='PR1,ST1,ST2';

FAL_CLIENT和FAL_SERVER两个参数都是Oracle Net Name。 FAL_CLIENT 通过网络向FAL_SERVER发送请求,FAL_SERVER通过网络向FAL_CLIENT发送缺失的日志。 但是这两个连接不一定是一个连接。 因此FAL_CLIENTFAL_SERVER发送请求时,会携带FAL_CLIENT参数值,用来告诉FAL_SERVER应该向哪里发送缺少的日志。 这个参数值也是一个Oracle Net Name,这个Name是在FAL_SERVER上定义的,用来指向FAL_CLIENT.

 

当然,除了自动地日志缺失解决,DBA 也可以手工解决。 具体操作步骤如下:

 

1) 查看是否有日志GAP: 

    SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG; 

 如果 Redo在物理Standby数据库缺失,在物理Standby数据库执行以下查询语句确定缺失问题

  如果缺失 7  to  10

     SQL>select name from v$archived_log  where thread# = 1 and dest_id = 1 and sequence# >=7 and sequence# <= 10 ;

  SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; 

   2) 如果有,则拷贝过来

3) 手工的注册这些日志: 

SQL> ALTER DATABASE REGISTER LOGFILE '路径'; 

 

0 0