我是 SQL Server Management Studio 的新手,我想知道:有没有办法查看对数据库运行了哪些查询?
在活动监视器中,有一个“最近昂贵的查询”报告,但我猜这不是所有查询,因为我没有看到我运行过的查询。
我正在运行 SQL Server Express 2008 v 10.0.1600.22。
使用 SQL Profiler 并使用过滤器来获取最昂贵的查询。
如果您想查看已执行的查询,则没有支持的默认方法可以执行此操作。您可以尝试一些解决方法,但不要指望找到所有方法。
您肯定无法看到 SELECT 语句,但有一种方法可以通过读取事务日志来查看其他 DML 和 DDL 命令(假设数据库处于完全恢复模式)。
您可以使用 DBCC LOG 或 fn_dblog 命令或第三方日志阅读器(例如 ApexSQL Log)来完成此操作(请注意,该工具是有价格的)
现在,如果您计划审计将来要执行的语句,那么您可以使用 SQL Profiler 来捕获所有内容。
您需要一个 SQL 探查器,它实际上在 SQL Management Studio 外部运行。如果您有 SQL Server 的付费版本(如开发人员版本),它应该作为另一个实用程序包含在其中。
如果您使用免费版本 (SQL Express),您可以下载它们的免费软件配置文件。我使用过 AnjLab 的分析器(可在 http://sites.google.com/site/sqlprofiler 获取),它似乎运行良好。
在正在运行的进程上从 Management Studio 运行以下查询:
DBCC inputbuffer( spid# )
这将返回当前针对所提供的 SPID 的数据库运行的 SQL。请注意,您需要适当的权限才能运行此命令。
这比运行跟踪更好,因为它针对特定的 SPID。您可以根据 CPUTime 和 DiskIO 查看它是否长时间运行。
获取 SPID 64 详细信息的示例:
DBCC inputbuffer(64)
SELECT * FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_exec_connections ec
ON es.session_id = ec.session_id
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) where es.session_id=65 under see text contain...
如果您希望 SSMS 维护查询历史记录,请使用 SSMS 工具包插件。
如果您想监视 SQL Server 当前正在运行的查询,请使用 SQL PROfiler,正如其他人已经建议的那样。
更清晰的查询,针对 Studio sql 查询是:
SELECT text FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_exec_connections ec
ON es.session_id = ec.session_id
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle)
where program_name like '%Query'
好吧,不要参与其中
we are not good to say this