システム データベースの移動
このトピックでは、SQL Server のシステム データベースを移動する方法について説明します。システム データベースの移動は、次の状況で便利な場合があります。
障害復旧。たとえば、ハードウェア障害により、データベースが問題のあるモードになっている場合や、シャットダウンされた場合など。
計画に従った再配置。
スケジュールされたディスク メンテナンスとしての再配置。
このトピックの内容
作業を開始する準備
計画に従った再配置とスケジュールされたディスク メンテナンスの手順
障害復旧の手順
master データベースの移動手順
補足情報: すべてのシステム データベースの移動後
tempdb データベースの移動例
作業を開始する準備
このトピックで定義されている手順を実装する前に、次の情報を確認してください。
次の手順は、SQL Server の同じインスタンス内でデータベース ファイルを移動する場合に適用されます。SQL Server の別のインスタンスにデータベースを移動する場合や、別のサーバーに移動する場合は、バックアップと復元操作かデタッチとアタッチ操作を使用します。
リソース データベースを移動することはできません。
このトピックの手順では、データベース ファイルの論理名が必要です。論理名を取得するには、sys.master_files カタログ ビューで name 列に対するクエリを実行します。
重要 |
---|
システム データベースを移動した後に master データベースを再構築すると、すべてのシステム データベースがそれぞれ既定の場所にインストールされるため、システム データベースを再度移動する必要があります。master データベースの再構築の詳細については、「コマンド プロンプトから SQL Server 2008 R2 をインストールする方法」の「システム データベースの再構築とレジストリの再構築」を参照してください。 |
[先頭に戻る]
計画に従った再配置とスケジュールされたディスク メンテナンスの手順
計画に従った再配置やスケジュールされたメンテナンス操作の中でシステム データベースのデータ ファイルやログ ファイルを移動するには、次の手順を実行します。この手順は、master データベースと Resource データベース以外のすべてのシステム データベースに適用されます。
移動対象のそれぞれのファイルに対して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
メンテナンスを行うため、SQL Server のインスタンスを停止するか、システムをシャットダウンします。詳細については、「サービスの停止」を参照してください。
ファイルを新しい場所に移動します。
SQL Server のインスタンスまたはサーバーを再起動します。詳細については、「サービスの開始と再開」を参照してください。
次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
msdb データベースが移動され、SQL Server のインスタンスがデータベース メール用に構成されている場合は、次の追加の手順を実行します。
次のクエリを実行して、msdb データベースで Service Broker が有効になっていることを確認します。
SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb';
Service Broker を有効にする方法の詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。
テスト メールを送信して、データベース メールが動作していることを確認します。詳細については、「データベース メールのトラブルシューティング」を参照してください。
[先頭に戻る]
障害復旧の手順
ハードウェア障害が原因でファイルを移動する必要がある場合、次の手順に従って別の場所にファイルを再配置します。この手順は、master データベースと Resource データベース以外のすべてのシステム データベースに適用されます。
重要 |
---|
データベースを起動できないとき、つまり、データベースが問題のあるモードか復旧できない状態にある場合、ファイルを移動できるのは、sysadmin 固定ロールのメンバーだけです。 |
SQL Server のインスタンスが起動していたら停止します。
コマンド プロンプトで次のいずれかのコマンドを入力し、SQL Server のインスタンスを master のみを復旧するモードで開始します。これらのコマンドで指定されるパラメーターでは、大文字と小文字が区別されます。パラメーターが次のように指定されていない場合、コマンドは失敗します。
既定 (MSSQLSERVER) のインスタンスの場合は、次のコマンドを実行します。
NET START MSSQLSERVER /f /T3608
名前付きインスタンスの場合は、次のコマンドを実行します。
NET START MSSQL$instancename /f /T3608
詳細については、「SQL Server のインスタンスを起動する方法 (net コマンド)」を参照してください。
移動対象の各ファイルに対し、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 のインスタンスを停止します。たとえば、NET STOP MSSQLSERVER を実行します。
ファイルを新しい場所に移動します。
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>');
[先頭に戻る]
master データベースの移動手順
master データベースを移動するには、次の手順を実行します。
[スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server]、[構成ツール] の順にポイントし、[SQL Server 構成マネージャー] をクリックします。
[SQL Server のサービス] ノードで、SQL Server のインスタンス (たとえば、[SQL Server (MSSQLSERVER)]) を右クリックし、[プロパティ] をクリックします。
[SQL Server (instance_name) のプロパティ] ダイアログ ボックスで、[詳細設定] タブをクリックします。
[起動時のパラメーター] の値を編集して、master データベースのデータ ファイルとログ ファイル用の計画された場所を指すようにし、[OK] をクリックします。エラー ログ ファイルは移動しても移動しなくてもかまいません。
-d パラメーターの後にデータ ファイルのパラメーター値を指定し、-l パラメーターの後にログ ファイルのパラメーター値を指定します。次の例では、master データ ファイルとログ ファイルの既定の場所のパラメーター値を示します。
-dC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf -lC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\ DATA\mastlog.ldf
master データ ファイルとログ ファイル用に計画された再配置場所が E:\SQLData の場合は、パラメーター値を次のように変更します。
-dE:\SQLData\master.mdf -lE:\SQLData\mastlog.ldf
インスタンス名を右クリックして [停止] をクリックし、SQL Server のインスタンスを停止します。
master.mdf ファイルおよび mastlog.ldf ファイルを新しい場所に移動します。
SQL Server のインスタンスを再起動します。
master データベースのファイルが変更されたことを確認するため、次のクエリを実行します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
[先頭に戻る]
補足情報: すべてのシステム データベースの移動後
すべてのシステム データベースを、新しいドライブやボリューム、または異なるドライブ文字を使用した別のサーバーに移動した場合は、次の更新を行います。
SQL Server エージェント ログのパスを変更します。このパスを更新しないと、SQL Server エージェントは起動できなくなります。
データベースの既定の場所を変更します。既定の場所として指定されたドライブ文字やパスが存在しない場合、新しいデータベースの作成に失敗することがあります。
SQL Server エージェント ログのパスの変更
SQL Server Management Studio のオブジェクト エクスプローラーで、[SQL Server エージェント] を展開します。
[エラー ログ] を右クリックし、[構成] をクリックします。
[SQL Server エージェント エラー ログの構成] ダイアログ ボックスで、SQLAGENT.OUT ファイルの新しい場所を指定します。既定の場所は C:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Log\ です。
データベースの既定の場所の変更
SQL Server Management Studio のオブジェクト エクスプローラーで、SQL Server のサーバーを右クリックし、[プロパティ] をクリックします。
[サーバーのプロパティ] ダイアログ ボックスで、[データベースの設定] を選択します。
[データベースの既定の場所] で、データ ファイルとログ ファイルの両方の新しい場所を参照します。
SQL Server サービスをいったん停止し、もう一度開始して、変更を完了します。
[先頭に戻る]
使用例
A. tempdb データベースを移動する
次の例では、計画に従った再配置の一環として、tempdb データ ファイルとログ ファイルを新しい場所に移動します。
注 |
---|
tempdb は SQL Server サービスが開始されるたびに再作成されるので、データ ファイルとログ ファイルを物理的に移動する必要はありません。手順 3. でサービスを再起動すると、新しい場所にファイルが作成されます。サービスを再起動しない限り、tempdb は既存の場所にあるデータ ファイルとログ ファイルを使用し続けます。SQL Server サービスを再起動すると、古い tempdb のデータ ファイルとログ ファイルを元の場所から削除する必要があります。 |
tempdb データベースの論理ファイル名と、ディスク上での現在の場所を確認します。
SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
ALTER DATABASE を使用して、各ファイルの場所を変更します。
USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf'); GO
SQL Server のインスタンスをいったん停止してから再起動します。
ファイルの変更を確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
tempdb.mdf および templog.ldf ファイルを元の場所から削除します。
[先頭に戻る]