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

最新下载

热门教程

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才能加第二个备库

不改这个参数,主库压根不会把归档日志发给新备库,哪怕其他配置全对也白搭。它不是“可选”,是硬性开关。

  1. log_archive_config必须显式列出所有参与DG的db_unique_name,包括主库自己和所有备库,顺序无关,但缺一不可
  2. 错误写法:'dg_config=(pridb,auxdb)' → 只写了两个,新加的slave2不在里面,主库会忽略它的log_archive_dest_n设置
  3. 正确写法:'dg_config=(pridb,auxdb,slave2)' → 改完后需重启主库或至少alter system set ... scope=spfileshutdown immediate / startup
  4. 验证:查v$archive_destdest_id为2、3的条目状态,status应为VALIDerror为空

log_archive_dest_2和log_archive_dest_3不能共用同一个service名

每个备库必须有独立的TNS服务名,且log_archive_dest_n里的SERVICE=xxx必须指向对应备库的监听器,否则日志会发错地方甚至失败。

  1. 主库tnsnames.ora里要定义两个独立条目,比如AUXDBSLAVE2,分别指向不同IP/端口或同一台机器的不同实例名
  2. log_archive_dest_2SERVICE=auxdblog_archive_dest_3就必须配SERVICE=slave2,不能都写auxdb
  3. 如果在单机跑多个备库,listener.ora里必须为每个实例开独立静态注册,端口不能冲突(比如1521、1522、1523)
  4. 常见错误现象:ARC0进程报ORA-16057: DGID not found in dataguard configurationORA-12154: TNS:could not resolve the connect identifier

备库的db_file_name_convert和log_file_name_convert必须唯一对应

两个备库路径不能一样,否则启动时会覆盖文件或报ORA-01119(创建文件失败),尤其在单机多实例场景下极易踩坑。

  1. 假设主库数据文件路径是/u01/oradata/orcl/,第一个备库auxdb设为/u01/oradata/auxdb/,那第二个备库slave2就必须用/u01/oradata/slave2/,不能复用前者的路径
  2. db_file_name_convertlog_file_name_convert参数值要成对出现,且顺序严格:主库路径在前,本备库路径在后
  3. Linux下路径区分大小写,/U01/.../u01/...会被视为不同路径,但Oracle可能因权限或挂载点问题实际无法写入
  4. 目录必须提前mkdir -p并赋予oracle用户读写权限,否则startup nomountalter database mount直接失败

RMAN duplicate时必须指定FOR STANDBY和目标db_unique_name

用RMAN建第二个备库,不加这两个关键参数,恢复出来的库默认是主库角色,无法接收日志,后续alter database recover managed standby database会报错。

  1. 命令模板:duplicate target database for standby from active database dorecover nofilenamecheck;
  2. 其中for standby告诉RMAN生成的是物理备库控制文件,dorecover自动应用归档,nofilenamecheck跳过文件路径冲突校验(配合convert参数使用)
  3. 执行前确保主库已启用FORCE LOGGING且有足够standby redo log组(组数 = 主库online redo log组数 + 1,每新增一个备库不增加该需求,但必须存在)
  4. 如果主库是RAC,duplicate命令需在主库任意节点执行,但tnsnames.oraSERVICE名必须指向主库SCAN或具体实例,不能只配单节点
主库log_archive_dest_state_n容易被忽略,默认是ENABLE,但有些环境会手动设成DEFER;新增备库后务必检查log_archive_dest_state_3是否为ENABLE,否则归档传输静默失效。

热门栏目