Oracle 10g Physical DataGuard通过重做日志传输和应用实现主备库数据一致,是数据库高可用架构的核心组件,搭建过程需要严格遵循步骤避免配置错误。

环境准备
搭建前需要准备两台服务器,分别作为主库(Primary)和备库(Standby),要求操作系统版本一致,Oracle 10g软件安装路径相同,且主备库数据库版本完全一致。需要提前规划好以下信息:
- 主库实例名:orcl_pri,备库实例名:orcl_stb
- 主备库数据文件、日志文件路径保持一致
- 确保主备库网络互通,端口1521可正常访问
主库配置步骤
1. 开启强制归档和归档模式
Physical DataGuard依赖归档日志传输,首先需要确认主库开启归档和强制归档,执行以下SQL:
-- 查看当前归档状态 SELECT log_mode, force_logging FROM v$database; -- 开启强制归档 ALTER DATABASE FORCE LOGGING; -- 如果不是归档模式,执行以下命令开启 SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
2. 创建备库控制文件
主库需要生成用于备库的控制文件,执行以下命令:
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/u01/app/oracle/standby_ctl.ctl';
3. 配置主库参数
修改主库spfile参数,添加DataGuard相关配置:
-- 设置主库唯一标识 ALTER SYSTEM SET db_unique_name='orcl_pri' SCOPE=SPFILE; -- 配置归档日志目标,本地和备库 ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pri' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_2='SERVICE=orcl_stb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stb' SCOPE=SPFILE; -- 开启归档目标 ALTER SYSTEM SET log_archive_dest_state_1='ENABLE' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=SPFILE; -- 配置备库文件转换路径(如果路径不一致需要设置) ALTER SYSTEM SET db_file_name_convert='/u01/app/oracle/oradata/orcl_stb/','/u01/app/oracle/oradata/orcl_pri/' SCOPE=SPFILE; ALTER SYSTEM SET log_file_name_convert='/u01/app/oracle/oradata/orcl_stb/','/u01/app/oracle/oradata/orcl_pri/' SCOPE=SPFILE; -- 设置FAL服务器和客户端 ALTER SYSTEM SET fal_server='orcl_stb' SCOPE=SPFILE; ALTER SYSTEM SET fal_client='orcl_pri' SCOPE=SPFILE;
修改完成后重启主库使参数生效:
SHUTDOWN IMMEDIATE; STARTUP;
4. 配置主库监听和TNS
修改主库listener.ora,添加静态注册:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl_pri)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME = orcl_pri)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 主库IP)(PORT = 1521))
)
)修改tnsnames.ora,添加主备库TNS配置:
orcl_pri =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 主库IP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_pri)
)
)
orcl_stb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 备库IP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_stb)
)
)重启监听:
lsnrctl stop lsnrctl start
备库配置步骤
1. 复制主库文件到备库
将主库的以下文件复制到备库对应路径:
- 数据文件、日志文件
- 刚才生成的备库控制文件,复制到备库控制文件路径,重命名为原控制文件名
- 主库的密码文件,复制到备库$ORACLE_HOME/dbs目录,重命名为orapworcl_stb
- 主库的pfile或者spfile,复制到备库对应目录
2. 修改备库参数
如果使用主库pfile启动备库,需要修改以下参数:
-- 设置备库唯一标识 db_unique_name='orcl_stb' -- 调整归档目标配置 log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_stb' log_archive_dest_2='SERVICE=orcl_pri LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_pri' -- 调整文件转换路径 db_file_name_convert='/u01/app/oracle/oradata/orcl_pri/','/u01/app/oracle/oradata/orcl_stb/' log_file_name_convert='/u01/app/oracle/oradata/orcl_pri/','/u01/app/oracle/oradata/orcl_stb/' -- 调整FAL配置 fal_server='orcl_pri' fal_client='orcl_stb'
3. 启动备库到挂载状态
执行以下命令启动备库:
STARTUP MOUNT;
4. 配置备库监听和TNS
备库listener.ora配置和主库类似,将GLOBAL_DBNAME改为orcl_stb,SID_NAME改为orcl_stb,HOST改为备库IP。tnsnames.ora和主库保持一致即可,之后重启备库监听。
开启日志应用
备库启动到挂载状态后,开启实时日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
同步验证
可以通过以下方式验证主备同步是否正常:
1. 查看归档日志传输状态
在主库执行:
SELECT dest_id, status, error FROM v$archive_dest WHERE dest_id <= 2;
如果status为VALID,说明归档传输正常。
2. 查看备库应用状态
在备库执行:
SELECT sequence#, applied FROM v$archived_log ORDER BY sequence# DESC FETCH FIRST 10 ROWS ONLY;
如果applied列显示YES,说明日志已经正常应用。
3. 主库创建测试表验证
主库执行:
CREATE TABLE test_dg (id NUMBER, name VARCHAR2(20)); INSERT INTO test_dg VALUES (1, 'test'); COMMIT;
切换备库到只读状态查看数据:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE OPEN READ ONLY; SELECT * FROM test_dg;
如果能查到插入的数据,说明主备同步正常。之后可以重新开启日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
常见问题排查
- 归档传输失败:检查主备库网络是否互通,TNS配置是否正确,监听是否正常启动
- 备库无法挂载:检查控制文件是否为备库控制文件,参数文件配置是否正确
- 日志应用延迟:检查备库服务器性能,归档日志路径空间是否充足
Oracle_10gPhysical_DataGuard数据库容灾主备同步归档日志修改时间:2026-06-06 23:02:54