最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle Data Guard如何新增第二个备库
时间:2026-08-28 09:34:49 编辑:袖梨 来源:一聚教程网
主库必须配置log_archive_config并显式列出所有DB_UNIQUE_NAME(含主库及全部备库),否则不发送归档日志;新增备库时需同步更新该参数、确保LOG_ARCHIVE_DEST_n指向独立TNS服务名、DB_FILE_NAME_CONVERT路径唯一、RMAN duplicate指定FOR STANDBY,且LOG_ARCHIVE_DEST_STATE_n为ENABLE。
主库必须改log_archive_config才能加第二个备库
不改这个参数,主库压根不会把归档日志发给新备库,哪怕其他配置全对也白搭。它不是“可选”,是硬性开关。
-
log_archive_config必须显式列出所有参与DG的db_unique_name,包括主库自己和所有备库,顺序无关,但缺一不可 - 错误写法:
'dg_config=(pridb,auxdb)'→ 只写了两个,新加的slave2不在里面,主库会忽略它的log_archive_dest_n设置 - 正确写法:
'dg_config=(pridb,auxdb,slave2)'→ 改完后需重启主库或至少alter system set ... scope=spfile再shutdown immediate / startup - 验证:查
v$archive_dest里dest_id为2、3的条目状态,status应为VALID,error为空
log_archive_dest_2和log_archive_dest_3不能共用同一个service名
每个备库必须有独立的TNS服务名,且log_archive_dest_n里的SERVICE=xxx必须指向对应备库的监听器,否则日志会发错地方甚至失败。
- 主库
tnsnames.ora里要定义两个独立条目,比如AUXDB和SLAVE2,分别指向不同IP/端口或同一台机器的不同实例名 -
log_archive_dest_2配SERVICE=auxdb,log_archive_dest_3就必须配SERVICE=slave2,不能都写auxdb - 如果在单机跑多个备库,
listener.ora里必须为每个实例开独立静态注册,端口不能冲突(比如1521、1522、1523) - 常见错误现象:
ARC0进程报ORA-16057: DGID not found in dataguard configuration或ORA-12154: TNS:could not resolve the connect identifier
备库的db_file_name_convert和log_file_name_convert必须唯一对应
两个备库路径不能一样,否则启动时会覆盖文件或报ORA-01119(创建文件失败),尤其在单机多实例场景下极易踩坑。
- 假设主库数据文件路径是
/u01/oradata/orcl/,第一个备库auxdb设为/u01/oradata/auxdb/,那第二个备库slave2就必须用/u01/oradata/slave2/,不能复用前者的路径 -
db_file_name_convert和log_file_name_convert参数值要成对出现,且顺序严格:主库路径在前,本备库路径在后 - Linux下路径区分大小写,
/U01/...和/u01/...会被视为不同路径,但Oracle可能因权限或挂载点问题实际无法写入 - 目录必须提前
mkdir -p并赋予oracle用户读写权限,否则startup nomount后alter database mount直接失败
RMAN duplicate时必须指定FOR STANDBY和目标db_unique_name
用RMAN建第二个备库,不加这两个关键参数,恢复出来的库默认是主库角色,无法接收日志,后续alter database recover managed standby database会报错。
- 命令模板:
duplicate target database for standby from active database dorecover nofilenamecheck; - 其中
for standby告诉RMAN生成的是物理备库控制文件,dorecover自动应用归档,nofilenamecheck跳过文件路径冲突校验(配合convert参数使用) - 执行前确保主库已启用
FORCE LOGGING且有足够standby redo log组(组数 = 主库online redo log组数 + 1,每新增一个备库不增加该需求,但必须存在) - 如果主库是RAC,
duplicate命令需在主库任意节点执行,但tnsnames.ora中SERVICE名必须指向主库SCAN或具体实例,不能只配单节点
log_archive_dest_state_n容易被忽略,默认是ENABLE,但有些环境会手动设成DEFER;新增备库后务必检查log_archive_dest_state_3是否为ENABLE,否则归档传输静默失效。