当前位置: 首页 > news >正文

ADG duplicate实施方案详细教程(单机版)

Oracle ADG Duplicate 实施方案详解

概述

本文详细介绍了使用Duplicate方式搭建Oracle Active Data Guard的完整实施方案,包含参数配置、实施步骤、回退方案和常见问题处理。

ADG参数说明

参数名称说明
*.db_create_file_destOMF方式管理数据文件,优先级高于DB_FILE_NAME_CONVERT
*.fal_server指定备用数据库获取丢失归档日志的Oracle Net服务名称
*.db_unique_name数据库唯一名称标识
*.log_archive_config配置Data Guard环境中的数据库唯一名称
*.log_archive_dest_n配置归档传输目的地和属性
*.DB_FILE_NAME_CONVERT主备库数据文件路径转换
*.LOG_FILE_NAME_CONVERT主备库日志文件路径转换
*.service_names服务名,需与主库保持一致

关键参数详解

  • VALID_FOR属性: 建议为每个redo传输目的地指定,确保角色转换后redo传输正常
  • compression=enable: 启用压缩,默认使用ZLIB算法
  • DB_FILE_NAME_CONVERT: 仅用于物理备库的路径名转换
  • LOG_FILE_NAME_CONVERT: 指定备用数据库在线重做日志文件的位置

具体参数作用及格式详见Oracle Data Guard 关键参数详解

一、回退方案测试

清除备库环境步骤

-- 1.停mrp、停库
alter database recover managed standby database cancel;
shutdown immediate;-- 2.删除控制文件
rm -f /oracle/product/oradata/XDGDB/control01.ctl
rm -f /oracle/product/oradata/XDGDB/control02.ctl-- 3.删除spfile(可选)
rm -f /oracle/product/19.3/db/dbs/spfilexdgdb.ora-- 4.删除日志文件
rm -f /oracle/product/oradata/DGDB/redo01.log
rm -f /oracle/product/oradata/DGDB/redo02.log
rm -f /oracle/product/oradata/DGDB/redo03.log
rm -f /oracle/product/oradata/DGDB/redo11.log
rm -f /oracle/product/oradata/DGDB/redo12.log
rm -f /oracle/product/oradata/DGDB/redo13.log-- 5.删除数据文件
rm -f /oracle/product/oradata/DGDB/system01.dbf
rm -f /oracle/XDGDB/datafile/o1_mf_test_dat_n7cxkz91_.dbf
rm -f /oracle/product/oradata/DGDB/sysaux01.dbf
rm -f /oracle/product/oradata/DGDB/undotbs01.dbf
rm -f /oracle/XDGDB/datafile/o1_mf_test_dat_n6y8yk14_.dbf
rm -f /oracle/product/oradata/DGDB/users01.dbf
rm -f /oracle/product/oradata/DGDB/XDGDB/datafile/o1_mf_test_dat_n7cxyqgo_.dbf-- 6.删除临时文件(未open时,temp文件实际不存在)
rm -f /oracle/product/oradata/DGDB/temp01.dbf-- 7.删除archived_log
rm -f /oradata/1_*.dbf

二、变更实施方案-ADG搭建

1. 主库开启force logging

alter database force logging;
select open_mode,database_role,flashback_on,force_logging from v$database;-- RMAN配置
configure archivelog deletion policy to shipped to standby;

2. 主库拷贝密码文件到备库

scp /oracle/product/19.3/db/dbs/orapwxdgdb 备库IP:/home/oracle/

3. 备库创建密码文件

orapwd file='/oracle/product/19.3/db/dbs/orapwxdgdb' input_file='/home/oracle/orapwdgdb'

4. 主库创建pfile并传送到备库

create pfile='/home/oracle/pfile.ora' from spfile;
scp /home/oracle/pfile.ora 备库IP:/home/oracle/

5. 备库修改pfile参数

*.audit_file_dest='/oracle/product/admin/dgdb/adump'
*.control_files='/oracle/product/oradata/XDGDB/control01.ctl','/oracle/product/oradata/XDGDB/control02.ctl'
*.db_create_file_dest='/oracle/product/oradata'
*.fal_server='dgdb'
*.db_unique_name='xdgdb'
*.log_archive_config='dg_config=(dgdb,xdgdb)'
*.log_archive_dest_1='location=/oradata valid_for=(all_logfiles,all_roles) db_unique_name=xdgdb'
*.log_archive_dest_2='SERVICE=dgdb valid_for=(online_logfiles,primary_role) db_unique_name=dgdb lgwr async compression=enable'
*.db_file_name_convert='/oracle','/oracle/product/oradata'
*.log_file_name_convert='/oracle/product/oradata/DGDB','/oracle/product/oradata/XDGDB/onlinelog'
*.standby_file_management='AUTO'
*.service_names='dgdb'

注意: 检查是否需要修改_ktb_debug_flags=8参数

6. 启动备库到nomount并生成spfile

startup nomount pfile='/home/oracle/newstd.pf';
create spfile='/oracle/product/19.3/db/dbs/spfilexdgdb.ora' from pfile='/home/oracle/newstd.pf';
shutdown immediate;
startup nomount;
show parameter spfile;

7. 备库配置静态监听

# listener.ra中配置
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=dgdb)  # 需与数据库参数service_names一致(SID_NAME=xdgdb)(ORACLE_HOME=/oracle/product/19.3/db)))

执行lsnrctl reload查看实例状态

8. 主备库配置tnsnames.ora

# 主库配置
DGDB =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.152.85)(PORT = 21129))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = dgdb)))XDGDB =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.152.88)(PORT = 21129))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = dgdb)(UR=A)  # 解决连接问题可选参数))

9. 验证主备库连接

sqlplus sys/SY#2020oracle@dgdb as sysdba
sqlplus sys/SY#2020oracle@xdgdb as sysdbarman target sys/SY#2020oracle@dgdb auxiliary sys/SY#2020oracle@xdgdb

10. 主库修改参数

alter system set log_archive_config='dg_config=(dgdb,xdgdb)' scope=both sid='*';
alter system set log_archive_dest_2='SERVICE=xdgdb valid_for=(online_logfiles,primary_role) db_unique_name=xdgdb lgwr async compression=enable';
alter system set log_archive_dest_state_2=enable scope=both sid='*';
alter system set archive_lag_target=1800;
alter system set standby_file_management='AUTO';
alter system set db_recovery_file_dest_size=4G;
alter system set db_recovery_file_dest='/oradata';
alter system set db_file_name_convert='/oracle','/oracle' scope=spfile;
alter system set log_file_name_convert='/oradata','/oradata' scope=spfile;
alter system set fal_server='xdgdb' scope=both sid='*';

11. 执行duplicate数据库

创建duplicate.sh脚本:

export NLS_DATE_FORMAT="YYYYMMDD HH24:MI:SS"
date
echo "##########################"
echo "start standby database"
echo "##########################"
sqlplus "/ as sysdba"<<EOF
#startup nomount ;
connect sys/SY#2020oracle@dgdb AS SYSDBA
connect sys/SY#2020oracle@xdgdb AS SYSDBA
exit
EOFdate
echo "##########################"
echo "start to duplicate target database"
echo "##########################"
rman target sys/SY#2020oracle@dgdb auxiliary sys/SY#2020oracle@xdgdb <<EOF
run {
allocate channel ch001 type disk;
allocate channel ch002 type disk;
allocate channel ch003 type disk;
allocate channel ch004 type disk;
allocate auxiliary channel ch005 type disk;
allocate auxiliary channel ch006 type disk;
duplicate target database for standby from active database using compressed backupset nofilenamecheck;
release channel ch001;
release channel ch002;
release channel ch003;
release channel ch004;
release channel ch005;
release channel ch006;
}
exit
EOF

执行脚本:

chmod +x duplicate.sh
sh duplicate.sh

12. 备库验证日志实时应用

-- 检查redo日志情况
set linesize 300
set pagesize 10000
col member for a60
col status for a10
col dbid format 999999999
select a.group#,a.sequence#,a.status,a.bytes/1024/1024/1024 from v$log a;
select a.thread#,b.group#,a.sequence#,a.status,a.bytes/1024/1024,b.member 
from v$log a,v$logfile b
where a.group#=b.group# order by 1;
select * from v$logfile;
select GROUP#,DBID,THREAD#,SEQUENCE#,BYTES,BLOCKSIZE,USED,ARCHIVED,STATUS from v$standby_log;-- 启动mrp
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;-- 检查mrp进程
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#,BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;-- 检查主备库延时
set lines 1200 pages 1200
col name for a30
col value for a30
col datum_time for a30
col time_computed for a30
SELECT name, value, datum_time, time_computed
FROM V$DATAGUARD_STATS;-- 查询归档应用情况
SELECT /*+rule*/ ARCH.THREAD# "Thread",
ARCH.SEQUENCE# "Last Sequence Received",
APPL.SEQUENCE# "Last Sequence Applied",
(ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference"
FROM (SELECT THREAD#, SEQUENCE#
FROM V$ARCHIVED_LOG
WHERE (THREAD#, FIRST_CHANGE#) IN
(SELECT THREAD#, MAX(FIRST_CHANGE#)
FROM V$ARCHIVED_LOG
GROUP BY THREAD#)
GROUP BY THREAD#, SEQUENCE#) ARCH,
(SELECT THREAD#, SEQUENCE#
FROM V$LOG_HISTORY
WHERE (THREAD#, FIRST_CHANGE#) IN
(SELECT THREAD#, MAX(FIRST_CHANGE#)
FROM V$LOG_HISTORY
GROUP BY THREAD#)) APPL
WHERE ARCH.THREAD# = APPL.THREAD#
ORDER BY 1;-- 停止mrp、打开数据库并启动mrp
alter database recover managed standby database cancel;
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

13. 主库执行switchover检查

ALTER SYSTEM ARCHIVE LOG CURRENT;
alter database switchover to xdgdb verify;

三、常见错误及解决方案

场景1:log_file_name_convert设置有误

问题现象:

  • RMAN-05535警告
  • 日志文件路径不正确

解决方案:

  1. 检查日志文件状态:
set linesize 300
set pagesize 10000
col member for a120
col status for a10
col dbid format 999999999
select a.group#,a.sequence#,a.status,a.bytes/1024/1024/1024 from v$log a;
select a.thread#,b.group#,a.sequence#,a.status,a.bytes/1024/1024,b.member from v$log a,v$logfile b
where a.group#=b.group# order by 1;
select * from v$logfile;
select GROUP#,DBID,THREAD#,SEQUENCE#,BYTES,BLOCKSIZE,USED,ARCHIVED,STATUS from v$standby_log;
  1. 方案一: 使用alter database rename file
alter database rename file '/oracle/product/19.3/db/dbs/broken0' to '/oracle/product/oradata/XDGDB/onlinelog/redo01.log';
-- 类似操作重命名其他文件
  1. 方案二: 手动drop后创建redo
-- 查询文件大小
select MEMBERS ,BYTES/1024/1024 as MB from v$log;-- Drop日志文件
alter database drop logfile group 1;
alter database drop logfile group 2;
-- ...其他组-- 重建日志文件
mkdir -p /oracle/product/oradata/DGDB/
alter database add logfile thread 1 group 1 '/oracle/product/oradata/DGDB/redo01.log' size 100M;
alter database add logfile thread 1 group 2 '/oracle/product/oradata/DGDB/redo02.log' size 100M;
alter database add standby logfile thread 1 group 11 '/oracle/product/oradata/DGDB/redo11.log' size 100M;
alter database add standby logfile thread 1 group 12 '/oracle/product/oradata/DGDB/redo12.log' size 100M;
alter database open;

场景2:standby_file_management设置为MANUAL

问题: 主库扩表空间,备库无法正常同步

解决方案:

-- 停止mrp
alter database recover managed standby database cancel;-- 重新创建出错数据文件
alter database create datafile '/oracle/product/19.3/db/dbs/UNNAMED00009' 
as '/oracle/product/oradata/product/oradata/DGDB/test_data04.dbf';-- 修改参数
alter system set standby_file_management=auto;-- 启动mrp
alter database recover managed standby database using current logfile disconnect from session;

场景3:service_names与主库不一致

问题: 切换后应用端需修改连接串中的服务名

解决方案: 确保备库参数*.service_names与主库保持一致

总结

本文详细介绍了Oracle ADG通过Duplicate方式搭建的完整流程,包括参数配置、实施步骤、回退方案和常见问题处理。在实际实施过程中,需要注意参数配置的准确性、文件路径的正确性以及各项验证步骤的完整性,确保ADG环境搭建成功并稳定运行。

关键点:

  1. 参数配置要准确,特别是文件路径转换参数
  2. 确保主备库网络连通性
  3. 实施前后做好验证工作
  4. 掌握常见问题的处理方法
  5. 准备好回退方案以备不时之需
http://www.dtcms.com/a/341668.html

相关文章:

  • 基于STM32单片机智能药盒定时吃药喂水蓝牙APP设计
  • abc Replace
  • cadence16.6修改原理图的Page Number过程中遇到问题
  • 工地智能安全带让高空作业更安全
  • PCB题目基础练习3
  • 前端项目面试分析
  • 解决 nginx: [warn] “ssl_stapling“ ignored, issuer certificate not found 报错
  • cobbler
  • 连续空间强化学习:策略输出的两种形态 —— 概率分布与确定性动作
  • 智慧城市SaaS平台/市政设施运行监测系统之排水管网运行监测、综合管廊运行监测
  • lesson43:Python操作MongoDB数据库完全指南
  • Hyperledger Fabric官方中文教程-改进笔记(十三)-使用测试网络创建通道
  • 25年CATL宁德时代社招晋升竞聘Veirfy测评SHL题库演绎数字语言推理答题指南
  • Js逆向 某花顺登录滑块逆向
  • AI入门学习--理解token
  • Springboot 项目配置多数据源
  • TDengine IDMP 运维指南(5. 使用 Helm 部署)
  • C++ 数据结构 和 STL
  • Python如何将两个列表转化为一个字典
  • Spring Framework 常用注解详解(按所属包分类整理)
  • innovus auto_fix_short.tcl
  • MTK Linux DRM分析(三)- drm_drv.c分析
  • 【智能体记忆】记忆如何塑造我们:深入探究记忆的类型
  • yolov8检测实时视频流,裁剪出未戴头盔的头部方案
  • HarmonyOS相对布局 (RelativeContainer) 基本概念
  • ODPS 十五周年实录 | 为 AI 而生的数据平台
  • 大数据毕业设计选题推荐-基于Hadoop的电信客服数据处理与分析系统-Spark-HDFS-Pandas
  • 文本智能抽取:如何用NLP从海量文本中“炼“出真金?-告别无效阅读,让AI成为你的“信息炼金师
  • OceanBase DBA实战营2期--SQL 关键字限流学习笔记
  • ae复制合成后修改里面图层相互影响问题