Oracle 19c表空间加密必须严格按序完成wallet创建、OPEN、主密钥生成三步,缺一不可;否则ALTER TABLESPACE ENCRYPTION将报ORA-28365。WALLET_ROOT须显式设为绝对路径并赋权700,TDE仅加密新写入数据,存量数据需手动重写,且wallet备份比RMAN更关键。

Oracle 19c 表空间加密不是配完参数就能用,必须按顺序完成 wallet 创建、OPEN、主密钥生成三步,缺一不可;否则 ALTER TABLESPACE ... ENCRYPTION 会静默失败或报 ORA-28365: wallet is not open。
WALLET_ROOT 必须显式设为绝对路径且权限正确
19c 废弃了旧版 ENCRYPTION_WALLET_LOCATION 直接配置方式,改用统一的 WALLET_ROOT 管理。不设它,TDE 操作会 fallback 到不可靠的默认路径(如 $ORACLE_BASE/admin/$DB_UNIQUE_NAME/wallet),尤其在 CDB/PDB 架构下极易错位。
-
WALLET_ROOT必须是绝对路径,例如/u01/app/oracle/admin/orcl/wallet - Oracle 用户对该目录需有读写权限:
chmod 700 /u01/app/oracle/admin/orcl/wallet,属主为oracle:oinstall - 修改后需持久化:执行
alter system set wallet_root='/u01/app/oracle/admin/orcl/wallet' scope=spfile; - 重启数据库或至少 reload 参数后验证:
show parameter wallet_root;和select wrl_parameter from v$encryption_wallet; - 若仍为空或显示旧路径,补设:
alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE" scope=spfile;
administer key management 命令必须在 wallet OPEN 后执行
很多人卡在 set key 报错,其实是因为 wallet 本身还没打开——create keystore 只生成 ewallet.p12,状态仍是 CLOSED。
- 先打开 wallet:
administer key management set keystore open identified by "YourPass123"; - 再生成主密钥:
administer key management set key force keystore identified by "YourPass123" with backup; - 生产环境推荐自动登录 wallet:
administer key management create auto_login keystore from keystore '/u01/app/oracle/admin/orcl/wallet' identified by "YourPass123";,此时需确保cwallet.sso与ewallet.p12同目录,且cwallet.sso权限为600 - 验证状态:
select status, wallet_type from v$encryption_wallet;—— 正常应为OPEN且WALLET_TYPE是AUTOLOGIN或PASSWORD
ALTER TABLESPACE ENCRYPTION ONLINE 的真实行为和限制
该命令看似“一键加密”,实则只对新写入数据生效,存量数据块仍为明文。这不是 bug,而是 TDE 的设计逻辑。
- 执行后
DBA_TABLESPACES.ENCRYPTED显示YES,仅表示“后续 INSERT/UPDATE 自动加密” - 原有数据(含索引、LOB、未更新行)不会重写,
DUMP()仍可见明文十六进制值 - 真正全量加密需人工介入:
ALTER TABLE t MOVE TABLESPACE encrypted_ts;或DBMS_REDEFINITION - 禁止对
SYSTEM、SYSAUX、UNDOTBS1、TEMP执行该命令:TEMP会直接报ORA-28370;正确做法是新建加密临时表空间:CREATE TEMPORARY TABLESPACE temp_enc ENCRYPTION USING 'AES256' ...
加密后最易被忽略的关键点:wallet 备份比 RMAN 还重要
RMAN 备份了加密的数据文件,但没备份 wallet。一旦 wallet 丢失或损坏,所有加密数据将永久不可读——连 Oracle 官方也无法恢复。
- 每次生成主密钥后,必须立即备份整个 wallet 目录(含
ewallet.p12和cwallet.sso) - 备份文件不能存于同一物理磁盘或 ASM diskgroup,建议离线存至安全介质
- 在 Data Guard 或 RAC 环境中,所有节点的 wallet 内容必须完全一致,且路径配置同步
- 密钥轮换时,旧 wallet 仍需保留(用于历史备份恢复),新旧密钥共存是常态,不要试图“重新加载”旧密钥


















