暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

Active Data Guard + Far Sync- 02.ADG + Far Sync 双向同步

原创 ByteHouse 2025-12-02
242

Active Data Guard + Far Sync:

  1. https://www.modb.pro/db/1988949045378359296

Active Data Guard Far Sync是Oracle 12c的新功能(也称为Far Sync Standby),Far Sync功能的实现是通过在距离主库(Primary Database)相对较近的地点配置Far Sync实例,主库(Primary Database) 同步(synchronous)传输redo到Far Sync实例,然后Far Sync实例再将redo异步(asynchronous)传输到终端备库(Standby Database)。这样既可以保证零数据丢失又可以降低主库压力。Far Sync实例只有密码文件,init参数文件和控制文件,而没有数据文件。

如果 redo 传输采用 Maximum Availability 模式,我们可以在距离生产中心(Primary Database)相对较近的地点配置 Far Sync实例,主库(Primary Database)同步(synchronous)传输 redo 到 Far Sync 实例,保证零数据丢失(zero data loss),同时主库和 Far Sync 距离较近,网络延时很小,因此对主库性能影响很小。然后 Far Sync 实例再将 redo 异步(asynchronous)发送到终端备库(Standby Database)。

如果redo 传输采用 Maximum Performance 模式,我们可以在距离生产中心(Primary Database)相对较近的地点配置 Far Sync 实例,主库(Primary Database) 异步传输 redo 到 Far Sync 实例,然后 Far Sync 实例再负责传输 redo 到其他多个终端备库(Standby Database)。这样可以减少主库向多个终端备库(Standby Database)传输redo的压力(offload)。

Far Sync配置对于Data Guard 角色转换(role transitions)是透明的,即switchover/failover命令方式与12c之前相同。
考虑到可能发生 Data Guard 角色转换,即 switchover/failover,可以在距离备库较近的地方也配置 Far Sync 实例,这个 Far Sync 实例只有在当前的备库切换为主库后才启用。

考虑到 Far Sync 实例的单点故障,可以在距离主库较近的地点配置 2 个Far Sync实例,起到备用的作用。

环境描述

角色 IP地址 hostsname DB_unique_name 实例名 控制文件
主库 192.168.10.91 primary-database primary orcl /orcl/app/oracle/oradata/orcl/control01.ctl,/orcl/app/oracle/fast_recovery_area/orcl/control02.ctl
备库 192.168.10.94 standby-database standby orcl
far sync 1 192.168.10.92 far-sync-01 farsync01 orcl


当主库写入日志到 far sync 实例,由 far sync 实例异步到备库。
当生主从切换后,数据写入新的主库(原备库),far sync 实例,由 far sync 实例异步到新备库(原主库)。
尝试在 far sync 配置

部署 ADG(一主一备)

FAR SYNC的两台服务器的话直接克隆的备库主机,克隆后删除数据文件即可;重新搭建的话只需要ORACLE软件,不需要建立数据库
http://bytesystem.online/doc/2564/

部署 Far sync

主库创建控制文件,pfile

step 1.创建控制文件

SYS@primary> alter database create far sync instance controlfile as '/home/oracle/fs01.ctl';

Database altered.

SYS@primary>

step 2.创建 pfile 文件

SYS@primary> create pfile='/home/oracle/initorcl.ora' from spfile;

File created.

SYS@primary>

拷贝控制文件,pfile

传输控制文件,pfile,密码文件文件到 Far Sync instance 节点

scp /u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapworcl oracle@192.168.10.93:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/
scp /u01/app/oracle/product/19.3.0/dbhome_1/dbs/spfileorcl.ora oracle@192.168.10.93:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/
scp /home/oracle/fs01.ctl oracle@192.168.10.93:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/

主库部署

step 1.编辑 tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))


PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

FARSYNC01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = far-sync-01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

step 2.配置 DB_UNIQUE_NAME

alter system set db_unique_name='primary' ;

step 3.配置 FAL_SERVER

alter system set fal_server='standby';

alter system set fal_client='primary';

fal_server的值写的是tnsname中的服务名

