2010-10-19 10 views

Répondre

4

En supposant que la base de données a été détachée proprement, vous devriez être en mesure d'utiliser sp_attach_single_file_db ou la nouvelle syntaxe CREATE DATABASE...FOR ATTACH.

EXEC sp_attach_single_file_db 
    @dbname = 'YourDB', 
    @physname = N'C:\YourFile.mdf'; 

OU

CREATE DATABASE YourDB 
     ON (FILENAME = 'c:\YourFile.mdf') 
     FOR ATTACH_REBUILD_LOG; 
+0

Je vous assure que la DB a été détaché proprement. Donc vous voulez dire que je ne perdrai aucune donnée? merci – q0987

+1

Non, vous pouvez perdre des données en fonction de ce qui était dans le LDF - le journal des transactions. –

+0

@ q0987: Pour garantir l'absence de perte de données, le service SQL Server doit avoir été arrêté. –

0

Une autre option pour sp_attach_single_file_db est la commande CREATE DATABASE avec l'option FOR ATTACH_REBUILD_LOG.

0

Cela a fonctionné pour moi. Je mode d'urgence pour voir la base de données:

http://forums.asp.net/t/1903548.aspx

Vous avez deux options:

  1. Vous pouvez créer une base de données vide avec le même nom et la mise en page de fichier physique, arrêtez le serveur, permutez les fichiers que vous souhaitez à la place des fichiers DB vides et démarrez le serveur. La base de données devrait apparaître en mode suspect. Vous pouvez ensuite ALTER DATABASE SET EMERGENCY pour le mettre en mode d'urgence, puis exécutez DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS. Cela permettra d'extraire autant de données que possible du registre pour rendre la base de données cohérente, mais il se peut que supprime certaines données afin de rendre la base de données cohérente. C'est l'option la plus susceptible de récupérer le maximum de données.
  2. Vous pouvez essayer d'utiliser CREATE DATABASE FOR ATTACH_REBUILD_LOG pour voir si cela le ramènera. Si la base de données a été correctement fermée, vous pourriez être en mesure de réussir. Il y a aussi la possibilité que la base de données soit incohérente ou corrompue s'il y a des transactions qui n'ont pas pu être annulées. Vous devez dans tous les cas exécuter DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS pour rendre votre base de données cohérente. Dans cet événement, SQL Server ne tentera pas d'extraire des informations de le journal. Il ignorera le contenu du journal. S'il y avait transactions en cours, aucune annulation ne sera possible, donc le ALLOW_DATA_LOSS sera requis.

Pour plus s'il vous plaît essayer de se référer à:

http://blog.sqlauthority.com/2008/07/21/sql-server-fix-error-9004-an-error-occurred-while-processing-the-log-for-database-if-possible-restore-from-backup-if-a-backup-is-not-available-it-might-be-necessary-to-rebuild-the-log/

Questions connexes