核心业务系统是企业运行的中枢,处理账户管理、支付、清算等关键操作,而承载其业务的数据库的数据安全和高可用就变得尤为至关重要,为了应对不可预见的灾难(如自然灾害、设备故障、人为操作失误等),确保业务的连续性;为了进一步保障核心业务系统数据的安全性,提升系统的高可用和容灾能力;同时,为了缓解现有核心备库的查询负载压力,我们采用 Oracle 11g 的 Active Data Guard(ADG)技术,在原有核心业务数据库容灾系统的基础上增加一套非级联ADG备库,旨在为核心业务数据库的数据安全和业务系统的高可靠、高性能增加进一步保障。
本方案基于AIX 7.1平台,在原有一主一备的基础上新增一套两节点 RAC 架构的非级联ADG 备库。
l 主库主机和备库主机硬件平台一致,如都为UNIX平台,不支持异构平台,可以是不同生产厂家、不同性能的机器,但必须是相同的操作系统类型,最好大版本保持一致;
l 主库和备库 Oracle 软件需提前安装,且数据库版本和补丁版本一致,备库不需要创建数据库;
l 备库数据文件存储空间要能容纳主库数据文件;
l 主库运行在归档模式下,并且开启强制日志;
l 主库归档日志文件目录不能通过log_archive_dest初始化参数设置,必须通过log_archive_dest_n初始化参数设置;
l 主库和备库sys用户密码一致,且主库初始化参数remote_login_passwordfile
必须设置为 EXCLUSIVE;
l 主库和备库的 DB_UNIQUE_NAME需设置为不同的值,如果设置了相同的值,则在做switchover时,备库会报“ORA-01102 cannot mount database in EXCLUSIVE mode”,可能还存在其他问题。
在搭建 ADG 的过程中,主要涉及前置条件检查、主库配置和备库配置等三个方面。
l 检查主备库的操作系统硬件架构是否一致,网络端口是否开放
l 文件系统和 ASM 磁盘空间是否满足要求,软件版本和补丁是否一致
l 归档模式检查、强制日志开启
l 参数修改、standby 日志创建、密码文件拷贝
l 配置静态监听
l 参数修改、密码文件同步
l 备库数据初始化
l 备库开启日志应用并打开数据库
l 备库配置归档日志删除脚本和状态监控脚本
查询当前核心业务系统数据库主库数据库、GI版本及补丁信息。在新加的ADG备库环境安装相同版本的GI软件及数据库软件,并将补丁信息与主库环境保持一致。
所需软件列表:
|
序号 |
软件名称 |
软件列表 |
|
1 |
操作系统 |
AIX 7.1 |
|
2 |
基础软件包 |
p13390677_112040_AIX64-5L_1of7.zip |
|
p13390677_112040_AIX64-5L_2of7.zip |
||
|
p13390677_112040_AIX64-5L_3of7.zip |
||
|
3 |
OPatch工具 |
p6880880_112040_AIX64-5L.zip |
|
4 |
PSU补丁包(含GI\DB\OJVM) |
与主库一致 |
l 相关安装介质统一上传到/u01/install 目录下,OPatch 工具、PSU补丁需要在两个节点都上传,Database 和 Grid 软件仅需在节点一上传;
本次新增ADG备库采用非级联模式创建
l 非级联架构的优缺点
在非级联架构中,所有物理备库直接从主库接收 redo 数据;这意味着每个备库与主库保持直接的同步关系。
l 优点
数据传输简单直接:所有备库直接从主库获取 redo 数据,不依赖其他备库,数据传输路径简单。
减少单点故障风险:每个备库独立连接主库,即使某个备库出现故障,不会影响其他备库的同步。
快速故障切换:由于所有备库都直接与主库保持连接,当主库故障时,可以快速故障切换到任何一个备库。
l 缺点
带宽需求大:如果有多个备库,主库需要为每个备库发送 redo 数据,可能会导致主库的网络带宽压力增大,尤其是在多个远程备库场景下。
l 级联架构的优缺点
在级联架构中,主库只向一个或少数几个中间备库传输 redo 数据,这些备库再将 redo 数据转发给其他备库。这种方式减少了主库直接连接的备库数量。
l 优点
减轻主库压力:主库只需要向中间备库传输 redo 数据,而中间备库负责将 redo 数据传输给其他级联的备库,减少了主库的网络负担和带宽需求。
远程备库效率提升:如果某些备库位于远程数据中心,级联备库可以作为传输中间节点,减少主库的远程传输负担,并提升数据传输效率。
更灵活的网络配置:可以将备库分布在不同区域或数据中心,通过级联架构减少跨地域的网络传输次数。
l 缺点
增加单点故障风险:如果级联的中间备库故障,依赖该备库的下级备库将无法继续接收 redo 数据。为防止这种情况,通常需要设置多个级联链路,但这也会增加管理复杂性。
延迟增加:由于 redo 数据需要经过中间备库再传递给其他备库,可能会导致下游备库的数据同步延迟,尤其是当中间备库负载较高时。
管理复杂度增加:需要管理多个备库之间的级联关系,配置、监控和故障处理的复杂度增加。
l 总结
通过对核心业务系统跑批期间的网络带宽流量的监控发现,核心数据库跑批期间的网络带宽大概在4MB/s左右,目前核心数据库主机网卡为万兆网卡,在这种带宽下即便是日志传输量最繁忙的跑批期间,带宽使用率也不高,且本次新增的备库与主库都在主中心,故而排除了网络延迟及日志传输对主库性能影响的可能;所以,本次新增ADG备库采用非级联架构。
文件系统:
/u01和/目录建议使用不同的磁盘,创建不同的VG
|
挂载点 |
推荐大小 |
用途说明 |
|
/ |
|
|
|
/home |
|
|
|
/tmp |
|
|
|
/u01 |
|
存放 DB 安装软件和运行日志 |
安装目录
|
目录名称 |
规划路径 |
|
集群软件BASE目录 |
/u01/app/grid_base |
|
集群软件HOME目录 |
/u01/app/grid/11.2/gi_1 |
|
软件清单目录 |
/u01/app/oraInventory |
|
数据库软件BASE目录 |
/u01/app/oracle |
|
数据库软件HOME目录 |
/u01/app/oracle/product/11.2/db_1 |
|
软件介质存放目录 |
/u01/install |
|
ASM磁盘组规划 |
|||
|
磁盘组名称 |
冗余度 |
容量 |
用途 |
|
+OCR |
HIGH |
10G*5 |
OCR、VoteDisk |
|
+FRA01 |
EXTERN |
- |
REDO LOG |
|
+DATA01 |
EXTERN |
- |
DATA_FILE |
|
+ARCH01 |
EXTERN |
- |
FLASH\ARCHIVE LOG |
|
+UNDO01 |
EXTERN |
- |
UNDO |
|
新备库集群信息 |
||
|
|
节点1 |
节点2 |
|
主机名 |
|
|
|
Public域名 |
|
|
|
Public IP |
|
|
|
Virtual名称 |
|
|
|
Virtual域名 |
|
|
|
Virtual IP |
|
|
|
Private名称 |
|
|
|
Private域名 |
|
|
|
Private IP |
|
|
|
SCAN名称 |
|
|
|
SCAN域名 |
|
|
|
SCAN IP |
|
|
|
集群名称 |
|
|
|
|
主库 |
备库1 |
备库2 |
|
GI&DB版本 |
11.2.0.4 |
11.2.0.4 |
11.2.0.4 |
|
PSU版本 |
11.2.0.4.xxxx |
11.2.0.4.xxxx |
11.2.0.4.xxxx |
|
DB_NAME |
XXDB |
XXDB |
XXDB |
|
DB_UNIQUE_NAME |
XXDB |
DGXXDB1 |
DGXXDB2 |
|
Instance_Name |
XXDB1/XXDB2 |
DGXXDB11/DGXXDB12 |
DGXXDB21/DGXXDB22 |
|
COMPATIBLE |
11.2.0.4.0 |
||
|
数据存储方式 |
ASM |
ASM |
ASM |
|
归档目录 |
+ARCH01 |
+ARCH01 |
+ARCH01 |
|
数据目录 |
+DATA01 |
+DATA01 |
+DATA01 |
|
OS |
AIX 7.1 |
||
|
日志同步模式 |
ASYNC |
||
|
保护模式 |
MAX PERFORMANCE |
||
注:1.主备库的 db_name 是一致的,db_unique_name 必须不一致;
2.主备库的 compatible 参数必须一致。
|
## 所有节点进行配置 su - oracle cd $ORACLE_HOME/network/admin vi tnsnames.ora XXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.65)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xxdb) ) ) DGXXDB1 =
(DESCRIPTION = (ADDRESS
= (PROTOCOL = TCP)(HOST = 192.168.2.71)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb1) ) ) DGXXDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.161)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb2) ) ) |
|
## 备份参数文件 create pfile='/home/oracle/xxdb_pfile.ora' from
spfile; ##配置初始化参数 alter system set
LOG_ARCHIVE_CONFIG='DG_CONFIG=(xxdb,dgxxdb1,dgxxdb2)' scope=both; alter system set LOG_ARCHIVE_DEST_4='SERVICE=dgxxdb2
LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgxxdb2'
scope=both; alter system set
LOG_ARCHIVE_DEST_STATE_4=ENABLE scope=both; alter system set FAL_SERVER='dgxxdb1','dgxxdb2'
scope=both; |
|
## 传输密码文件到新备库 scp /tmp/orapwxxdb 192.168.2.161:/tmp |
|
## 备份现有参数 vi /home/oracle/dgxxdb1_pfile.ora ##调整参数 alter system set
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgxxdb1,xxdb,dgxxdb2)' scope=both; alter system set LOG_ARCHIVE_DEST_4='SERVICE=dgxxdb2
LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgxxdb2'
scope=both; alter system set
LOG_ARCHIVE_DEST_STATE_4=ENABLE scope=both; alter system set FAL_SERVER=‘xxdb’,'dgxxdb2'
scope=both; |
|
su - oracle cd $ORACLE_HOME/network/admin vi tnsnames.ora XXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.65)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xxdb) ) ) DGXXDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.71)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb1) ) ) DGXXDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.161)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb2) ) ) |
|
## 创建诊断目录 mkdir -p /u01/app/oracle/admin/dgxxdb2/adump |
|
su - grid cd $ORACLE_HOME/network/admin vi listener.ora SID_LIST_LISTENER=
(SID_LIST= (SID_DESC=
(GLOBAL_DBNAME=dgxxdb2)
(SID_NAME=dgxxdb21)
(ORACLE_HOME=/u01/app/oracle/product/11.2/db_1) ) ) ## 重启监听 srvctl stop listener srvctl start listener lsnrctl status |
|
## 修改备库的pfile vi /home/oracle/dgxxdb2_pfile.ora *.audit_file_dest='/oracle/app/oracle/admin/dgxxdb2/adump' *.audit_trail='none' *.cluster_database=TRUE *.compatible='11.2.0.4.0' *.control_files='+DATA01','+FRA01' *.db_block_size=8192 *.db_create_file_dest='+DATA01' *.db_create_online_log_dest_1='+DATA01' *.db_create_online_log_dest_2='+FRA01' *.db_name=‘xxdb’ *.diagnostic_dest='/oracle/app/oracle' dgxxdb21.instance_number=1 dgxxdb22.instance_number=2 *.standby_file_management='AUTO' dgxxdb22.thread=2 dgxxdb21.thread=1 dgxxdb22.undo_tablespace='UNDOTBS2' dgxxdb21.undo_tablespace='UNDOTBS1' db_unique_name='dgxxdb2' LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgxxdb2,dgxxdb1,xxdb)' LOG_ARCHIVE_DEST_1='LOCATION=+DGRECOVERY
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgxxdb2' LOG_ARCHIVE_DEST_2='SERVICE=xxdb LGWR ASYNC
NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=xxdb' LOG_ARCHIVE_DEST_4='SERVICE=dgxxdb1 LGWR ASYNC
NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgxxdb1' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE LOG_ARCHIVE_DEST_STATE_4=ENABLE fal_client='dgxxdb2' FAL_SERVER=‘xxdb’,'dgxxdb1' ## 启动备库实例1到nomount,并创建spfile export oracle_sid=dgxxdb21 sqlplus / as sysdba startup nomount pfile='/home/oracle/dgxxdb2_pfile.ora'; create spfile='+DATA01' from
pfile='/home/oracle/dgxxdb2_pfile.ora'; ls -l +DATA01/DGXXDB/PARAMETERFILE/spfile* ## 编辑init参数文件 cd $ORACLE_HOME/dbs echo "spfile='+DATA01/DGXXDB2/PARAMETERFILE/spfile.256.1165945057'"
> initdgxxdb21.ora echo "spfile='+DATA01/DGXXDB2/PARAMETERFILE/spfile.256.1165945057'"
> initdgxxdb22.ora ## 重启实例1并检查是否使用spfile shutdown immediate startup nomount show parameter spfile |
|
## 将从主库拷贝的密码文件重命名 mv orapwxxdb orapwdgxxdb21 mv orapwxxdb orapwdgxxdb22 |
|
su - oracle cd $ORACLE_HOME/network/admin vi tnsnames.ora XXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.65)(PORT = 1521))
(CONNECT_DATA = (SERVER
= DEDICATED)
(SERVICE_NAME = xxdb) ) ) DGXXDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.71)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb1) ) ) DGXXDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.161)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb2) ) ) |
|
## 添加DB资源 srvctl add database -d dgxxdb2 -o
/oracle/app/oracle/product/11.2.0/db_1 \ -p +data01/dgxxdb2/parameterfile/spfile.256.1179569797 ## 添加实例资源 srvctl add instance -d dgxxdb2 -n node1_name -i
dgxxdb21 srvctl add instance -d dgxxdb2 -n node2_name -i
dgxxdb22 |
|
## 使用TNSPING验证 tnsping xxdb tnsping dgxxdb1 tnsping dgxxdb2 ## 使用sqlplus验证 sqlplus sys/Xxxxxxxx@xxdb as sysdba show parameter name sqlplus sys/Xxxxxxxx@dgxxdb1 as sysdba show parameter name; sqlplus sys/Xxxxxxxx@dgxxdb2 as sysdba show parameter name; |
l ZDLRA方式优缺点
优点:可以利用在ZDLRA上的备份直接恢复,无需额外占用存储空间,创建备库过程对于主库性能无任何影响;
缺点:需要把ZDLRA中的备份集恢复到备库,操作步骤略微复杂。
l DUPLICATE 方式优缺点
优点:数据直接通过网络复制到备库,不需要在本地预留空间存放 RMAN 备份,通常用于库较大且主库或者备库没有本地空间存放
RMAN 备份集的情形;
缺点:在 11G 中 duplicate 不可以使用压缩备份集,如果主库较大整个过程时间相对较长,可能会影响到主库性能,对主库 IO 或网络上的资源有一定影响,另外 duplicate 过程中可能会存在 hung 住的风险。
本次操作采用这种方式来初始化新备库。
|
##将主库上的libra.so,钱夹,sqlnet.ora拷贝至新备库相同目录下 cd $ORACLE_HOME/lib scp 192.168.2.61:$PWD/libra.so . cd $ORACLE_HOME/dbs mkdir zdlrax9 cd zdlrax9 scp 192.168.2.61:$PWD/cwallet* . cd $ORACLE_HOME/network/admin scp 192.168.2.61:$PWD/sqlnet.ora . ## 恢复控制文件 export ORACLE_SID=dgxxdb21 rman target / catalog /@<ZDLRA_TNS_NAME> run{ allocate channel c1 type sbt_tape PARMS
"SBT_LIBRARY=/<LIBRARY_PATH>/libra.so,
ENV=(RA_WALLET='location=file:/<WALLET_PATH>/ra_wallet
credential_alias=<wallet_alias>')"; restore standby controlfile; release channel c1; } 或者 run{ allocate channel c1 type 'sbt_tape'
PARMS='SBT_LIBRARY=/<LIBRARY_PATH>/libra.so,
ENV=(RA_WALLET=location=file:/<WALLET_PATH>/ra_wallet
credential_alias=<wallet_alias>)'; restore standby controlfile; release channel c1; } alter database mount; ## 恢复备库 run { allocate channel c1 type sbt_tape PARMS
"SBT_LIBRARY=/<LIBRARY_PATH>/libra.so,
ENV=(RA_WALLET='location=file:/<WALLET_PATH>/ra_wallet
credential_alias=<wallet_alias>')"; allocate channel c2 type sbt_tape PARMS
"SBT_LIBRARY=/<LIBRARY_PATH>/libra.so, ENV=(RA_WALLET='location=file:/<WALLET_PATH>/ra_wallet
credential_alias=<wallet_alias>')"; restore database; recover database; release channel c1; release channel c2; } 或者: run { allocate channel c1 type 'sbt_tape'
PARMS='SBT_LIBRARY=/<LIBRARY_PATH>/libra.so, ENV=(RA_WALLET=location=file:/<WALLET_PATH>/ra_wallet
credential_alias=<wallet_alias>)'; allocate channel c2 type 'sbt_tape'
PARMS='SBT_LIBRARY=/<LIBRARY_PATH>/libra.so,
ENV=(RA_WALLET=location=file:/<WALLET_PATH>/ra_wallet
credential_alias=<wallet_alias>)'; restore database; recover database; release channel c1; release channel c2; } |
|
## 测试连接 rman target sys/Xxxxxxxx@192.168.2.63:1521/xxdb
auxiliary sys/Xxxxxxxx@dgxxdb2 ## 编写duplicate脚本,并执行 此处连接 target 数据库时使用节点 1 的 VIP,是为了避免当主库是 RAC 环境时,备库 duplicate 过程中可能出现的报错 ORA-19505 和 ORA-27037。参见 MOS 文档:RMAN Active Duplicate
for Standby for RAC Database Failing with Errors: ORA-19505, and
ORA-27037(Doc ID 1551235.1)。 cat > /home/oracle/xxdb_adg_dup.sh
<<'END' export ORACLE_SID=dgxxdb21 rman target sys/Xxxxxxxx@192.168.2.63:1521/xxdb
auxiliary sys/Xxxxxxxx@dgxxdb2 log='/home/oracle/xxdb_adg_dup.log'
<<EOF run { allocate channel ch1 type disk; allocate channel ch2 type disk; allocate channel ch3 type disk; allocate channel ch4 type disk; allocate auxiliary channel ch5 type disk; allocate auxiliary channel ch6 type disk; allocate auxiliary channel ch7 type disk; allocate auxiliary channel ch8 type disk; duplicate target database for standby from
active database dorecover nofilenamecheck; release channel ch1; release channel ch2; release channel ch3; release channel ch4; release channel ch5; release channel ch6; release channel ch7; release channel ch8; } exit EOF END ## 执行脚本 nohup sh xxdb_adg_dup.sh & ## 观察日志 tail -100f /home/oracle/xxdb_adg_dup.log |
|
## 启动MRP数据同步进程 alter database recover managed standby database
using current logfile disconnect from session; ## 查看数据同步状态 set lines 222 pages 222 col name for a32 col value for a22 col time_computed for a25 col datum_time for a25 select name,value,time_computed,datum_time from
v$dataguard_stats; ## 数据同步正常后关闭MRP进程,开启ADG,重新启动MRP alter database recover managed standby database
cancel; alter database open; alter database recover managed standby database
using current logfile disconnect from session; ## 开启实例2 srvctl start instance -d dgxxdb2 -i dgxxdb22 |
|
## 检查数据文件 set lines 222 pages 222 col file_name for a50 col tablespace_name for a15 select file_name, tablespace_name,
bytes/1024/1024 size_mb,status from dba_data_files; ## 检查日志文件 set lines 222 pages 222 col member for a50 col status for a10 select
a.thread#,a.group#,b.type,b.member,a.bytes/1024/1024 size_mb,a.status from v$log a,v$logfile b where a.group#=b.group# union all select
a.thread#,a.group#,b.type,b.member,a.bytes/1024/1024 size_mb,a.status from v$standby_log a,v$logfile b where
a.group#=b.group# order by 3,1,2; ## 检查临时文件 set lines 222 pages 222 col FILE_NAME for a50 col TABLESPACE_NAME for a15 select FILE_NAME, TABLESPACE_NAME,
BYTES/1024/1024 m,STATUS from dba_temp_files; |
|
## 将之前配置的TNS中的虚拟IP调整为SCAN IP或者域名 su - oracle cd $ORACLE_HOME/network/admin vi tnsnames.ora XXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db19scan.tzwdb.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xxdb) ) ) DGXXDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hxadg1scan.tzwdb.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb1) ) ) DGXXDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hxadg2scan.tzwdb.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgxxdb2) ) ) |
|
## 备库检查数据同步状态 set lines 222 pages 222 col name for a32 col value for a22 col time_computed for a25 col datum_time for a25 select name,value,time_computed,datum_time from
v$dataguard_stats; ## 查看日志同步是否存在延迟 col "apply delay(s)" for 99999999 col "log delay(s)" for 99999999 select
substr(value,2,2)*24*3600+substr(value,5,2)*3600+substr(value,8,2)*60+substr(value,11,2)
"apply delay(s)",(sysdate-to_date(datum_time,'mm/dd/yyyy
hh24:mi:ss'))*24*60*60 "log delay(s)" from v$dataguard_stats where name='apply lag'; ## 查看日志同步进程状态 col process for a10 col pid for a8 col status for a15 col client_process for a10 col client_pid for a10 col group# for a5 col sequence# for 9999999 col block# for 9999999 col blocks for 9999999 col delay_mins for 9999999 col thread# for 99 select
process,pid,status,client_process,client_pid,group#,thread#,sequence#,block#,blocks,delay_mins from v$managed_standby; |
|
set lines 222 pages 222 col name for a34 col value for a99 select name,value from v$parameter where name
in ( 'db_file_name_convert', 'log_file_name_convert', 'log_archive_dest_1', 'log_archive_dest_2', 'log_archive_dest_state_1', 'log_archive_dest_state_2', 'fal_server', 'fal_client', 'log_archive_config', 'log_archive_format', 'standby_file_management', 'remote_login_passwordfile', 'db_name', 'db_unique_name', 'audit_file_dest', 'control_files', 'local_listener', 'remote_listener', 'cluster_database', 'spfile', 'undo_tablespace') union all select 'FORCE_LOGGING' name,force_logging value
from v$database order by 1; |
|
su - oracle sqlplus / as sysdba alter database flashback on; |
|
rman target / CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED
ON ALL STANDBY; |
|
## 检查是否存在GAP select 'DATABASE WARNNING: Archive Gap occurs
between ADG primary DB and secondary DB whose THREAD is ' || THREAD# || ' Gap value is ' || (HIGH_SEQUENCE# - LOW_SEQUENCE#) from v$archive_gap; ## 检查MRP进程状态 select 'DATABASE ERROR: MRP0 process is down,
please check the adg status' from dual where (select count(1) from gv$managed_standby
where PROCESS = 'MRP0') = 0; select 'DATABASE ERROR: The status MRP0 process
is abnormal, current status is ' || status from gv$managed_standby where PROCESS = 'MRP0' and status != 'APPLYING_LOG'; ## 检查日志延迟是否超过30S with v_lag as (select to_number(substr(value, instr(value,
':', 1, 2) + 1, length(value))) + 60 * to_number(substr(value, instr(value, ':',
1, 1) + 1, 2)) seconds, value from v$dataguard_stats where name = 'apply lag') select 'DATABASE WARNNING : ADG log applying is
slow now, whose lag is larger than ' || value || '. Please Watch it!!' from v_lag where seconds > 30; |





