Impossibile ripristinare il db di SQL Server dal backup completo, l'elaborazione del registro non riesce, il database si trova nello stato di "ripristino"


14

Sto cercando di impostare un database a scopo di sviluppo sul mio PC SQL Server Developer Edition 12.0.2000.8 locale. Ho un backup completo del database e file di backup separati solo per il registro delle transazioni disponibili che mi sono stati inviati sulla rete.

Quando provo a ripristinare dal backup completo, dopo un po 'di tempo (~ 1 ora forse, il database ha una dimensione di ~ 270 GB), visualizzo un errore:

System.Data.SqlClient.SqlError: si è verificato un errore durante l'elaborazione del registro per il "nome database" del database. Se possibile, ripristinare dal backup. Se un backup non è disponibile, potrebbe essere necessario ricostruire il registro. (Microsoft.SqlServer.SmoExtended)

Dopodiché, il db è nello stato 'Ripristino ..'.

Volevo eseguire qualcosa del genere (capito da questa domanda)

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;

al contrario, ma naturalmente non posso, poiché il database si trova nello stato "Ripristino in corso ...". Il riavvio del processo di ripristino su di esso porta allo stesso messaggio di errore, la caduta e il ripristino di nuovo non sono stati utili.

Come faccio a far funzionare il db? La coerenza transazionale non ha importanza per me.

Lo script di ripristino generato automaticamente da 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

Il risultato della query suggerita da @Craig Efrein

Il log non può essere ricostruito perché c'erano transazioni / utenti aperti durante l'arresto del database, nessun checkpoint al database o il database era di sola lettura. Questo errore potrebbe verificarsi se il file di registro delle transazioni è stato eliminato o perso manualmente a causa di un errore hardware o ambientale.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Paul White 9

Risposte:


2

Dai commenti spostati in chat, questa nota dall'OP:

Ho appena provato a collegarlo tramite la GUI. Quando ho selezionato il file .mdf, l'SSMS ha identificato il database costituito da 3 file (dati, indice, registro), ma in qualche modo anche se stavo ripristinando WITH MOVE, i dettagli del database sul percorso del file lo dicevano sbagliato! Quindi li ho appena indicati sul vecchio file di registro / dati / indice e ... Il database è online.


-3

Passa alla modalità utente singolo e ripristina.

esempio:
il primo ripristino utilizza l'opzione NORECOVERY in modo da poter eseguire ripristini aggiuntivi. Il secondo comando ripristina il registro delle transazioni e quindi porta il database online per l'uso dell'utente finale.

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

1
La domanda fa riferimento a una singola istruzione RESTORE DATABASE, non viene eseguito alcun ripristino separato del registro delle transazioni. È probabile che il database di origine e / o il file di backup siano danneggiati.
Bryan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.