step 4.配置 LOG_ARCHIVE_CONFIG

alter system set log_archive_config='dg_config=(primary,farsync01,standby)';

警告:尚未定义LOG_ARCHIVE_CONFIG参数,但已配置远程Data Guard目标。Oracle强烈建议在使用Data Guard时设置此参数,如Data Guard手册中所述。
其中,primary 是主数据库的本地网络服务名,farsync01,standby 是主数据库的远程网络服务名。

step 5.配置 log_archive_dest
LOG_ARCHIVE_DEST_1 指向本地归档路径

alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog VALID_FOR=(online_logfile,primary_role) DB_UNIQUE_NAME=primary';

LOG_ARCHIVE_DEST_2
LOG_ARCHIVE_DEST_2 原来是指向备库的,现在指向fs机器,使用sync

alter system set log_archive_dest_2='service=FARSYNC01 lgwr SYNC affirm max_failure=1 alternate=log_archive_dest_3 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=farsync01';
或
alter system set log_archive_dest_2='service=FARSYNC01 LGWR SYNC AFFIRM delay=0 optional ALTERNATE=LOG_ARCHIVE_DEST_3  compression=disable max_failure=1  reopen=300  net_timeout=30 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)  db_unique_name=farsync01'

LOG_ARCHIVE_DEST_3
LOG_ARCHIVE_DEST_3 这个就设置成指向FS2服务器的,使用async

alter system set log_archive_dest_3='service=STANDBY lgwr async  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';

当初始的目的地失败,将使用该参数指定一个轮换的归档目的地。该属性不支持LOG_ARCHIVE_DEST_11到LOG_ARCHIVE_DEST_31 Redo目的地设置。
ALTERNATE=LOG_ARCHIVE_DEST_n,LOG_ARCHIVE_DEST_n是一个目的地,n是从1到10的一个值。
通过V$ARCHIVE_DEST.STATUS可以查看ALTERNATE目的地相关信息。

以上配置的说明:

  1. 日志先在本地归档,然后传送给 far server,
  2. FARSYNC02 是备用的,当FARSYNC01正常使用的时候,FARSYNC02不启用
  3. 当FARSYNC01挂了,FARSYNC02才会自动启用,FARSYNC01好了,FARSYNC02会自动关闭。
  4. 主到fs是sync,fs到备库是使用async同步模式来传输归档给备库。

配置 Far Sync 实例

FarSync 实例添加 standby log,该配置已经在DG环境中添加。无需重复操作。

step 1.配置 FarSync 实例的 tnsnames

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = far-sync-01)(PORT = 1521))


PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

FARSYNC01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = far-sync-01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

step 2.创建相应的文件目录

mkdir -p /u01/app/oracle/archivelog
mkdir -p /u01/app/oracle/fast_recovery_area/orcl
mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/app/oracle/oradata/orcl

step 3.启动到 nomount

SQL> startup nomount

step 4.配置 DB_UNIQUE_NAME

alter system set db_unique_name='farsync01';

step 5.配置 FAL_SERVER

alter system set fal_server='primary,standby';

alter system set fal_client='farsync01';

step 6.配置log_archive_config

alter system set log_archive_config='dg_config=(primary,farsync01,standby)';

step 7.配置 log_archive_dest_n
log_archive_dest_1,写归档到本地归档路径

alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl';

log_archive_dest_2,写归档到备库,用async的方式,因为主到fs是sync,fs到备库是async。

  • 当主库归档写到 fs ,fs 传送到备库。
alter system set log_archive_dest_2='service=STANDBY async ALTERNATE=LOG_ARCHIVE_DEST_3  valid_for=(standby_logfiles,standby_role) db_unique_name=standby';
  • 当主从数据库切换,备库归档写到 fs ,fs 传送到主库。
alter system set log_archive_dest_3='service=PRIMARY async ALTERNATE=LOG_ARCHIVE_DEST_2  valid_for=(standby_logfiles,standby_role) db_unique_name=primary';

step 8.恢复控制文件

