Verschieben von Benutzerdatenbanken
In SQL Server können Sie die Daten-, Protokoll- und Volltextkatalogdateien einer Benutzerdatenbank an einen neuen Speicherort verschieben, indem Sie den neuen Dateispeicherort in der FILENAME-Klausel der ALTER DATABASE-Anweisung angeben. Diese Methode ermöglicht das Verschieben von Datenbankdateien innerhalb derselben Instanz von SQL Server. Wenn Sie eine Datenbank auf eine andere Instanz von SQL Server oder einen anderen Server verschieben möchten, verwenden Sie Sicherungs- und Wiederherstellungs- oder Trennungs- und Anfügungsoperationen.
Hinweis |
---|
Einige Features von SQL Server Database Engine (Datenbankmodul) ändern die Art und Weise, wie Database Engine (Datenbankmodul) Informationen in den Datenbankdateien speichert. Diese Features sind nicht in allen Editionen von SQL Server verfügbar. Eine Datenbank, die diese Features enthält, kann nicht in eine Edition von SQL Server verschoben werden, die sie nicht unterstützt. Verwenden Sie die dynamische Verwaltungssicht sys.dm_db_persisted_sku_features, um alle editionsspezifischen Features aufzulisten, die in der aktuellen Datenbank aktiviert sind. |
Für die Prozeduren in diesem Thema ist der logische Name der Datenbankdateien erforderlich. Zum Abrufen des Namens führen Sie eine Abfrage für die name-Spalte in der sys.master_files-Katalogsicht aus.
Hinweis |
---|
Wenn Sie eine Datenbank auf eine andere Serverinstanz verschieben, müssen Sie möglicherweise einen Teil oder auch alle Metadaten für die Datenbank erneut erstellen, um Benutzern und Anwendungen ein konsistentes Verhalten bereitzustellen. Weitere Informationen finden Sie unter Verwalten von Metadaten beim Bereitstellen einer Datenbank auf einer anderen Serverinstanz. |
Prozedur zur geplanten Verschiebung
Zum Verschieben einer Daten- oder Protokolldatei im Rahmen einer geplanten Verschiebung müssen Sie die folgenden Schritte ausführen:
Führen Sie die folgende Anweisung aus.
ALTER DATABASE database_name SET OFFLINE
Verschieben Sie die Datei(en) an den neuen Speicherort.
Führen Sie für jede verschobene Datei die folgende Anweisung aus.
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' )
Führen Sie die folgende Anweisung aus.
ALTER DATABASE database_name SET ONLINE
Überprüfen Sie die Dateiänderung durch Ausführen der folgenden Abfrage.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Verschiebung aufgrund planmäßiger Datenträgerwartung
Zum Verschieben einer Datei im Rahmen eines planmäßigen Datenträgerwartungsprozesses müssen Sie die folgenden Schritte ausführen:
Führen Sie für jede zu verschiebende Datei die folgende Anweisung aus.
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
Beenden Sie die Instanz von SQL Server, oder fahren Sie das System herunter, um die Wartung auszuführen. Weitere Informationen finden Sie unter Beenden von Diensten.
Verschieben Sie die Datei(en) an den neuen Speicherort.
Starten Sie die Instanz von SQL Server oder den Server neu. Weitere Informationen finden Sie unter Starten und Neustarten von Diensten.
Überprüfen Sie die Dateiänderung durch Ausführen der folgenden Abfrage.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Prozedur zur Wiederherstellung nach Fehlern
Wenn eine Datei aufgrund eines Hardwarefehlers verschoben werden muss, müssen Sie die folgenden Schritte ausführen, um die Datei an einen neuen Speicherort zu verschieben:
Wichtig |
---|
Wenn die Datenbank nicht gestartet werden kann, d. h., wenn sie als fehlerverdächtig eingestuft wurde oder sich in einem nicht wiederhergestellten Status befindet, können nur Mitglieder der festen Rolle sysadmin die Datei verschieben. |
Beenden Sie die Instanz von SQL Server, wenn sie gestartet ist.
Starten Sie die Instanz von SQL Server im Modus für die ausschließliche Wiederherstellung der master-Datenbank, indem Sie einen der folgenden Befehle an der Eingabeaufforderung eingeben.
Führen Sie für die Standardinstanz (MSSQLSERVER) den folgenden Befehl aus.
NET START MSSQLSERVER /f /T3608
Führen Sie für eine benannte Instanz den folgenden Befehl aus.
NET START MSSQL$instancename /f /T3608
Weitere Informationen finden Sie unter Vorgehensweise: Starten einer Instanz von SQL Server (net-Befehle).
Verwenden Sie für jede zu verschiebende Datei die sqlcmd-Befehle oder SQL Server Management Studio, um die folgende Anweisung auszuführen:
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
Weitere Informationen zum Verwenden des Dienstprogramms sqlcmd finden Sie unter Verwendung des Dienstprogramms "sqlcmd".
Beenden Sie das Dienstprogramm sqlcmd oder SQL Server Management Studio.
Beenden Sie die Instanz von SQL Server.
Verschieben Sie die Datei(en) an den neuen Speicherort.
Starten Sie die Instanz von SQL Server. Führen Sie z. B. folgenden Befehl aus: NET START MSSQLSERVERNET START MSSQLSERVER.
Überprüfen Sie die Dateiänderung durch Ausführen der folgenden Abfrage.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Verschieben von Volltextkatalogen
Zum Verschieben eines Volltextkatalogs müssen Sie die folgenden Schritte ausführen. Beachten Sie, dass, wenn Sie den neuen Katalogspeicherort angeben, nur new_path angegeben wird und nicht new_path/os_file_name.
Führen Sie die folgende Anweisung aus.
ALTER DATABASE database_name SET OFFLINE
Verschieben Sie den Volltextkatalog an den neuen Speicherort.
Führen Sie die folgende Anweisung aus, wobei logical_name dem Wert in der name-Spalte in sys.database_files und new_path dem neuen Speicherort des Katalogs entspricht.
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path')
Führen Sie die folgende Anweisung aus.
ALTER DATABASE database_name SET ONLINE
Alternativ können Sie die FOR ATTACH-Klausel der CREATE DATABASE-Anweisung verwenden, um einen Volltextkatalog zu verschieben. Im folgenden Beispiel wird ein Volltextkatalog in der AdventureWorks-Datenbank erstellt. Zum Verschieben des Volltextkatalogs an einen neuen Speicherort wird die AdventureWorks-Datenbank getrennt, und der Volltextkatalog wird physikalisch an den neuen Speicherort verschoben. Anschließend wird die Datenbank unter Angabe des neuen Speicherorts des Volltextkatalogs angefügt.
USE AdventureWorks;
CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT;
GO
USE master;
GO
--Detach the AdventureWorks database.
sp_detach_db AdventureWorks;
GO
--Physically move the full-text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON
(FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf'),
(FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_log.ldf'),
(FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO
Beispiele
Im folgenden Beispiel wird die AdventureWorks-Protokolldatei im Rahmen einer geplanten Verschiebung an einen neuen Speicherort verschoben.
USE master;
GO
-- Return the logical file name.
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'AdventureWorks')
AND type_desc = N'LOG';
GO
ALTER DATABASE AdventureWorks SET OFFLINE;
GO
-- Physically move the file to a new location.
-- In the following statement, modify the path specified in FILENAME to
-- the new location of the file on your server.
ALTER DATABASE AdventureWorks
MODIFY FILE ( NAME = AdventureWorks_Log,
FILENAME = 'C:\NewLoc\AdventureWorks_Log.ldf');
GO
ALTER DATABASE AdventureWorks SET ONLINE;
GO
--Verify the new location.
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'AdventureWorks')
AND type_desc = N'LOG';
Siehe auch