SQL Server hat einen logischen konsistenzbasierten E / A-Fehler festgestellt: falsche Seiten-ID bei RESTORE

7

Die Wiederherstellung unserer Datenbank auf neuer Serverhardware ist mit einem Seitenfehler fehlgeschlagen.

Message
SQL Server detected a logical consistency-based I/O error: 
incorrect pageid (expected 49:8125916; actual 49:29097436).
It occurred during a read of page (49:8125916) in database ID 7 at
offset 0x00000f7fbb8000 in file x:\Databases\Data07\DataWarehouse_OperationalData_15.ndf'.
Additional messages in the SQL Server error log or system event
log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately.
Complete a full database consistency check (DBCC CHECKDB). 
This error can be caused by many factors; 
for more information, see SQL Server Books Online.

Eine DBCC CheckDB benötigt ungefähr eine Woche für diese 70-TB-Datenbank und den 6 Jahre alten Server.
Gibt es eine Möglichkeit, dass mein Backup beschädigt ist?
Oder dass der neue Server schuld ist?
Oder ist die Produktionsdatenbank auf dem alten Server das Problem?

Dies ist SQL Server 2016 SP1 CU1 und page_verify_option_desc ist CHECKSUM.

Folgendes kann ich aus dem Fehlerprotokoll auf dem neuen Server ersehen:

Starting up database 'DataWarehouse'.
The database 'DataWarehouse' is marked RESTORING and is in a state that does not allow recovery to be run.
Error: 824, Severity: 16, State: 2.
SQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 49:8125916; actual 49:29097436). It occurred during a read of page (49:8125916) in database ID 7 at offset 0x00000f7fbb8000 in file 'S:\MSSQL\DSA\Databases\DataWarehouse\Data07\DataWarehouse_OperationalData_15.ndf'.  Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
Error: 18456, Severity: 14, State: 38.

Wenn ich dies auf dem alten Server ausführe:

DBCC TRACEON (3604);
DBCC PAGE ('datawarehouse', 49, 8125916, 0);

Ich verstehe das

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

PAGE: (49:8125916)


BUFFER:


BUF @0x000000802C5E9300

bpage = 0x0000004DF03E8000          bhash = 0x0000000000000000          bpageno = (49:8125916)
bdbid = 5                           breferences = 1                     bcputicks = 0
bsampleCount = 0                    bUse1 = 5844                        bstat = 0x9
blog = 0x15ab215a                   bnext = 0x0000000000000000          bDirtyContext = 0x0000000000000000
bstat2 = 0x0                        

PAGE HEADER:


Page @0x0000004DF03E8000

m_pageId = (49:8125916)             m_headerVersion = 1                 m_type = 3
m_typeFlagBits = 0x0                m_level = 0                         m_flagBits = 0xa200
m_objId (AllocUnitId.idObj) = 10814647                                   m_indexId (AllocUnitId.idInd) = 256
Metadata: AllocUnitId = 72058302786633728                                
Metadata: PartitionId = 72058370492596224                                Metadata: IndexId = 1
Metadata: ObjectId = 1916450641     m_prevPage = (0:0)                  m_nextPage = (0:0)
pminlen = 0                         m_slotCnt = 2                       m_freeCnt = 2452
m_freeData = 5764                   m_reservedCnt = 0                   m_lsn = (2455108:11140830:20)
m_xactReserved = 0                  m_xdesId = (28:447547798)           m_ghostRecCnt = 0
m_tornBits = 31453216               DB Frag ID = 1                      

Allocation Status

GAM (49:7668480) = ALLOCATED        SGAM (49:7668481) = NOT ALLOCATED   
PFS (49:8120352) = 0x42 ALLOCATED  80_PCT_FULL                           DIFF (49:7668486) = CHANGED
ML (49:7668487) = NOT MIN_LOGGED    


DBCC execution completed. If DBCC printed error messages, contact your system administrator.

DBCC CHECKFILEGROUP wird derzeit ausgeführt. Fertig ohne Fehler.

SeanGallardy kommentierte die Binärzahlen. Es hat lange gedauert, bis ich verstanden habe, was er meinte, aber ich habe schließlich die beiden Zahlen im Windows-Rechner im Programmiermodus eingegeben, und hier ist, was es zeigt: Das Rot zeigt die Unterschiede

Update: Wir haben eine weitere Sicherung und Wiederherstellung vom alten Server auf dem neuen Server durchgeführt. Diesmal haben wir folgende Nachricht erhalten:

