一聚教程网:一个值得你收藏的教程网站

热门教程

如何配置Oracle 12c DG服务在Windows平台下自动启动

时间:2026-06-24 08:54:57 编辑:袖梨 来源:一聚教程网

Oracle 12c DG在Windows下无法通过服务自动启动Broker,必须手动执行STARTUP MOUNT并启动DMON进程;ORACLE_HOME和ORACLE_SID需硬编码进服务配置,且Windows服务账户须对$ORACLE_HOMEdbs有完全控制权限。

oracle 12c dg在windows下无法靠服务“自动启动”实现dg broker接管,必须手动触发startup mount + 启动dmon进程,否则备库始终处于挂起状态。

Windows服务默认不加载用户环境变量,ORACLE_HOMEORACLE_SID必须硬编码

系统服务(如OracleServiceORCL)以LocalSystem或指定用户身份运行,完全不读取NT_USER_PROFILEUSERPROFILE下的.bat/.ps1环境设置。常见错误是服务启起来后sqlplus / as sysdbaORA-12162: TNS:net service name is incorrectly specified——本质是ORACLE_HOME未设或指向错误路径。

  • 修改注册表项HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesOracleService<SID>,在ImagePath值末尾追加 -p "ORACLE_HOME=C:apporacleproduct12.1.0dbhome_1" -p "ORACLE_SID=orcl"(仅适用于Oracle 12.1+,旧版需用ORADIM重建服务)
  • 更稳妥的做法:用sc命令重建服务,显式注入环境变量:
    sc delete OracleServiceORCLoradim -new -sid orcl -intpwd password -startmode manualsc config OracleServiceORCL binPath= "C:apporacleproduct12.1.0dbhome_1binoracle.exe ORCL -p "ORACLE_HOME=C:apporacleproduct12.1.0dbhome_1" -p "ORACLE_SID=orcl""
  • 验证方式:服务启动后,在任务管理器中找到oracle.exe进程 → 右键“属性”→“详细信息”页签 → 查看“命令行”是否含正确-p参数

Broker不随服务自启,必须在MOUNT后手动启动DMON

Windows服务只负责拉起实例,但DMON是Data Guard Broker的后台进程,它依赖V$DATAGUARD_CONFIG视图就绪、dr1<sid>.datdr2<sid>.dat文件存在且可写。服务启动时若直接STARTUP(即OPEN),Broker根本不会初始化;而若服务设为STARTUP MOUNT,又没后续动作,DMON永远不出现。

  • 不能把STARTUP MOUNT写进服务启动参数——Windows服务不支持SQL命令链式执行
  • 必须另建一个计划任务或服务依赖脚本,在OracleService<SID>启动成功后触发:
    sqlplus /nolog <<EOFconnect / as sysdbastartup mount;exit;EOFdgmgrl / <<EOFenable configuration;exit;EOF
  • 关键检查点:ps -ef | findstr dmon(PowerShell中用Get-Process -Name *dmon*)必须能看到进程;dgmgrl / show configuration返回Configuration Status: SUCCESS

备库日志应用不会自动恢复,RECOVER MANAGED STANDBY DATABASE状态不持久

即使DMON起来了,SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY仍可能显示MRP0WAIT_FOR_LOGNOT APPLYING。这是因为Broker下发的恢复命令(如RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT)是一次性动作,OS重启后不重放。

  • Broker配置里Protection Mode设为MAXIMUM PERFORMANCEMAXIMUM AVAILABILITY,避免MAXIMUM PROTECTION导致主库不可达时备库强制SHUTDOWN ABORT
  • 务必禁用Fast-Start Failover(除非已部署OBSERVER),否则重启后FSFO引擎卡在WAITING FOR REDO会阻塞MRP进程
  • 最简兜底方案:在上述启动脚本末尾追加一行sqlplus / as sysdba @recover.sql,其中recover.sql内容为:
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

真正容易被忽略的是dr1<sid>.datdr2<sid>.dat的权限问题:Windows服务账户必须对$ORACLE_HOMEdbs有**完全控制**权限,否则DMON静默失败,连告警日志都不写——查不到错误,只看到dgmgrl连不上、V$DATAGUARD_STATUS为空。

热门栏目