[oracle@far-sync-01 dbs]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Sun Apr 28 11:37:24 2024
Version 19.3.0.0.0

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

connected to target database: ORCL (not mounted)

RMAN> restore controlfile from '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/fs01.ctl';

Starting restore at 2024-04-28 11:38:17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=261 device type=DISK

channel ORA_DISK_1: copied control file copy
output file name=/u01/app/oracle/oradata/ORCL/control01.ctl
output file name=/u01/app/oracle/oradata/ORCL/control02.ctl
Finished restore at 2024-04-28 11:38:21

RMAN>

step 9.在 Far Sync 实例服务器创建监听器(过程略)。
step 10.启动到 mount

SQL> alter database mount;

恢复后再后续的启动中就只需要启动到 mount 状态即可
step 11.创建standby redo log
在Far Sync实例创建standby redo log,standby redo log大小等于主库online redo log大小:

alter database drop standby logfile group 4;
alter database drop standby logfile group 5;
alter database drop standby logfile group 6;
alter database drop standby logfile group 7;
alter database add standby logfile group 8 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO08.LOG' size 200M;
alter database add standby logfile group 9 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO09.LOG' size 200M;
alter database add standby logfile group 10 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO10.LOG' size 200M;
alter database add standby logfile group 11 '/u01/app/oracle/oradata/ORCL/STANDBY_REDO11.LOG' size 200M;

备库配置

step 1.编辑 tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))


PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = primary-database)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = standby-database)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

FARSYNC01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = far-sync-01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

step 2.配置 DB_UNIQUE_NAME

alter system set db_unique_name='standby';

step 3.配置 FAL_SERVER

alter system set fal_server='primary';

alter system set fal_client='standby';

step 4.配置LOG_ARCHIVE_CONFIG

alter system set log_archive_config='dg_config=(primary,farsync01,standby)';

dg_config是写db_unique_name的值。

step 5.log_archive_dest 配置
log_archive_dest_1,写归档到本地归档路径

alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl';

LOG_ARCHIVE_DEST_2
LOG_ARCHIVE_DEST_2 原来是指向备库的,现在指向fs机器,使用sync

alter system set log_archive_dest_2='service=FARSYNC01 lgwr SYNC affirm max_failure=1 alternate=log_archive_dest_3 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=farsync01';
或
alter system set log_archive_dest_2='service=FARSYNC01 LGWR SYNC AFFIRM delay=0 optional ALTERNATE=LOG_ARCHIVE_DEST_3  compression=disable max_failure=1  reopen=300  net_timeout=30 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)  db_unique_name=farsync01'

LOG_ARCHIVE_DEST_3
LOG_ARCHIVE_DEST_3 这个就设置成指向FS2服务器的,使用async

alter system set log_archive_dest_3='service=PRIMARY lgwr async VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary';

检查配置情况

# 查看dataguard_config
select * from  V$DATAGUARD_CONFIG;

# 查看同步情况
select * FROM V$DATAGUARD_STATS;

select dest_id,status,error from v$archive_dest;

查看 LOG_ARCHIVE_DEST_n 状态时, 2 或者 3 总一个一个是错误,“ORA-16009: invalid redo transport destination” 为正常情况。

SYS@orcl> select dest_id,status,error from v$archive_dest;

   DEST_ID STATUS	      ERROR
---------- ------------------ -----------------------------------------------------------------
	 1 VALID
	 2 VALID
	 3 IDLE 	      ORA-16009: invalid redo transport destination

启动

step 1.关闭所有 FAR 服务的数据库
step 2.重启主库

SQL> shutdown immediate
SQL> startup

step 3.重启备库

SQL> shutdown immediate
SQL> startup
SQL> alter database recover managed standby database using current logfile disconnect from session;

step 4.启动FAR Sync

SQL> startup mount

主库查看保护级别

SQL> select open_mode,protection_mode,protection_level,switchover_status from v$database;

OPEN_MODE         PROTECTION_MODE      PROTECTION_LEVEL     SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE         MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  TO STANDBY

发现并不是最大可用模式,我们进行调整,语法:

SQL> alter database set standby database to maximize availability;

