一. 自动裂缝检测和解决 当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_CLIENT向FAL_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; SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; 2) 如果有,则拷贝过来 3) 手工的注册这些日志: SQL> ALTER DATABASE REGISTER LOGFILE '路径'; 二. 指定日志发送对象 1.VALID_FOR属性指定传输及接收对象 LOG_ARCHIVE_DEST_n参数中的VALID_FOR属性,用来指定传输的内容。从字面理解VALID_FOR就是基于那谁有效,该属性有两个参数值需要指定:REDO_LOG_TYPE和DATABASE_ROLE,我们基本上可以将其理解为:发送指定角色生成的指定类型的日志文件,该参数的主要目的是为了确保,一旦发生角色切换操作后数据库的正常运转。 其中,REDO_LOG_TYPE和DATABASE_ROLE两个参数可供选择的参数值如下: REDO_LOG_TYPE:可设置为ONLINE_LOGFILE、STANDBY_LOGFILE、ALL_LOGFILES。 DATABASE_ROLE:可设置为PRIMARY_ROLE、STANDBY_ROLE、ALL_ROLES。 注意:VALID_FOR参数默认值是:VALID_FOR=(ALL_LOGFILES,ALL_ROLES)。 推荐手动设置该参数而不要使用默认值,在某些情况下默认的参数值不一定合适,如逻辑Standby在默认情况下就处于OPEN READ WRITE模式,不仅有REDO数据而且还包含多种日志文件(Online Redologs、Archived Redologs及Standby Redologs)。 默认情况下,逻辑Standby数据库生成的归档文件和接收到的归档文件在相同的路径下,这既不便于管理,也极有可能带来一些隐患。建议对每个LOG_ARCHIVE_DEST_n参数设置合适的VALID_FOR属性。本地生成的归档文件和接收到的归档文件最好分别保存于不同路径下。 2.通过DB_UNIQUE_NAME属性指定数据库 DB_UNIQUE_NAME属性是10g版本新增加的一个关键字,在之前版本并没有这一说法。该属性的作用是指定唯一的Oracle数据库名称,也正因有了DB_UNIQUE_NAME,REDO数据在传输过程中才能确认传输到DBA希望被传输到的数据库上。 当然要确保REDO数据被传输到指定服务器,除了在LOG_ARCHIVE_DEST_n参数中指定正确DB_UNIQUE_NAME属性之外,还有一个初始化参数LOG_ARCHIVE_CONFIG也需要进行正确的配置。该参数除了指定Data Guard环境中的唯一数据库名外,还包括几个属性,用来控制REDO数据的传输和接收: SEND:允许数据库发送数据到远端。 RECEIVE:允许Standby接收来自其他数据库的数据。 NOSEND,NORECEIVE:自然就是禁止喽。 例如,设置Primary数据库不接收任何归档数据,可以做如下的设置: LOG_ARCHIVE_CONFIG='NORECEIVE,DG_CONFIG= (PRI,ST) ' 如果做了如上的设置,如果该服务器发生了角色切换,那它也没有接收REDO数据的能力。
注: 整理自 张晓明《大话 Oracle RAC 》和 李丙洋 《涂抹 Oracle 》