Could not redo log record (2456609:4261461:64), for transaction ID (28:972770238), on page (48:211577379), allocation unit 72058359886184448, database 'DataWarehouse' (database ID 7). 
Page: LSN = (2456609:3279166:236), allocation unit = 72058351460417536, type = 20. Log: OpCode = 2, context 5, PrevPageLSN: (2456609:4250688:2). 
Restore from a backup of the database, or repair the database.

Ich habe versucht, diese Nachricht zu googeln, aber der einzige Rat, den ich finden kann, ist die Wiederherstellung der Datenbank (was ich versuche).

Die eigentliche Frage ist: was soll ich als nächstes tun

Henrik Staun Poulsen
quelle
3
Da Sie die Seitenzahl haben, können Sie sehen, ob Sie diese Seite in der Produktion lesen können, obwohl ich mich sehr bemühen würde, sicherzustellen, dass Sie ein zuverlässiges Backup haben, das Sie zuerst irgendwo wiederherstellen können .
Max Vernon
1
Welche Version von SQL Server ist das? Sie könnten eine Seitenwiederherstellung durchführen, wenn Sie mindestens 2008 verwenden.
Tara Kizer
1
Ist auf dem Produktionsserver die Überprüfung der Prüfsummenseite aktiviert?
Max Vernon
3
Es gibt nur einen Unterschied von zwei Bytes zwischen den beiden Werten in den höchstwertigen Bytes. Dies könnte ein Problem mit dem Controller-Cache, ein Problem mit gepufferten E / A auf der Dateikopie usw. sein. Ich würde auch Hardware und Treiber überprüfen. Außerdem muss nicht eine ganze Checkdb ausgeführt werden, sondern nur die Datei, Tabelle und Zuordnung, für die Checkdb-Befehle vorhanden sind.
Sean Gallardy - Pensionierter Benutzer
1
@ MaxVernon; Wir versuchen, das Backup auf einem neuen Server wiederherzustellen. Das Verschieben der 25-TB-Sicherungsdateien nach Kopenhagen hat 3 Tage gedauert. Dann ist RESTORE fehlgeschlagen. Schade. Ich werde versuchen, CheckAlloc und / oder CheckFileGroup morgen früh zum Laufen zu bringen. Aktualisierte Frage.
Henrik Staun Poulsen

Antworten:

1

Sie haben keine Sicherung, bis Sie eine Wiederherstellung durchgeführt haben .

Die eigentliche Frage ist: was soll ich als nächstes tun

Dies klingt möglicherweise nicht nach einer Antwort auf eine DBA.SE-Frage, aber ehrlich gesagt besteht Ihre einzige vernünftige Möglichkeit darin, einen Support-Fall bei Microsoft zu eröffnen und um Unterstützung zu bitten oder einen seriösen Fachmann (Berater oder Unternehmen) mit einem zu beauftragen Nachgewiesene Aufzeichnung zur Behebung von SQL Server-Korruptionsproblemen. Wenn Sie sich diese Optionen nicht leisten können, bedeutet dies, dass sich die Daten nicht lohnen.

Remus Rusanu
quelle
Hallo Remus; Fall mit dem Status B erstellt, sodass Microsoft jetzt bis morgen 10 Uhr Zeit hat, um zu reagieren. Danke für deine Hilfe.
Henrik Staun Poulsen
Hallo Remus; es half. Microsoft schlug einen RESTORE mit CONTINUE_AFTER_ERROR vor. Das gab uns eine Seitenzahl, die uns einen Tabellennamen gab. Was ich fallen ließ. Sie schlugen auch vor, dass wir das Protokoll vollständig löschen und dann wieder auf 2 TB zurücksetzen. Nach beiden Vorgängen funktionierte das Sichern und Wiederherstellen ohne Probleme. Vielen Dank für all Ihre Hilfe.
Henrik Staun Poulsen
1
Vielen Dank für die Veröffentlichung der Empfehlung, damit andere sehen und versuchen können
Remus Rusanu
1

Henrik,

Versuchen Sie, die Ausgabe von DBCC CHECKDB bereitzustellen. Sie sollten diesen Thread lesen: DBCC CHECKDB konsistenzbasierter E / A-Fehler

Ich hoffe es hilft dir.

Viel Glück!

Alfie Jin
quelle
wie ich geschrieben habe; Eine DBCC-CheckDB dauert ungefähr eine Woche, und selbst wenn wir ein 4-TB-Transaktionsprotokoll haben, wäre das nicht groß genug.
Henrik Staun Poulsen
Die DBCC CheckDB dauerte auf dem neuen Server nur 3½ Tage, mit MaxDOP = 40. Es "fand 0 Fehler und reparierte 0 Fehler."
Henrik Staun Poulsen