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.