暂无图片
oracle数据库如何能查询到所有表表每天分别的DML次数
我来答
分享
积土为山
2023-11-10
oracle数据库如何能查询到所有表表每天分别的DML次数
暂无图片 50M

oracle数据库如何能查询到所有表表每天分别的DML次数

(排除掉 建一个针对这张表,触发一条,插一条的方案)

感谢各位大佬。

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
广州_老虎刘

看需求不像是要精确统计, 如果只是想得到大概的数据做参考, 可以考虑从dba_tab_modifications中获取, 每天晚上22:00 自动收集统计信息job前, 先手动执行一次 DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO(将缓存数据写入表), 然后备份一下dba_tab_modifications即可查询.  这个操作基本上对系统没有任何的影响. 有个缺点: 不是每个表每天都收集统计信息.  视图里面记录的是自从上次收集统计信息(timestamp字段)以来的dml次数.

暂无图片 评论
暂无图片 有用 6
暂无图片
伟鹏

一个触发器应该是只能对应一个表,这个所有表的话需要写N多个触发器吧。

暂无图片 评论
暂无图片 有用 5
雪落无声

如果你不想使用触发器来记录每个表的 DML 操作,你可以考虑使用 Oracle 数据库的审计功能来实现。

以下是一种基于审计功能的方法来查询所有表每天的 DML 次数:

1. 启用审计功能:首先,你需要启用 Oracle 数据库的审计功能。你可以使用以下 SQL 语句启用审计功能:

AUDIT ALL BY ACCESS;

这将启用对所有对象的访问审计。

2. 执行 DML 操作:执行你的应用程序或其他操作,以触发 DML 操作。

3. 查询审计日志:使用以下 SQL 语句查询审计日志,以获取每个表每天的 DML 次数:

SELECT obj_name, action_name, COUNT(*) AS dml_count, TRUNC(timestamp) AS audit_date
FROM dba_audit_trail
WHERE action_name IN ('INSERT', 'UPDATE', 'DELETE')
GROUP BY obj_name, action_name, TRUNC(timestamp)
ORDER BY audit_date;

这将返回每个表每天的 DML 操作类型和总次数。

请注意,以上步骤假设你具有足够的权限来启用审计功能和查询审计日志。如果你没有足够的权限,你可能需要联系数据库管理员来执行这些操作。

此方法使用 Oracle 数据库的内置审计功能来记录和查询 DML 操作。这样,你无需为每个表创建触发器,但需要确保审计功能已启用,并且你具有足够的权限来查询审计日志。

暂无图片 评论
暂无图片 有用 2
PiscesCanon

开归档了的前提下:

我建议你考虑logminer,既简单又粗暴。

改动还少。

暂无图片 评论
暂无图片 有用 2
董大威

挖日志呗!

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