> 技术文档 > Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg


一、DG介绍

1、什么是DG

Oracle Data Guard 是 Oracle 数据库内置的高可用性(HA)和灾难恢复(DR)解决方案,通过对主数据库的实时同步和监控,提供数据保护、故障恢复及负载均衡能力。

2、组成

(1)主数据库(Primary)​​:处理生产事务的读写。
(2)​​备用数据库(Standby)​​:从主库接收并应用重做日志,保持数据同步。
(3)​​Data Guard Broker​​:自动化管理集群配置、监控和故障切换。

3、原理

(1)日志传输与应用

主库将在线重做日志(Online Redo Logs)或归档日志(Archived Logs)传输到备用库。
备用库接收后,通过 ​​Redo Apply​​ 或 ​​SQL Apply​​(仅逻辑备用)重放日志,保持数据一致性。

(2)三种模式

DG有种数据同步模式

最大性能(Maximum Performance)​​
异步传输日志,主库性能优先,可能丢失少量数据。

​​最大可用性(Maximum Availability)​​
同步传输,但允许主库在备用不可用时降级为异步模式。

​​最大保护(Maximum Protection)​​
强制同步传输,主库事务提交需等待备用确认,确保零数据丢失(若备用宕机,主库自动关闭)。

二、环境准备

1、环境信息

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

192.168.184.183192.168.184.164

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
这些值在备库上暂时没有,等部署完再进行查看。

su - oracleecho $ORACLE_SIDsqlplus / as sysdba
SELECT instance_name FROM v$instance;SELECT value FROM v$parameter WHERE name = \'db_unique_name\';SELECT name FROM v$database;SELECT value FROM v$parameter WHERE name=\'service_names\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

2、主库环境准备

(1)主库基础环境安装

主库正常安装Oracle19c单机数据库即可。
可参考:
CentOS系统静默安装Oracle19c数据库
或者
CentOS系统下图形化界面安装Oracle19c数据库

(2)修改db_unique_name

这里我将db_unique_name改为orcl

SELECT value FROM v$parameter WHERE name=\'db_unique_name\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

修改db_unique_name可参考:
如何修改DB_UNIQUE_NAME

(3)修改hostname

主库所在主机名修改为oracle19c

hostnamectl set-hostname oracle19chostname oracle19csu -

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(4)修改/etc/hosts

vim /etc/hosts

添加如下内容:

192.168.184.163 oracle19c192.168.184.164 oracle19c-dg

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

3、备库环境准备

备库只需要安装数据库软件和监听,之后主库的所有参数、控制、数据文件都用ram的方式物理拷贝过来。

(1)修改主机名

hostnamectl set-hostname oracle19c-dghostname oracle19c-dgsu -

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)修改/etc/hosts

vim /etc/hosts

添加如下内容:

192.168.184.163 oracle19c192.168.184.164 oracle19c-dg

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)配置network

vim /etc/sysconfig/network

添加如下内容:

NOZEROCONF=yesHOSTNAME=oracle19c-dg

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(4)备库安装Oracle和监听

可参考:
CentOS系统静默安装Oracle19c数据库

注意!!这里只需要安装Oracle和监听,这个文档里的静默建库,不需要操作。
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

4、主库、备库修改监听配置

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(1)主库修改listener.ora

su - oraclevim /u01/app/oracle/product/19c/db_1/network/admin/listener.ora

新增如下内容:

# 新增主库静态监听SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) # 与 db_unique_name 一致 (ORACLE_HOME = /u01/app/oracle/product/19c/db_1) (SID_NAME = orcl) ) )

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)备库库修改listener.ora

su - oraclevim /u01/app/oracle/product/19c/db_1/network/admin/listener.ora

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)主库修改tnsnames.ora

su - oraclevim /u01/app/oracle/product/19c/db_1/network/admin/tnsnames.ora

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(4)备库修改tnsnames.ora

su - oraclevim /u01/app/oracle/product/19c/db_1/network/admin/tnsnames.ora

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(5)测试主备tns监听

tnsping orcltnsping stddb

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

5、主库开启归档

主库开启归档,并重新设置归档目录,我这里已经设置好了,如果没设置的话,可参考:
如何开启数据库的归档模式

