ADG架构搭建4 -- 搭建一主两备ADG架构

在这里插入图片描述
本文接该系列文章的上一篇:ADG架构搭建3 – 一主一备ADG主备切换


前言

请先参照文章《ADG架构搭建1–Oracle安装》完成第三台服务器的Oracle安装。

本文将完成的ADG架构为:一个主库(ruiadg1)和两个备库(ruiadg2、ruiadg3).

正文

一、修改主备库的tnsnames.ora和listener文件

1.修改主备库tnsnames.ora文件

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

已知服务器 ruiadg1 和 ruiadg2 的ip地址分别为192.168.10.13 和 192.168.10.14 ,假设服务器ruiadg3的ip地址为192.168.10.15。

添加ORCL_STANDBY的相关配置:

ruiadg1 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.13)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = ruiadg)
        )
    )

ruiadg2 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.14)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = ruiadg)
        )
)

ruiadg3 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = ruiadg)
        )
    )

2.修改备库2(ruiadg3)listener.ora文件

《ADG架构搭建2 – 搭建一主一备ADG架构》中已修改主库(ruiadg1)和备库1(ruiadg2)的listener.ora文件,此处只需修改备库2(ruiadg3)的listener.ora文件。

$ vi $ORACLE_HOME/network/admin/listener.ora

添加静态监听:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ruiadg)
      (ORACLE_HOME = /oracle/app/product/12.1.0/dbhome_1)
      (SID_NAME = ruiadg)
    )
)

listener.ora修改完成后,需重启监听:

$ lsnrctl stop
$ lsnrctl start

二、修改备库2(ruiadg3)归档模式

1.查看归档模式

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     7
Current log sequence           9

2.修改归档模式

若当前为非归档模式,需要修改为归档模式。方法如下:

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 4999610368 bytes
Fixed Size                  3721080 bytes
Variable Size            1090521224 bytes
Database Buffers         3892314112 bytes
Redo Buffers               13053952 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list
Database log mode           Archive Mode
Automatic archival           Enabled
Archive destination           USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     8
Next log sequence to archive   10
Current log sequence           10

三、设置主库(ruiadg1)为强制归档

SQL> alter database force logging;

因主库出现故障后,可能会遇到将备库2切换为主库的情况,所以这里把备库2设置为强制归档。

四、配置参数

说明:
ADG架构的日志传输方式有3种:ARCH方式,LGWR SYNC方式,LGWR ASYNC(默认)方式。
若要了解更多请移步《Oracle Data Guard详解》。


这里我们配置ARCH方式。

1.简易版

修改主库(ruiadg1)参数

SQL> alter system set log_archive_dest_1='location=/oradata/arch';

SQL> alter system set log_archive_dest_2='service=ruiadg2 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg’;

SQL> alter system set log_archive_dest_3='service=ruiadg3 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg';

[1] /oradata/arch 目录的创建:

# cd /
# mkdir -p /oradata/arch
# chown oracle:oinstall /oradata/arch

修改备库1(ruiadg2)参数

SQL> alter system set fal_client=ruiadg2;

SQL> alter system set fal_server='ruiadg1','ruiadg3';

SQL>alter system set standby_archive_dest='/oradata/archlog';

修改备库2(ruiadg3)参数

SQL> alter system set fal_client=ruiadg3;

SQL>alter system set fal_server='ruiadg1','ruiadg2';

SQL>alter system set standby_archive_dest='/oradata/archlog';

2.完整版

配置完成上述的主备库参数,已经可以实现ADG的配置了。
但是为了便于ADG架构主备库的切换,最好将主备库参数配置如下:

修改主库(ruiadg1)参数

SQL> alter system set fal_client=ruiadg1;

SQL>alter system set fal_server='ruiadg2','ruiadg3';

SQL>alter system set standby_archive_dest='/oradata/archlog';

SQL>alter system set standby_archive_dest='/oradata/archlog';

SQL> alter system set log_archive_dest_1='location=/oradata/arch';

SQL> alter system set log_archive_dest_2='service=ruiadg2 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg’;

SQL> alter system set log_archive_dest_3='service=ruiadg3 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg';

修改备库1(ruiadg2)参数

SQL> alter system set fal_client=ruiadg2;

SQL> alter system set fal_server='ruiadg1','ruiadg3';

SQL>alter system set standby_archive_dest='/oradata/archlog';

SQL> alter system set log_archive_dest_1='location=/oradata/arch';

SQL> alter system set log_archive_dest_2='service=ruiadg1 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg’;

SQL> alter system set log_archive_dest_3='service=ruiadg3 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg';

修改备库2(ruiadg3)参数

SQL> alter system set fal_client=ruiadg3;

SQL> alter system set fal_server='ruiadg1','ruiadg2';

SQL>alter system set standby_archive_dest='/oradata/archlog';

SQL> alter system set log_archive_dest_1='location=/oradata/arch';

SQL> alter system set log_archive_dest_2='service=ruiadg1 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg’;

SQL> alter system set log_archive_dest_3='service=ruiadg2 ARCH SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg';

补充:
若要设置为其他两种日志传输方式,只需修改log_archive_dest_2参数的值。

LGWR SYNC:
主库(ruiadg1)
SQL> alter system set log_archive_dest_2='service=ruiadg2 LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg ';
备库(ruiadg2)
SQL> alter system set log_archive_dest_2=‘service=ruiadg1 LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg’;

