Oracle 11g ADG 主从复制配置手册(Windows 环境)

本文是一份 Windows 环境下 Oracle 11g 搭建 ADG(Active Data Guard)主从复制 的详细配置手册。本手册假设你已经安装好了 Oracle 11gR2(11.2.0.4 推荐)数据库软件,并具备基本的 Windows 和 Oracle 操作知识。


📘 Oracle 11g ADG 主从复制配置手册(Windows 环境)

说明:

  • ADG(Active Data Guard)功能在 Oracle 11g 中仅限企业版(Enterprise Edition)。
  • 本手册以 主库(Primary)→ 备库(Standby) 单向同步为例。
  • 所有操作需以管理员身份运行命令提示符(CMD)或 PowerShell。
  • 本文使用 物理备库(Physical Standby) + 实时应用(Real-Time Apply) 配置。

一、环境准备

项目 主库(Primary) 备库(Standby)
主机名 THINKSERVER WIN-MH9H5DD2I4Q
IP 地址 192.168.254.253 192.168.119.200
Oracle SID SHOPFLOO SHOPFLOO
DB_UNIQUE_NAME primary standby
归档模式 启用 ---
强制日志 启用 ---
密码文件 已创建 需复制
监听器 已配置 需配置
TNSNAMES.ORA 包含双方连接串 包含双方连接串

⚠️ 注意:SID 可以相同,但 DB_UNIQUE_NAME 必须不同。

主备库同时配置如下环境变量:

ORACLE_HOME:E:\app\Administrator\product\11.2.0\dbhome_1

ORACLE_SID:shopfloo


二、主库配置

1. 启用归档模式 & 强制日志

sql 复制代码
-- 以 sysdba 登录 SQL*Plus
sqlplus / as sysdba

-- 关闭数据库
SHUTDOWN IMMEDIATE;

-- 启动到 mount 状态
STARTUP MOUNT;

-- 启用归档
ALTER DATABASE ARCHIVELOG;

-- 启用强制日志
ALTER DATABASE FORCE LOGGING;

-- 打开数据库
ALTER DATABASE OPEN;

验证:

sql 复制代码
ARCHIVE LOG LIST;

SELECT force_logging FROM v$database; -- 应为 YES

2. 创建 standby redo log(SRL)

建议数量 = 主库 redo log 组数 + 1,大小一致。

sql 复制代码
-- 查看当前 redo log

SELECT group#, bytes/1024/1024 "MB" FROM v$log;

-- 假设主库有 3 组 redo log(每组 50M),则创建 4 组 SRL
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('E:\app\Administrator\oradata\SHOPFLOO\redo04.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('E:\app\Administrator\oradata\SHOPFLOO\redo05.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('E:\app\Administrator\oradata\SHOPFLOO\redo06.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('E:\app\Administrator\oradata\SHOPFLOO\redo07.log') SIZE 50M;

3. 创建控制文件

sql 复制代码
alter database create standby controlfile as 'E:\shopfloo\standbyfiles\control01.ctl';

4. 修改主库参数(pfile/spfile)

sql 复制代码
-- 创建 pfile 用于编辑
CREATE PFILE='E:\shopfloo\standbyfiles\pfile' FROM SPFILE;

-- 编辑 pfile,添加以下参数:
*.DB_UNIQUE_NAME='primary'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)'
*.LOG_ARCHIVE_DEST_1= 'LOCATION=E:\app\Administrator\oradata\SHOPFLOO\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary'
*.LOG_ARCHIVE_DEST_2= 'SERVICE=standby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.FAL_SERVER='standby'
*.FAL_CLIENT='primary'
*.STANDBY_FILE_MANAGEMENT=AUTO

替换路径为你实际的归档目录和 Oracle 安装路径。

5. 重启主库并使用新参数

sql 复制代码
SHUTDOWN IMMEDIATE;

STARTUP PFILE='E:\shopfloo\standbyfiles\pfile';

-- 创建新的 spfile
CREATE SPFILE FROM PFILE='E:\shopfloo\standbyfiles\pfile';

SHUTDOWN IMMEDIATE;

STARTUP; -- 使用 spfile 启动

-- 配置数据库为最大可用
select database_role, protection_mode, protection_level from v$database;
-- 如果是maximum performance
-- 修改为maximize availability;
alter database set standby database to maximize availability;

确保主备库密码一致!


三、备库准备

原则上主备库的目录结构,数据文件均一致

1. 创建相同目录结构

在备库主机上创建与主库相同的目录(如 oradata、archivelog、admin 等):

cmd 复制代码
mkdir E:\app\Administrator\oradata\SHOPFLOO\archivelog

2. 复制控制文件和密码文件

将主库的E:\app\Administrator\oradata\SHOPFLOO\CONTROL01.CTL复制到备库的E:\app\Administrator\oradata\SHOPFLOO\目录进行替换。

将主库的E:\app\Administrator\oradata\SHOPFLOO\CONTROL01.CTL复制到备库的E:\app\Administrator\flash_recovery_area\SHOPFLOO\目录,将名称修改为CONTROL02.CTL替换原来的文件。

将主库的 E:\app\Administrator\product\11.2.0\dbhome_1\database\PWDSHOPFLOO.ora 复制到备库的 E:\app\Administrator\product\11.2.0\dbhome_1\database\ 目录进行替换。

3. 创建备库参数文件

复制主库的 E:\shopfloo\standbyfiles\pfile 文件,替换内容如下:

ini 复制代码
*.DB_UNIQUE_NAME='standby'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)'
*.LOG_ARCHIVE_DEST_1= 'LOCATION=E:\app\Administrator\oradata\SHOPFLOO\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'
*.LOG_ARCHIVE_DEST_2= 'SERVICE=primary LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.FAL_SERVER='primary'
*.FAL_CLIENT='standby'
*.STANDBY_FILE_MANAGEMENT=AUTO

