一、 概述和说明
1.1 概述
本文档用于使用多租户数据库的ADG操作
1.2 参考文档
- Document 2617787.1, Business Continuity for Oracle E-Business Suite Release 12.2 on Oracle Database 19c Using Physical Host Name
1.3 配置信息规划
类型 | 主 | 从 |
IP | 192.168.5.12 | 192.168.5.13 |
DB_NAME | EBSCDB | EBSCDB |
DB_UNIQUE_NAME | EBSCDB | EBSCDBDG |
NET Service Name | EBSCDB | EBSCDBDG |
SID | EBSCDB | EBSCDB |
二、主数据库准备
2.1 判断DataGuard是否安装
select * from v$option where parameter = 'Oracle Data Guard';
2.3 配置TNS
主备库都需要设置,添加到CDB的tnsname中
EBSCDB = (DESCRIPTION = (ADDRESS=(PROTOCOL=tcp)(HOST=ebstest01.oracle.com)(PORT=1601)) (CONNECT_DATA = (SERVICE_NAME=EBSCDB)(INSTANCE_NAME=EBSCDB)) ) EBSCDBDG = (DESCRIPTION = (ADDRESS = (PROTOCOL=tcp)(HOST=ebstest02.oracle.com)(PORT=1601)) (CONNECT_DATA = (SERVICE_NAME=EBSCDB)(INSTANCE_NAME=EBSCDB)) ) |
2.4 配置监听
只支持静态监听(ADG)
EBSCDB = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ebstest01.oracle.com)(PORT = 1601)) ) ) SID_LIST_EBSCDB = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = EBSCDB) (SID_NAME = EBSCDB) ) ) |
2.5 生成密码文件
--主库生成密码文件
alter user sys identified by Oracle;
orapwd file=$ORACLE_HOME/dbs/orapwEBSCDB password=Oracle entries=10 ignorecase=y
--拷贝密码文件至备库
scp orapwEBSCDB orastg@192.168.5.13:/home/EBSSTG3/db/19.3.0
2.6 添加standby log
1、查看日志文件、根据实际情况调整 select a.group#, a.thread#, a.bytes, b.member from v$log a, v$logfile b where a.GROUP# = b.GROUP# order by a.group#; 2、删除重建: alter database add logfile group 4 size 1024M; alter database add logfile group 5 size 1024M; alter database add logfile group 6 size 1024M; alter system switch logfile; alter system checkpoint; alter database drop logfile group 1; alter database drop logfile group 2; alter database drop logfile group 3; alter database add logfile group 1 size 1024M; alter database add logfile group 2 size 1024M; alter database add logfile group 3 size 1024M; alter system switch logfile; alter system checkpoint; alter database drop logfile group 4; alter database drop logfile group 5; alter database drop logfile group 6; 3、主库添加standby logfile --主库添加standby logfile,由于redo仅有3组,此处standby我们添加4组 alter database add standby logfile thread 1 group 4 size 1024m; alter database add standby logfile thread 1 group 5 size 1024m; alter database add standby logfile thread 1 group 6 size 1024m; alter database add standby logfile thread 1 group 7 size 1024m; 查询standby logfile select a.group#, a.thread#, a.bytes, b.member from v$standby_log a, v$logfile b where a.GROUP# = b.GROUP# order by a.group#; |
2.2 是否支持Data Guard(企业版才支持),是否归档模式、开启force logging
$ sqlplus '/as sysdba'
SQL> select * from v$option where parameter = 'Managed Standby';
PARAMETER VALUE
Managed Standby TRUE
确认主库处于归档模式
SQL> archive log list
(先检查是否归档模式,不是则修改)
startup mount
alter database archivelog;
alter database open;
FORCE LOGGING模式查询
select FORCE_LOGGING from v$database;
将primary数据库置为FORCE LOGGING模式
SQL> alter database force logging;
2.7 主库配置初始化参数
-- 主库端修改spfile文件 --alter system set db_unique_name='EBSCDB' scope=spfile; -- database restart altersystemset log_archive_config='DG_CONFIG=(EBSCDB,EBSCDBDG)'scope=both; altersystemset log_archive_dest_1='LOCATION=/home/EBSSTG3/db/data/EBSCDB/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=EBSCDB'scope=both; altersystemset log_archive_dest_2='SERVICE=EBSCDBDG LGWR ASYNC=20480 OPTIONAL NOAFFIRM REOPEN=15 NET_TIMEOUT=30 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=EBSCDBDG'scope=both; altersystemset standby_file_management=autoscope=both; altersystemset fal_server='EBSCDBDG'scope=both; altersystemset fal_client='EBSCDB'scope=both; altersystemset db_file_name_convert='/home/EBSSTG3/db/data/EBSCDB','/home/EBSSTG3/db/data/EBSCDB'scope=spfile; altersystemset log_file_name_convert='/home/EBSSTG3/db/data/EBSCDB','/home/EBSSTG3/db/data/EBSCDB'scope=spfile; show parameter log_archive_config show parameter log_archive_dest_1 show parameter log_archive_dest_2 show parameter standby_file_management show parameter fal_server show parameter fal_client |
2.8 准备源系统数据库层以进行克隆
跑下preclone:
cd $ORACLE_HOME/appsutil/scripts/ EBSSTG2_ebsdbuat1
perl adpreclone.pl dbTier
执行数据库备份
三、创建物理备库
3.1 复制和解压ORACLE_HOME
在备库主机上解压备份
3.2 创建备库context_file
cd /home/EBSSTG3/db/19.3.0/appsutil/clone/bin perl adclonectx.pl contextfile=/home/EBSSTG3/db/19.3.0/appsutil/EBSSTG3_ebstest01.xml \ template=/home/EBSSTG3/db/19.3.0/appsutil/template/adxdbctx.tmp |
3.3 配置数据库技术栈
perl adcfgclone.pl dbTechStack /home/EBSSTG3/db/19.3.0/appsutil/EBSSTG3_ebstest02.xml |
3.4 配置备库监听
通过上一步骤生产的监听为动态监听,请配置静态监听
EBSCDB = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ebstest02.oracle.com)(PORT = 1601)) ) ) SID_LIST_EBSCDB = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME =EBSCDB) (SID_NAME = EBSCDB) ) ) |
3.5 备库参数文件
修改一下参数
*.DB_UNIQUE_NAME='EBSCDBDG' *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(EBSCDBDG,EBSCDB)' *.LOG_ARCHIVE_DEST_1='LOCATION=/home/EBSSTG3/db/data/EBSCDB/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=EBSCDBDG' *.LOG_ARCHIVE_DEST_2='SERVICE=EBSCDB LGWR ASYNC=20480 OPTIONAL NOAFFIRM REOPEN=15 NET_TIMEOUT=30 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=EBSCDB' *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.LOG_FILE_NAME_CONVERT='/home/EBSSTG3/db/data/EBSCDB','/home/EBSSTG3/db/data/EBSCDB' *.DB_FILE_NAME_CONVERT='/home/EBSSTG3/db/data/EBSCDB','/home/EBSSTG3/db/data/EBSCDB' *.FAL_CLIENT='EBSCDBDG' *.FAL_SERVER='EBSCDB' *.STANDBY_FILE_MANAGEMENT='AUTO' |
3.6 主备库网络连接测试
-- 主备库均可通过密码文件连接
sqlplus sys/Oracle@EBSCDB as sysdba sqlplus sys/Oracle@EBSCDBDG as sysdba |
3.7 使用RMAN 创建备用数据库
--备库端执行同步命令 sqlplus '/as sysdba' startup nomount rman target sys/Oracle@EBSCDB auxiliary sys/Oracle@EBSCDBDG nocatalog duplicate target database for standby from active database nofilenamecheck; --恢复完成后没有redolog日志,在开启日志应用的时候自动创建 alter database open;--开的是CDB库 |
3.8 开启实时日志同步
查询状态(主库) SQL> select name,database_role,open_mode,switchover_status from v$database; NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS --------- ---------------- -------------------- -------------------- EBSCDB PRIMARY READ WRITE SESSIONS ACTIVE 查询状态(备库),处于只读模式 SQL> select name,database_role,open_mode,switchover_status from v$database; NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS --------- ---------------- -------------------- -------------------- EBSCDB PHYSICAL STANDBY READ ONLY NOT ALLOWED 开启实时应用 alter database recover managed standby database using current logfile disconnect from session; 查询状态(备库),处于只读应用日志模式 SQL> select name,database_role,open_mode,switchover_status from v$database; NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS --------- ---------------- -------------------- -------------------- EBSCDB PHYSICAL STANDBY READ ONLY WITH APPLY NOT ALLOWED |
3.9 同步状态检查
select max(sequence#) from v$archived_log; select dest_name,status,gap_status,error from v$archive_dest_status where dest_id in(1,2); LOG_ARCHIVE_DEST_1VALID LOG_ARCHIVE_DEST_2VALIDLOG SWITCH GAP SELECT RECID,NAME,SEQUENCE#,COMPLETION_TIME,STANDBY_DEST,ARCHIVED,APPLIED,DELETED FROM V$ARCHIVED_LOG WHERE COMPLETION_TIME > SYSDATE -1/24; 开启ADG的过程,只会将CDB置于open read only,并不会将mount状态的pdb1也开启为open read only,开库pdb会重建临时表空间 SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 EBSSTG3 MOUNTED SQL> alter pluggable database all open; Pluggable database altered. SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 EBSSTG3 READ ONLY NO |
四、主备切换
4.1 正常切换
1 检查主备库的状态 主库 SQL> select name,database_role,open_mode,switchover_status from v$database; NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS --------- ---------------- -------------------- -------------------- EBSCDB PRIMARY READ WRITE SESSIONS ACTIVE 备库 SQL> select name,database_role,open_mode,switchover_status from v$database; NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS --------- ---------------- -------------------- -------------------- EBSCDB PHYSICAL STANDBY READ ONLY WITH APPLY NOT ALLOWED 2 主库:切换到备库并关闭原主库 有会话切换:关闭会话并切换 SQL> alter database commit to switchover to physical standby with session shutdown; 无会话切换:(无会话,主库切换状态为TO STANDBY) SQL> alter database commit to switchover to physical standby; 3 备库:检查备库是否可以切换到主库的状态 SQL> select name,database_role,open_mode,switchover_status from v$database; NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS --------- ---------------- -------------------- -------------------- EBSCDB PHYSICAL STANDBY READ ONLY WITH APPLY TO PRIMARY 4 将备库切换为主库并打开新主库 SQL> alter database commit to switchover to primary with session shutdown; SQL> alter database open; 5 检查主库的状态 SQL> select name,database_role,open_mode,switchover_status from v$database; NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS --------- ---------------- -------------------- -------------------- EBSCDB PRIMARY READ WRITE FAILED DESTINATION switchover_status 为 failed destination 原因是备库(原主库)未开启 6 启动备库 启动备库 sqlplus '/as sysdba' startup SQL> select process,status,thread#,sequence#,client_pid from v$managed_standby; --启用备库日志恢复 SQL> alter database recover managed standby database using current logfile disconnect from session; 7 检查主备库的状态及日志同步情况 select dest_name,status,gap_status,error from v$archive_dest_status where dest_id in(1,2); select max(sequence#) from v$archived_log; |
4.2 异常切换
五、问题修复
5.1 ADG 复制报错
Starting backup at 04-MAR-22 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=2804 device type=DISK RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of Duplicate Db command at 03/04/2022 17:47:24 RMAN-05501: aborting duplication of target database RMAN-03015: error occurred in stored script Memory Script RMAN-03009: failure of backup command on ORA_DISK_1 channel at 03/04/2022 17:47:24 ORA-17627: ORA-12154: TNS:could not resolve the connect identifier specified ORA-17629: Cannot connect to the remote database server Tnsping互通 Sqlplus sys/oracle@ebscdb as sysdba 互通 此问题是监听导致(必须使用静态监听配置ADG) |