50Moracle数据库如何能查询到所有表表每天分别的DML次数
(排除掉 建一个针对这张表,触发一条,插一条的方案)
感谢各位大佬。
看需求不像是要精确统计, 如果只是想得到大概的数据做参考, 可以考虑从dba_tab_modifications中获取, 每天晚上22:00 自动收集统计信息job前, 先手动执行一次 DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO(将缓存数据写入表), 然后备份一下dba_tab_modifications即可查询. 这个操作基本上对系统没有任何的影响. 有个缺点: 不是每个表每天都收集统计信息. 视图里面记录的是自从上次收集统计信息(timestamp字段)以来的dml次数.
评论
有用 6
如果你不想使用触发器来记录每个表的 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开归档了的前提下:
我建议你考虑logminer,既简单又粗暴。
改动还少。
评论
有用 2
墨值悬赏

