ORACLE DG 主-备-备

本技术文档记录的是:ORACLE DG 一个主库运行在最大可以模式带一个备库1,备库再使用最大性能模式带备库2(备库2从备库1同步数据
1、物理DG搭建

  1.1 环境描述:
     1.1.1  操作系统:RHEL 6.4 64位
     1.1.2  ORACLE 11g 版本: 11.2.0.4
     1.1.3  该DG环境中是一个主库带两个备库,其中一个备库的数据文件和联机日志文件与主库路径相同,另一个备库数据文件和联机日志文件与主库路径不同。
     1.1.4  在主库上安装ORACLE 数据库软件并创建数据库,在备库上只安装ORACLE 数据库软件不创建数据库。
     1.1.5 主库: chicago  IP:172.16.30.10
     1.1.6 备库一: boston 该备库数据文件和联机日志文件与主库路径一致   IP:172.16.30.11
     1.1.7 备库二: lixia   该备库数据文件和联机日志文件与主库不同    IP:172.16.30.11

   1.2 主库配置
      1.2.1 参数配置
chicago.__db_cache_size=469762048
chicago.__java_pool_size=16777216
chicago.__large_pool_size=33554432
chicago.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
chicago.__pga_aggregate_target=872415232
chicago.__sga_target=738197504
chicago.__shared_io_pool_size=0
chicago.__shared_pool_size=201326592
chicago.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/chicago/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/chicago/control01.ctl','/u01/app/oracle/fast_recovery_area/chicago/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.db_name='chicago'
*.db_unique_name='chicago'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=chicagoXDB)'
*.fal_client='CHICAGO'
*.fal_server='LIXIA'
*.log_archive_config='dg_config=(chicago,boston,lixia)'
*.log_archive_dest_1='location=/u01/app/oracle/arch1/lixia/ valid_for=(all_logfiles,all_roles) db_unique_name=lixia'
*.log_archive_dest_2='service=chicago lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=chicago'
*.log_archive_dest_3='service=lixia  lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=lixia'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_dest_state_3='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/u01/app/oracle/arch1/boston/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/boston/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/arch1/lixia/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/lixia/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.memory_target=1605369856
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'

      主库参数文件红色部分表示使用ALTER SYSTEM SET  命令配置的参数。蓝色表示是使用参数文件的默认值,在搭建DG时这个参数需要为该值。
       配置参数的命令:
       SQL>alter  system set  db_file_name_convert='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'  scope=both;
      SQL>alter   system set  db_name='chicago'   scope=both;
      SQL>alter   system  set  db_unique_name='chicago'  scope=both;
      SQL>alter   system  set  fal_client='CHICAGO'  scope=both;
      SQL>alter   system  set  fal_server='LIXIA'  scope=both;
       SQL>alter   system  set  log_archive_config='dg_config=(chicago,boston,lixia)'  scope=both;
       SQL>alter    system  set  log_archive_dest_1='location=/u01/app/oracle/arch1/lixia/ valid_for=(all_logfiles,all_roles) db_unique_name=lixia'   scope=both;
       SQL>alter   system   set   log_archive_dest_2='service=chicago lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=chicago'  scope=both;
       SQL>  alter   system  set  log_archive_dest_3='service=lixia  lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=lixia'  both;
       SQL>  alter   system  set log_archive_dest_state_1='ENABLE'  scope=both;
       SQL>  alter   system   set  log_archive_dest_state_2='ENABLE'  scope=both;
       SQL>  alter    system  set   log_archive_dest_state_3='ENABLE'  scope=both;
        SQL>  alter    system  set  log_archive_format='%t_%s_%r.arc'  scope=both;
       SQL>   alter    system  set  log_archive_max_processes=30   scope=both;
  SQL>alter     system set            log_file_name_convert='/u01/app/oracle/arch1/boston/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/boston/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/arch1/lixia/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/lixia/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'  scope=both;

     1.2.2  允许强制记日志
     SQL>  alter  database  force  logging;

      1.2.3 如果没有口令文件就创建口令文件(ORACLE 11G 默认是有口令文件的不需要创建)
      orapwd   file=$ORACLE_HOME/dbs/lixiapwd.ora  password=123456  entries=10   

       1.2.4 配置备重做日志

        第1步 确保主和备数据库上的日志文件尺寸是相同的。当前备重做日志文件的尺寸必须与当前主数据库联机重做日志文件的尺寸完全符合。例如,如果主数据库使用两个联机重做日志组,其日志文件是200K,则备重做日志组也应
