数据库何时脱机


9

我试图找到一种方法来弄清何时将几个sql数据库脱机。

我检查了日志,但找不到任何此类信息,而且没有启用默认跟踪。

我刚刚得到的信息是,以前有一个DBA使该任务脱机,但是没有电子邮件或书面通讯。

我们可以找到有关此信息吗?

请提出建议,谢谢!

Answers:


11

您可以使用以下命令发现当前事件日志周期中的所有这些事件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');

该文件将被命名为ERRORLOGERRORLOG.1ERRORLOG.2等你可以去和一个基本的文本编辑器打开文件,看结构,但我会谨慎使用打开当前文件(ERRORLOG)。


嗨,亚伦,我的SQL Server日志中没有离线记录。有什么设置可以让我们赶上这种改变吗?谢谢,
DBALUKE HUANG

@DBALUKEHUANG不,如果它发生在错误日志中的最早条目之前,并且事件查看器中没有任何内容,则您不走运。
亚伦·伯特兰

是的,Aaron,SQL Server日志中与脱机没有任何关系。对于在线,它确实具有日志...我只是想知道是否有让SQL Server捕获此消息的特殊设置?
DBALUKE HUANG

@DBALUKEHUANG请记住,除了有人明确设置数据库之外,数据库可能会出于其他原因脱机OFFLINE。是offline实际上在状态sys.databases
亚伦·伯特兰

4

如果数据库设置为脱机:

alter database AdventureWorks2012
set offline;
go

您确实会在SQL Server错误日志中看到一条记录的消息:

将数据库'AdventureWorks2012'的数据库选项OFFLINE设置为ON。

select *
from sys.messages
where language_id = 1033
and text like '%setting database option%for database%';

如果正在监视数据库选项更改,则消息ID为5084。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.