恢复加密表空间前必须确保keystore已open且路径正确,否则restore会静默失败或报ora-19913、ora-01157;需在cdb$root中执行rman命令并用pdb_name:tablespace_name格式指定目标。

加密表空间的RMAN备份本身无需特殊操作,但恢复前必须确保keystore已OPEN且路径配置正确,否则RESTORE会静默失败或报ORA-19913、ORA-01157——这不是备份问题,而是密钥不可用。
恢复前必须确认keystore处于OPEN状态
Oracle在恢复加密表空间时,不校验备份集是否加密,而是在解密数据块时实时调用keystore中的主密钥。如果V$ENCRYPTION_WALLET.STATUS不是OPEN(而是OPEN_NO_MASTER_KEY或CLOSED),RMAN会跳过解密步骤,直接写入损坏块或报错。
- 检查命令:
SELECT STATUS FROM V$ENCRYPTION_WALLET;,必须返回OPEN - 打开命令:
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "pwd";(密码必须与创建wallet时一致) - 若用软件wallet,确认
sqlnet.ora中ENCRYPTION_WALLET_LOCATION指向含cwallet.sso的目录;若用HSM,需网络连通且认证未过期 - 数据库重启后,AUTO_LOGIN wallet(
cwallet.sso)可自动OPEN;PASSWORD-based wallet(ewallet.p12)必须手动OPEN,否则恢复必败
RMAN恢复命令本身无变化,但目标必须显式限定PDB
在19c多租户环境下,即使你只想恢复PDB中的加密表空间,也必须在CDB$ROOT中执行RMAN命令,并用pdb_name:tablespace_name格式指定目标。在PDB会话里直接运行RESTORE TABLESPACE users会触发ORA-65023或误操作CDB根容器。
- 正确操作路径:
CONNECT TARGET /→ 切到CDB$ROOT→RESTORE TABLESPACE pdb1:encrypted_tbs; - 备份时若只执行了
BACKUP PLUGGABLE DATABASE pdb1,而未单独备份该表空间,则RESTORE TABLESPACE pdb1:encrypted_tbs会报RMAN-06023;此时需改用RESTORE DATABASE pdb1配合SET NEWNAME定位单个数据文件 - 恢复后务必验证:
SELECT STATUS, ENCRYPTED FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = 'ENCRYPTED_TBS';确认ENCRYPTED为YES且状态非OFFLINE
备份集是否加密是独立配置,别和表空间加密混淆
表空间TDE加密(ENCRYPTION USING 'AES256')和RMAN备份集加密(SET ENCRYPTION ON)完全无关。前者保护磁盘上数据文件,后者保护备份片本身。默认情况下,RMAN备份集是明文的,即使源表空间已加密。
- 若要加密备份集,必须显式启用:
SET ENCRYPTION ON IDENTIFIED BY "backup_key" ONLY;(仅本次会话生效) - 持久化配置:
CONFIGURE ENCRYPTION FOR DATABASE ON;,但该配置依赖keystore OPEN,否则备份仍为明文且无提示 - 使用
SET ENCRYPTION生成的备份可在异机恢复,只需提供相同密码;而TDE恢复必须复制整个wallet文件(不能只导密钥) - 算法切换(如
CONFIGURE ENCRYPTION ALGORITHM 'AES256')会影响跨版本兼容性:19c备份用AES256,12.1实例可能报ORA-28374
最容易被忽略的是:恢复加密表空间时,RMAN不会告诉你keystore没开——它要么卡住几秒后报ORA-19913,要么静默跳过加密数据文件,导致后续RECOVER因找不到文件而失败。务必把SELECT STATUS FROM V$ENCRYPTION_WALLET作为恢复前第一行命令。











