Answers:
类似的Grant Fritchey遇到的问题是,他关闭了SSMS,并丢失了他一直在处理的查询...在此处发布了博客: 哦**********!
编辑
为了使答案更加详细,Grant上方的引用链接提供了一个查询,可简单地转到实例上的缓存以提取您刚刚执行(或至少尝试执行)的查询:
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%';
Grant博客的评论中还提到了一些其他选项:
2005年以上版本,默认跟踪为救援。
默认跟踪将滚动到20mb,但SQL保留5条跟踪的历史记录。通过访问服务器,您可以从MSSQL \ Log目录中检索* .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)
如果数据库处于完全恢复模式,则可能有机会恢复一些数据并通过读取事务日志来了解执行的操作。
不幸的是,默认情况下不支持此操作,但是有多种方法可以执行此操作。
您可以尝试使用第三方工具,例如ApexSQL Log或SQL Log Rescue(免费,但仅限SQL 2000)。
另一个选择是尝试使用未记录的函数DBCC LOG或fn_dblog。这比较复杂,但是免费。
如果数据库设置为完全恢复模型,则可以调查事务日志备份。请参阅fn_dump_dblog
以获取更多信息。