Sql 查询以检查上次在oracle表上执行DML的日期和时间
根据要求,在搜索时,我需要在完整模式的表中捕获最后的DML操作,我注意到了两个参考资料 资源1 资源2 在上述两种查询中,我都尝试过使用 查询1-DBA选项卡修改Sql 查询以检查上次在oracle表上执行DML的日期和时间,sql,oracle,dml,Sql,Oracle,Dml,根据要求,在搜索时,我需要在完整模式的表中捕获最后的DML操作,我注意到了两个参考资料 资源1 资源2 在上述两种查询中,我都尝试过使用 查询1-DBA选项卡修改 SELECT TABLE_OWNER,TABLE_NAME,INSERTS,UPDATES,DELETES,TIMESTAMP AS LAST_CHANGE FROM DBA_TAB_MODIFICATIONS WHERE TO_CHAR(TIMESTAMP,'DD.MM.YYYY') = TO_CHAR(sysdate,'DD
SELECT TABLE_OWNER,TABLE_NAME,INSERTS,UPDATES,DELETES,TIMESTAMP AS LAST_CHANGE
FROM DBA_TAB_MODIFICATIONS
WHERE TO_CHAR(TIMESTAMP,'DD.MM.YYYY') = TO_CHAR(sysdate,'DD.MM.YYYY')
and table_owner='SCHEMA_NAME'
and table_name in ('MY LIST OF TABLES')
结果-它只获取了只获取了几个表的结果
查询2-速度非常慢
select max(ora_rowscn),SCN_TO_TIMESTAMP(max(ora_rowscn)) FROM 'MY LIST OF TABLES'
如果我使用查询2检查任何表,我会得到以下错误
错误查询2
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1
08181. 00000 - "specified number is not a valid system change number"
*Cause: supplied scn was beyond the bounds of a valid scn.
*Action: use a valid scn.
如何一次检查所有表,因为如果需要使用查询2,如何在一次查询中列出多个表
所以我的问题是,哪个查询是正确的
或者其他更好的方法,有什么建议吗
根据建议,我已尝试运行该查询
SELECT *
FROM 'TABLE_NAME' t
MINUS
SELECT *
FROM 'TABLE_NAME'
AS OF timestamp systimestamp - interval '1' day t
截至时间戳systimestamp-间隔“1”天t-我必须在此处使用的值是多少?您可以使用
子句,用于单个架构,例如AUDIT
hr
以管理员身份连接到SYS后,以捕获DMLAUDIT ALL BY hr BY ACCESS; AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY hr BY ACCESS;
- 某些所需表的一些数据库触发器,您需要跟踪其中的 DML数据,以便将日志保留在自定义创建的新日志中 表(s)
- 闪回查询
单个表的语法从时间戳systimestamp-间隔“[年|月|日|小时|分钟|秒]
返回具有相同数据的前一天的数据 小时:分钟:与提供的当前时间的第二个组合 undo_retentionDB参数的值足够大,可以容纳 过去时间点的数据。(对于这种情况,值应为 至少为86400(秒)SELECT * FROM tab t WHERE t.id = :v_id MINUS SELECT * FROM tab AS OF timestamp systimestamp - interval '1' day t WHERE t.id = :v_id;
子句,用于单个架构,例如AUDIT
hr
以管理员身份连接到SYS后,以捕获DMLAUDIT ALL BY hr BY ACCESS; AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY hr BY ACCESS;
- 某些所需表的一些数据库触发器,您需要跟踪其中的 DML数据,以便将日志保留在自定义创建的新日志中 表(s)
- 闪回查询
单个表的语法从时间戳systimestamp-间隔“[年|月|日|小时|分钟|秒]
返回具有相同数据的前一天的数据 小时:分钟:与提供的当前时间的第二个组合 undo_retentionDB参数的值足够大,可以容纳 过去时间点的数据。(对于这种情况,值应为 至少为86400(秒)SELECT * FROM tab t WHERE t.id = :v_id MINUS SELECT * FROM tab AS OF timestamp systimestamp - interval '1' day t WHERE t.id = :v_id;
id
列进行筛选(如果您的表中存在此列)。您还可以完全删除WHERE条件。刚刚提出考虑限制数据,以便通过具有主键的列更快地获取。从时间戳systimestamp-间隔'1'天起,我尝试输入时间戳systimestamp-间隔'100'天起,它不工作,如果要比较2020年8月1日的数据,请阅读关于undo_retention@rakesh的解释,非常感谢我尝试使用闪回查询v_id的各种选项,我需要输入的值是什么?欢迎@rakesh,如果您的表中存在id
列,则建议您按id
列进行筛选。您还可以完全删除WHERE条件。刚刚提出考虑限制数据,以便通过具有主键的列更快地获取。从时间戳systimestamp-间隔'1'天起,我尝试输入时间戳systimestamp-间隔'100'天起,它不工作,如果要比较2020年8月1日的数据,请阅读关于undo_retention@rakesh的说明