2010-08-02 5 views
2

J'ai une base de données SQL Server 2008 et j'ai un problème avec cette base de données que je ne comprends pas.Problème de base de données DB STARTUP de base de données

Les étapes qui ont causé les problèmes sont les suivants:

  • J'ai couru une requête SQL pour mettre à jour une table appelée auteurs d'une autre table appelée authorAff
  • Le tableau des auteurs est 123,385,300 dossiers et la table authorsAff est 139.036.077
  • La requête a pris environ 7 jours d'exécution mais elle n'a pas fini
  • J'ai décidé d'annuler la requête pour le faire d'une autre manière.
  • La connexion sur laquelle je courais la requête déconnectée soudainement si la base de données est devenu dans la récupération jusqu'à ce que la requête annule
  • Le serveur a été arrêté plus tard à plusieurs reprises en raison de problèmes d'électricité
  • La base de données a pris environ deux jours et puis récupéré.
  • Maintenant, quand je lance cette requête

    SELECT TOP 1000 * DE AUTEURS AVEC (READUNCOMMITTED)

Il exécute et renvoie les résultats, mais lorsque je retire AVEC (READUNCOMMITTED) allusion, il est verrouillé par un processus s'exécutant sur la base de données master qui apparaît uniquement sur le moniteur d'activité avec Command [DB STARTUP] et aucun résultat n'apparaît. alors quelle est la commande DB STARTUP et si c'est un problème, comment puis-je le résoudre?

Merci d'avance.

+0

Avez-vous essayé d'exécuter 'dbcc checkdb' sur la base de données? –

Répondre

4

Je suppose que votre base de données utilisateur tente toujours d'annuler la transaction que vous avez annulée. Une règle générale indique qu'il faudra environ le même laps de temps, ou plus, pour qu'une transaction avortée soit restaurée comme elle l'a été.

La restauration ne peut pas être évitée même avec le SQL Server s'arrête et démarre que vous aviez.

La raison pour laquelle vous pouvez exécuter une requête WITH (READUNCOMMITTED) est parce qu'elle ignore les verrous associés à la transaction en cours de restauration. Les résultats de vos requêtes sont considérés comme non fiables, mais ironiquement, les résultats sont probablement ce que vous voulez voir puisque le processus de blocage est une restauration.

La meilleure solution est de l'attendre, si vous pouvez vous permettre de le faire. Vous pourrez peut-être trouver des façons de tuer le processus de blocage, mais vous devriez alors vous préoccuper de l'intégrité de la base de données.