Oracle双机热备不能仅靠Data Guard实现,因其仅保障数据同步,不提供故障自动切换;必须结合RAC、RoseHA等集群软件或手动Failover流程。
oracle双机热备不能靠data guard单独实现——它只管主备同步,不处理故障自动切换;真要“热备”,必须叠加集群软件(如oracle rac、roseha或veritas)或手动failover流程。
主库是RAC双节点时,Data Guard备库怎么连?
备库不能直接连RAC的SCAN或VIP,必须明确指向其中一个实例(比如hisdb1或hisdb2),否则RMAN DUPLICATE或日志传输会失败。
- tnsnames.ora里为备库配置连接串时,用单实例服务名,例如:
HISDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac01)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = hisdb)(INSTANCE_NAME = his1))) - 主库
LOG_ARCHIVE_DEST_2中service参数也得填这个单实例TNS别名,不是SCAN名 - 如果主库启用了Transparent Application Failover(TAF),备库端的FAL_SERVER/FAL_CLIENT也得用可解析的单节点主机名,避免DNS轮询导致归档中断
备库密码文件必须和主库完全一致?
不是“必须一致”,而是orapwd生成的密码文件必须包含主库SYS密码,且FORCE=Y——否则备库启动到MOUNT后,ALTER DATABASE RECOVER MANAGED STANDBY DATABASE会报ORA-16014: log 1 sequence# 123 not archived, no available destinations。
- 正确做法:在主库任意节点执行
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=xxx force=y,再把生成的文件拷到备库对应路径,覆盖原文件 - 不要用
orapwd在备库本地重生成——新密码文件不认主库的SYS密码,MRP进程起不来 - RAC主库环境下,两个节点的密码文件内容必须相同;备库只需一份,但文件名必须匹配
$ORACLE_SID(如备库SID是hisdbdg,文件名就得是orapwhisdbdg)
RMAN DUPLICATE FOR STANDBY FROM ACTIVE DATABASE卡在“copying standby controlfile”?
常见于主库未提前创建足够数量的Standby Redo Log(SRL),或SRL路径在备库不存在、权限不对。
- 主库上先查
v$logfile,确认已有至少和Online Redo Log组数相同的SRL组(建议多加1组冗余);RAC环境每个实例都要有自己独立的SRL组 - 备库提前建好所有SRL目录(如
/u01/app/oracle/oradata/hisdbdg/),并确保oracle用户有读写权限 - 如果用
FROM ACTIVE DATABASE方式,主库必须开FORCE LOGGING且归档已启用,否则RMAN会在拷贝数据文件阶段报ORA-17628(无法访问主库归档)
备库启动MRP后,v$archived_log里applied=NO?
这不是同步失败,而是备库还没收到主库发来的归档日志——问题一定出在传输层,而不是应用层。
- 先查
v$archive_dest_status里STATUS是否为VALID,ERROR列有没有内容(常见ORA-12154: TNS:could not resolve the connect identifier) - 再查主库
v$archive_gap,看是否有归档缺口;若有,说明主库归档没传过去,检查LOG_ARCHIVE_DEST_2的SYNC/ASYNC设置、网络连通性、监听状态 - 别急着重启MRP进程——
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL再DISCONNECT FROM SESSION可能让已接收但未应用的日志丢失
最易被忽略的是:RAC主库的LOG_ARCHIVE_CONFIG必须显式列出所有节点的DB_UNIQUE_NAME,比如'DG_CONFIG=(hisdb,hisdbdg)',漏掉任何一个节点名,该节点就无法向备库发送归档。


















