oracle中怎么获取表中数据最后更新时间
1、oracle是安装在虚拟机中的,所需要先启动linux操作系统。
2、然后使用xshell远程连接工具这台机器,并进去启动oracle,sqlplus / as sysdba,启动数据库startup。
3、select to_char(sysdate,'yyyymmdd') from dual; --查出来的结果应该也是20171126。
4、获取上周的日期select to_char(trunc(sysdate,'iw') - 7,'yyyymmdd') from dual union all,select to_char(trunc(sysdate,'iw') - 6,'yyyymmdd') from dual union all,select to_char(trunc(sysdate,'iw') - 5,'yyyymmdd') from dual union all。
5、获取本周日期select to_char(trunc(sysdate,'iw') + 1,'yyyymmdd') from dual union all select to_char(trunc(sysdate,'iw') + 2,'yyyymmdd') from dual union all ,select to_char(trunc(sysdate,'iw') + 3,'yyyymmdd') from dual union all 。
6、上面没有本周一的,获取本周一,select to_char(trunc(sysdate,'iw') +1,'yyyymmdd') from dual;本周一。
推荐于2016-05-03 · 知道合伙人数码行家
第一种方式(块级跟踪):
select ora_rowscn,
dbms_rowid.ROWID_BLOCK_NUMBER(rowid) blockid,
scn_to_timestamp(ora_rowscn)
from hs_futures.fuentrust t
order by scn_to_timestamp(ora_rowscn);
dbms_rowid.ROWID_BLOCK_NUMBER(rowid):是为获取数据所在块的ID
scn_to_timestamp(ora_rowscn):获取数据最所修改的时间
数据发现变化后通过上面SQL语句可以查看到数据最后修改的时间,注意因为是同一个块上,所以这个块上只要有DML操作那么所有数据的scn都更新了,所以凡是跟这条记录在同一个块上数据获取到的ora_rowscn和scn_to_timestamp(ora_rowscn)两个值都发生了相应的变化。
第二种方式(行级跟踪):
create table hs_futures.fuentrust_test1 rowdependencies as
select * from hs_futures.fuentrust
用以上语句创建一个基于ROWDEPENDENCIES模式的表,然后用第一种方法中的SQL去查询此表数据中的ora_rowscn,scn_to_timestamp(ora_rowscn)两个值,修改其中的某一条记录然后再去查询那个值发现发生变化的只是被修改那条记录的这两个值发生了变化,而在同一个块中没有被修改的其它记录这两个值是不会产生变化的。
替换表名即可,英文表名注意要用大写字母
如果不是分区表,对表做DML应该不行吧
估计你说的,只能用触发器实现吧
还得开审计,如果数据插入频繁的话,估计开销很大
建个触发器,每次新增、修改表中记录时,自动添加该字段值为系统时间sysdate
然后你查看该记录的这个字段即可。