我可以看到在SQL Server数据库上运行的历史查询吗?
-
16-10-2019 - |
题
有人远程在我们的SQL Server数据库上运行查询,他们的系统崩溃了。
他们没有该查询的备份,并且希望查看服务器上运行的内容。
是否可以在日志或历史记录中找到此查询?
解决方案
类似的格兰特·弗里奇(Grant Fritchey)也遇到了他关闭SSM并失去了他一直在研究的查询的问题...在这里博客:哦 **********!
编辑
为了使答案的详细信息更详细,上面链接的赠款提供了一个查询,可以简单地转到实例上的缓存,以拔出您刚刚执行(或至少尝试)的查询:
SELECT dest.text
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE deqs.last_execution_time > '5/19/2011 11:00'
AND dest.text LIKE 'WITH%';
格兰特博客评论中指出的还有更多选项:
- 杰米·汤姆森(Jamie Thomson)指向SSM实际上有一个“恢复”区域 在您的Windows配置文件下,类似于Word或Excel恢复。
- 有关SSMS工具包的评论中的另一个单独注释, ,但是此附加组件仅适用于SQL Server2008。从SQL Server 2012开始,它仅付费,但是您可能会发现许多功能。
其他提示
2005+, 默认跟踪 救援。
默认跟踪在20MB处滚动,但SQL保留了5个轨迹的历史记录。访问服务器的访问可以从MSSQL Log Directory检索 *.trc文件。如果您无法访问服务器,以下内容将为您提供当前默认跟踪文件的名称:
SELECT * FROM ::fn_trace_getinfo(default)
如果当前文件是例如e: mssql.1 mssql log log_200.trc,则以前的文件应为log_199.trc,log_198.trc等。
SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)
你 可能 能够从缓存的查询计划中检索信息,检查BOL以获取SYS.DM_EXEC_QUERY_STATS上的信息,或从连接到同一数据库的管理工作室运行此信息:
SELECT d.plan_handle ,
d.sql_handle ,
e.text
FROM sys.dm_exec_query_stats d
CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e
过滤输出
WHERE text like '%something%'
缩小结果。
如果您的数据库设置为完整恢复模型,则可以研究交易日志备份。看 fn_dump_dblog
有关更多信息。
APEXSQL 具有“执行查询”功能,可让您按日期搜索和过滤。
我不确定它是从SSMS缓存中拉出历史记录还是实际跟踪它。您可以尝试安装它,并希望获得最好的。
不隶属于 dba.stackexchange