Почему планы обслуживания Sql Server 2005 используют неверную базу данных для 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 с помощью этого:

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.
15.08.2008 14:45:33
3 ОТВЕТА

Для начала всегда помните, что GOэто не ключевое слово SQL; это просто пакетный разделитель, который (как правило) реализуется / распознается клиентом, а не сервером. Таким образом, в зависимости от контекста и клиента, на самом деле нет никакой гарантии, что текущая база данных сохраняется между пакетами.

1
20.01.2014 18:14:29

Если вы используете план обслуживания, вам лучше использовать задачу проверки целостности базы данных. Если вы действительно хотите запустить свое собственное обслуживание, написанное на t-sql, то запустите его, используя шаг в задании, а не в плане обслуживания, и приведенный выше код будет работать нормально. Как сказал Стю, оператор GO - это клиентская директива, а не ключевое слово sql, и, похоже, его уважают только клиенты isql, wsql, osql и т. Д. И агент sql. Я думаю, что это работает в пакетах DTS. Очевидно, что не в DTSX, хотя.

1
15.08.2008 15:34:09

У вас есть задача проверки целостности базы данных, и вы дважды щелкнули по ней, выбрав MyDb, и когда план запускается, он проверяет только master ?? странно. Вы уверены, что у вас нет другого плана?

0
15.08.2008 19:22:39