要在sql server中查看某个数据库中哪些表被访问过,可以使用动态管理视图(dmv)来查询缓存的查询计划和相应的sql文本。以下是实现这个需求的详细步骤和代码:
首先,我们需要理解两个关键的动态管理视图:
sys.dm_exec_cached_plans:存储查询计划,类似于Oracle中的执行计划,通过复用来减少解析消耗,提高数据检索效率。
sys.dm_exec_sql_text:用于获取与查询计划关联的SQL语句文本。
通过这两个视图,我们可以构造一个查询来找出执行过的SELECT语句,从而了解哪些表被访问过。以下是具体的SQL代码:
SELECT p.refcounts, p.usecounts, sqltext.text FROM sys.dm_exec_cached_plans p CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) sqltext WHERE p.objtype IN ('Adhoc', 'Prepared') AND p.cacheobjtype = 'Compiled Plan' AND sqltext.text NOT LIKE '%sys%' AND sqltext.text NOT LIKE '%fn_listextendedproperty%' AND upper(sqltext.text) LIKE 'SELECT%' AND upper(db_name(sqltext.dbid)) = @DatabaseName ORDER BY p.usecounts desc, p.refcounts desc;
在这个查询中:
神采PromeAI
将涂鸦和照片转化为插画,将线稿转化为完整的上色稿。
103 查看详情
p.refcounts 和 p.usecounts 分别表示引用计数和使用计数,帮助我们了解查询的使用频率。sqltext.text 显示具体的SQL语句文本。WHERE 子句用于过滤出我们感兴趣的查询类型和数据库。@DatabaseName 是你要查询的数据库名称,需要在执行时替换为具体的数据库名。
需要注意的是,这种方法有一些限制:
它只能显示缓存中的查询计划,受限于LRU(Least Recently Used)算法。如果数据库非常繁忙,可能只存储最近执行的查询。它不提供审计功能,无法追踪历史访问记录,只能反映当前缓存状态。
如果你需要更全面的审计功能,可以考虑使用SQL Server的审计功能(SQL Server Audit),这类似于Oracle中的AUDIT功能,可以提供更细粒度的监控。
如果有其他更好的实现方案,欢迎私信分享!





以上就是SQL Server中怎么知道哪些表被访问过?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/941695.html
微信扫一扫
支付宝扫一扫