Database altered.

SQL> select open_mode,protection_mode,protection_level,switchover_status from v$database;

OPEN_MODE         PROTECTION_MODE      PROTECTION_LEVEL     SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE         MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY TO STANDBY

一个 Far Sync 实例,如果出现问题,虽然能够保证 redo 直接传输到 standby 库,但是 primary 库保护模式从最大可用模式(MaximumAvailability)降为最大性能模式(Maximum Performance)。 因此我们可以在距离主库较近的地点设置 2 个 FarSync 实例保证高可用性。当一个 Far Sync实例不可用, primary 库自动使用备用 FarSync 库,并且 primary 库保护模式保持最大可用模式(Maximum Availability) 不变,零数据丢失。

测试FarSync

数据同步测试

查看主从库

SYS@primary> select database_role,db_unique_name from v$database;

DATABASE_ROLE			 DB_UNIQUE_NAME
-------------------------------- ------------------------------------------------------------
PRIMARY 			 orcl

SYS@primary> 

SYS@standby> select database_role,db_unique_name from v$database;

DATABASE_ROLE			 DB_UNIQUE_NAME
-------------------------------- ------------------------------------------------------------
PHYSICAL STANDBY		 orcl

SYS@standby> 

创建表,插入数据测试

create table t(id int);
insert into t values(1);

select count(*) from t;

从日志查看,后台进程的运行
主库先通过 log_archive_dest_2 SYNC同步给FarSync实例

2024-04-28T15:34:04.471861+08:00
 rfs (PID:22967): Database mount ID mismatch [0x650bab38:0x650ba60e] (1695263544:1695262222)
 rfs (PID:22967): Client instance is standby database instead of primary
 rfs (PID:22967): Not using real application clusters
2024-04-28T15:34:20.268620+08:00
LGWR (PID:21043): SRL selected for T-1.S-30 for LAD:2
2024-04-28T15:34:22.893367+08:00
Thread 1 advanced to log sequence 30 (LGWR switch)
  Current log# 3 seq# 30 mem# 0: /u01/app/oracle/oradata/ORCL/redo03.log
2024-04-28T15:34:23.221977+08:00
ARC2 (PID:21107): Archived Log entry 47 added for T-1.S-29 ID 0x650692a7 LAD:1

FarSync 实例再通过 log_archive_dest_2 ASYNC 同步给备库

2024-04-28T15:34:13.205352+08:00
ARC2 (PID:17756): Archived Log entry 5 added for T-1.S-29 ID 0x650692a7 LAD:1
2024-04-28T15:34:15.813310+08:00
 rfs (PID:20868): Primary database is in MAXIMUM PERFORMANCE mode
2024-04-28T15:34:20.288224+08:00
 rfs (PID:20868): Selected LNO:8 for T-1.S-30 dbid 1694913959 branch 1167133230
2024-04-28T15:34:24.414502+08:00
TT02 (PID:19487): SRL selected for T-1.S-30 for LAD:2

备库进行应用

2024-04-28T03:34:12.036563-04:00
ARC2 (PID:5226): Archived Log entry 13 added for T-1.S-29 ID 0x650692a7 LAD:1
2024-04-28T03:34:12.596382-04:00
PR00 (PID:10843): Media Recovery Log /u01/app/oracle/archivelog/1_29_1167133230.dbf
2024-04-28T03:34:13.665850-04:00
PR00 (PID:10843): Media Recovery Waiting for T-1.S-30
2024-04-28T03:34:20.468662-04:00
 rfs (PID:22517): Primary database is in MAXIMUM PERFORMANCE mode
2024-04-28T03:34:22.878710-04:00
 rfs (PID:22517): Selected LNO:4 for T-1.S-30 dbid 1694913959 branch 1167133230

测试备用链路切换

断开 far-sync-01 节点的网络,可以看到主库发现了备库的连接

2024-04-28T16:56:27.385495+08:00
 rfs (PID:28600): Database mount ID mismatch [0x650bc40d:0x650ba516] (1695269901:1695261974)
 rfs (PID:28600): Client instance is standby database instead of primary
 rfs (PID:28600): Not using real application clusters

