Impossible de restaurer la base de données SQL Server à partir de la sauvegarde complète, le traitement du journal échoue, la base de données est en état de «restauration»


14

J'essaie de mettre en place une base de données à des fins de développement sur SQL Server Developer Edition 12.0.2000.8 local de mon PC. J'ai une sauvegarde complète de la base de données et des fichiers de sauvegarde séparés du journal des transactions disponibles qui m'ont été envoyés sur le réseau.

Lorsque j'essaie de restaurer à partir d'une sauvegarde complète, après un certain temps (~ 1 heure peut-être, la base de données fait ~ 270 Go), j'obtiens une erreur:

System.Data.SqlClient.SqlError: Une erreur s'est produite lors du traitement du journal de la base de données 'nom de la base de données'. Si possible, restaurez à partir de la sauvegarde. Si aucune sauvegarde n'est disponible, il peut être nécessaire de reconstruire le journal. (Microsoft.SqlServer.SmoExtended)

Après cela, la base de données est dans l'état «Restauration ..».

Je voulais lancer quelque chose comme (obtenu à partir de cette question)

ALTER DATABASE recovery_test_2 SET EMERGENCY;
ALTER DATABASE recovery_test_2 SET SINGLE_USER;

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;

contre elle, mais naturellement je ne peux pas car la base de données est dans l'état "Restauration ..".

Comment puis-je faire fonctionner la base de données? La cohérence transactionnelle n'a pas d'importance pour moi.

Le script de restauration généré automatiquement SSMS:

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

Le résultat de la requête suggérée par @Craig Efrein

Le journal ne peut pas être reconstruit car des transactions / utilisateurs étaient ouverts lors de la fermeture de la base de données, aucun point de contrôle ne s'est produit dans la base de données ou la base de données était en lecture seule. Cette erreur peut se produire si le fichier journal des transactions a été supprimé ou perdu manuellement en raison d'une défaillance matérielle ou environnementale.


Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Paul White 9

Réponses:


2

Des commentaires déplacés vers le chat, cette note du PO:

Je viens d'essayer de le joindre via l'interface graphique. En sélectionnant le fichier .mdf, le SSMS a identifié la base de données composée de 3 fichiers (données, index, journal), mais d'une manière ou d'une autre, même si j'étais en train de restaurer WITH MOVE, les détails de la base de données sur le chemin du fichier disaient que c'était faux! Je les ai donc simplement pointés vers l'ancien fichier journal / données / index et ... La base de données est en ligne.


-3

Passez en mode mono-utilisateur et restaurez.

exemple:
la première restauration utilise l'option NORECOVERY afin que des restaurations supplémentaires puissent être effectuées. La deuxième commande restaure le journal des transactions, puis met la base de données en ligne pour une utilisation par l'utilisateur final.

RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'
WITH RECOVERY
GO

1
La question fait référence à une seule instruction RESTORE DATABASE, aucune restauration distincte du journal des transactions n'est en cours. Il est probable que la base de données source et / ou le fichier de sauvegarde soient corrompus.
Bryan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.