Автоматизация DBCC CHECKDB - PullRequest
       5

Автоматизация DBCC CHECKDB

1 голос
/ 11 сентября 2009

В настоящее время я пытаюсь написать на SQL Server 2005 задание, которое автоматизирует процесс DBCC CHECKDB. По сути, я использую курсор для запуска и запуска DBCC CHECKDB для каждой базы данных в экземпляре. Иногда это работает, проходя через каждую базу данных и регистрируя ошибки в таблице, которую я разработал для этой цели, а иногда он только проходит через несколько баз данных и останавливается. Кто-нибудь знает, что происходит? Я включил код, который я использую для курсора.

DECLARE @DbName varchar(100)

DECLARE
  GetDbName CURSOR
    LOCAL
    FORWARD_ONLY
    OPTIMISTIC
      FOR
         SELECT
           name
         FROM
           sys.databases
         ORDER BY
           name 

  OPEN GetDbName
  FETCH NEXT FROM GetDbName
  INTO @DbName
    WHILE (@@fetch_status = 0)
      BEGIN

        print @DbName

        INSERT INTO
          TempLog
        EXEC('DBCC CHECKDB ('+ @DbName +') WITH NO_INFOMSGS, TABLERESULTS')

        FETCH NEXT FROM GetDbName
        INTO @DbName

      END
CLOSE GetDbName
DEALLOCATE GetDbName

Ответы [ 2 ]

2 голосов
/ 11 сентября 2009

Ошибки достаточно высокой (20+) серьезности - по моему опыту это наиболее частые повреждения, такие как недопустимые текстовые указатели - остановит любую работу SQL, выполняемую в настоящий момент с предубеждением, игнорируя попытку / ловить конструкции и убивать связи. Я бы предложил перенести эту задачу во внешний процесс с новым соединением для каждой команды DBCC CHECKDB, чтобы она могла продолжаться перед лицом серьезных ошибок.

0 голосов
/ 11 сентября 2009

использовать недокументированную хранимую процедуру sp_MSforeachdb

exec sp_msforeachdb 'use ?; dbcc checkdb'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...