Wir haben an "schlechten" Tagen täglich mit Datenbank-Defekten unseren Kunden zu tun, was sicher auch damit zu tun hat, dass wir diese Reparaturen bis vor kurzem meistens kostenfrei durchführten. Für den Microsoft SQL Server 2000 möchte ich ein paar Tipps geben, die ich immer wieder gerne versuche, wenn sich herausstellen sollte, dass die einfachen Mittel (dbcc checkdb) nicht mehr helfen….
Im ersten Teil geht es um Probleme, wenn die Datenbank nicht angehängt werden kann.
Wie kann das passieren?
Der Kunde meldet sich bei der Hotline und beklagt, dass die Datenbank defekt ist. Dann führen die Jungs und Mädels ein paar Standard-Dinge durch. Manchmal kommen sie zu dem Schluss, dass man vor Ort einfach nichts mehr machen kann und holen die Daten in die Firma. Um sie dann im Hause untersuchen zu können, muss man die Datenbank erst mal an einen SQL-Server anhängen. Wenn das mit Bordmitteln nicht mehr geht, dann ist das ein ganz schlechtes Zeichen. Aber meist kann man da noch etwas machen. Das Anhängen geht meistens dann noch über einen Dummy:
- Ich lege eine neue leere Datenbank irgendwo an. Die Datenbank muss mit so vielen Dateien angelegt werden, wie das anzuhängende Original. Um es einfacher zu haben, liegen bei mir dann immer alle Dateien im gleichen Verzeichnis.
- Dann stoppe ich den SQL-Server.
- Löschen der Dateien der neuen leeren Datenbank.
- Die originalen Dateien der defekten Datenbank dorthin kopieren.
- SQL Server starten.
Weil die Datenbank sich nicht einfach öffnen lässt, wird sie beim Starten als suspekt markiert.
- Jetzt kann man die Datenbank in den Emergency-Mode setzen.
- Dann muss man den SQL-Server nochmals stoppen ud starten. Dabei wird für die Datenbank kein Recovery versucht.
- Und schon kann man die eigentliche Analyse bzw. Reparatur beginnen.
So setzt man die Datenbank beim SQL-Server-2000 in den Bypass- bzw. Emergency-Mode:
exec sp_configure 'allow updates', 1
reconfigure with override
GO
update sysdatabases set status = status | 32768 where name = "myDB"
go
exec sp_configure 'allow updates', 0
reconfigure with override
Quelle: Das habe ich aus den Books-Online. Ich finde aber gerade nicht die Stelle. Bitte nach der Reparatur nicht vergessen den Status zurückzusetzen… 😉
Beim SQL-Server-2005 ist das deutlich einfacher:
alter database myDB set emergency
Demnächst geht es weiter…
Anbei die Links zu der Serien mit den Ursachen von Datenbank-Defekten: