ユーザー データベースの移動
SQL Serverでは、 ALTER DATABASE ステートメントの FILENAME 句で新しいファイルの場所を指定することで、ユーザー データベースのデータ ファイル、ログ ファイル、およびフルテキスト カタログ ファイルを新しい場所に移動することができます。 この方法は、同じ SQL Serverインスタンス内でデータベース ファイルを移動する場合に使用できます。 SQL Server の別のインスタンスや、別のサーバーにデータベースを移動する場合は、 バックアップと復元 操作か デタッチ操作とアタッチ操作を使用します。
考慮事項
データベースを別のサーバー インスタンスに移動するときは、ユーザーおよびアプリケーションに一貫した使用環境を提供するために、データベースのメタデータの一部またはすべてを作成し直す必要が生じる場合があります。 詳細については、「データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)」を参照してください。
SQL Server データベース エンジンの一部の機能は、データベース エンジンがデータベース ファイルに情報を格納する方法を変更します。 これらの機能は、 SQL Serverの特定のエディションでのみ使用できます。 これらの機能を備えたデータベースを、それらをサポートしない SQL Server のエディションに移動することはできません。 現在のデータベースで有効なエディション固有の機能をすべて一覧表示するには、sys.dm_db_persisted_sku_features 動的管理ビューを使用します。
このトピックの手順では、データベース ファイルの論理名が必要です。 論理名を取得するには、 sys.master_files カタログ ビューで name 列に対するクエリを実行します。
SQL Server 2008 R2以降では、フルテキスト カタログは、ファイル システムに格納されるのではなく、データベースに統合されています。 フルテキスト カタログは、データベースの移動時に自動的に移動されるようになりました。
計画に従った再配置の手順
計画に従った再配置の一環としてデータ ファイルやログ ファイルを移動するには、次の手順を実行します。
次のステートメントを実行します。
ALTER DATABASE database_name SET OFFLINE;
ファイルを新しい場所に移動します。
移動したそれぞれのファイルに対して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );
次のステートメントを実行します。
ALTER DATABASE database_name SET ONLINE;
次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
スケジュールされたディスク メンテナンスでの再配置
スケジュールされたディスク メンテナンスの一環としてファイルを再配置するには、次の手順を実行します。
移動対象のそれぞれのファイルに対して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
メンテナンスを行うため、 SQL Server のインスタンスを停止するか、システムをシャットダウンします。 詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。
ファイルを新しい場所に移動します。
SQL Server のインスタンスまたはサーバーを再起動します。 詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動」を参照してください。
次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
障害復旧の手順
ハードウェア障害が原因でファイルを移動する必要がある場合、次の手順に従って別の場所にファイルを再配置します。
重要
データベースを起動できないとき、つまり、データベースが問題のあるモードか復旧できない状態にある場合、ファイルを移動できるのは、sysadmin 固定ロールのメンバーだけです。
SQL Server のインスタンスが起動していたら停止します。
コマンド プロンプトで次のいずれかのコマンドを入力し、 SQL Server のインスタンスを master のみを復旧するモードで開始します。
既定 (MSSQLSERVER) のインスタンスの場合は、次のコマンドを実行します。
NET START MSSQLSERVER /f /T3608
名前付きインスタンスの場合は、次のコマンドを実行します。
NET START MSSQL$instancename /f /T3608
詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。
移動対象の各ファイルに対して、 sqlcmd コマンドか SQL Server Management Studio を使用して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
sqlcmd ユーティリティの使用方法については、「 sqlcmd ユーティリティの使用」を参照してください。
sqlcmd ユーティリティまたは SQL Server Management Studioを終了します。
SQL Serverのインスタンスを停止します。
ファイルを新しい場所に移動します。
SQL Serverのインスタンスを開始します。 たとえば、
NET START MSSQLSERVER
を実行します。次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
例
次の例では、計画に従った再配置の一環として、 AdventureWorks2012 のログ ファイルを新しい場所に移動します。
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'AdventureWorks2012')
AND type_desc = N'LOG';
GO
ALTER DATABASE AdventureWorks2012 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 AdventureWorks2012
MODIFY FILE ( NAME = AdventureWorks2012_Log,
FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');
GO
ALTER DATABASE AdventureWorks2012 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'AdventureWorks2012')
AND type_desc = N'LOG';
参照
ALTER DATABASE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
データベースのデタッチとアタッチ (SQL Server)
システム データベースの移動
データベース ファイルの移動
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動