簡體   English   中英

為什么Sql Server 2005維護計划將錯誤的數據庫用於dbcc checkdb?

[英]Why do Sql Server 2005 maintenance plans use the wrong database for dbcc checkdb?

這是我除了自己以外還遇到過的其他人的一個問題,我沒有找到很好的解釋。

假設您有一個維護計划,其中包含一項檢查數據庫的任務,如下所示:

USE [MyDb]
GO
DBCC CHECKDB with no_infomsgs, all_errormsgs

如果您在任務執行后去查看日志,則可能會看到以下內容:

08/15/2008 06:00:22,spid55,Unknown,DBCC CHECKDB (mssqlsystemresource) executed by NT AUTHORITY\SYSTEM found 0 errors and repaired 0 errors. Elapsed time: 0 hours 0 minutes 0 seconds.
08/15/2008 06:00:21,spid55,Unknown,DBCC CHECKDB (master) executed by NT AUTHORITY\SYSTEM found 0 errors and repaired 0 errors. Elapsed time: 0 hours 0 minutes 0 seconds.

它沒有檢查MyDb,而是檢查了master和msssqlsystemresource。

為什么?

我的解決方法是使用以下命令創建一個Sql Server代理作業:

dbcc checkdb ('MyDb') with no_infomsgs, all_errormsgs;

總是很好。

08/15/2008 04:26:04,spid54,Unknown,DBCC CHECKDB (MyDb) WITH all_errormsgs<c/> no_infomsgs executed by NT AUTHORITY\SYSTEM found 0 errors and repaired 0 errors. Elapsed time: 0 hours 26 minutes 3 seconds.

對於初學者,請始終記住GO不是SQL關鍵字; 它僅僅是(通常)由客戶端而非服務器實現/識別的批處理分隔符。 因此,根據上下文和客戶端,實際上並不能保證在批次之間保留當前數據庫。

如果您正在使用維護計划,則最好使用檢查數據庫完整性任務。 如果您真的想運行自己的維護,則使用t-sql編寫維護,然后使用作業中的某個步驟而不是維護計划中的步驟來運行它,並且上面的代碼可以正常工作。 就像Stu所說的,GO語句是客戶端指令而不是sql關鍵字,並且似乎僅受isql,wsql,osql等,客戶端和sql代理的尊重。 我認為它可以在DTS包中使用。 顯然,雖然不是DTSX。

您有一個檢查數據庫完整性任務,雙擊它選擇MyDb,然后在計划運行時僅檢查主數據庫? 奇怪的。 您確定您沒有其他計划在運行嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM