高可用 & 容灾21 分钟阅读
别再手动搭建 Oracle ADG 了!这个脚本让你效率翻倍
大家好,这里是 DBA学习之路,专注于提升数据库运维效率。 @TOC目录 自从今年开源了 Oracle一键安装脚本https://gitee.com/luciferlpc/OracleShellInstall 之后,很多朋友用了之后都是好评连连。
2025年4月21日阅读—点赞—收藏—
oracleracdataguard
在知识库中专注阅读,并随时返回相关工具与课程
大家好,这里是 DBA学习之路,专注于提升数据库运维效率。 @TOC目录 自从今年开源了 Oracle一键安装脚本https://gitee.com/luciferlpc/OracleShellInstall 之后,很多朋友用了之后都是好评连连。
大家好,这里是 DBA学习之路,专注于提升数据库运维效率。
本章目标:掌握本章核心知识点 前置要求:完成前序章节学习 预计时长:60 分钟
自从今年开源了 Oracle一键安装脚本 之后,很多朋友用了之后都是好评连连。

Oracle 一键安装脚本已经部分开源(单机):https://gitee.com/luciferlpc/OracleShellInstall
有部分人咨询是否可以用脚本一键安装 DataGuard?
其实是可以的,但是需要一些小技巧,可以很方便的使用脚本快速搭建 DataGuard。
本文就演示一下如何使用脚本快速搭建 DataGuard。
环境信息:
|角色|IP|数据库版本|DB_NAME|DB_UNIQUE_NAME|SERVICES_NAME|TNS_NAME| |--|--|--|--|--|--|--|--| |主|192.168.6.191|19C|orcl|orcl|orcl|ORCL_PRI| |备|192.168.6.121|19C|orcl|orcldg|orcldg|ORCL_STB|
实战环境使用开源脚本 https://gitee.com/luciferlpc/OracleShellInstall 进行一键安装。
脚本具体试用方式不做详细介绍,请参考文章:
《2025 年宣布一件大事,Oracle 一键安装脚本开源了!》https://www.modb.pro/db/1878623781711785984
新建一个主库环境(如果已有主库环境则直接跳过这一步):
1[root@lucifer soft]# ./OracleShellInstall -lf ens33 `# 主机网卡名称`\2-n lucifer `# 主机名`\3-op oracle `# 主机 oracle 用户密码`\4-d /u01 `# Oracle 软件安装基础目录`\5-ord /oradata `# 数据库文件存放目录`\6-o orcl `# 数据库名称`\7-dp oracle `# sys/system 用户密码`\8-ds AL32UTF8 `# 数据库字符集`\9-ns AL16UTF16 `# 国家字符集`\10-redo 100 `# 在线重做日志大小(M)`\11-opd Y `# 是否优化数据库`1213 ███████ ██ ████████ ██ ██ ██ ██ ██ ██ ██14 ██░░░░░██ ░██ ██░░░░░░ ░██ ░██ ░██░██ ░██ ░██ ░██15 ██ ░░██ ██████ ██████ █████ ░██ █████ ░██ ░██ █████ ░██ ░██░██ ███████ ██████ ██████ ██████ ░██ ░██16░██ ░██░░██░░█ ░░░░░░██ ██░░░██ ░██ ██░░░██░█████████░██████ ██░░░██ ░██ ░██░██░░██░░░██ ██░░░░ ░░░██░ ░░░░░░██ ░██ ░██17░██ ░██ ░██ ░ ███████ ░██ ░░ ░██░███████░░░░░░░░██░██░░░██░███████ ░██ ░██░██ ░██ ░██░░█████ ░██ ███████ ░██ ░██18░░██ ██ ░██ ██░░░░██ ░██ ██ ░██░██░░░░ ░██░██ ░██░██░░░░ ░██ ░██░██ ░██ ░██ ░░░░░██ ░██ ██░░░░██ ░██ ░██19 ░░███████ ░███ ░░████████░░█████ ███░░██████ ████████ ░██ ░██░░██████ ███ ███░██ ███ ░██ ██████ ░░██ ░░████████ ███ ███20 ░░░░░░░ ░░░ ░░░░░░░░ ░░░░░ ░░░ ░░░░░░ ░░░░░░░░ ░░ ░░ ░░░░░░ ░░░ ░░░ ░░ ░░░ ░░ ░░░░░░ ░░ ░░░░░░░░ ░░░ ░░░ 212223注意:本脚本仅用于新服务器上实施部署数据库使用,严禁在已运行数据库的主机上执行,以免发生数据丢失或者损坏,造成不可挽回的损失!!! 2425请选择安装模式 [单机(si)/单机ASM(sa)] : si2627数据库安装模式: single 2829请选择数据库版本 [11|12|19|21|23] : 193031数据库版本: 19 3233OracleShellInstall 开始安装,详细安装过程可查看日志: tail -2000f /soft/print_shell_install_20250421101635.log 3435正在进行安装前检查,请稍等...... 3637正在检测安装包 /soft/LINUX.X64_193000_db_home.zip 的 MD5 值是否正确,请稍等...... 3839正在配置本地软件源......已完成 (耗时: 0 秒)40正在获取操作系统信息......已完成 (耗时: 1 秒)41正在安装依赖包......已完成 (耗时: 100 秒)42正在禁用防火墙......已完成 (耗时: 1 秒)43正在禁用 selinux......已完成 (耗时: 1 秒)44正在配置 nsyctl......已完成 (耗时: 0 秒)45正在配置主机名和 hosts 文件......已完成 (耗时: 0 秒)46正在创建用户和组......已完成 (耗时: 1 秒)47正在创建安装目录......已完成 (耗时: 0 秒)48正在配置 Avahi-daemon 服务......已完成 (耗时: 1 秒)49正在配置透明大页 && NUMA && 磁盘 IO 调度器......已完成 (耗时: 2 秒)50正在配置操作系统参数 sysctl......已完成 (耗时: 1 秒)51正在配置 RemoveIPC......已完成 (耗时: 1 秒)52正在配置用户限制 limit......已完成 (耗时: 0 秒)53正在配置 shm 目录......已完成 (耗时: 2 秒)54正在安装 rlwrap 插件......已完成 (耗时: 11 秒)55正在配置用户环境变量......已完成 (耗时: 1 秒)56正在解压 Oracle 安装包......已完成 (耗时: 63 秒)57正在安装 Oracle 软件......已完成 (耗时: 83 秒)58正在创建监听......已完成 (耗时: 2 秒)59正在创建数据库......已完成 (耗时: 447 秒)60正在优化数据库......已完成 (耗时: 22 秒)6162恭喜!Oracle 一键安装执行完成 (耗时: 748 秒),现在是否重启主机:[Y/N] Y6364正在重启当前节点主机......默认使用专业版脚本。脚本下载:ora100.com/shell-install 安装计时是 748s,也就是说一套单机 19C 从安装到建库结束只需要 12 分钟。
备库只需要安装 Oracle 软件即可:
1[root@luciferdg soft]# ./OracleShellInstall -lf ens33 `# 主机网卡名称`\2-n luciferdg `# 主机名`\3-op oracle `# 主机 oracle 用户密码`\4-d /u01 `# Oracle 软件安装基础目录`\5-ord /oradata `# 数据库文件存放目录`\6-o orcl `# 数据库名称`\7-ud Y `# 安装到 Oracle 软件结束`89 ███████ ██ ████████ ██ ██ ██ ██ ██ ██ ██10 ██░░░░░██ ░██ ██░░░░░░ ░██ ░██ ░██░██ ░██ ░██ ░██11 ██ ░░██ ██████ ██████ █████ ░██ █████ ░██ ░██ █████ ░██ ░██░██ ███████ ██████ ██████ ██████ ░██ ░██12░██ ░██░░██░░█ ░░░░░░██ ██░░░██ ░██ ██░░░██░█████████░██████ ██░░░██ ░██ ░██░██░░██░░░██ ██░░░░ ░░░██░ ░░░░░░██ ░██ ░██13░██ ░██ ░██ ░ ███████ ░██ ░░ ░██░███████░░░░░░░░██░██░░░██░███████ ░██ ░██░██ ░██ ░██░░█████ ░██ ███████ ░██ ░██14░░██ ██ ░██ ██░░░░██ ░██ ██ ░██░██░░░░ ░██░██ ░██░██░░░░ ░██ ░██░██ ░██ ░██ ░░░░░██ ░██ ██░░░░██ ░██ ░██15 ░░███████ ░███ ░░████████░░█████ ███░░██████ ████████ ░██ ░██░░██████ ███ ███░██ ███ ░██ ██████ ░░██ ░░████████ ███ ███16 ░░░░░░░ ░░░ ░░░░░░░░ ░░░░░ ░░░ ░░░░░░ ░░░░░░░░ ░░ ░░ ░░░░░░ ░░░ ░░░ ░░ ░░░ ░░ ░░░░░░ ░░ ░░░░░░░░ ░░░ ░░░ 171819注意:本脚本仅用于新服务器上实施部署数据库使用,严禁在已运行数据库的主机上执行,以免发生数据丢失或者损坏,造成不可挽回的损失!!! 2021请选择安装模式 [单机(si)/单机ASM(sa)] : si2223数据库安装模式: single 2425请选择数据库版本 [11|12|19|21|23] : 192627数据库版本: 19 2829OracleShellInstall 开始安装,详细安装过程可查看日志: tail -2000f /soft/print_shell_install_20250421103706.log 3031正在进行安装前检查,请稍等...... 3233正在检测安装包 /soft/LINUX.X64_193000_db_home.zip 的 MD5 值是否正确,请稍等...... 3435正在配置本地软件源......已完成 (耗时: 0 秒)36正在获取操作系统信息......已完成 (耗时: 1 秒)37正在安装依赖包......已完成 (耗时: 101 秒)38正在禁用防火墙......已完成 (耗时: 1 秒)39正在禁用 selinux......已完成 (耗时: 1 秒)40正在配置 nsyctl......已完成 (耗时: 0 秒)41正在配置主机名和 hosts 文件......已完成 (耗时: 0 秒)42正在创建用户和组......已完成 (耗时: 1 秒)43正在创建安装目录......已完成 (耗时: 0 秒)44正在配置 Avahi-daemon 服务......已完成 (耗时: 1 秒)45正在配置透明大页 && NUMA && 磁盘 IO 调度器......已完成 (耗时: 2 秒)46正在配置操作系统参数 sysctl......已完成 (耗时: 0 秒)47正在配置 RemoveIPC......已完成 (耗时: 1 秒)48正在配置用户限制 limit......已完成 (耗时: 0 秒)49正在配置 shm 目录......已完成 (耗时: 1 秒)50正在安装 rlwrap 插件......已完成 (耗时: 10 秒)51正在配置用户环境变量......已完成 (耗时: 1 秒)52正在解压 Oracle 安装包......已完成 (耗时: 62 秒)53正在安装 Oracle 软件......已完成 (耗时: 80 秒)54正在创建监听......已完成 (耗时: 2 秒)5556恭喜!Oracle 一键安装执行完成 (耗时: 271 秒),现在是否重启主机:[Y/N] Y5758正在重启当前节点主机......默认使用专业版脚本。脚本下载:ora100.com/shell-install 至此,测试环境安装完成。
本文使用 DBCA 一键搭建 DG,方便快捷。
搭建 DataGuard 必须要开启归档模式和强制日志模式:
1SYS@orcl SQL> alter database force logging;23Database altered.45SYS@orcl SQL> select log_mode,force_logging from v$database;67LOG_MODE FORCE_LOGGING8------------ ---------------------------------------9ARCHIVELOG YES查看主库的在线日志数量以及大小:
1-- 主库的在线日志组数为 8 组2set line2223set pagesize10004col member for a605select t2.thread#,t1.group#,t1.member,t2.bytes/1024/1024 from v$logfile t1,v$log t2 where t1.group#=t2.group# order by 1,2;67 THREAD# GROUP# MEMBER T2.BYTES/1024/10248---------- ---------- ------------------------------------------------------------ ------------------9 1 1 /oradata/ORCL/redo01.log 10010 1 2 /oradata/ORCL/redo02.log 10011 1 3 /oradata/ORCL/redo03.log 10012 1 4 /oradata/ORCL/redo04.log 10013 1 5 /oradata/ORCL/redo05.log 10014 1 6 /oradata/ORCL/redo06.log 10015 1 7 /oradata/ORCL/redo07.log 10016 1 8 /oradata/ORCL/redo08.log 100直接在主库增加 n+1 组 standby redo log,rman duplicate 复制之后,备库也会同步创建:
1-- 创建 9 组 standby 日志组2ALTER DATABASE ADD STANDBY LOGFILE3group 20 SIZE 100M,4group 21 SIZE 100M,5group 22 SIZE 100M,6group 23 SIZE 100M,7group 24 SIZE 100M,8group 25 SIZE 100M,9group 26 SIZE 100M,10group 27 SIZE 100M,11group 28 SIZE 100M;1213Database altered.1## 主2[root@lucifer:/root]# cat /etc/hosts3127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain44::1 localhost localhost.localdomain localhost6 localhost6.localdomain656# OracleBegin7# Public IP8192.168.6.191 lucifer9192.168.6.121 luciferdg1011## 备12[root@luciferdg:/root]# cat /etc/hosts13127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain414::1 localhost localhost.localdomain localhost6 localhost6.localdomain61516# OracleBegin17# Public IP18192.168.6.121 luciferdg19192.168.6.191 lucifer主备均需配置 TNS:
1## oracle 用户执行2cat<<-\EOF>>$TNS_ADMIN/tnsnames.ora3ORCL_PRI =4 (DESCRIPTION =5 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.191)(PORT = 1521))6 (CONNECT_DATA =7 (SERVER = DEDICATED)8 (SERVICE_NAME = orcl)9 )10 )11 12ORCL_STB =13 (DESCRIPTION =14 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.121)(PORT = 1521))15 (CONNECT_DATA =16 (SERVER = DEDICATED)17 (SERVICE_NAME = orcldg)18 (UR=A)19 )20 )21EOF打开备库监听:
1[oracle@luciferdg:/home/oracle]$ lsnrctl start23LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 21-APR-2025 11:20:5345Copyright (c) 1991, 2019, Oracle. All rights reserved.67Starting /u01/app/oracle/product/19.3.0/db/bin/tnslsnr: please wait...89TNSLSNR for Linux: Version 19.0.0.0.0 - Production10System parameter file is /u01/app/oracle/product/19.3.0/db/network/admin/listener.ora11Log messages written to /u01/app/oracle/diag/tnslsnr/luciferdg/listener/alert/log.xml12Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=luciferdg)(PORT=1521)))13Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))1415Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=luciferdg)(PORT=1521)))16STATUS of the LISTENER17------------------------18Alias LISTENER19Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production20Start Date 21-APR-2025 11:20:5521Uptime 0 days 0 hr. 0 min. 0 sec22Trace Level off23Security ON: Local OS Authentication24SNMP OFF25Listener Parameter File /u01/app/oracle/product/19.3.0/db/network/admin/listener.ora26Listener Log File /u01/app/oracle/diag/tnslsnr/luciferdg/listener/alert/log.xml27Listening Endpoints Summary...28 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=luciferdg)(PORT=1521)))29 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))30The listener supports no services31The command completed successfully在备库执行一键 DBCA:
1[oracle@luciferdg:~]$ dbca -silent -createDuplicateDB \2-gdbName orcl \3-sid orcl \4-sysPassword oracle \5-primaryDBConnectionString 192.168.6.191:1521/orcl \6-nodelist luciferdg \7-databaseConfigType SINGLE \8-createAsStandby -dbUniqueName orcldg \9-datafileDestination '/oradata'1011Prepare for db operation1222% complete13Listener config step1444% complete15Auxiliary instance creation1667% complete17RMAN duplicate1889% complete19Post duplicate database operations20100% complete2122Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/orcldg/orcldg5.log" for further details.创建过程十分便捷,等待完成即可。
题外话,这里如果创建报错,可以执行以下命令删除对应的 DB 即可:
1dbca -deleteDatabase -sourceDB orcl -silent然后重新执行。
1SQL> alter system set log_archive_config='DG_CONFIG=(ORCL,ORCLDG)';2alter system set log_archive_dest_1='LOCATION=/oradata/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL';3alter system set log_archive_dest_2='SERVICE=ORCL_STB VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLDG';4alter system set fal_client='ORCL_PRI';5alter system set fal_server='ORCL_STB';6alter system set log_archive_dest_state_2=enable;1SQL> alter system set fal_client='ORCL_STB';2alter system set fal_server='ORCL_PRI';3alter system set log_archive_config='dg_config=(ORCL,ORCLDG)';4alter system set log_archive_dest_1='LOCATION=/oradata/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCLDG';5alter system set log_archive_dest_2='SERVICE=ORCL_PRI VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL';6alter system set standby_file_management='AUTO';📢 注意: 如果主库设置了 db_create_file_dest 参数,备库 DBCA 创建后默认会设置 db_create_file_dest 参数,此时主备库不需要设置 convert 参数。
1SQL> recover managed standby database using current logfile disconnect from session;23Database altered.1-- 主库2SQL> set line2222 pages10003col status for a104col type for a105col error for a206col gap_status for a207col synchronization_status for a308col recovery_mode for a609select inst_id,status,DEST_ID,TYPE,ERROR,GAP_STATUS,SYNCHRONIZED,SYNCHRONIZATION_STATUS,RECOVERY_MODE from GV$ARCHIVE_DEST_STATUS where STatus <> 'INACTIVE' and type = 'PHYSICAL';1011 INST_ID STATUS DEST_ID TYPE ERROR GAP_STATUS SYN SYNCHRONIZATION_STATUS RECOVERY_MODE12---------- ---------- ---------- ---------- -------------------- -------------------- --- ------------------------------ ------------------------------------------------------------13 1 VALID 2 PHYSICAL NO GAP NO CHECK CONFIGURATION MANAGED REAL TIME APPLY WITH QUERY1415-- 备库16set line2222 pages100017select process,thread#,group#,sequence#,status from gv$managed_standby;1819PROCESS THREAD# GROUP# SEQUENCE# STATUS20--------- ---------- ---------------------------------------- ---------- ------------21ARCH 0 N/A 0 CONNECTED22DGRD 0 N/A 0 ALLOCATED23DGRD 0 N/A 0 ALLOCATED24ARCH 0 N/A 0 CONNECTED25ARCH 0 N/A 0 CONNECTED26ARCH 0 N/A 0 CONNECTED27RFS 1 N/A 0 IDLE28RFS 1 1 18 IDLE29RFS 0 N/A 0 IDLE30MRP0 1 N/A 18 APPLYING_LOG3132SQL> select t2.thread#,t1.group#,t1.member,t2.STATUS,t2.ARCHIVED,t2.bytes/1024/1024 from v$logfile t1,v$standby_log t2 where t1.group#=t2.group# order by 1,2;3334 THREAD# GROUP# MEMBER STATUS ARC T2.BYTES/1024/102435---------- ---------- ------------------------------------------------------------ ---------- --- ------------------36 0 21 /oradata/ORCLDG/onlinelog/o1_mf_21_n0chq3f2_.log UNASSIGNED YES 10037 0 22 /oradata/ORCLDG/onlinelog/o1_mf_22_n0chq3ow_.log UNASSIGNED YES 10038 0 23 /oradata/ORCLDG/onlinelog/o1_mf_23_n0chq3xj_.log UNASSIGNED YES 10039 0 24 /oradata/ORCLDG/onlinelog/o1_mf_24_n0chq45k_.log UNASSIGNED YES 10040 0 25 /oradata/ORCLDG/onlinelog/o1_mf_25_n0chq4gf_.log UNASSIGNED YES 10041 0 26 /oradata/ORCLDG/onlinelog/o1_mf_26_n0chq4pn_.log UNASSIGNED YES 10042 0 27 /oradata/ORCLDG/onlinelog/o1_mf_27_n0chq4z6_.log UNASSIGNED YES 10043 0 28 /oradata/ORCLDG/onlinelog/o1_mf_28_n0chq57g_.log UNASSIGNED YES 10044 1 20 /oradata/ORCLDG/onlinelog/o1_mf_20_n0chq34m_.log ACTIVE YES 100至此,ADG 搭建完成,备库可用于报表查询。