archive log list 

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

6、打开数据库强制日志

alter database force logging;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

7、查看归档模式和保护模式

select log_mode,force_logging from v$database;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

8、开启数据库保护模式

这里根据需求进行选择,这里我选择最大性能

(1)最大保护模式

alter database set standby database to MAXIMIZE PROTECTION;

(2)最大性能

alter database set standby database to MAXIMIZE PERFORMANCE;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)最大可用

该模式需在mount下修改,并且备库已经做好了配置,否者主库检测不到可用备库会自动挂掉。

alter database set standby database to MAXIMIZE AVAILABILITY;

9、进行查看数据库同步模式

SELECT DATABASE_ROLE, OPEN_MODE, PROTECTION_MODE, DATAGUARD_BROKER FROM V$DATABASE;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

10、增加redo log日志文件

(1)查询当前redo log日志文件数量以及目录

默认只有3个,但是redo在还没有传完备库的时候,3个文件都写满了,会导致无法归档,事务卡死等情况,所以这个尽量多点好。

SELECT GROUP#, MEMBER FROM V$LOGFILE;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)新增redo log文件

alter database add standby logfile group 4 (\'/u01/app/oracle/oradata/ORCL/redo04.log\') size 200M;alter database add standby logfile group 5 (\'/u01/app/oracle/oradata/ORCL/redo05.log\') size 200M;alter database add standby logfile group 6 (\'/u01/app/oracle/oradata/ORCL/redo06.log\') size 200M;alter database add standby logfile group 7 (\'/u01/app/oracle/oradata/ORCL/redo07.log\') size 200M;alter database add standby logfile group 8 (\'/u01/app/oracle/oradata/ORCL/redo08.log\') size 200M;alter database add standby logfile group 9 (\'/u01/app/oracle/oradata/ORCL/redo09.log\') size 200M;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)再次查询

SELECT GROUP#, MEMBER FROM V$LOGFILE;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

三、修改主库参数

1、LOG_ARCHIVE_CONFIG

这里的orcl和stddb是主备库的unique_name唯一名称 用来区分数据库

alter system set LOG_ARCHIVE_CONFIG=\'DG_CONFIG=(orcl,stddb)\' scope=both sid=\'*\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

2、LOG_ARCHIVE_DEST_1

这里填写主库本地归档日志路径 主库唯一名

alter system set LOG_ARCHIVE_DEST_1=\'LOCATION=/u01/app/arc_log VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl\' scope=both sid=\'*\'; 

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

3、LOG_ARCHIVE_DEST_2

这里的service是备库的tns文件中的名称 后面的db_unique_name是备库的唯一名称,但这里备库的db_unique_name我们还未设置,后面我们会在备份的pflie文件中进行修改并设置的。

alter system set LOG_ARCHIVE_DEST_2=\'SERVICE=stddb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stddb\'scope=both sid=\'*\'; 

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

4、fal_client和fal_server

主库上fal_client指向自己,也就是orcl主库上fal_server指向备库,也就是stddb

fal_client:
指定主库(Primary Database)向备库发送归档日志请求时使用的标识。

fal_server:
指定备库(Standby Database)在需要获取缺失的归档日志时,向主库(Primary Database)或其他中间服务器发起请求的目标地址。

alter system set fal_server=\'stddb\' scope=both sid=\'*\'; alter system set fal_client=\'orcl\' scope=both sid=\'*\'; 

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

5、DB_FILE_NAME_CONVERT

alter system set DB_FILE_NAME_CONVERT=\'/u01/app/oracle/oradata/ORCL\',\'/u01/app/oracle/oradata/ORCL\' scope=spfile sid=\'*\'; 

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

6、LOG_FILE_NAME_CONVERT

alter system set LOG_FILE_NAME_CONVERT=\'/u01/app/oracle/oradata/ORCL\',\'/u01/app/oracle/oradata/ORCL\' scope=spfile sid=\'*\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

四、主库进行备份

1、创建备份目录

su - oraclemkdir -p /u01/app/oracle/oradata/rman_backup

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

2、拷贝密码文件

cp $ORACLE_HOME/dbs/orapworcl /u01/app/oracle/oradata/rman_backupll /u01/app/oracle/oradata/rman_backup

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

3、生成pfile文件

创建pfile文件并生成到备份目录中

create pfile=\'/u01/app/oracle/oradata/rman_backup/pfile.ora.1bak\' from spfile;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
查看生成的pfile文件

cd /u01/app/oracle/oradata/rman_backup/ll

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

4、生成控制文件

创建当前主库的控制文件并生成到备份目录中

alter database create standby controlfile as \'/u01/app/oracle/oradata/rman_backup/standby.ctl\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
查看生成的控制文件

cd /u01/app/oracle/oradata/rman_backup/ll

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

5、使用rman进行备份

(1)连接到rman

rman target /

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)进行备份