该是200K大小的日志文件。

        第2步 确定备重做日志文件组的适当数目。
        最少地,配置应该比主数据库上的联机重做日志文件组的数目多一个备重做日志文件组。然而,推荐的备重做日志文件组数目依赖于主数据库上的线程数。使用下面的等式来确定备重做日志文件组的适当数目。(每个线程的日志文件的最大数目+1)×线程最大数目使用这个等式减少了主实例的日志写(LGWR)进程因为在备数据库上无法分配备重做日志文件而被锁住的可能性。例如,如果主数据库每个线程有2个日志文件,并有2个线程,则在备数据库上需要有6个备重做日志文件组。

       第3步 检验相关数据库参数和设置。
       检验在SQL CREATE DATABASE语句上的MAXLOGFILES和MAXLOGMEMBERS子句使用的值,不会限制你能添加的重做日志文件组和成员。唯一覆盖由MAXLOGFILES和MAXLOGMEMBERS子句指定的限制的方法就是重建主数据库或控制文件。

       第4步 创建备重做日志文件组。
       SQL>alter  database  add  standby  logfile   group 4  '/u01/app/oracle/oradata/chicage/redo04.log';
       SQL>alter  database  add  standby  logfile   group 5  '/u01/app/oracle/oradata/chicage/redo05.log';
       SQL>alter  database  add  standby  logfile   group 6  '/u01/app/oracle/oradata/chicage/redo06.log';

      第5步 检验备重做日志文件组已创建
      要检验备重做日志文件组已创建并正确地运行,在主数据库上调用一个日志切换,然后查询备数据库上的V$STANDBY_LOG视图或V$LOGFILE视图。例如:
      SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM  V$STANDBY_LOG; 

     1.2.5  配置归档
      SQL>  shutdown    immedate;
      SQL>  startup   mount;
      SQL>  alter   database    archivelog;
      SQL>  alter   database   open;

     1.2.6  配置ORACLE 监听器
       1.2.6.1   主库listener.ora文件配置
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER=
   (SID_LIST=
     ( SID_DESC=
         (GLOBAL_DBNAME=CHICAGO)
         (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
         (SID_NAME=chicago)
     )
   )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      #(SID_NAME = chicago)
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.10)(PORT = 1521))
      #(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

      1.2.6.2 主库tnsnames.ora文件配置
CHICAGO =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      #(SID_NAME = chicago)
      (SID = chicago)
    )
  )


BOSTON =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = boston)
      #(SID_NAME = boston)
    )
  )

LIXIA =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = lixia)
      #(SID_NAME = boston)
    )
  )

      1.2.6.3 重新启动ORACLE监听器
       [oracle@localhost admin]$ lsnrctl stop
       [oracle@localhost admin]$ lsnrctl start
 
     1.3  创建物理备库(lixia)
      1.3.1 在备库上创建必须的目录
      1.3.2 在主库上创建pfile文件并复制到备库
      1.3.3 修改备库pfile文件
      1.3.4  把主库的数据文件、联机重做日志、归档日志和密码文件复制到备库
      1.3.5 在主库上创建备库控制文件并复制到备库
      1.3.6  配置ORACLE 监听器
      1.3.7  启动物理备库

      1.3.1 在备库上创建必须的目录
      使用ORACLE用户创建 $ORACLE_BASE/admin/$ORACLE_SID/adump 目录

     1.3.2 在主库上创建pfile文件并复制到备库
      SQL>create   pfile='/tmp/lixia.ora'  from   spfile;
      [oracle@localhost tmp]$ scp     /tmp/lixia.ora  oracle@172.16.30.11:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initlixia.ora
      
       

        1.3.3 修改备库pfile文件
         [oracle@localhost dbs]$ vi  $ORACLE_HOME/dbs/initlixia.ora
         修改后内容如下(红色部分表示修改后的值):
