Почему планы обслуживания Sql Server 2005 используют неверную базу данных для dbcc checkdb? - PullRequest
0 голосов
/ 15 августа 2008

Это проблема, которую я видел у других людей, кроме меня, и я не нашел хорошего объяснения.

Допустим, у вас есть план обслуживания с заданием проверить базу данных, примерно так:

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.

Ответы [ 3 ]

1 голос
/ 15 августа 2008

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

1 голос
/ 15 августа 2008

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

0 голосов
/ 15 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...