set encryption on identified by 必须在 backup 前执行,仅对紧随其后的备份生效,中间插入任何其他rman命令均会导致失效;“only”表示纯口令模式,恢复时须先执行set decryption identified by再restore。
set encryption on identified by 必须在 backup 前执行
这个命令不是“配置开关”,而是给当前 rman session 注入一个临时加密凭据。它只对紧随其后的 backup 命令生效,中间插入任何其他 rman 命令(比如 list backup、crosscheck archivelog、甚至 show all)都可能导致凭据失效或被覆盖。
常见错误现象:执行了 SET ENCRYPTION ON IDENTIFIED BY "mypass",但生成的备份文件仍是明文 → 检查是否在 BACKUP 之前执行了该命令,且中间没穿插其他 RMAN 操作。
-
SET ENCRYPTION ON IDENTIFIED BY "mypass" ONLY是最常用写法,“ONLY” 表示仅使用口令模式(不依赖 wallet),适合跨机归档场景 - 密码区分大小写、首尾空格,恢复时必须完全一致,否则报
ORA-19913: unable to decrypt backup - 同一 session 内多次执行
SET ENCRYPTION,只有最后一次生效,前面的会被丢弃
恢复时必须用 SET DECRYPTION IDENTIFIED BY 显式指定密码
Oracle 不会自动从备份集头读取密码或提示输入。恢复前必须先执行 SET DECRYPTION IDENTIFIED BY "mypass",再执行 RESTORE 或 RECOVER。漏掉这步,RMAN 直接报错,不尝试解密。
注意:SET DECRYPTION 不校验密码正确性,只做语法检查;真正验证发生在 RESTORE 读取备份片时 —— 此时若密码错,报 ORA-19913,且无法跳过或重试,只能退出重来。
- 恢复命令顺序必须是:
SET DECRYPTION IDENTIFIED BY "xxx"→RESTORE DATABASE(或具体数据文件)→RECOVER DATABASE - 如果备份用了
ONLY模式,恢复端无需 wallet 文件,也不需要数据库开启 TDE;纯靠密码解密 - 密码输错一次后,RMAN session 不会缓存错误状态,但下次仍需重新执行
SET DECRYPTION
加密算法默认是 AES128,但切换需确认版本兼容性
Oracle 11gR2 默认支持 AES128、AES192、AES256,但实际可用性取决于补丁级别。某些早期 11.2.0.x 版本(如 11.2.0.1)未启用 AES256,执行 CONFIGURE ENCRYPTION ALGORITHM 'AES256' 会静默失败,后续 BACKUP 仍走 AES128。
验证方法:运行 SELECT * FROM V$RMAN_ENCRYPTION_ALGORITHMS;,看 IS_DEFAULT 和 IS_AVAILABLE 列。若 AES256 的 IS_AVAILABLE = 'NO',说明当前实例不支持。
- 不要在生产环境直接切算法,尤其跨小版本升级后,先用测试库验证
BACKUP+RESTORE全流程 - 用
CONFIGURE ENCRYPTION ALGORITHM设置的是全局默认值,但SET ENCRYPTION会覆盖它 —— 后者优先级更高 - 算法变更不影响已有备份集,只影响新生成的备份
别把 password 模式和 wallet 混用,否则行为不可控
在 11g 中,SET ENCRYPTION ON IDENTIFIED BY 和 CONFIGURE ENCRYPTION FOR DATABASE ON 是两条独立路径。前者绕过 wallet,后者强依赖 wallet 状态。混用会导致静默降级:比如已配 CONFIGURE ENCRYPTION FOR DATABASE ON,但 wallet 关着,此时执行 SET ENCRYPTION ON IDENTIFIED BY,RMAN 仍可能走 wallet 路径并失败,而不是回退到口令模式。
实操建议:明确选择一种模式,不要交叉配置。要离线归档,就坚持用 SET ENCRYPTION ... ONLY;要本地透明加密,就确保 wallet 已 OPEN 并用 CONFIGURE ENCRYPTION FOR DATABASE ON。
- 查 wallet 状态:SQL*Plus 中运行
SELECT STATUS FROM V$ENCRYPTION_WALLET;,必须是OPEN才能用透明模式 - wallet 路径由
sqlnet.ora中的ENCRYPTION_WALLET_LOCATION决定,RMAN 命令不能覆盖 - 11g 不支持 AUTO_LOGIN wallet(
cwallet.sso),必须每次启动 DB 后手动ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "xxx"
密码本身不参与密钥派生过程,只作为封装密钥的保护层;真正加密数据的是内部生成的随机会话密钥。这意味着同一个密码反复用于不同备份,产生的密文完全不同 —— 安全性不依赖密码复杂度,而依赖 Oracle 的密钥管理实现。但这也带来一个容易被忽略的点:你无法通过密码反推备份内容,也无法用密码验证备份完整性;出问题只能靠完整 restore 测试。











