612 votes

SQL Server : Base de données coincé dans l’état de la « Restauration »

J'ai sauvegardé une base de données:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

Puis il a essayé de le restaurer:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

Et maintenant, la base de données est coincé dans l'état de restauration.

Certaines personnes ont émis l'hypothèse que c'est parce qu'il n'y a pas de log dans le dossier de sauvegarde, et il fallait être roulé vers l'avant à l'aide de:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

Sauf que, bien sûr, échoue:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Et exactement ce que vous voulez dans une situation catastrophique est une restauration qui ne fonctionne pas.


La sauvegarde contient à la fois des données et des fichiers journaux:

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF

799voto

Evan Anderson Points 3837

J’ai eu cette situation restauration d’une base de données à une instance de SQL Server 2005 Standard Edition à l’aide de Symantec Backup Exec 11d. Après que le travail de restauration terminé la base de données est resté dans un état de « Restauration ». Je n’avais aucun disque d’espace questions--la base de données n’a pas simplement sortir de l’état de la « Restauration ».

J’ai couru la requête suivante sur l’instance de SQL Server et a conclu que la base de données est devenu immédiatement utilisable :

466voto

John Sansom Points 20087

Vous devez utiliser l' WITH RECOVERY option, avec votre base de données RESTORE de commande, de mettre votre base de données en ligne dans le cadre du processus de restauration.

C'est bien sûr uniquement si vous n'avez pas l'intention de restaurer des sauvegardes du journal des transactions, c'est à dire vous ne souhaitez restaurer une sauvegarde de base de données et ensuite être en mesure d'accéder à la base de données.

Votre commande devrait ressembler à ceci,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

Vous pouvez avoir plus de succès en utilisant la restauration, l'assistant de base de données dans SQL Server Management Studio. De cette façon, vous pouvez sélectionner les emplacements de fichiers, l'option de remplacement, et la AVEC l'option de Récupération.

109voto

Tipu Delacablu Points 449

Voici comment faire :

  1. Arrêtez le service (MSSQLSERVER) ;
  2. Renommez ou supprimez les fichiers journaux et de base de données (C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data...) ou chaque fois que vous avez les fichiers ;
  3. Démarrer le service (MSSQLSERVER) ;
  4. Supprimer la base de données avec le problème ;
  5. Restaurer la base de données à nouveau.

Bonne chance !

89voto

Hans Points 291

J'ai eu un incident similaire avec l'arrêt d'un journal de l'expédition du serveur secondaire. Après la commande pour supprimer le serveur d'envoi de journaux et arrêté l'envoi de journaux de serveur primaire de la base de données sur le serveur secondaire est resté coincé dans le rétablissement de l'état après la commande

RESTORE DATABASE <database name> WITH RECOVERY

La base de données des messages:

RESTAURER la BASE de données traitée avec succès 0 pages dans 18.530 secondes (0.000 MO/sec).

La base de données est utilisable à nouveau après ces 18 secondes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X