chicago.__db_cache_size=469762048
chicago.__java_pool_size=16777216
chicago.__large_pool_size=33554432
chicago.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
chicago.__pga_aggregate_target=872415232
chicago.__sga_target=738197504
chicago.__shared_io_pool_size=0
chicago.__shared_pool_size=201326592
chicago.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/lixia/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/lixia/control01.ctl','/u01/app/oracle/fast_recovery_area/lixia/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.db_name='chicago'
*.db_unique_name='lixia'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=chicagoXDB)'
*.fal_client='LIXIA'
*.fal_server='CHICAGO'
*.log_archive_config='dg_config=(chicago,boston,lixia)'
*.log_archive_dest_1='location=/u01/app/oracle/arch1/lixia/ valid_for=(all_logfiles,all_roles) db_unique_name=lixia'
*.log_archive_dest_2='service=chicago lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=chicago'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/u01/app/oracle/arch1/boston/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/boston/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/arch1/lixia/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/lixia/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.memory_target=1605369856
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'  
     
        1.3.4  把主库的数据文件、联机重做日志、归档日志和密码文件复制到备库指定的目录(这个过程主库不需要关闭)
        [oracle@localhost tmp]$  scp  $ORACLE_BASE/oradata/chicago/*  oracle@172.16.30.11:/u01/app/oracle/oradata/lixia/
        [oracle@localhost tmp]$ scp  /u01/app/oracle/arch1/chicago/*   oracle@172.16.30.11:/u01/app/oracle/arch1/lixia/
       把创密码文件复制到备库
       [oracle@localhost tmp]$ scp $ORACLE_HOME/dbs/orapwchicago oracle@172.16.30.11:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwlixia

     1.3.5 在主库上创建备库控制文件并复制到备库
        SQL>alter   database  create   standby  controlfile  as '/tmp/lixia.ctl';
         [oracle@localhost tmp]$ scp  /tmp/lixia.ctl  oracle@172.16.30.11:/u01/app/oracle/oradata/lixia/control01.ctl
          [oracle@localhost tmp]$ scp  /tmp/lixia.ctl  oracle@172.16.30.11:/u01/app/oracle/fast_recovery_area/lixia/control02.ctl

       1.3.5  配置ORACLE 监听器
       1.3.5.1 备库 listener.ora  文件配置
SID_LIST_LISTENER=
   (SID_LIST=
     ( SID_DESC=
         (GLOBAL_DBNAME=BOSTON)
         (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
         (SID_NAME=boston)
     )
     ( SID_DESC=
         (GLOBAL_DBNAME=BOSTON)
         (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
         (SID_NAME=lixia)
     )

   )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )




ADR_BASE_LISTENER = /u01/app/oracle

         1.3.5.2  备份库  tnsnames.ora  文件配置
CHICAGO =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      #(SERVICE_NAME = chicago)
      (SID = chicago)
    )
  )


BOSTON =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = boston)
    )
  )

LIXIA=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = lixia)
    )
  )

      1.3.5.3  重启ORACLE 监听器
      [oracle@localhost admin]$ lsnrctl stop
      [oracle@localhost admin]$ lsnrctl start
        
     1.3.6  启动物理备库
     1.3.6.1  启动物理备数据库到MOUNT模式下
      SQL> STARTUP MOUNT;
     1.3.6.2 启动重做应用
      SQL> alter database  recover managed  standby  database  disconnect   from   session;
     1.3.6.3 检验物理备数据库正确执行
     1.3.6.3.1  在备库上确认现有的归档重做日志
     SQL> select  sequence#,first_time,next_time  from v$archived_log   
                order  by  sequence#;
     1.3.6.3.2  在主库上切换日志,归档当前联机重做日志
     SQL>alter   system  switch   logfile;
     1.3.6.3.3 在备库上检查新的重做数据已归档
     SQL> select  sequence#,first_time,next_time  from v$archived_log   
                order  by  sequence#;
     1.3.6.3.4 检查新归档的重做日志已经应用
     SQL>select    sequence#,applied  from  v$archived_log  
              order  by  sequence#;
     1.3.6.3.5 主库执行:
    select process from v$managed_standby;
查看进程,看有没有LNS进程

1.4 查询数据库角色
方法一:查询到 PROCESS字段有RFS、MRP0 进程则数据库为备库
SQL> select process,client_process,sequence#,status from v$managed_standby;
      PROCESS   CLIENT_P  SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
MRP0      N/A              40 WAIT_FOR_LOG
RFS       ARCH              0 IDLE
RFS       UNKNOWN           0 IDLE

PROCESS   CLIENT_P  SEQUENCE# STATUS
--------- -------- ---------- ------------
RFS       UNKNOWN           0 IDLE
RFS       UNKNOWN           0 IDLE
RFS       UNKNOWN           0 IDLE
RFS       UNKNOWN           0 IDLE
RFS       UNKNOWN           0 IDLE
RFS       UNKNOWN           0 IDLE
RFS       UNKNOWN           0 IDLE
RFS       LGWR             40 IDLE
RFS       UNKNOWN           0 IDLE

查询到 PROCESS字段有LNS 进程则数据库为主库
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS   CLIENT_P  SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
ARCH      ARCH             39 CLOSING
ARCH      ARCH             39 OPENING
ARCH      ARCH             38 OPENING
ARCH      ARCH             38 CLOSING
ARCH      ARCH              0 CONNECTED
ARCH      ARCH              0 CONNECTED
LNS       LNS              40 WRITING

   方法二:查询v$DATABASE视图
   物理备库查询出的信息
    SQL> select DATABASE_ROLE from v$database;

    DATABASE_ROLE
    ----------------
    PHYSICAL STANDBY
    主库查询的信息
    SQL> select database_role from v$database;

    DATABASE_ROLE
    ----------------
    PRIMARY




2、搭建主库(chicago)带一个备库(lixia),备考库(lixia)再带一个备库(boston)
     在上面搭建好的一主一备的基础配置,备库(lixia)带备库(boston),下面只给出备库带备库需要修改的参数,其他配置项参考 上面的配置
     注意:数据库的数据文件、联机日志文件、归档日志文件都要从主库(chicago)复制到备库(boston),参数文件从主库(chicago)创建复制到备库(boston)再做相应的修改,备库(boston)的备库控制文件也在主库上创建再复制到备库(boston),从主库(chicago)复制密码文件到备库(boston)。
    2.1 配置备库(lixia)。
    log_archive_config='dg_config=(chicago,boston,lixia)'
    log_archive_dest_3='service=boston arch sync affirm valid_for=(standby_logfiles,standby_role) db_unique_name=boston'
    2.2 配置备库(boston)。
    fal_client='boston'
    fal_server='lixia'
请使用浏览器的分享功能分享到微信等