注意:db_name 必须与主库一致,db_unique_name 不同。

4. 启动备库到 nomount 状态

cmd 复制代码
sqlplus / as sysdba
sql 复制代码
STARTUP NOMOUNT PFILE='E:\shopfloo\standbyfiles\pfile';

四、配置监听器与 TNS

1. 主库 listener.ora(%ORACLE_HOME%\network\admin\listener.ora)

ini 复制代码
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME = shopfloo)
      (ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
      (SID_NAME = shopfloo)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = THINKSERVER)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = E:\app\Administrator

2. 备库 listener.ora

ini 复制代码
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME = shopfloo)
      (ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
      (SID_NAME = shopfloo)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-MH9H5DD2I4Q)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = E:\app\Administrator

3. 双方 tnsnames.ora 增加(主备都要配置)

ini 复制代码
PRIMARY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.254.253)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = shopfloo)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.119.200)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = shopfloo)
    )
  )

重启监听器:

cmd 复制代码
lsnrctl stop

lsnrctl start

五、使用 RMAN 复制主库到备库

主库 上执行(或通过网络连接到备库实例)

cmd 复制代码
rman TARGET sys/baotianit@primary AUXILIARY sys/baotianit@standby

确保 TNS 配置正确(见第五部分)

执行复制命令:

rman 复制代码
  duplicate target database for standby from active database nofilenamecheck;

此过程会自动创建控制文件、数据文件、spfile,并启动 MRP(Managed Recovery Process)。


六、启动备库 Redo Apply(非实时应用)

登录备库:

sql 复制代码
sqlplus / as sysdba

alter database open;

alter database recover managed standby database disconnect from session;

USING CURRENT LOGFILE 表示启用 Real-Time Apply(需 SRL)。

验证同步状态:

sql 复制代码
-- 查看进程
SELECT process, status, sequence# FROM v$managed_standby;

-- 查看归档应用情况
SELECT sequence#, applied FROM v$archived_log ORDER BY sequence#;

七、测试同步

在主库插入数据:

sql 复制代码
CREATE TABLE test_adg (id NUMBER);

INSERT INTO test_adg VALUES (1);

COMMIT;

ALTER SYSTEM SWITCH LOGFILE;

在备库查询(需先取消应用):

sql 复制代码
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SELECT * FROM test_adg;

-- 查询完后重新启动 apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

若能查到数据,说明同步成功。


八、注意事项

由于备库要实时同步主库的日志,所以要备库先开启,主库后开,主库先关,备库后关

备库/主库重启数据库服务后,如果数据没有同步,检查备库当前模式,命令如下:

sql 复制代码
select open_mode from v$database;
-- 如果是read only 需要切换到 read only with apply

-- 备库切换为实时应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

九、常见问题排查

问题 解决
数据未同步 检查数据库当前模式,如果是read only, 需要切换到 read only with apply
TNS 连接失败 检查 listener、tnsnames、防火墙(1521 端口)
密码不一致 确保主备 PWDORCL.ora 相同
归档无法传输 检查 log_archive_dest_2 状态:SELECT dest_name, status, error FROM v$archive_dest;
MRP 未启动 检查 alert 日志(%ORACLE_BASE%\diag\rdbms\orcl\trace\alert_ORCL.log)

✅ 至此,Oracle 11g ADG 主从复制在 Windows 环境下配置完成。

相关推荐
nee~3 小时前
Android设备USB连接转无线操作(windows)
android·windows
ZHOU_VIP3 小时前
Windows-休眠按钮看不见,怎么启用休眠
windows
万粉变现经纪人5 小时前
如何解决 pip install 代理报错 407 Proxy Authentication Required 问题
windows·python·pycharm·beautifulsoup·bug·pandas·pip
m***11905 小时前
Windows版Redis本地后台启动
数据库·windows·redis
晨同学03277 小时前
【亲测可行】windows安装visual studio & opencv4.10.0
ide·windows·visual studio
水饺编程7 小时前
第3章,[标签 Win32] :WM_CREATE 消息的产生
c语言·c++·windows·visual studio
路由侠内网穿透.7 小时前
本地部署问答社区 Apache Anwser 并实现外部访问
服务器·windows·网络协议·apache·远程工作
天庭鸡腿哥9 小时前
突破SV1P限制,悄咪咪使用!
windows·microsoft·visual studio
广都--编程每日问10 小时前
c++右键菜单统一转化文件为utf8编码
c++·windows·python