LGWR ASYNC:
主库(ruiadg1)
SQL> alter system set log_archive_dest_2=‘service=ruiadg2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg ';
备库(ruiadg2)
SQL> alter system set log_archive_dest_2=‘service=ruiadg1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg’;

由于LGWR ASYNC 是默认方式,故可简写如下:
主库(ruiadg1)
SQL> alter system set log_archive_dest_2=‘service=ruiadg2 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg ';
备库(ruiadg2)
SQL> alter system set log_archive_dest_2=‘service=ruiadg1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg’;

五、数据同步

在备库(ruiadg2,ruiadg3)执行

--将备库启动至nomount状态
SQL> shutdown immediate

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup nomount

ORACLE instance started.

Total System Global Area 4999610368 bytes
Fixed Size                  3721080 bytes
Variable Size            1090521224 bytes
Database Buffers         3892314112 bytes
Redo Buffers               13053952 bytes

--从主库同步数据至备库
$ rman target sys/rui@ruiadg1 auxiliary sys/rui@ruiadg2 --前面是主库,后面是辅库

Recovery Manager: Release 12.1.0.2.0 - Production on Thu Aug 26 14:23:52 2021

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

connected to target database: RUIADG (DBID=3080921516)
connected to auxiliary database: RUIADG (not mounted)

RMAN> DUPLICATE TARGET DATABASE for standby FROM ACTIVE DATABASE nofilenamecheck;

Recovery Manager: Release 12.1.0.2.0 - Production on Thu Aug 26 14:23:52 2021

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

connected to target database: RUIADG (DBID=3080921516)
connected to auxiliary database: RUIADG (not mounted)

RMAN> DUPLICATE TARGET DATABASE for standby FROM ACTIVE DATABASE nofilenamecheck;

Starting Duplicate Db at 26-AUG-21
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=249 device type=DISK

contents of Memory Script:
{
    
    
   backup as copy reuse
   targetfile  '/oracle/app/product/12.1.0/dbhome_1/dbs/orapwruiadg' auxiliary format
 '/oracle/app/product/12.1.0/dbhome_1/dbs/orapwruiadg'   ;
}
executing Memory Script

Starting backup at 26-AUG-21
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=26 device type=DISK
Finished backup at 26-AUG-21

contents of Memory Script:
{
    
    
   restore clone from service  'ruiadg1' standby controlfile;
}
executing Memory Script

Starting restore at 26-AUG-21
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ruiadg1
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oracle/app/oradata/ruiadg/control01.ctl
output file name=/oracle/app/fast_recovery_area/ruiadg/control02.ctl
Finished restore at 26-AUG-21

contents of Memory Script:
{
    
    
   sql clone 'alter database mount standby database';
}
executing Memory Script

sql statement: alter database mount standby database

contents of Memory Script:
{
    
    
   set newname for tempfile  1 to
 "/oracle/app/oradata/ruiadg/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/oracle/app/oradata/ruiadg/system01.dbf";
   set newname for datafile  3 to
 "/oracle/app/oradata/ruiadg/sysaux01.dbf";
   set newname for datafile  4 to
 "/oracle/app/oradata/ruiadg/undotbs01.dbf";
   set newname for datafile  6 to
 "/oracle/app/oradata/ruiadg/users01.dbf";
   restore
   from service  'ruiadg1'   clone database
   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /oracle/app/oradata/ruiadg/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 26-AUG-21
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ruiadg1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /oracle/app/oradata/ruiadg/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ruiadg1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /oracle/app/oradata/ruiadg/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ruiadg1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /oracle/app/oradata/ruiadg/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ruiadg1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00006 to /oracle/app/oradata/ruiadg/users01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 26-AUG-21

sql statement: alter system archive log current

contents of Memory Script:
{
    
    
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1081607081 file name=/oracle/app/oradata/ruiadg/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=1081607081 file name=/oracle/app/oradata/ruiadg/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=1081607081 file name=/oracle/app/oradata/ruiadg/undotbs01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=4 STAMP=1081607081 file name=/oracle/app/oradata/ruiadg/users01.dbf
Finished Duplicate Db at 26-AUG-21

RMAN>

--启动备库
SQL> alter database open;

Database altered.


SQL> alter database recover managed standby database disconnect from session;

Database altered.

命令摘要:
– 启动备库至nomount状态
SQL> shutdown immediate
SQL> startup nomount

– 同步数据
$ rman target sys/rui@ruiadg1 auxiliary sys/rui@ruiadg2
RMAN> DUPLICATE TARGET DATABASE for standby FROM ACTIVE DATABASE nofilenamecheck;

– 启动备库并应用日志
SQL> alter database open;
SQL> alter database recover managed standby database disconnect from session;

六、测试ADG有效性

1.在主库(ruiadg1)建表并插入数据

SQL> create table test1 (name varchar(20),age int);
SQL> insert into test1 values ('rui',22);
SQL> commit;

2.在主库手动切log

SQL> alter system switch logfile;

3.在备库(ruiadg2,ruiadg3)查看数据同步状况

select * from test1;

到这里,我们已经完成了一主一备ADG架构的搭建,是不是很开心?

在这里插入图片描述


上一篇:ADG架构搭建3 – 一主一备ADG主备切换

Guess you like

Origin blog.csdn.net/Ruishine/article/details/121407300