DBA_TAB_MODIFICATIONS刷新测试与Oracle DML行为解析

需积分: 5 1 下载量 103 浏览量 更新于2024-08-05 收藏 233KB PDF 举报
Oracle DBA_TAB_MODIFICATIONS 是一个重要的系统视图,用于记录数据库中的表修改信息,包括DML(Data Manipulation Language,数据操作语言)操作如INSERT、UPDATE、DELETE等,但其记录规则和特性需要注意以下几点: 1. **不包含特定类型的修改** - 当使用 `CREATE TABLE AS` 语句创建新表时,DBA_TAB_MODIFICATIONS 不会记录这些操作,因为它们不是对现有表的直接修改。 2. **事务处理的影响** - 未提交的事务中的DML操作会被记录在视图中,即使之后事务被回滚,视图中的记录也不会自动撤销,仍会显示在历史记录中。 3. **APPEND模式插入** - 使用 `/*+ append */` 后缀的插入操作,即使表被其他事务插入数据,DBA_TAB_MODIFICATIONS 也会记录这种追加行为。 4. **视图更新与消失** - 当表经过分析(ANALYZE TABLE)后,DBA_TAB_MODIFICATIONS 可能不再显示最近的修改信息,因为分析过程会更新统计信息并可能清除部分历史记录。 5. **精确记录DML操作** - 对于标准的DML操作,如INSERT、UPDATE和DELETE,DBA_TAB_MODIFICATIONS 记录是准确的,而 TRUNCATE 操作时,TRUNCATED 字段会被标记为 'YES',表示数据已被截断。 6. **隐含参数影响** - 如果数据库的隐含参数 `_dml_monitoring_enabled` 设置为 `false`,则不会记录任何修改信息。 7. **刷新频率** - 尽管文档提到 15 分钟刷新一次,但实际测试中并未观察到这个特性,意味着可能需要定期手动执行 DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO 来获取最新的修改信息。 测试示例中,创建了一个名为 T1 的表并插入了 10 条记录,但查询 DBA_TAB_MODIFICATIONS 时发现没有记录,即使执行了数据库刷新(`DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO`),结果依然为空。这表明,对于 `CREATE TABLE AS` 和初始数据填充的操作,以及隐含参数设置,DBA_TAB_MODIFICATIONS 的刷新频率或记录策略可能并未达到预期。 总结来说,理解 DBA_TAB_MODIFICATIONS 视图的工作原理及其限制,有助于监控数据库更改,但在某些情况下,如特定的DDL(Data Definition Language,数据定义语言)操作或依赖于特定参数配置,可能需要额外关注或采取手动刷新来确保记录的完整性。