进行备份操作

run{allocate channel c1 type disk maxpiecesize=100m; allocate channel c2 type disk maxpiecesize=100m; backup database filesperset 4 format \'/u01/app/oracle/oradata/rman_backup/ora_L0_%d_%T_%s_%p\'; sql \'alter system archive log current\'; sql \'alter system archive log current\'; sql \'alter system archive log current\';backup archivelog all format \'/u01/app/oracle/oradata/rman_backup/arch_L0_%d_%T_%s_%p\' delete input; crosscheck backup;crosscheck archivelog all; }

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

五、备库进行恢复

1、创建目录

参照主库备份pfile文件中的路径进行创建目录

cd /u01/app/oracle/oradata/rman_backupcat pfile.ora.1bak

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
在备库创建目录

su - oraclemkdir -p /u01/app/oracle/oradata/ORCL/mkdir /u01/app/arc_logmkdir -p /u01/app/oracle/admin/orcl/adump

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

2、传输备份文件

主库将将备份文件都传到备库

scp -r /u01/app/oracle/oradata/rman_backup/ oracle@192.168.184.164:/u01/app/oracle/oradata/

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

3、查看备份文件

备库查看备份文件

cd /u01/app/oracle/oradata/llll rman_backup

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

4、拷贝密码文件

备库将备份的密码文件拷贝到$ORACLE_HOME/dbs目录下

(1)查看备份文件中的密码文件

su - oraclecd /u01/app/oracle/oradata/rman_backupll

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)拷贝并查看

cp orapworcl $ORACLE_HOME/dbsll $ORACLE_HOME/dbs

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

5、恢复控制文件

(1)主库查看控制文件路径

/u01/app/oracle/oradata/ORCL/control01.ctl/u01/app/oracle/oradata/ORCL/control02.ctl
show parameter control

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)将备份的控制文件按原路径进行拷贝

备库拷贝到相应路径,并将文件名称改为原来的样子

cp /u01/app/oracle/oradata/rman_backup/standby.ctl /u01/app/oracle/oradata/ORCL/control01.ctlcp /u01/app/oracle/oradata/rman_backup/standby.ctl /u01/app/oracle/oradata/ORCL/control02.ctl

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)查看备库的控制文件

cd /u01/app/oracle/oradata/ORCL/ll

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

6、修改pfile文件

su - oraclecd /u01/app/oracle/oradata/rman_backup/vim pfile.ora.1bak

(1)db_unique_name 改为 stddb

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)diagnostic_dest改为/u01/app/oracle

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)fal_client改为stddb

备库上fal_client指向自己,也就是stddb,这个和主库的配置是正好是反着的

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(4)fal_server改为orcl

备库上fal_server指向主库,也就是orcl,这个和主库的配置是正好是反着的

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(5)local_listener

一般不用改,默认就是LISTENER_ORCL
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(6)log_archive_config

指定切换对象 写主库tns文件中的名称,这个也不用改,和主库配置的一样即可。
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(7)log_archive_dest_1改成备库的信息

这里写备库的归档日志存放路径和备库的唯一名

log_archive_dest_1=\'LOCATION=/u01/app/arc_log VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stddb\'

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(8)log_archive_dest_2改成主库的信息

这里写tns文件中主库的名称和唯一名

log_archive_dest_2=\'SERVICE=orcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl\'

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(9)db_file_name_convert

数据文件路径转换,前面是主库的路径 后面是备库的路径,一般不用改,这些目录都创建好了
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(10)log_file_name_convert

