DG搭建文档

来源:这里教程网 时间:2026-03-03 11:45:20 作者:

    DG搭建
    192.168.6.113    orcl
    192.168.6.113    orcls

    本文搭建过程中参考https://blog.csdn.net/shiyu1157758655/article/details/55253132
    一、主库
    1归档模式
    SQL> archive log list
    Database log mode     Archive Mode
    Automatic archival     Enabled
    Archive destination     USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence 1
    Next log sequence to archive 2
    Current log sequence     2
    2强制日志
    SQL> alter database force logging;
    Database altered.
    SQL> select force_logging from v$database;
    FOR
    ---
    YES

    3添加standby日志
    standby logfile的数量和大小均要与redo logfile相同
    SQL> select thread#,group#,members,bytes/1024/1024 from v$log;

       THREAD# GROUP#     MEMBERS BYTES/1024/1024
    ---------- ---------- ---------- ---------------
         1     1     1     50
         1     2     1     50
         1     3     1     50
    SQL> col MEMBER for a25
    SQL> select * from v$logfile;
        GROUP# STATUS TYPE MEMBER         IS_
    ---------- ------- ------- ------------------------- ---
         3     ONLINE /oradata/orcl/redo03.log NO
         2     ONLINE /oradata/orcl/redo02.log NO
         1     ONLINE /oradata/orcl/redo01.log NO
    从图中可以看到我们主库有三组大小为50M的redo logfile,故我们也需要创建同样数量和大小的standby logfile:
    SQL> alter database add standby logfile group 11 ('/oradata/orcl/stb01.log')size 50m;
    Database altered.
    SQL> alter database add standby logfile group 12('/oradata/orcl/stb02.log')size 50m;
    Database altered.
    SQL> alter database add standby logfile group 13('/oradata/orcl/stb03.log')size 50m;
    Database altered.
    SQL> select group#,THREAD#,SEQUENCE#,ARCHIVED,STATUS from v$standby_log;

        GROUP# THREAD# SEQUENCE# ARC STATUS
    ---------- ---------- ---------- --- ----------
        11     0     0 YES UNASSIGNED
        12     0     0 YES UNASSIGNED
        13     0     0 YES UNASSIGNED
    4设置数据库口令文件的使用模式
    查看remote_login_passwordfile的值是否EXCLUSIVE
    SQL> show parameter remote_login_passwordfile
    NAME                 TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    remote_login_passwordfile     string     EXCLUSIVE
    如果不是,执行以下命令进行设置,并且重启数据库,使其生效:
    SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
    SQL>shutdown immediate;
    SQL>startup;

    5参数(文件)设置

    SQL> show parameter db_unique_name;
    DG的搭建需要修改许多数据库的参数,并且部分参数主备库之间有点区别,需要在配置过程细心一点。
    NAME                 TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    db_unique_name             string     orcl
    SQL> alter system set log_archive_config='dg_config=(orcl,orcls)' scope=spfile;
    System altered.
    --其中dg_config填写的是主备库的db_unique_name。
    修改归档文件位置
    SQL> show parameter db_recovery_file_dest
    NAME                 TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    db_recovery_file_dest         string     /u01/app/oracle/fast_recovery_
                             area
    db_recovery_file_dest_size     big integer 4182M
    设置本地归档位置,参数涉及切换
    alter system set log_archive_dest_1='LOCATION=/oradata/arch/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orcl' scope=spfile;
    alter system set log_archive_dest_2='SERVICE=orcls ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcls' scope=spfile;
    启用设置的日志路径
    SQL>alter system set log_archive_dest_state_1=enable scope=spfile;
    SQL>alter system set log_archive_dest_state_2=enable scope=spfile;
    设置归档日志进程的最大数量(视实际情况调整):
    SQL>alter system set log_archive_max_processes=30 scope=both;

    设置standby库从哪个数据库获取归档日志(只对standby库有效,在主库上设置是为了在故障切换后,主库可以成为备库使用):
    SQL>alter system set fal_server=orcls scope=both;

    设置文件管理模式,此项设置为自动,不然在主库创建数据文件后,备库不会自动创建:
    SQL>alter system set standby_file_management=auto scope=spfile;

    启用OMF功能:
    SQL> alter system set db_create_file_dest='/oradata/orcl' scope=spfile;

    --如果主备库文件的存放路径不同,还需要设置以下两个参数(需要重启数据库生效):
    SQL> alter system set db_file_name_convert='/data/oradata/orcls/datafile','/data/oradata/orcl/datafile','/data/oradata/orcls/tempfile','/data/oradata/orcl/tempfile' scope=spfile;
    SQL> alter system set log_file_name_convert='/data/oradata/orcls/redo','/data/oradata/orcl/redo' scope=spfile;
    这步路径的先后顺序在主备库上的设置是不一样的,大家要注意!

    二、备库参数设置
    完成了以上步骤后,通过以下命令生成一个pfile文件给备库使用:
    SQL> create pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora' from spfile;
    File created.
    打开生成的文件,修改部分参数,具体如下:
    --修改后

    *.audit_file_dest='/u01/app/oracle/admin/orcls/adump'
    *.audit_trail='db'
    *.compatible='11.2.0.4.0'
    *.control_files='/oradata/orcls/control01.ctl','/u01/app/oracle/fast_recovery_area/orcls/control02.ctl'
    *.db_block_size=8192
    *.db_create_file_dest='/oradata/orcls'
    *.db_domain=''
    *.db_name='orcl'
    *.db_unique_name='ocrls'
    *.db_recovery_file_dest_size=4385144832
    *.db_recovery_file_dest=''
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclsXDB)'
    *.log_archive_config='dg_config=(orcl,orcls)'
    *.log_archive_dest=''
    *.log_archive_dest_1='LOCATION=/oradata/arch/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orcls'
    *.log_archive_dest_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
    *.log_archive_dest_state_1='ENABLE'
    *.log_archive_dest_state_2='ENABLE'
    *.log_archive_format='%t_%s_%r.arch'
    *.memory_target=780140544
    *.open_cursors=300
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.standby_file_management='AUTO'
    *.undo_tablespace='UNDOTBS1'

    c)密码文件配置
    密码文件是创建DG不可缺少的一部分,主库的密码文件一般在$ORACLE_HOME/dbs,命名格式是:orapw+db_unique_name
    如果不存在此文件,我们可以通过以下命令生成一个:
    #su - oracle
    $cd $ORACLE_HOME/dbs
    $orapwdfile=orapwocrl password=oracle

    我们将密码文件和刚才修改好的pfile一起拷贝到备库的$ORACLE_HOME/dbs目录下,并重命名密码文件的名字:
    备库上修改密码文件名和参数文件

    5.listener.ora与tnsnames.ora配置
    这两个文件均在$ORACLE_HOME/network/admin目录下,如果没有,可以自行创建一下

    a)备库配置

    listener.ora内容如下:

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

    SID_LIST_LISTENER=
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = orcls)
          (ORACLE_HOME =/u01/app/oracle/product/11.2.0/db_1)
          (SID_NAME = orcls)
        )
       )

    tnsnames.ora内容如下:

    orcl =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL= TCP)(HOST = node1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME =orcl)
        )
      )

    orcls =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL= TCP)(HOST = node2)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME =orcls)
        )
      )

    重启一下监听:

    $lsnrctl stop
    $lsnrctl start

    b)主库配置
    listener.ora内容如下:

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

    SID_LIST_LISTENER=
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = ocrls)
          (ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
          (SID_NAME = ocrls)
        )
       )


    tnsnames.ora内容如下:
    orcl =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL= TCP)(HOST = node1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME =orcl)
        )
      )

    orcls =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL= TCP)(HOST = node2)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME =orcls)
        )
      )

    执行以下命令重启监听,使配置生效:
    $lsnrctl stop
    $lsnrctl start
    做完以上配置后,在主备库上执行以下命令,确保两个主机之间网络相通:
    $tnsping orcls
    $tnsping orcls


    6.目录创建
    参数和网络配置好后,我们需要为备库dump文件创建相应的目录(对照主库$ORACLE_BASE/admin):
    [oracle@node2 ~]$ echo $ORACLE_BASE
    /u01/app/oracle
    [oracle@node2 ~]$ mkdir -p $ORACLE_BASE/admin/orcls/adump
    [oracle@node2 ~]$ mkdir -p $ORACLE_BASE/admin/orcls/dpdump


    为数据库文件创建目录(就是之前db_file_name_convert和log_file_name_convert的目录)--/oradata
    ocrls:/data/oradata/orls@standby>mkdir -p/data/oradata/ocrls/redo/
    ocrls:/data/oradata/ocrls@standby>mkdir -p/data/oradata/ocrls/datafile/
    ocrls:/data/oradata/ocrls@standby>mkdir -p /data/oradata/ocrls/control/

    7.RMAN复制创建standby库
    准备工作都完成了,那我们可以开始standby库的创建了。
    注:以下操作在备库完成

    a)文件复制
    先,我们使用之前修改的pfile把备库启动到nomount状态,生成spfile:
    $echo $ORACLE_SID (确认SID是否我们设置的)
    SQL> startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcls.ora';
    ORACLE instance started.
    Total System Global Area 776646656 bytes
    Fixed Size         2257272 bytes
    Variable Size         507514504 bytes
    Database Buffers     264241152 bytes
    Redo Buffers         2633728 bytes
    SQL> create spfile from pfile;
    File created.

    SQL> shutdown immediate;
    ORA-01507: database not mounted
    ORACLE instance shut down.
    SQL>exit
    从spfile启动
    SQL>STARTUP NOMOUNT
    SQL> show parameter db_unique_name;
    NAME                 TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    db_unique_name             string     orcls

    SQL> show parameter name;
    NAME                 TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    cell_offloadgroup_name         string
    db_file_name_convert         string
    db_name              string     orcl
    db_unique_name             string     orcls
    global_names             boolean     FALSE
    instance_name             string     orcls
    lock_name_space          string
    log_file_name_convert         string
    processor_group_name         string
    service_names             string     orcls
    SQL>

    复制数据文件,在备库上操作
    [oracle@node2 dbs]$ rman target sys/oracle@orcl auxiliary sys/oracle@orcls
    Recovery Manager: Release 11.2.0.4.0 - Production on Fri Jun 15 00:33:22 2018
    Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
    connected to target database: ORCL (DBID=1506854844)
    connected to auxiliary database: ORCL (not mounted)
    RMAN>

    确认我们已经连接上主库和备库后,执行以下命令:
    如果在RMAN恢复时不指定 nofilenamecheck 参数
    则在数据文件相同文件名恢复时会出现RMAN-05501错误
    RMAN> duplicate target database for standby from active database nofilenamecheck;
    命令执行完后,可以看到主库在开始复制文件到备库中

    复制完成后,打开数据库开启实时同步:

    SQL>ALTER DATABASE ARCHIVELOG;
    SQL>ALTER DATABASE OPEN;
    SQL>ARCHIVE LOG LIST
    SQL> alter database recover managed standby database using current logfile disconnect from session;

    查看数据库状态
    登陆到主库
    $sqlplus / as sysdba
    SQL> select database_role from v$database;
    DATABASE_ROLE
    ----------------
    PRIMARY


    登录到备库:
    $sqlplus / as sysdba
    SQL> select database_role from v$database;
    DATABASE_ROLE
    ----------------
    PHYSICAL STANDBY


    检查归档日志是否能正常传输(日志的序号必须是一样的):
    主库
    SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

     SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
    ---------- --------- --------- --------- ---
         2 17-JUN-18 18-JUN-18 NO     YES
         3 18-JUN-18 18-JUN-18 NO     YES
         4 18-JUN-18 18-JUN-18 NO     YES
         5 18-JUN-18 18-JUN-18 NO     YES
         6 18-JUN-18 19-JUN-18 NO     YES
         7 19-JUN-18 19-JUN-18 NO     YES
         8 19-JUN-18 19-JUN-18 NO     YES
         9 19-JUN-18 19-JUN-18 NO     YES
        10 19-JUN-18 19-JUN-18 NO     YES
        11 19-JUN-18 19-JUN-18 NO     YES
        11 19-JUN-18 19-JUN-18 YES     YES

     SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
    ---------- --------- --------- --------- ---
        12 19-JUN-18 19-JUN-18 NO     YES
        12 19-JUN-18 19-JUN-18 NO     YES

    13 rows selected.

    备库
    SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

     SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
    ---------- --------- --------- --------- ---
        11 19-JUN-18 19-JUN-18 YES     YES
        12 19-JUN-18 19-JUN-18 IN-MEMORY YES

    b)切换日志测试
    主库
    SQL> alter system switch logfile;

    System altered.

    SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

     SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
    ---------- --------- --------- --------- ---
         2 17-JUN-18 18-JUN-18 NO     YES
         3 18-JUN-18 18-JUN-18 NO     YES
         4 18-JUN-18 18-JUN-18 NO     YES
         5 18-JUN-18 18-JUN-18 NO     YES
         6 18-JUN-18 19-JUN-18 NO     YES
         7 19-JUN-18 19-JUN-18 NO     YES
         8 19-JUN-18 19-JUN-18 NO     YES
         9 19-JUN-18 19-JUN-18 NO     YES
        10 19-JUN-18 19-JUN-18 NO     YES
        11 19-JUN-18 19-JUN-18 NO     YES
        11 19-JUN-18 19-JUN-18 YES     YES

     SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
    ---------- --------- --------- --------- ---
        12 19-JUN-18 19-JUN-18 NO     YES
        12 19-JUN-18 19-JUN-18 NO     YES
        13 19-JUN-18 19-JUN-18 NO     YES
        13 19-JUN-18 19-JUN-18 NO     YES

    15 rows selected.

    备库
    SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

     SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
    ---------- --------- --------- --------- ---
        11 19-JUN-18 19-JUN-18 YES     YES
        12 19-JUN-18 19-JUN-18 IN-MEMORY YES

    SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

     SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
    ---------- --------- --------- --------- ---
        11 19-JUN-18 19-JUN-18 YES     YES
        12 19-JUN-18 19-JUN-18 YES     YES
        13 19-JUN-18 19-JUN-18 IN-MEMORY YES

    SQL> select max(sequence#)from v$archived_log;

    SQL> select max(sequence#)from v$archived_log;

    MAX(SEQUENCE#)
    --------------
         13


相关推荐