2016-07-31 6 views
1

Extrahieren habe ich ein Problem mit einer beschädigten Datenbank, die ich brauche, um die Daten daraus zu extrahieren ..Probleme bei den Daten von beschädigter Datenbank

als unser Datenbank-Server startet abgestürzt und ich extrahierte die MDF- und LDF-Dateien aus dem Dateisystem, aber es scheint, dass eine bestimmte Datenbank „XYZ“ einige Operationen ausgeführt wurde, als der Absturz so passiert ist, als ich bekam ich die folgenden Fehler zu befestigen versuche:

The log scan number (218:387:1) passed to log scan in database ‘XYZ’ is not valid

also ich durch die Schaffung eines beigefügte Hack Datenbank mit dem gleichen Namen und ersetzt die .mdf-Datei und löschen Sie die neue .ldf nach dem Stoppen SQL SERVER Service, um Ihre Szenarien zu reproduzieren o, und fing es wieder an.

i gefolgt Paul Randal Anweisungen aus dieser Link wie folgt:

ALTER DATABASE [XYZ] SET EMERGENCY; 
GO 

ALTER DATABASE [XYZ] SET SINGLE_USER; 
GO 

DBCC CHECKDB (N’XYZ’, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS; 
GO 

, aber wenn ich den Befehl DBCC CHECKDB lief konfrontiert ich die Nachricht folgende

File activation failure. The physical file name “E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\XYZ_log.ldf” may be incorrect. The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure. Msg 5123, Level 16, State 1, Line 1 CREATE FILE encountered operating system error 3(failed to retrieve text for this error. Reason: 15105) while attempting to open or create the physical file ‘C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\XYZ_log.ldf’. Msg 5024, Level 16, State 2, Line 1 No entry found for the primary log file in sysfiles1. Could not rebuild the log. Msg 5028, Level 16, State 2, Line 1 The system could not activate enough of the database to rebuild the log. File activation failure. The physical file name “E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\XYZ_log.ldf” may be incorrect. The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure. Msg 5123, Level 16, State 1, Line 1 CREATE FILE encountered operating system error 3(failed to retrieve text for this error. Reason: 15105) while attempting to open or create the physical file ‘C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\XYZ_log.ldf’. Msg 5024, Level 16, State 2, Line 1 No entry found for the primary log file in sysfiles1. Could not rebuild the log. Msg 5028, Level 16, State 2, Line 1 The system could not activate enough of the database to rebuild the log. Msg 7909, Level 20, State 1, Line 1 The emergency-mode repair failed.You must restore from backup.

so als letztes Mittel i versucht WÄHLEN IN jede Tabelle selbst in einer neuen Datenbank, und es funktionierte für 80% Prozent der Tabellen, aber wenn es um eine bestimmte Tabelle geht "Die wichtigste" wenn ich die SELECT INTO-Anweisung versuchte ich die folgende Fehlermeldung konfrontiert:

Could not continue scan with NOLOCK due to data movement.

ist es eine Lösung für die, bekam ich einen Hinweis, jede Seite für sich zu lesen, aber ich bin nicht finden kann, wie dies geschehen kann.

Ich bin mit SQL Server 2008 R2 btw

Vielen Dank im Voraus,

+0

Das klingt besser für die DBA-Website, aber warum verwenden Sie NOLOCK? –

+0

Eigentlich verwende ich NOLOCK nicht, die vollständige Anweisung war SELECT * INTO [neue Datenbank] .dbo.[Tabellenname] FROM [alter Tabellenname] –

+0

Entschuldigung, ich habe irrtümlich gepostet, ohne meinen Kommentar zu vervollständigen, ich habe ihn gerade bearbeitet –

Antwort

0

Could not continue scan with NOLOCK due to data movement.

Dieser Fehler kann auch auftreten, wenn Sie aus einer beschädigten Tabelle auswählen

ich in der Lage war zu repro Ihr Gesamtes Problem, aber ich habe nicht Log-Datei kopiert, wie Sie getan haben, die die Ursache für Ihre DBCC-Fehler

Um DBCC-Fehler zu vermeiden, versuchen Sie diese Schritte ..erstellen 1.Dont Protokolldatei
2.Just Datenbank mit demselben Namen erstellen und kopieren MDF-Datei in demselben Pfad

laufen dann unter Abfragen ..

alter database yourdb set emergency; 
go 

alter database yourdb set single_user; 
go 

jetzt laufen DBCC CHECKDB, wird dies beheben Fehler und Daten aus Ihrer wichtigen Tabelle kann auch erfolgreich

DBCC CHECKDB (N'yourdb', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS; 
GO 

löschen Diese vervollständigen ..

Jetzt unter Anweisungen ausführen ..

alter database yourdb set online 
go 

alter database yourdb set multi_user 
go