为什么 DBCC CHECKDB 在错误日志中多次出现

Nit*_*mar 2 sql-server

我有 dbcc checkdb 命令的问题。在错误日志文件中,我在 30-45 分钟的时间间隔内多次找到 dbcc checkdb 命令。我已经安排了一个作业,其中 grep 错误日志文件中的关键字错误,但由于 dbcc checkdb 所有的 dbcc checkdb 命令,我的邮件都装满了它。

任何人都可以帮助我解释为什么我们使用dbcc checkdb命令以及它的用途是什么。这种行为是否正常,或者我们需要对其采取一些措施。

请帮帮我。

谢谢,

尼特什·库马尔

Tho*_*ger 5

我认为@MartinSmith 在他的评论中指出了这一点。当您AUTO_CLOSE设置为 时ON,数据库将在最后一个用户退出时关闭。同样,当有人尝试使用数据库时,它会重新打开。当数据库重新打开时,DBCC CHECKDB将记录有关上次运行的消息。

以下面的例子(示例代码,不打算在生产环境附近的任何地方运行)来证明这一点:

create database AutoCloseDb;
go

alter database AutoCloseDb
set auto_close on;
go

dbcc checkdb('AutoCloseDb');
go

-- rotate the below "use" statements a few times in order
-- to cause the database to close and reopen
--
use AutoCloseDb;
go

use master;
go
Run Code Online (Sandbox Code Playgroud)

在我们执行了几次use AutoCloseDb;后跟之后use master;,我们会在 SQL Server 错误日志中看到类似于下面的内容(我使用下面的 PowerShell 代码来检索它):

Add-Type -Path "C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"

$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server("<your SQL Server name>")

$SqlServer.ReadErrorLog() |
    Where-Object {$_.Text -like "*AutoCloseDb*"} |
    Select-Object LogDate, Text |
    Format-List
Run Code Online (Sandbox Code Playgroud)

在我的测试环境中,输出如下:

LogDate:11/15/2013 5:47:17 AM 文本:启动数据库“AutoCloseDb”。

LogDate:11/15/2013 5:47:18 AM 文本:数据库“AutoCloseDb”的 CHECKDB 在 2013-11-15 05:39:19.137(当地时间)完成且没有错误。这只是一条信息性消息;无需用户操作。

LogDate:11/15/2013 5:47:18 AM 文本:启动数据库“AutoCloseDb”。

LogDate:11/15/2013 5:47:18 AM 文本:数据库“AutoCloseDb”的 CHECKDB 在 2013-11-15 05:39:19.137(当地时间)完成且没有错误。这只是一条信息性消息;无需用户操作。

LogDate:11/15/2013 5:47:19 AM 文本:启动数据库“AutoCloseDb”。

LogDate:11/15/2013 5:47:19 AM 文本:数据库“AutoCloseDb”的 CHECKDB 在 2013-11-15 05:39:19.137(当地时间)完成且没有错误。这只是一条信息性消息;无需用户操作。

LogDate:11/15/2013 5:48:25 AM 文本:启动数据库“AutoCloseDb”。

LogDate:11/15/2013 5:48:26 AM 文本:数据库“AutoCloseDb”的 CHECKDB 在 2013-11-15 05:39:19.137(当地时间)完成且没有错误。这只是一条信息性消息;无需用户操作。

LogDate:11/15/2013 5:49:30 AM 文本:启动数据库“AutoCloseDb”。

LogDate:11/15/2013 5:49:30 AM 文本:数据库“AutoCloseDb”的 CHECKDB 在 2013-11-15 05:39:19.137(当地时间)完成且没有错误。这只是一条信息性消息;无需用户操作。

如果确实AUTO_CLOSE是这种情况导致了这种日志记录行为,您应该会在错误日志中看到类似的“正在启动数据库...”消息。

如果这不是您所看到的,那么请修改您的问题以包含围绕DBCC CHECKDB日志记录的其他错误日志事件。