oracle 19c在oci上只能构建物理standby,必须通过rman备份上传+duplicate恢复+手动配置data guard完成,禁用oci自动备份以避免mrp进程争抢归档锁。
oracle 19c 的 adg 本身不直接支持“在 oci 上一键创建物理备库”,必须通过 rman 备份 + 手动恢复 + data guard 配置三步完成,否则会卡在 ora-16047 或 ora-16191 这类连接/认证错误上。
OCI 上的备库只能是物理 standby,不能用 snapshot standby 或 logical standby
OCI 的 Oracle DB System(包括 VM 和 BM 类型)默认启用 DB_UNIQUE_NAME 绑定和强制加密传输,这导致 logical standby 的 SQL Apply 机制无法绕过 OCI 内置的归档日志校验逻辑;snapshot standby 则因 OCI 存储层不开放底层块设备控制权而无法回滚到 SCN 快照点。你唯一能走通的路径是物理 standby:主库用 RMAN 备份 → 上传到 OCI Object Storage → 在 OCI DB System 上用 DUPLICATE TARGET DATABASE FOR STANDBY 恢复 → 手动配置 LOG_ARCHIVE_DEST_2 和 STANDBY_FILE_MANAGEMENT。
- OCI DB System 创建时必须选择与主库完全一致的字符集(如
AL32UTF8)和数据库版本(19.22.0.0级别需严格对齐) - 主库归档日志必须启用
COMPATIBLE='19.0.0',否则 OCI 实例在应用日志时会报ORA-19505(找不到归档文件) - OCI 上的监听必须显式配置
GLOBAL_DBNAME为备库的DB_UNIQUE_NAME,否则DGMGRL无法识别实例状态
主库到 OCI 的网络链路必须绕过公网,且开启 TLS 1.2 强制加密
OCI 要求所有跨区域数据库通信必须通过 FastConnect 或 SSL/TLS 加密通道。直接从本地 IDC 用公网 IP 连 OCI 的 LISTENER 会触发 TNS-12535 超时或 ORA-28860(SSL handshake failed)。实际操作中,你要做三件事:
- 在 OCI 控制台开通 FastConnect 虚拟电路,或在本地部署 Oracle Cloud Agent(
ocda),让其代理主库的ARCH进程向 OCI 传输日志 - 主库
sqlnet.ora中必须设置:SQLNET.ENCRYPTION_SERVER = required、SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = SHA256 - OCI DB System 的
tnsnames.ora中,主库连接串的ADDRESS段必须带(SECURITY=(MY_WALLET_DIRECTORY=/u01/app/oracle/admin/$ORACLE_SID/wallet)),否则ALTER DATABASE RECOVER MANAGED STANDBY DATABASE会立即中断
RMAN 备份上传到 OCI Object Storage 后,DUPLICATE 命令必须指定 NOFILENAMECHECK
OCI DB System 的 ASM 磁盘组路径与本地文件系统结构完全不同(如 +DATA/ORCL/DATAFILE vs /u01/app/oracle/oradata/ORCL),如果在 DUPLICATE 时不加 NOFILENAMECHECK,RMAN 会反复尝试校验源路径是否存在,最终报 RMAN-05501 并退出。正确写法是:
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
DUPLICATE TARGET DATABASE FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK
SPFILE
PARAMETER_VALUE_CONVERT 'orcl','stddb'
SET DB_UNIQUE_NAME='stddb'
SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_sync ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';
}
注意:这里的 orcl_sync 是你在 OCI tnsnames.ora 里定义的服务名,不是主库的 TNS 别名;PARAMETER_VALUE_CONVERT 必须存在,否则备库启动后会试图往主库的归档路径写日志。
备库开启实时应用前,必须关闭 OCI DB System 的自动备份策略
OCI 控制台默认为每个 DB System 开启每日全量备份 + 归档日志备份,这会导致备库的 ARCH 进程与 OCI 自动备份进程争抢归档目录锁,表现为 MRP 进程频繁挂起、V$MANAGED_STANDBY 中 PROCESS 状态卡在 APPLYING_LOG 但 SEQUENCE# 不更新。解决方法只有两个:
- 登录 OCI 控制台 → 进入对应 DB System → “Backup and Recovery” → 关闭 “Automated Backups” 开关
- 或者在 OCI 实例内执行:
srvctl disable database -d stddb(禁用 srvctl 触发的自动备份),再手动运行rman target /执行CONFIGURE RETENTION POLICY TO NONE;
这个点最容易被忽略——很多人测试时一切正常,一到生产环境跑满归档就出问题,根源就在 OCI 自动备份和 DG 日志应用的资源竞争上。











