Bei einigen SQL Server-Systemdatenbanken sind die Schritte zur Änderung des Speicherorts anders als bei Benutzerdatenbanken. Diese Sonderfälle werden separat beschrieben.
Hinweis: SQL Server 7.0-Systemdatenbanken sind mit SQL Server 2000 nicht kompatibel. Fügen Sie keine
master-,
model-,
msdb- oder Verteilungsdatenbanken von SQL Server 7.0 zu SQL Server 2000 hinzu. Wenn Sie SQL Server 2005 verwenden, können Sie nur SQL Server 2005-Datenbanken an eine Instanz anfügen. In den Beispielen in diesem Artikel wird SQL Server im Ordner "D:\Mssql7" installiert. Außerdem wird in den Beispielen davon ausgegangen, dass sich alle Daten- und Protokolldateien in dem Standardordner "D:\Mssql7\Data" befinden. In den Beispielen werden die Daten- und Protokolldateien für alle Datenbanken in den Ordner "E:\Sqldata" verschoben.
Voraussetzungen
- Erstellen Sie eine aktuelle Sicherungskopie aller Datenbanken von ihrem aktuellen Speicherort, insbesondere der master-Datenbank.
- Sie müssen über Systemadministratorrechte (sa) verfügen.
- Sie müssen den Namen und den aktuellen Speicherort aller Daten- und Protokolldateien für die Datenbank kennen.
Hinweis: Sie können den Namen und den aktuellen Speicherort aller von einer Datenbank verwendeten Dateien unter Verwendung der gespeicherten Prozedur sp_helpfile ermitteln:use <database_name>
go
sp_helpfile
go
- Sie sollten exklusiven Zugriff auf die Datenbank haben, die verschoben werden soll. Wenn während der Prozedur Probleme auftreten und es nicht möglich ist, auf die verschobene Datenbank zuzugreifen oder SQL Server zu starten, überprüfen Sie das SQL Server-Fehlerprotokoll, und suchen Sie in der SQL Server-Onlinedokumentation nach näheren Informationen zu den aufgetretenen Fehlern.
Verschieben von Benutzerdatenbanken
Im folgenden Beispiel wird eine Datenbank namens
mydb verschoben. Diese Datenbank enthält eine Datendatei "Mydb.mdf" sowie eine Protokolldatei "Mydblog.ldf". Wenn die von Ihnen verschobene Datenbank weitere Daten- oder Protokolldateien enthält, geben Sie alle Dateien in der gespeicherten Prozedur
sp_attach_db in einer durch Trennzeichen getrennten Liste an. Die Prozedur
sp_detach_db bleibt unabhängig von der Anzahl der in der Datenbank enthaltenen Dateien immer gleich, da diese darin nicht aufgelistet werden.
- Trennen Sie die Datenbank wie folgt:
use master
go
sp_detach_db 'mydb'
go
- Kopieren Sie als Nächstes die Daten- und Protokolldateien vom aktuellen Speicherort (D:\Mssql7\Data) an den neuen Speicherort (E:\Sqldata).
- Fügen Sie die Datenbank wieder an. Zeigen Sie wie folgt auf die Dateien an dem neuen Speicherort:
use master go sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf' go
Überprüfen Sie mithilfe der gespeicherten Prozedur sp_helpfile die Änderung der Dateispeicherorte:use mydb go sp_helpfile go
Die Werte in der Spalte Dateiname sollten die neuen Speicherorte wiedergeben.
Hinweis: Artikel 922804 der Microsoft Knowledge Base beschreibt ein Problem bei SQL Server 2005-Datenbanken in einem Speicher, der an ein Netzwerk angeschlossen ist.
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
922804
(http://support.microsoft.com/kb/922804/DE/
)
Update: nachdem Sie eine Microsoft SQL Server 2005-Datenbank trennen, die sich auf an das Netzwerk angeschlossenem Speicher befindet, können Sie die SQL Server-Datenbank nicht erneut anfügen
Berücksichtigen Sie dieses Problem. Berücksichtigen Sie außerdem die Berechtigungen, die auf eine Datenbank angewendet werden, wenn sie in SQL Server 2005 getrennt wird. Weitere Informationen finden Sie unter dem Thema "Sichern von Daten- und Protokolldateien" im Abschnitt "Trennen und Anfügen einer Datenbank" in der Onlinedokumentation zu SQL Server. Besuchen Sie die folgende MSDN-Website (Microsoft Developer Network), um dieses Thema anzuzeigen:
Verschieben von Beispieldatenbanken
Wenn Sie die Beispieldatenbanken "Pubs" und "Northwind" (SQL Server 2000 bzw. SQL Server 7.0) oder "AdventureWorks" und "AdventureWorksDW" (SQL Server 2005) verschieben möchten, gehen Sie genauso vor wie beim Verschieben von Benutzerdatenbanken.
Verschieben der model-Datenbank
SQL Server 7.0
- Stellen Sie sicher, dass SQL Server Agent derzeit nicht ausgeführt wird.
- Verwenden Sie die gleiche Vorgehensweise wie beim Verschieben von Benutzerdatenbanken.
SQL Server 2005 und SQL Server 2000
In SQL Server 2000 und SQL Server 2005 können Systemdatenbanken nicht unter Verwendung der gespeicherten Prozedur
sp_detach_db getrennt werden. Bei der Ausführung der Anweisung
sp_detach_db 'model' wird die folgende Fehlermeldung angezeigt:
Server: Msg 7940, Ebene 16, Status 1, Zeile 1
Systemdatenbanken master, model, msdb und tempdb können nicht getrennt werden.
Zum Verschieben der
model-Datenbank müssen Sie SQL Server mit der Option
-c, der Option
-m und dem Ablaufverfolgungsflag 3608 starten, damit SQL Server keine Datenbank außer der
master-Datenbank wiederherstellt.
Hinweis: Ab diesem Zeitpunkt haben Sie keinerlei Zugriff auf Benutzerdatenbanken. Sie dürfen während der Verwendung dieses Ablaufverfolgungsflags keine Aktionen außer den unten genannten Schritten ausführen. Gehen Sie folgendermaßen vor, um das Ablaufverfolgungsflag 3608 als SQL Server-Startparameter hinzuzufügen:
- Klicken Sie im SQL Enterprise Manager mit der rechten Maustaste auf den Servernamen. Klicken Sie dann auf Eigenschaften.
- Klicken Sie auf der Registerkarte Allgemein auf Startparameter.
- Fügen Sie den folgenden neuen Parameter hinzu:
-c -m -T3608
Wenn Sie mit SQL Server 2005 arbeiten, können Sie die Startparameter des SQL Server-Dienstes mit dem SQL Server-Konfigurations-Manager ändern. Weitere Informationen dazu, wie Sie die Startparameter ändern können, finden Sie auf folgender MSDN-Website (Microsoft Developer Network):
Gehen Sie nach dem Hinzufügen der Option
-c, der Option
-m und des Ablaufverfolgungsflags 3608 folgendermaßen vor:
- Beenden Sie SQL Server, und starten Sie ihn neu.
- Trennen Sie die model-Datenbank mit den folgenden Befehlen:
use master
go
sp_detach_db 'model'
go
- Verschieben Sie die Dateien "Model.mdf" und "Modellog.ldf" aus dem Ordner "D:\Mssql7\Data" in den Ordner "E:\Sqldata".
- Fügen Sie die model-Datenbank mit den folgenden Befehlen wieder an:
use master
go
sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
go
- Entfernen Sie -c -m -T3608 in SQL Server Enterprise Manager oder im SQL Server-Konfigurations-Manager aus den Startparametern.
- Beenden Sie SQL Server, und starten Sie ihn neu. Sie können die Änderung der Speicherorte mit der gespeicherten Prozedur sp_helpfile überprüfen. Verwenden Sie beispielsweise den folgenden Befehl:
use model
go
sp_helpfile
go
Verschieben der MSDB-Datenbank
SQL Server 7.0
Hinweis: Wenn Sie diese Vorgehensweise zum Verschieben der
msdb- und
model-Datenbank verwenden, müssen Sie zuerst die
model-Datenbank wieder anfügen und dann die
msdb-Datenbank wieder anfügen. Gehen Sie folgendermaßen vor:
- Stellen Sie sicher, dass SQL Server Agent derzeit nicht ausgeführt wird.
- Verwenden Sie die gleiche Vorgehensweise wie beim Verschieben von Benutzerdatenbanken.
Hinweis: Wenn SQL Server Agent ausgeführt wird, schlägt die gespeicherte Prozedur
sp_detach_db mit folgender Meldung fehl:
Server: Msg 3702, Ebene 16, Status 1, Zeile 0
Datenbank 'msdb' kann nicht gelöscht werden, da derzeit in Verwendung.
DBCC-Ausführung abgeschlossen. Falls DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich an den Systemadministrator.
SQL Server 2005 und SQL Server 2000
Zum Verschieben der msdb-Datenbank müssen Sie SQL Server mit der Option
-c, der Option
-m und dem Ablaufverfolgungsflag 3608 starten, damit SQL Server keine Datenbank außer der
master-Datenbank wiederherstellt. Führen Sie die im Abschnitt "Verschieben der model-Datenbank" beschriebenen Schritte durch, um die Option
-c, die Option
-m und das Ablaufverfolgungsflag 3608 hinzuzufügen. Gehen Sie nach dem Hinzufügen der Option
-c, der Option
-m und des Ablaufverfolgungsflags 3608 folgendermaßen vor:
- Beenden Sie SQL Server, und starten Sie ihn neu.
- Stellen Sie sicher, dass SQL Server Agent derzeit nicht ausgeführt wird.
- Trennen Sie die msdb-Datenbank wie folgt:
use master
go
sp_detach_db 'msdb'
go
- Verschieben Sie die Dateien "Msdbdata.mdf" und "Msdblog.ldf" vom aktuellen Speicherort (D:\Mssql8\Data) zum neuen Speicherort (E:\Mssql8\Data).
- Entfernen Sie im Enterprise Manager das Ablaufverfolgungsflag -c -m -T3608 aus dem Feld Startparameter.
- Beenden Sie SQL Server, und starten Sie das Programm erneut.
Hinweis: Wenn Sie versuchen, die msdb-Datenbank durch Starten von SQL Server mit der Option -c, der Option-m oder dem Ablaufverfolgungsflag 3608 wieder anzufügen, kann folgende Fehlermeldung angezeigt werden: Server: Msg 615, Ebene 21, Status 1, Zeile 1
Datenbanktabellen-ID 3, Name 'model' konnte nicht gefunden werden.
- Fügen Sie die msdb-Datenbank wie folgt wieder an:
use master
go
sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf'
go
Hinweis: Wenn Sie diese Vorgehensweise in Verbindung mit dem Verschieben der
model-Datenbank verwenden, versuchen Sie, die
msdb-Datenbank zu trennen, während Sie die
model-Datenbank trennen. In diesem Fall muss die
model-Datenbank zuerst und die
msdb-Datenbank danach wieder angefügt werden. Wenn Sie die
msdb-Datenbank zuerst anfügen, wird beim Versuch, die
model-Datenbank wieder anzufügen, die folgende Fehlermeldung angezeigt:
Msg 0, Ebene 11, Status 0, Zeile 0
Für den aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten. Löschen Sie eventuelle Ergebnisse.
In diesem Fall müssen Sie die
msdb-Datenbank trennen, die
model-Datenbank wieder anfügen und dann die
msdb-Datenbank wieder anfügen.
Nachdem Sie die
MSDB-Datenbank verschoben haben, wird möglicherweise die folgende Fehlermeldung angezeigt:
Fehler 229: Die EXECUTE-Berechtigung wurde für das Objekt 'Objektname', Datenbank 'master', Besitzer 'dbo' verweigert.
Dieses Problem tritt auf, da die Benutzerrechtekette gebrochen wurde. Die
msdb-Datenbank und die
master-Datenbank haben unterschiedliche Datenbankbesitzer. In diesem Fall wurden die Besitzrechte für die
msdb-Datenbank geändert. Führen Sie die folgenden Transact-SQL-Anweisungen aus, um dieses Problem zu umgehen. Dazu können Sie das Befehlszeilenprogramm "Osql.exe" (SQL Server 7.0 und SQL Server 2000) oder das Befehlszeilenprogramm "Sqlcmd.exe" (SQL Server 2005) verwenden:
USE MSDB
Go
EXEC sp_changedbowner 'sa'
Go
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
272424
(http://support.microsoft.com/kb/272424/DE/
)
INF: für Datenbanken überprüfen Objektbesitzkette hängt von der Anmeldung ab, die den Objektbesitzern zugeordnet wird
Verschieben der master-Datenbank
- Ändern Sie in SQL Server Enterprise Manager den Pfad für die master-Datendateien und die master-Protokolldateien.
Hinweis: Sie können den Speicherort des Fehlerprotokolls hier ebenfalls ändern. - Klicken Sie mit der rechten Maustaste im Enterprise Manager auf den SQL Server, und klicken Sie auf Eigenschaften.
- Klicken Sie auf Startparameter. Es werden folgende Einträge angezeigt:
-dD:\MSSQL7\data\master.mdf -eD:\MSSQL7\log\ErrorLog -lD:\MSSQL7\data\mastlog.ldf
-d ist der vollständige Pfad für die Datendatei der master-Datenbank.
-e ist der vollständige Pfad für die Fehlerprotokolldatei.
-l ist der vollständige Pfad für die Protokolldatei der master-Datenbank. - Ändern Sie diese Werte wie folgt:
- Löschen Sie die aktuellen Einträge für die Dateien "Master.mdf" und "Mastlog.ldf".
- Fügen Sie neue Einträge hinzu, die den neuen Speicherort angeben:
-dE:\SQLDATA\master.mdf
-lE:\SQLDATA\mastlog.ldf
- Beenden Sie SQL Server.
- Kopieren Sie die Dateien "Master.mdf" und "Mastlog.ldf" an den neuen Speicherort (E:\Sqldata).
- Starten Sie SQL Server neu.
Hinweis: Wenn Sie mit SQL Server 2005 arbeiten, verwenden Sie den SQL Server-Konfigurations-Manager, um den Pfad für die master-Datendateien und die master-Protokolldateien zu ändern.
Verschieben der tempdb-Datenbank
Mithilfe der ALTER DATABASE-Anweisung können Sie die
tempdb-Dateien verschieben.
- Bestimmen Sie mithilfe von sp_helpfile die logischen Dateinamen für die tempdb-Datenbank wie folgt:
use tempdb go sp_helpfile go
Der logische Name für jede Datei ist in der Spalte Name enthalten. In diesem Beispiel werden die Standarddateinamen tempdev und templog verwendet. - Verwenden Sie die ALTER DATABASE-Anweisung, wobei Sie den logischen Dateinamen wie folgt angeben:
use master go Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf') go Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf') go
Die erfolgreiche Änderung wird durch folgende Meldungen bestätigt: Meldung 1
Datei 'tempdev' in sysalt geändert. Löschen Sie die alte Datei nach dem Neustart von SQL Server.
Meldung 2
Datei 'templog' in sysalt geändert. Löschen Sie die alte Datei nach dem Neustart von SQL Server.
- Wenn Sie sp_helpfile in tempdb verwenden, werden diese Änderungen erst bestätigt, nachdem Sie SQL Server neu gestartet haben.
- Beenden Sie SQL Server, und starten Sie das Programm neu.
Verschieben der master-Datenbank und der Resource-Datenbank
Weitere Informationen zum Verschieben der
master- und der
Resource-Datenbank finden Sie auf folgender MSDN-Website (Microsoft Developer Network):
Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
912397
(http://support.microsoft.com/kb/912397/DE/
)
Wenn Sie in einem Wert, der ungültig ist, einen Startparameter für eine gruppierte Instanz von SQL Server 2000 oder SQL Server 2005 ändern, kann der SQL Server-Dienst nicht gestartet werden
274188
(http://support.microsoft.com/kb/274188/DE/
)
PRB: Problemthema "Behandlung" bei verwaisten Benutzern in Online-Dokumentation ist unvollständig
246133
(http://support.microsoft.com/kb/246133/DE/
)
Übertragen von Benutzernamen und Kennwörtern zwischen Instanzen von SQL-Server
168001
(http://support.microsoft.com/kb/168001/DE/
)
Benutzeranmeldungen und Berechtigungen für eine Datenbank können nach Wiederherstellung der Datenbank falsch sein
Weitere Informationen finden Sie in folgenden Büchern:
Microsoft Corporation
Microsoft SQL Server 7.0 System Administration Training Kit
Microsoft Press, 2001