システム データベースの移動
更新 : 2008 年 11 月 17 日
このトピックでは、SQL Server 2005 のシステム データベースを移動する方法について説明します。システム データベースの移動は、次の状況で便利な場合があります。
- 障害復旧。たとえば、ハードウェア障害により、データベースが問題のあるモードになっている場合や、シャットダウンされた場合など。
- 計画に従った再配置。
- スケジュールされたディスク メンテナンスとしての再配置。
次の手順は、SQL Server の同じインスタンス内でデータベース ファイルを移動する場合に適用されます。SQL Server の別のインスタンスにデータベースを移動する場合や、別のサーバーに移動する場合は、バックアップと復元操作かデタッチとアタッチ操作を使用します。
このトピックの手順では、データベース ファイルの論理名が必要です。論理名を取得するには、sys.master_files カタログ ビューで name 列に対するクエリを実行します。
重要 : |
---|
システム データベースを移動した後に master データベースを再構築すると、すべてのシステム データベースがそれぞれ既定の場所にインストールされるため、システム データベースを再度移動する必要があります。master データベースの再構築の詳細については、「コマンド プロンプトから SQL Server 2005 をインストールする方法」の「システム データベースの再構築とレジストリの再構築」を参照してください。 |
計画に従った再配置とスケジュールされたディスク メンテナンスの手順
計画に従った再配置やスケジュールされたメンテナンス操作の中でシステム データベースのデータ ファイルやログ ファイルを移動するには、次の手順を実行します。この手順は、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 データベースと Resource データベースの移動
Resource データベースは、master データベースの場所に依存します。Resource データ ファイルとログ ファイルは、master データ ファイル (master.mdf) と同じ場所に一緒に保存する必要があります。したがって、master データベースを移動する場合は、Resource データベースも master データ ファイルと同じ場所に移動する必要があります。Resource データベースは、圧縮または暗号化された NTFS ファイル システムのフォルダに保存しないでください。パフォーマンスが低下し、アップグレードできなくなります。
master データベースと Resource データベースを移動するには、次の手順を実行します。
[スタート] ボタンをクリックし、[すべてのプログラム] をポイントします。次に、[Microsoft SQL Server 2005]、[構成ツール] の順にポイントして、[SQL Server 構成マネージャ] をクリックします。
[SQL Server 2005 のサービス] ノードで、SQL Server のインスタンス (たとえば、[SQL Server (MSSQLSERVER)]) を右クリックし、[プロパティ] をクリックします。
[SQL Server (instance_name) のプロパティ] ダイアログ ボックスで、[詳細設定] タブをクリックします。
[起動時のパラメータ] の値を編集して、master データベースのデータ ファイルとログ ファイル用の計画された場所を指すようにし、[OK] をクリックします。エラー ログ ファイルは移動しても移動しなくてもかまいません。
-d
パラメータの後にデータ ファイルのパラメータ値を指定し、-l
パラメータの後にログ ファイルのパラメータ値を指定します。次の例は、master データ ファイルとログ ファイルの既定の場所のパラメータ値を示します。-dC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf
master データ ファイルとログ ファイルの計画に従った再配置場所が
E:\SQLData
の場合、パラメータ値を次のように変更します。-dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
インスタンス名を右クリックして [停止] をクリックし、SQL Server のインスタンスを停止します。
master.mdf ファイルおよび mastlog.ldf ファイルを新しい場所に移動します。
コマンド プロンプトで次のいずれかのコマンドを入力し、SQL Server のインスタンスを master のみを復旧するモードで開始します。これらのコマンドで指定されるパラメータでは、大文字と小文字が区別されます。パラメータが次のように指定されていない場合、コマンドは失敗します。
既定 (MSSQLSERVER) のインスタンスの場合は、次のコマンドを実行します。
NET START MSSQLSERVER /f /T3608
名前付きインスタンスの場合は、次のコマンドを実行します。
NET START MSSQL$instancename /f /T3608
詳細については、「SQL Server のインスタンスを起動する方法 (net コマンド)」を参照してください。
sqlcmd コマンドまたは SQL Server Management Studio を使用して、次のステートメントを実行します。
FILENAME
パスは、master データ ファイルの新しい場所に合わせて変更します。データベース名やファイル名は変更しないでください。ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=data, FILENAME= 'new_path_of_master\mssqlsystemresource.mdf'); GO ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=log, FILENAME= 'new_path_of_master\mssqlsystemresource.ldf'); GO
mssqlsystemresource.mdf ファイルおよび mssqlsystemresource.ldf ファイルを新しい場所に移動します。
次のステートメントを実行して、Resource データベースを読み取り専用に設定します。
ALTER DATABASE mssqlsystemresource SET READ_ONLY;
sqlcmd ユーティリティまたは SQL Server Management Studio を終了します。
SQL Server のインスタンスを停止します。
SQL Server のインスタンスを再起動します。
master データベースのファイルが変更されたことを確認するため、次のクエリを実行します。Resource データベースのメタデータを、システム カタログ ビューやシステム テーブルを使用して表示することはできません。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
例
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 データベース
tempdb データベース
master データベース
msdb データベース
model データベース
ユーザー データベースの移動
サービスの停止
その他の技術情報
データベース ファイルの移動
サービスの開始と再開
ALTER DATABASE (Transact-SQL)
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2008 年 11 月 17 日 |
|
2006 年 4 月 14 日 |
|