Hallo,
heute hatte ich ein kleines Problem mit meiner SharePoint_Config DB. Warum auch immer konnte ich nicht mehr auf die Datenbank zugreifen. Die DB war Corrupt. Da mein Backup auch nicht sauber gelaufen ist konnte ich mich nun entscheiden die Config DB neu zu erstellen oder mich daran zu versuchen die Datenbank irgendwie wieder ans rennen zu bekommen. Ich habe mich dann für den Weg 2 entschieden :-)
Das waren die Ausgangsbedingungen:
- Datenbank ist korrupt. Der Zugriff auf die Datenbank per SQL Enterprise Manager funktionierte nicht mehr. Es gab eine Fehlermeldung.
- Ein Backup war nicht vorhanden.
- Bei näherem Untersuchen schien das Logfile der Datenbank korrupt zu sein.
- Während der verschiedenen Versuche habe ich herausgefunden das auch die Datenbank selbst keinen "clean shutdown" durchgeführt hatte.
Hier der Weg den ich genutzt habe um die Datenbank wieder ans Laufen zu bekommen:
Zuerst müssen die SQL Dienste beendet werden, die Datenbankfiles (mdf und ldf) kurzfristig umbenannt, die Dienste neu gestartet und anschließend die Datenbank aus dem SQL Manager gelöscht werden. Das umbenennen der Datenbanken ist notwendig da der Enterprise Manager sonst beim Löschen der Datenbank die Files gegebenenfalls mit wegwerfen würde.
Nachdem die Datenbank gelöscht wurde wird eine neue Datenbank mit gleichem Namen und gleichen Dateieien (gleicher Pfad und gleicher Name) erstellt. Die Anfangsgrößen der Dateien sind egal. Anschließend wird im Enterprise Manager ein neues Query Fenster geöffnet und in der Baumstruktur die neue Datenbank (also die gerade erstellte) ausgewählt. Dort wird folgender Befehl ausgeführt:
alter database SharePoint_Config set emergency
Damit wird die Datenbank in einen Notfallmodus versetzt. Dieser Modus wird in der Master Datenbank gespeichert. Als nächstes werden nun die SQL Server Dienste wieder beendet und die neuen Datenbankdateien der neuen Datenbank gelöscht. Die zuvor umbenannte originale Datenbank wird wieder zurückbenannt. Das Logfile wird nicht wieder zurückbenannt. Anschließend werden die SQL Dienste wieder gestartet. Die Datenbank hat in diesem Moment kein Logfile!
ALTER DATABASE SharePoint_Config
SET single_user WITH ROLLBACK IMMEDIATE;
go
DBCC checkdb ('SharePoint_Config', repair_allow_data_loss);
go
Als nächstes muss die Datenbank in den Single User Mode gesetzt werden. Dazu einfach folgende Befehle ausführen. Natürlich muss der Datenbankname "SharePoint_Config" angepasst werden. Durch den DBCC Befehl wird ein neues Logfile erstellt. Da aber das Original Logfile nicht mehr lesbar ist kann es hier aber zu Datenverlust kommen. Bei mir war das nicht so schlimm da ich sowieso länger nichts geändert hatte. Häufig sind aber fast alle Daten aber besser als keine Daten haben ;-)
Achtung! Das Queryfenster darf nach diesen Befehlen nicht geschlossen werden da sonst der Admin keine Änderungen mehr durchführen kann. Zum Schluss muss dann die Datenbank wieder in den Mulit_User Betrieb zurückgesetzt werden:
USE [master]
GO
ALTER DATABASE SharePoint_Config SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE SharePoint_Config SET MULTI_USER
GO
Gruß,
Volker
Hello,
after the german explanation here a short english explanation for all others.
Today i have some trouble with a SQL 2005 Database. The logfile and the databasefile are corrupt. So what can i do? Here a little way who helped me:
First you stopp the SQL Server services and rename the corrupt database files (log and db file). then restart the services and delete the datebase from the SQL Enterprise Manager. After that we create a new emtpy database with the same name and the same database files. Please use the same paths. Next you must open a query window and execute the following code:
alter database SharePoint_Config set emergency
Now the db is in emergency mode. We stopp the SQL Server services again, delete die new db and logfile files, rename the original db file back to the original name and restart the services. Now we execute some other SQL commands:
ALTER DATABASE SharePoint_Config
SET single_user WITH ROLLBACK IMMEDIATE;
go
DBCC checkdb ('SharePoint_Config', repair_allow_data_loss);
go
After that, the DB is in single user mode and the logfiles are back again. Now we must set the db back to Multi_User mode. Please do not close the Query Window!
USE [master]
GO
ALTER DATABASE SharePoint_Config SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE SharePoint_Config SET MULTI_USER
GO
Now the database is back. Please check if data is lost.
Regards,
Volker