ora-28365同步失败时,须确保主备库wallet_root路径一致并重启生效,在cdb$root及各pdb中均执行administer key management set keystore open,且主库生成主密钥并with backup后手动同步至备库对应目录。

ORA-28365 同步失败时,先确认主库 wallet 是否真正 OPEN
备库日志应用卡住、ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 报 ORA-28365: wallet is not open,根本原因不是 DG 配置错,而是主库的密钥库虽已创建,但状态仍是 CLOSED。TDE 加密数据写入 redo 后,备库回放时需用主库相同的主密钥解密块——若 wallet 没打开,连密钥都拿不到,同步必然中断。
- 必须在主库 CDB$ROOT 和所有相关 PDB 中分别执行:
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "pwd" - 验证状态:
SELECT STATUS, WALLET_TYPE FROM V$ENCRYPTION_WALLET,结果必须是OPEN+PASSWORD或AUTOLOGIN - 如果只在 PDB 里 open 了 wallet,CDB$ROOT 仍是 CLOSED,DG 日志仍会因找不到密钥而报错
WALLET_ROOT 必须在主备库完全一致且重启生效
Oracle 19c 不再读 sqlnet.ora 的 ENCRYPTION_WALLET_LOCATION,只认 WALLET_ROOT 参数。主备库路径不一致,或备库没设该参数,会导致备库尝试在默认路径(如 $ORACLE_BASE/admin/$DB_UNIQUE_NAME/wallet)找 wallet,自然失败。
- 主库执行:
ALTER SYSTEM SET WALLET_ROOT='/u01/app/oracle/admin/ORCL/wallet' SCOPE=SPFILE SID='*'; - 备库必须执行**完全相同**的语句,且
SID='*'覆盖所有实例(RAC 多节点也需统一) - 修改后主备库均需重启:仅
ALTER SYSTEM RELOAD不生效,wallet_root 是静态参数 - 重启后验证:
SHOW PARAMETER WALLET_ROOT和SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET两处输出必须完全匹配
TDE 主密钥必须在主库生成并显式备份,不能依赖 auto-login 自动传播
很多人以为只要主库建了 cwallet.sso,备库就能自动识别密钥——这是错的。auto-login 只解决“免密码打开”,不解决“密钥同步”。备库没有主密钥,就无法解密主库发来的加密 redo 块。
- 主库必须执行:
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY "pwd" WITH BACKUP -
WITH BACKUP生成的备份文件(如ewallet.p12.backup)要手动拷贝到备库对应WALLET_ROOT目录下 - 备库不能自己运行
SET KEY——它必须用主库生成的同一把主密钥,否则解密失败 - 如果用了 auto-login,主库的
cwallet.sso也要一并拷过去,且权限严格为600,属主oracle:oinstall
备库 wallet 状态必须为 OPEN,且不能处于 RESTRICTED 模式
即使主备 wallet 路径、密钥、权限全对,备库若以 RESTRICTED 模式启动,V$ENCRYPTION_WALLET 会显示 OPEN,但 TDE 实际不可用,DG 同步仍卡在加密块上。
- 检查备库模式:
SELECT LOG_MODE, OPEN_MODE, RESTRICTED FROM V$DATABASE;,RESTRICTED列必须为NO - 若为 YES,执行:
ALTER SYSTEM DISABLE RESTRICTED SESSION; - 备库 wallet 打开命令与主库一致,但必须在 MOUNT 状态下执行(不能等 OPEN 后再做)
- RAC 环境下,每个节点都要单独执行 open wallet,不能只在一个 instance 上操作











