要在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;在这个查询中:
p.refcounts 和 p.usecounts 分别表示引用计数和使用计数,帮助我们了解查询的使用频率。sqltext.text 显示具体的SQL语句文本。WHERE 子句用于过滤出我们感兴趣的查询类型和数据库。@DatabaseName 是你要查询的数据库名称,需要在执行时替换为具体的数据库名。需要注意的是,这种方法有一些限制:
如果你需要更全面的审计功能,可以考虑使用SQL Server的审计功能(SQL Server Audit),这类似于Oracle中的AUDIT功能,可以提供更细粒度的监控。
如果有其他更好的实现方案,欢迎私信分享!





以上就是SQL Server中怎么知道哪些表被访问过?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号