日志文件转换路径,前面是主库的路径 后面是备库的路径,一般不用改,这些目录都创建好了

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(11)audit_file_dest

审计日志路径,一般不用改,这些目录都创建好了
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(12)db_name

默认不需要改
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

如下是整个配置:

orcl.__data_transfer_cache_size=0orcl.__db_cache_size=2600468480orcl.__inmemory_ext_roarea=0orcl.__inmemory_ext_rwarea=0orcl.__java_pool_size=0orcl.__large_pool_size=16777216orcl.__oracle_base=\'/u01/app/oracle\'#ORACLE_BASE set from environmentorcl.__pga_aggregate_target=872415232orcl.__sga_target=3439329280orcl.__shared_io_pool_size=134217728orcl.__shared_pool_size=671088640orcl.__streams_pool_size=0orcl.__unified_pga_pool_size=0*.audit_file_dest=\'/u01/app/oracle/admin/orcl/adump\'*.audit_trail=\'db\'*.compatible=\'19.0.0\'*.control_files=\'/u01/app/oracle/oradata/ORCL/control01.ctl\',\'/u01/app/oracle/oradata/ORCL/control02.ctl\'*.db_block_size=8192*.db_file_name_convert=\'/u01/app/oracle/oradata/ORCL\',\'/u01/app/oracle/oradata/ORCL\'*.db_name=\'orcl\'*.db_unique_name=\'stddb\'*.diagnostic_dest=\'/u01/app/oracle\'*.dispatchers=\'(PROTOCOL=TCP) (SERVICE=orclXDB)\'*.fal_client=\'stddb\'*.fal_server=\'orcl\'*.local_listener=\'LISTENER_ORCL\'*.log_archive_config=\'DG_CONFIG=(orcl,stddb)\'*.log_archive_dest_1=\'LOCATION=/u01/app/arc_log VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stddb\'*.log_archive_dest_2=\'SERVICE=orcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl\'*.log_archive_dest_state_1=\'ENABLE\'*.log_file_name_convert=\'/u01/app/oracle/oradata/ORCL\',\'/u01/app/oracle/oradata/ORCL\'*.nls_language=\'AMERICAN\'*.nls_territory=\'AMERICA\'*.open_cursors=300*.pga_aggregate_target=820m*.processes=300*.remote_login_passwordfile=\'EXCLUSIVE\'*.sga_target=3276m*.undo_tablespace=\'UNDOTBS1\'

7、备库使用pfile启动到nomount模式

su - oraclesqlplus / as sysdba

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

startup pfile=\'/u01/app/oracle/oradata/rman_backup/pfile.ora.1bak\' nomount;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

8、创建spfile文件

备库使用pfile创建spfile文件

create spfile from pfile=\'/u01/app/oracle/oradata/rman_backup/pfile.ora.1bak\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
备库查看spfile文件

cd /u01/app/oracle/product/19c/db_1/dbs/ll

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

9、恢复控制文件

(1)进入rman

su - oraclerman target /

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)恢复控制文件

restore controlfile from \'/u01/app/oracle/oradata/ORCL/control01.ctl\';restore controlfile from \'/u01/app/oracle/oradata/ORCL/control02.ctl\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

10、恢复数据文件

(1)备库启动数据到mount模式

之前这里使用pfile文件启动到nomout了,后又创建了spfile文件了,
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
我们关闭数据库,然后启动到mount

shutdown immediate;startup mount;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)连接到rman

su - oraclerman target /

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)扫描备份文件

catalog start with \'/u01/app/oracle/oradata/rman_backup\';

下面哪个报错不影响,因为密码文件和备份的pfile文件不是数据的备份文件。
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(4)恢复数据

run {allocate channel c1 type disk maxpiecesize=100m;allocate channel c2 type disk maxpiecesize=100m;restore database ;}

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

11、查看数据文件

查看数据文件恢复,现在所有的文件都跟主库一致了

ll /u01/app/oracle/oradata/ORCL

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

12、打开数据库

之前启动到数据到mount状态了
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
下面打开数据库

alter database open;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

13、配置检查

(1)查看主备库的归档目录

archive log list

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)查看主备库的归档路径参数

