Answers:
您可以使用以下命令发现当前事件日志周期中的所有这些事件sp_readerrorlog
:
EXEC sys.sp_readerrorlog @p1 = 0, @p2 = 1, @p3 = N'OFFLINE';
@p1
如果在当前事件日志中找不到它,则可以循环显示值。默认情况下,您应该能够读取当前和之前的6个错误日志文件,因此请使用0-6作为那里的参数,以尽可能远地返回(在我的系统上,我无法获取0
/ NULL
汇总所有日志文件; YMMV )。
将返回如下内容:
LogDate ProcessInfo Text
------------- ----------- ---------------------------------------------------------
yyyy-mm-dd... spid72 Setting database option OFFLINE to ON for database 'foo'.
当然,错误日志的填充量足以使事件在当前错误日志集之前发生。在这种情况下,您很不走运。为了将来保留更长的运行历史记录,您可以更改保留的错误日志的数量。在对象资源管理器中,展开“管理”,右键单击“ SQL Server日志”,然后选择“配置”。您可以在其中更改错误日志文件的回收设置,包括最多保留前99个文件。另请参阅此答案。
请注意sp_readerrorlog
,尽管有许多人对此进行了书面记录,但仍未记录在案并且不受支持。最后,错误日志文件只是纯文本文件,因此您可以编写自己的PowerShell,CLR等,它们仅对文件进行解析并返回相同的信息。您可以使用以下命令确定该实例的错误日志文件的位置:
SELECT SERVERPROPERTY('ErrorLogFileName');
该文件将被命名为ERRORLOG
,ERRORLOG.1
,ERRORLOG.2
等你可以去和一个基本的文本编辑器打开文件,看结构,但我会谨慎使用打开当前文件(ERRORLOG
)。
OFFLINE
。是offline
实际上在状态sys.databases
?