Data Guard 10g 创办过程总结

Data Guard 10g 创建过程总结

1.    架构

Oracle 10g 中,传输日志到备用节点数据库的进程为ARCHLGWR 。(在11g 中,LGWRLNS 替代,但10g 中是不是LGWR 我不确定!)

( 墙内: http://mikixiyou.iteye.com/blog/1489087 )

在备用节点上通过参数log_archive_configfal_clientfal_server 接收日志,并和主节点通讯,标识该日志是否被应用。

Data Guard 采用最大可用模式,保证数据实时同步到最少一个节点上。因为我们选择第一个备用节点作为数据实时同步点,同步进程采用LGWR 进程。

2.    配置

在一个主节点两个备用节点的Data Guard 10g 的环境中,各个节点的初始化参数的主要配置项。

在主节点的初始化参数文件配置:

*.log_archive_config='dg_config=(codb,codg,codg2)'
*.log_archive_dest_1='location=/oradata/htcodb/archive_logs_codb'
*.log_archive_dest_2='service=codb_standby lgwr sync affirm  valid_for=(online_logfiles,primary_role) db_unique_name=codg'
*.log_archive_dest_3='service=codb_standby2 arch async affirm  valid_for=(online_logfiles,primary_role) db_unique_name=codg2'
*.log_archive_dest_state_2='enable'
*.log_archive_dest_state_3='enable'

在备用节点一的初始化参数文件配置:

*.db_name='codb'
*.db_unique_name='codg'
*.fal_client='code_standby'
*.fal_server='codb_primary'
*.log_archive_config='dg_config=(codb,codg,codg2)'
*.log_archive_dest_1='location=/oradata/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=codg'
*.log_archive_format='%t_%s_%r.dbf'

在备用节点二的初始化参数文件配置:

*.db_name='codb'
*.db_unique_name='codg2'
*.fal_client='codb_standby'
*.fal_server='codb_primary'
*.log_archive_config='dg_config=(codb,codg2)'
*.log_archive_dest_1='location=/u01/archivelog_standby/ valid_for=(all_logfiles,all_roles) db_unique_name=codg2'
*.log_archive_format='%t_%s_%r.dbf'

主节点和备用节点之间的通讯是通过Oracle Net 实现的。在参数fal_clientfal_server 上就用到Oracle Net 中的配置信息。

在主节点的tnsnames.ora 文件中,关于DG 的配置项如下所示:

CODB_PRIMARY =
 (DESCRIPTION =
   ( ADDRESS = (PROTOCOL = TCP)(HOST = codb1-vip.htsc.com.cn)(PORT = 1521))
  (ADDRESS = (PROTOCOL = TCP)(HOST = codb2-vip.htsc.com.cn)(PORT = 1521))
  (LOAD_BALANCE = yes)
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = codb)
  )
 )-

CODB_STANDBY =
 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.219)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SID = codb)
  )
 )

CODB_STANDBY2 =
 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.90)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SID = codb)
  )
 )

在备用节点一的tnsnames.ora 文件中,关于DG 的配置项如下所示:

CODB_PRIMARY =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = codb1-vip.htsc.com.cn)(PORT = 1521))
  (ADDRESS = (PROTOCOL = TCP)(HOST = codb2-vip.htsc.com.cn)(PORT = 1521))
  (LOAD_BALANCE = yes)
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = codb)
  )
 )

CODB_STANDBY =
 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.219)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = codb)
  )
 )

 

在备用节点二的tnsnames.ora 文件中,关于DG 的配置项如下所示:

CODB_PRIMARY =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = codb1-vip.htsc.com.cn)(PORT = 1521))
  (ADDRESS = (PROTOCOL = TCP)(HOST = codb2-vip.htsc.com.cn)(PORT = 1521))
  (LOAD_BALANCE = yes)
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = codb)
  )
 )

CODB_STANDBY =
 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.90)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = codb)
  )
 )

3.    总结

日志传输

在主节点上,使用RMAN 备份删除归档日志文件时,会提示不能删除归档日志文件。提示信息类似于“RMAN-08137: WARNING: archive log not deleted as it is still needed”

这个提示信息意味着归档日志文件在DG 环境中的备用节点上还需要使用,可能需要再次传输到备用节点,也可能是备用节点应用了没有给主节点说明其已经被应用了,从而导致主节点必须保存这个归档日志文件。

当然,我们也可以从OS 级别强制删除掉这些文件。但这样操作的结果,有可能导致DG 同步机制被破坏掉。

因此,我们先从主节点上检查哪些归档日志文件没有被应用。查找的方式如下:

SQL> select max (SEQUENCE#),DEST_ID,APPLIED  from v$archived_log group by DEST_ID,APPLIED ;

MAX(SEQUENCE#)   DEST_ID APP
-------------- ---------- ---
       61669         1 NO
       61665         3 NO
       61669         3 NO
       61667         2 NO
       61669         2 YES

SQL>


根据结果,我们发现log_archive_dest_3 通过到节点二的归档日志文件有问题。

检 查节点二上的参数配置,发现错误是参数log_archive_config 配置错了。正确的配置应该 是*.log_archive_config='dg_config=(codb,codg2)' ,但这 里*.log_archive_config='dg_config=(codbi,codg2)' ,导致了备用节点无法将通过fal_server 判断 主节点信息。

从这个错误中,我们可以分析出这样的结论。

在主节点上通过参数log_archive_dest_2 配置的传输方式将日志文件同步到备用节点的。

传 输方式为“service=codb_standby lgwr sync affirm  valid_for=(online_logfiles,primary_role) db_unique_name=codg“ 。这里使用的db_unique_name 的值是备用节点中该参数的值。

使用LGWR 传输时,这个参数值一定不能错,否则会导致主节点LGWR 不能工作,从而导致数据库宕机。

在备用节点上通过参数fal_clientfal_server 和主节点通讯日志是否接受到,是否应用了。

备用节点通过参数log_archive_dest_1 的值将主节点传输过来的归档日志文件存储到指定位置。对于物理灾备节点,只需要配置一个该类型的参数就可以。而对于逻辑灾备 节点,还需要配置一个用于保存 apply 之后生成的归档日志文件的路径值。