2009-09-10 4 views
1

J'essaie actuellement de programmer un travail sur SQL Server 2005 qui automatisera le processus DBCC CHECKDB. Fondamentalement, j'utilise un curseur pour exécuter et exécuter DBCC CHECKDB sur chaque base de données sur une instance. Parfois, cela fonctionne, en passant par toutes les bases de données et en enregistrant les erreurs dans un tableau que j'ai conçu à cette fin et parfois il ne fonctionne que dans quelques bases de données et s'arrête. Est-ce que quelqu'un a une idée de ce qui se passe? J'ai inclus le code que j'utilise pour le curseur.Automatisation de 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 

Répondre

2

erreurs d'un sufficiently high (20+) severity - dans mon expérience ce sont le plus souvent des corruptions telles que les pointeurs de texte non valides - arrêteront tout travail SQL en cours d'exécution avec les préjugés extrêmes, sans tenir compte des constructions try/catch et de tuer la connexion. Je suggère de déplacer cette tâche vers un processus externe avec une nouvelle connexion pour chaque commande DBCC CHECKDB afin qu'elle puisse continuer face à des erreurs de haute gravité.

+0

+1 qui est le plus probable que le problème. Les erreurs graves vont aussi au journal des erreurs et au journal des événements du système, il est donc facile de les vérifier. –

0

utiliser le sp_MSforeachdb sans papier stockée proc

exec sp_msforeachdb 'use ?; dbcc checkdb' 
+0

C'est ce que j'ai utilisé au début. Il a le même problème –

+0

OK n'était pas sûr si cela bombarderait le même comme un curseur (même si sous les couvertures c'est probablement ce que c'est!) –

+0

Ouais, c'est ce que je pensais réellement! –

Questions connexes