此时,在主库插入数据,切换日志;查看主库的后台日志

2024-04-28T17:07:01.252717+08:00
Thread 1 advanced to log sequence 41 (LGWR switch)
  Current log# 2 seq# 41 mem# 0: /u01/app/oracle/oradata/ORCL/redo02.log
2024-04-28T17:07:02.102785+08:00
ARC0 (PID:27172): Archived Log entry 70 added for T-1.S-40 ID 0x650692a7 LAD:1
2024-04-28T17:07:02.556815+08:00
TT02 (PID:27186): SRL selected for T-1.S-41 for LAD:3

从库的后台日志

2024-04-28T05:07:01.041857-04:00
 rfs (PID:26924): Selected LNO:5 for T-1.S-41 dbid 1694913959 branch 1167133230
2024-04-28T05:07:01.041978-04:00
ARC1 (PID:26188): Archived Log entry 24 added for T-1.S-40 ID 0x650692a7 LAD:1
2024-04-28T05:07:06.105633-04:00
PR00 (PID:26261): Media Recovery Log /u01/app/oracle/archivelog/1_40_1167133230.dbf
2024-04-28T05:07:07.334841-04:00
PR00 (PID:26261): Media Recovery Waiting for T-1.S-41 (in transit)

网络恢复后,far sync 实例进入 gap

2024-04-28T17:10:35.521510+08:00
TT00 (PID:21025): Gap Manager starting

主备切换测试

step 1.查看主备数据库的状态
主库

SYS@primary> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
	    41

# 查看主库状态
SYS@primary> select name,open_mode,database_role,protection_mode,switchover_status from v$database;

NAME		   OPEN_MODE				    DATABASE_ROLE		     PROTECTION_MODE			      SWITCHOVER_STATUS
------------------ ---------------------------------------- -------------------------------- ---------------------------------------- ----------------------------------------
ORCL		   READ WRITE				    PRIMARY			     MAXIMUM PERFORMANCE		      FAILED DESTINATION

SYS@primary> 

从库

SYS@standby> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
	    41
		
# 切换时要停库,最好没有其他session链接
SYS@standby> select username,sid from v$session where username is not null;

USERNAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       SID
----------
SYS
	 3

PUBLIC
	18

PUBLIC
	19

SYS
       138

PUBLIC
       142

PUBLIC
       271


6 rows selected.

# 查看备库状态
SYS@standby> select name,open_mode,database_role,protection_mode,switchover_status from v$database;

NAME		   OPEN_MODE				    DATABASE_ROLE		     PROTECTION_MODE			      SWITCHOVER_STATUS
------------------ ---------------------------------------- -------------------------------- ---------------------------------------- ----------------------------------------
ORCL		   READ ONLY WITH APPLY 		    PHYSICAL STANDBY		     MAXIMUM PERFORMANCE		      NOT ALLOWED

SYS@standby>

step 2.在主库执行切换

SYS@primary> alter database commit to switchover to standby;

Database altered.

SYS@primary> 

# 主库变状态变化,等待确认切换状态
SYS@orcl> select name,open_mode,database_role,protection_mode,switchover_status from v$database;

NAME		   OPEN_MODE				    DATABASE_ROLE		     PROTECTION_MODE			      SWITCHOVER_STATUS
------------------ ---------------------------------------- -------------------------------- ---------------------------------------- ----------------------------------------
ORCL		   READ ONLY				    PHYSICAL STANDBY		     MAXIMUM PERFORMANCE		      TO PRIMARY

SYS@orcl> 

# 启用mrp0进程,并查看角色及切换状态
SYS@orcl> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  DISCONNECT FROM SESSION;

Database altered.

SYS@orcl> 

step 3.从库执行切换

SYS@standby> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@standby> startup mount
ORACLE instance started.

Total System Global Area 2432695144 bytes
Fixed Size		    8899432 bytes
Variable Size		  536870912 bytes
Database Buffers	 1879048192 bytes
Redo Buffers		    7876608 bytes
Database mounted.
SYS@standby> select name,open_mode,database_role,protection_mode,switchover_status from v$database;

