Oracle RMAN备份加密必须依赖TDE基础设施,未配置并打开Wallet时set encryption on会报ORA-46639;Wallet需通过sqlnet.ora指定路径、用ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY打开,且状态须为OPEN;RMAN加密与TDE数据加密分属两层机制,可叠加但需注意密钥匹配与恢复一致性。
oracle rman 备份加密必须依赖数据库已启用的 tde 基础设施,不能单独靠 rman 命令“开启加密”——没配好 wallet 和主密钥,set encryption on 会直接报错 ora-46639: encryption wallet is not open。
确认 TDE Wallet 已创建并处于 OPEN 状态
TDE 加密能力由 Wallet(钱夹)承载,RMAN 加密备份用的是同一个万能密钥(master encryption key),不是独立密钥。Wallet 必须存在、路径正确、且在数据库启动后被显式打开。
-
SELECT * FROM V$ENCRYPTION_WALLET;返回OPEN状态才算就绪;若为CLOSED或NOT_AVAILABLE,需先执行ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY "your_wallet_password"; - Wallet 路径由
sqlnet.ora中的ENCRYPTION_WALLET_LOCATION指定,不能和默认的cwallet.sso混用;推荐使用带密码保护的ewallet.p12格式 - 首次初始化主密钥用
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "wallet_pwd";,该操作仅执行一次;后续重启只需 OPEN,不可重复执行此命令,否则会重置密钥导致旧加密数据无法访问
RMAN 中启用备份加密的两种方式及适用场景
SET ENCRYPTION ON 是最常用方式,但它依赖当前会话是否具备加密权限;而 CONFIGURE ENCRYPTION FOR DATABASE ON 是全局配置,对所有后续备份生效,但要求用户有 ADMINISTER KEY MANAGEMENT 权限。
- 交互式备份时用
SET ENCRYPTION ON;+BACKUP DATABASE;,适合临时、一次性任务 - 自动化脚本中建议用
CONFIGURE ENCRYPTION FOR DATABASE ON;,避免每次手动SET;但注意该配置会被CONFIGURE ENCRYPTION OFF;显式关闭,不会随数据库重启自动恢复 - 若只希望某次备份加密(比如含敏感表空间),可用
BACKUP DATABASE PLUS ARCHIVELOG ENCRYPTION ALGORITHM 'AES256';显式指定算法,不依赖全局配置
备份加密与 TDE 表空间/列加密的叠加行为
RMAN 加密和 TDE 数据加密是两层独立机制:TDE 保护数据文件内容本身,RMAN 加密保护备份集(backupset)文件。二者可共存,但叠加时有明确规则。
- 对已 TDE 加密的表空间,RMAN 备份时会先解密块 → 压缩(如启用)→ 再用 RMAN 密钥加密 → 写入 backupset;这意味着备份文件里存储的是“RMAN 加密后的密文”,原始 TDE 密文不保留
- 对未加密的表空间,RMAN 直接加密其明文块;最终 backupset 中所有块都经 RMAN 加密,无法区分来源
- 列级 TDE 不影响 RMAN 行为,但会导致该列在备份中出现双重加密(TDE 层 + RMAN 层),恢复时需两层密钥,增加密钥管理负担,一般不推荐混用
恢复时必须确保 Wallet 可用且主密钥匹配
RMAN 加密备份只能用相同数据库实例(或已导入对应 Wallet 和主密钥的实例)恢复;没有 Wallet 或密钥不匹配时,RESTORE 会卡在解密阶段,报错如 ORA-19913: unable to decrypt backup 或 ORA-28365: wallet is not open。
- 恢复前务必检查目标库的
V$ENCRYPTION_WALLET状态,并确认ENCRYPTION_WALLET_LOCATION指向含有效ewallet.p12的目录 - Wallet 密码必须与备份时一致;若用 HSM 管理密钥,恢复环境也必须接入同一 HSM 并完成认证
- 长期归档(LTR)备份更需警惕:Wallet 文件本身必须单独、安全地归档,不能只备份 RMAN 文件;丢失 Wallet = 永久丢失备份数据
最容易被忽略的是 Wallet 生命周期管理——它不像数据库参数那样自动持久化,每次数据库重启后 Wallet 默认 CLOSED,而 RMAN 脚本往往不带 ALTER SYSTEM SET WALLET OPEN 步骤,结果就是备份静默失败或生成未加密备份,却无明显报错。


















