システム データベースの移動
このトピックでは、SQL Server のシステム データベースを移動する方法について説明します。システム データベースの移動は、次の状況で便利な場合があります。
障害復旧。たとえば、ハードウェア障害により、データベースが問題のあるモードになっている場合や、シャットダウンされた場合など。
計画に従った再配置。
スケジュールされたディスク メンテナンスとしての再配置。
次の手順は、SQL Server の同じインスタンス内でデータベース ファイルを移動する場合に適用されます。SQL Server の別のインスタンスにデータベースを移動する場合や、別のサーバーに移動する場合は、バックアップと復元操作かデタッチとアタッチ操作を使用します。
このトピックの手順では、データベース ファイルの論理名が必要です。論理名を取得するには、sys.master_files カタログ ビューで name 列に対するクエリを実行します。
重要 |
---|
システム データベースを移動した後に master データベースを再構築すると、すべてのシステム データベースがそれぞれ既定の場所にインストールされるため、システム データベースを再度移動する必要があります。master データベースの再構築の詳細については、「コマンド プロンプトから SQL Server 2008 をインストールする方法」の「システム データベースの再構築とレジストリの再構築」を参照してください。 |
計画に従った再配置とスケジュールされたディスク メンテナンスの手順
計画に従った再配置やスケジュールされたメンテナンス操作の中でシステム データベースのデータ ファイルやログ ファイルを移動するには、次の手順を実行します。この手順は、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.MSSQLSERVER\MSSQL\DATA\ master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ DATA\mastlog.ldf
master データ ファイルとログ ファイルの計画に従った再配置場所が E:\SQLData の場合、パラメータ値を次のように変更します。
-dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\LOG\ERRORLOG;-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
Resource データベースの移動
SQL Server 2008 では、Resource データベースの場所は、<drive>:\Program Files\Microsoft SQL Server\MSSQL10.<instance_name>\MSSQL\Binn\ です。データベースを移動することはできません。
例
A. tempdb データベースを移動する
次の例では、計画に従った再配置の一環として、tempdb データ ファイルとログ ファイルを新しい場所に移動します。
注意 |
---|
tempdb は SQL Server のインスタンスが開始されるたびに再作成されるので、データ ファイルとログ ファイルを物理的に移動する必要はありません。手順 3. でサービスを再起動すると、新しい場所にファイルが作成されます。サービスを再起動するまでは、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 ファイルを元の場所から削除します。
変更履歴
変更内容 |
---|
Resource データベースは移動できないという内容を「Resource データベースの移動」に追加しました。 |