NAME		   OPEN_MODE				    DATABASE_ROLE		     PROTECTION_MODE			      SWITCHOVER_STATUS
------------------ ---------------------------------------- -------------------------------- ---------------------------------------- ----------------------------------------
ORCL		   MOUNTED				    PHYSICAL STANDBY		     MAXIMUM PERFORMANCE		      TO PRIMARY

SYS@standby> alter database commit to switchover to primary;

Database altered.

SYS@standby> alter database open;

Database altered.

SYS@standby> 

step 4.查看主从数据库的状态

# 新主
SYS@standby> select name,open_mode,database_role,protection_mode,switchover_status from v$database;

NAME		   OPEN_MODE				    DATABASE_ROLE		     PROTECTION_MODE			      SWITCHOVER_STATUS
------------------ ---------------------------------------- -------------------------------- ---------------------------------------- ----------------------------------------
ORCL		   READ WRITE				    PRIMARY			     MAXIMUM PERFORMANCE		      FAILED DESTINATION

# 查看后台进行状态
SYS@standby> 
SYS@standby> select process,status from v$managed_standby;

PROCESS 	   STATUS
------------------ ------------------------
ARCH		   CONNECTED
DGRD		   ALLOCATED
DGRD		   ALLOCATED
ARCH		   CLOSING
ARCH		   CLOSING
ARCH		   CONNECTED
LNS		   WRITING
DGRD		   ALLOCATED

8 rows selected.

SYS@standby> 

# 新备
SYS@orcl> select name,open_mode,database_role,protection_mode,switchover_status from v$database;

NAME		   OPEN_MODE				    DATABASE_ROLE		     PROTECTION_MODE			      SWITCHOVER_STATUS
------------------ ---------------------------------------- -------------------------------- ---------------------------------------- ----------------------------------------
ORCL		   READ ONLY WITH APPLY 		    PHYSICAL STANDBY		     MAXIMUM PERFORMANCE		      NOT ALLOWED

SYS@orcl> 

新主插入数据观察状态

2024-04-28T05:33:50.808923-04:00
LGWR (PID:28683): LAD:2 is UNSYNCHRONIZED
2024-04-28T05:33:51.231345-04:00
Thread 1 advanced to log sequence 45 (LGWR switch)
  Current log# 3 seq# 45 mem# 0: /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_3_m2t5hm05_.log
2024-04-28T05:33:51.842268-04:00
Expanded controlfile section 11 from 28 to 256 records
Requested to grow by 228 records; added 9 blocks of records
2024-04-28T05:33:51.842717-04:00
ARC2 (PID:28739): Archived Log entry 29 added for T-1.S-44 ID 0x650a7fde LAD:1
2024-04-28T05:33:54.694483-04:00
TT02 (PID:28774): SRL selected for T-1.S-45 for LAD:3

新备查看日志

2024-04-28T17:33:56.207340+08:00
 rfs (PID:30843): Selected LNO:5 for T-1.S-45 dbid 1694913959 branch 1167133230
2024-04-28T17:33:56.207619+08:00
ARC1 (PID:30503): Archived Log entry 76 added for T-1.S-44 ID 0x650a7fde LAD:1
2024-04-28T17:34:09.450575+08:00
PR00 (PID:30650): Media Recovery Waiting for T-1.S-45 (in transit)
2024-04-28T17:34:09.451400+08:00
Recovery of Online Redo Log: Thread 1 Group 5 Seq 45 Reading mem 0
  Mem# 0: /u01/app/oracle/oradata/ORCL/STANDBY_REDO05.LOG

尝试给 Far Sync 实例配置两个归档日志的配置,切换数据库后,不用从新配置。
该尝试和配置,发现 Far Sync 节点连接其他库异常,“ORA-12154: TNS:could not resolve the connect identifier specified” ,同时主从库配置了 直接应用主库的归档日志,进而验证了 DG的可靠性。

最后修改时间:2025-12-07 20:46:24
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论