ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

定位表最后DML操作的时间

2022-01-06 11:02:03  阅读:154  来源: 互联网

标签:定位 scn 记录 DML block table 操作 select


1、使用ORA_ROWSCN伪列获取表最后的DML时间

默认情况下,每行记录的ORA_ROWSCN是基于数据块(block)的,这样对于某一行最后的DML时间是不准确的,除非在建表的时候执行开启行级跟踪(create table … rowdependencies),这样才会是在行级记录级别的SCN。
而每个数据块(block)在头部是记录了该数据块(block)最近事务的SCN,所以默认情况下,只需要从块的头部直接获取这个值就可以了,不需要其他任何的开销。但是这明显是不精确的,一个数据块(block)中会有很多行记
录,每次事务不可能影响到整个数据块(block)中所有的行,所以这是一个非常不精准的估算值,同一个数据块(block)的所有记录的ORA_ROWSCN都会是相同的。
备注:假如表的数据被TRUNCATE掉或全部DELETE后,也会导致无法定位最后一次DML操作的时间 select max(ora_rowscn), scn_to_timestamp(max(ora_rowscn)) from xxx.xxx; select min(scn) from sys.smon_scn_time; ---最小scn,默认5天。超过记录5天会报ora-08181 eg: select application_number,ora_rowscn from application where application_number=''; select scn_to_timestamp(4364757568) from dual;

2、使用DBA_TAB_MODIFICATIONS来查找

 

1、表之前没有设置MONITORING属性,那么无法查找最后一次DML操作的时间,设置MONITORING属性后,DBA_TAB_MODIFICATIONS视图里面收集的是这个设置时间点后面的DML操作时间。
2、需要执行EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO后,视图才会有数据。
3、DML操作不提交或回滚,也会记录到视图中。这样就会导致数据不准确。
4、收集完统计信息(ANALYZE或dbms_stats包收集统计信息)后,视图中相关表记录会置空
5、CTAS建立的插入信息不会记录

select owner,table_name,monitoring from dba_tables where owner='test' and table_name='test';

alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss";
select inserts,updates,deletes,truncated,timestamp from dba_tab_modifications where table_name='test' and table_owner='test';

 

标签:定位,scn,记录,DML,block,table,操作,select
来源: https://www.cnblogs.com/fchdb/p/15770154.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有