ALTER TABLESPACE ... ENCRYPTION ONLINE 仅对新写入数据加密,存量数据仍为明文;须满足 wallet 已开、路径权限正确、密钥已设、非关键表空间四大硬性条件,且 TEMP 表空间不支持加密,需新建替换。
ALTER TABLESPACE ... ENCRYPTION ONLINE 可以直接对普通表空间启用加密,但仅限于非系统关键表空间,且必须满足 TDE 前置条件——否则命令看似执行成功,实际加密不会生效,后续 DML 或备份时会暴露出问题。
执行 ALTER TABLESPACE ... ENCRYPTION ONLINE 前必须确认的 4 个硬性条件
缺一不可,否则会静默失败或报错:ora-28365: wallet is not open、ora-28370、甚至 ora-44001: invalid tablespace
-
ENCRYPTION_WALLET_LOCATION在sqlnet.ora中已正确定义,且指向真实目录(不能是软链接),格式为(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/admin/ORCLPDB1/wallet))) - Wallet 目录权限为
700,属主为oracle:oinstall;cwallet.sso文件权限为600 - 已执行过
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "pwd" WITH BACKUP,且当前 wallet 处于 open 状态(查V$ENCRYPTION_WALLET的STATUS必须是OPEN) - 目标表空间不是
SYSTEM、SYSAUX、UNDOTBS1、TEMP—— 这些表空间虽可在线加密(SYSTEM等在 12c+ 允许),但 Oracle 明确不推荐,且TEMP会直接报ORA-28370
ENCRYPTION ONLINE 不等于“全量重写”,新旧数据加密状态不同
这是最常被误读的一点:命令执行后 DBA_TABLESPACES.ENCRYPTED 变为 YES,但只代表“后续写入的数据块自动加密”,存量数据仍为明文,除非触发物理重写。
- INSERT/UPDATE 新增或修改的数据,落盘即加密
- 原有数据块(包括索引、LOB、未更新的行)仍保持未加密状态,
DUMP()仍可见明文十六进制 - 真正完成全量加密需人工介入:对大表执行
ALTER TABLE t MOVE TABLESPACE encrypted_ts,或用DBMS_REDEFINITION在线重定义 - 如果业务无法接受停写窗口,可分批处理,但要注意:MOVE 期间原表仍可读写,但会阻塞 DDL 和部分统计信息收集
加密后 TEMP 表空间必须单独处理
ALTER TABLESPACE temp ENCRYPTION ONLINE 必然失败,ORA-28370 是设计使然,不是配置错误。
- 临时表空间不支持任何形式的在线/离线加解密
- 正确做法是:新建一个加密临时表空间,如
CREATE TEMPORARY TABLESPACE temp_enc ENCRYPTION USING 'AES256' TEMPFILE '/path/to/temp_enc01.dbf' SIZE 100M; - 再执行
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_enc; - 旧
TEMP表空间可随后DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;(确保无会话正在使用)
容易忽略的运行时影响:wallet 持续可用性与首次加密初始化卡顿
加密不是一次性操作,而是一个持续依赖 wallet 的运行时行为。很多问题发生在重启后或首次访问新加密表空间时。
- 监听器或数据库重启后,wallet 不会自动 reopen,必须手动执行
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "pwd" - 首次访问新加密表空间中的对象(如物化视图日志、含 LOB 的表)会触发隐式加密初始化,可能造成短时 DML 卡顿,监控
V$SESSION_LONGOPS中encryption initialization类型操作 - RAC 环境下,wallet 路径必须在所有节点完全一致,且每个节点的
oracle用户都具备读取权限,否则某节点可能报ORA-28365而其他节点正常
ALTER TABLESPACE ... ENCRYPTION ONLINE 命令本身,而是 wallet 生命周期管理、存量数据重写节奏控制、以及临时表空间这种“例外路径”的手工兜底——这些环节一旦漏掉,加密就只是个假象。


















