有人远程在我们的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%';

格兰特博客评论中指出的还有更多选项:

其他提示

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%'

缩小结果。

如果数据库处于完整恢复模式,则可能有机会恢复一些数据并了解通过阅读事务日志完成的内容。

不幸的是,默认情况下不支持这一点,但是有多种方法可以做到这一点。

您可以尝试使用第三方工具,例如 ApexSQL日志 或者 SQL原木救援 (免费但仅SQL 2000)。

另一个选择是尝试使用无证件功能DBCC日志或FN_DBLOG。这更复杂,但它是免费的。

如果您的数据库设置为完整恢复模型,则可以研究交易日志备份。看 fn_dump_dblog 有关更多信息。

APEXSQL 具有“执行查询”功能,可让您按日期搜索和过滤。

我不确定它是从SSMS缓存中拉出历史记录还是实际跟踪它。您可以尝试安装它,并希望获得最好的。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top