Oracle 21c表空间设为READ ONLY后,理论上禁止DML和DDL写入数据文件,但SELECT/EXPDP等操作因使用临时表空间、访问SYSTEM/SYSAUX字典或触发后台元数据更新,可能被误判为“写入”;真正违规操作(如ANALYZE、TRUNCATE)会明确报ORA-01642等错误,而DROP TABLE等仅改字典的操作仍被允许。

Oracle 21c 表空间设为 READ ONLY 后,**理论上不允许任何 DML(INSERT/UPDATE/DELETE)或 DDL(CREATE/ALTER/DROP)写入数据文件**,但你观察到“仍有写操作”,大概率不是表空间被绕过,而是以下几种真实发生、且容易被误判为“写入”的情况。
为什么 SELECT 或 EXPDP 看起来像在写
这类操作不修改数据文件,但会触发后台元数据访问或临时段分配,容易被监控工具(如 v$session_event、AWR 报告中的“db file sequential read”后跟“log file sync”)误标为“写”:
-
SELECT查询本身不写数据文件,但若涉及排序、哈希连接、物化视图刷新等,会使用 临时表空间(TEMP),而非目标只读表空间——这部分 I/O 是合法的,且与表空间只读状态无关 -
expdp导出时会读取数据字典(DBA_TABLES、DBA_SEGMENTS等),这些字典表位于SYSTEM或SYSAUX表空间,属于读写态,所以导出日志里出现log file sync是正常的 - 某些监控脚本把
db file parallel read(大量读)和direct path write(临时段写)混在一起统计,误认为“只读表空间在写”
哪些操作看似只读,实则隐含写入并报错
真正违反只读限制的操作,Oracle 会明确报错,比如:
-
ANALYZE TABLE ... COMPUTE STATISTICS→ 报ORA-01642:因需更新SYSAUX中的统计信息基表,但部分内部逻辑会尝试访问本地段头(segment header),而只读表空间的 segment header 不允许被 touch -
DBMS_STATS.GATHER_TABLE_STATS默认行为可能失败,尤其当statown指向只读表空间内用户,或method_opt触发直方图写入时 -
TRUNCATE TABLE→ 报ORA-01642:虽然不写数据块,但要重置高水位线(HWM)和 segment header,这属于元数据变更,被只读机制拦截 -
DROP TABLE却能成功:因为只删数据字典记录(OBJ$,SEG$),不碰数据文件,属于 Oracle 明确允许的例外
检查是否真有非法写入:盯住 v$datafile_header
如果怀疑底层有意外写(比如备份脚本误执行了 ALTER DATABASE BACKUP CONTROLFILE TO TRACE 后又改了只读表空间),唯一可信证据是看数据文件头 SCN 是否变动:
SELECT file#, name, status, checkpoint_change#, last_change# FROM v$datafile_header WHERE tablespace_name = 'YOUR_READONLY_TS';
- 若
last_change#非空 且 ≠checkpoint_change#→ 文件头与控制文件 SCN 不一致,说明曾被强制写过(如 recovery 后未 resetlogs) - 若
status = 'ONLINE'但last_change#为空 → 正常;但如果此时仍报ORA-00372,问题不在只读设置,而在文件系统权限或磁盘只读挂载 -
checkpoint_change#在只读期间应冻结不变;若它持续增长,说明数据库没真正设成只读(比如 ALTER 命令卡在等待锁,实际未生效)
最容易被忽略的“写”来源:归档与闪回日志
即使表空间只读,Oracle 仍会:
- 在归档模式下,继续生成归档日志(
ARCHIVE LOG LIST显示Archive Mode),因为只读表空间的 SCN 变更仍需被记录(用于介质恢复一致性) - 若启用了闪回数据库(
FLASHBACK DATABASE),且该表空间未显式执行ALTER TABLESPACE ... FLASHBACK OFF,则闪回日志(RVWR进程)可能尝试写入——这会导致ORA-38705或挂起 - 审计日志(
unified auditing)若启用,审计记录写入AUDSYS表空间,与只读表空间无关,但审计开关本身会触发少量元数据写入
真正需要警惕的,是那些让 checkpoint_change# 异动、或让 v$datafile 中 status 变为 RECOVER 的操作——它们不是“看起来像写”,而是实实在在破坏了只读承诺的完整性。


