show parameter LOG_ARCHIVE_DEST_1;show parameter LOG_ARCHIVE_DEST_2;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)查看数据一些名称

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

14、测试连接

(1)主库连备库

sqlplus sys/oracle@stddb as sysdba

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)备库连主库

sqlplus sys/oracle@orcl as sysdba

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

六、进行配置DG

1、备库关闭数据库

shutdown immediate

2、备库启动到nomount

startup nomount;

3、以standby的方式启动备库到mount

alter database mount standby database; 

4、更新会话,开启MRP0进程

此命令用于在 ​​物理备用数据库(Physical Standby Database)​​ 上启动 ​​托管恢复(Managed Recovery)​​,使备用库自动应用来自主库的归档日志或在线重做日志,保持与主库的数据同步。执行后会断开当前会话,恢复过程在后台持续运行。首次启动备用库时应用归档日志。

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

5、关闭MRP0进程

alter database recover managed standby database cancel;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

6、启动MRP0进程

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

7、查看DG状态

查看DG状态,VALID代表正常

select dest_name,status,target,ARCHIVER,destination,log_sequence,valid_type,valid_rolefrom V$ARCHIVE_DEST;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

8、查看两台数据的状态,以及保护模式

select dest_name,type,database_mode,recovery_mode,protection_mode,destination,SRL,GAP_STATUSfrom V$ARCHIVE_DEST_STATUS;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

9、查看redo log日志状态

select * from v$log;select * from v$logfile;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

七、进行测试

1、 Data Guard 角色验证

SELECT DATABASE_ROLE, PROTECTION_MODE FROM V$DATABASE;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

2、主库切换日志组

(1)手动触发日志切换​

SELECT * FROM V$LOGFILE;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)验证日志切换​

在主库查询当前日志组状态

ALTER SYSTEM SWITCH LOGFILE;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

3、备库应用日志查看

(1)查询托管恢复进程状态​

SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)检查归档日志应用进度​

SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED = \'YES\';

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(3)查看未应用日志

SELECT SEQUENCE#, FIRST_CHANGE#, FIRST_TIME FROM V$ARCHIVED_LOG WHERE APPLIED = \'NO\' ORDER BY SEQUENCE#;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

4、主库创建数据查看是否同步

(1)主库创建数据

CREATE TABLE student_info ( student_id NUMBER(10) PRIMARY KEY, name VARCHAR2(50) NOT NULL, gender CHAR(1) CHECK (gender IN (\'M\', \'F\')), birth_date DATE, email VARCHAR2(100) UNIQUE, create_time TIMESTAMP DEFAULT SYSTIMESTAMP);-- 单条记录插入INSERT INTO student_info VALUES (1, \'张三\', \'M\', TO_DATE(\'2000-01-15\', \'YYYY-MM-DD\'), \'zhangsan@edu.cn\', DEFAULT);-- 多条记录插入INSERT ALL INTO student_info VALUES (2, \'李四\', \'M\', DATE \'2001-03-22\', \'lisi@example.com\', SYSTIMESTAMP)INTO student_info VALUES (3, \'王芳\', \'F\', TO_DATE(\'1999-12-05\', \'YYYY-MM-DD\'), \'wangfang@mail.com\', DEFAULT)SELECT * FROM DUAL;commit;SELECT * FROM student_info;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)备库进行查询

SELECT * FROM student_info;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

八、常见问题

1、备库未应用最新日志​

(1)现象:V$MANAGED_STANDBY 中 SEQUENCE# 未更新

select * from V$MANAGED_STANDBY

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)解决办法

检查备库监听状态

lsnrctl status

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
验证备库的 LOG_ARCHIVE_DEST_2

SHOW PARAMETER LOG_ARCHIVE_DEST_2;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

2、日志应用延迟​

(1)现象:主库已切换日志,但备库未及时应用

(2)解决办法

主库手动刷新日志传输

ALTER SYSTEM ARCHIVE LOG CURRENT;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

3、主库更新数据、从库未更新

(1)查询托管恢复进程状态​

SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

主库:
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg
从库:
Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg

(2)重启MRP0进程

如果数据库重启过的话,要启动MRP0进程

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Oracle【容灾篇】02:Oracle19c ADG 搭建步骤_oracle adg