SQL Server のデタッチとアタッチ機能を使用して SQL Server データベースを新しい場所に移動する方法

文書翻訳 文書翻訳
文書番号: 224071 - 対象製品
この記事は、以前は次の ID で公開されていました: JP224071
中小企業のお客様は、中小企業向けサポートサイトで問題解決コンテンツや学習リソースもご利用ください。
すべて展開する | すべて折りたたむ

目次

概要

この資料では、Microsoft SQL Server 2005、SQL Server 2000、または SQL Server 7.0 の任意のデータベースのデータ ファイルとログ ファイルの場所を変更する方法について説明します。

SQL Server 2005 のシステム データベースを移動する方法の詳細については、SQL Server Books Online の「システム データベースの移動」を参照してください。このトピックを参照するには、以下の MSDN (Microsoft Developer Network) Web サイトにアクセスしてください。
http://msdn2.microsoft.com/ja-jp/library/ms345408.aspx

詳細

SQL Server システム データベースの場所を変更する手順は、ユーザー データベースの場所を変更する際の手順とは異なります。これらの特殊なケースについては、それぞれのケースごとに説明します。

: SQL Server 7.0 システム データベースと SQL Server 2000 システム データベースには互換性がありません。SQL Server 7.0 の master データベース、model データベース、msdb データベース、またはディストリビューション データベースを SQL Server 2000 にアタッチしないでください。SQL Server 2005 を使用している場合は、SQL Server 2005 のデータベースのみをインスタンスにアタッチできます。この資料のすべての例では、SQL Server が D:\Mssql7 フォルダにインストールされ、すべてのデータ ファイルとログ ファイルがデフォルトのディレクトリ D:\Mssql7\Data フォルダに保存されていると想定しています。また、例では、すべてのデータベースのデータ ファイルとログ ファイルを E:\Sqldata フォルダに移動します。

必要条件

  • 現在の場所から、すべてのデータベース、特に master データベースの最新のバックアップを作成します。
  • システム管理者 (sa) 権限が必要です。
  • データベースのすべてのデータ ファイルとログ ファイルの名前および現在の場所を把握しておく必要があります。

    : データベースで使用されているすべてのファイルの名前および現在の場所は、次のように sp_helpfile ストアド プロシージャを使用して確認できます。
    use <database_name>
    go
    sp_helpfile
    go
  • 移動するデータベースに排他的にアクセスする必要があります。処理中に問題が発生し、移動したデータベースにアクセスできない場合、または SQL Server を開始できない場合は、発生したエラーの詳細を SQL Server エラー ログおよび SQL Server Books Online で確認します。

ユーザー データベースの移動

次の例では、mydb というデータベースを移動します。このデータベースは、Mydb.mdf という 1 つのデータ ファイルと Mydblog.ldf という 1 つのログ ファイルから構成されます。移動するデータベースのデータ ファイルまたはログ ファイルが複数存在する場合は、sp_attach_db ストアド プロシージャでファイルをコンマで区切って指定します。sp_detach_db プロシージャではファイルを指定しないため、データベースを構成するファイル数に関係なく同じ構文を使用します。
  1. 次のようにして、データベースをデタッチします。
    use master
       go
       sp_detach_db 'mydb'
       go
  2. 次に、現在の場所 (D:\Mssql7\Data) から新しい場所 (E:\Sqldata) にデータ ファイルとログ ファイルをコピーします。
  3. 次のように新しい場所のファイルを指定して、データベースを再アタッチします。
    use master
      go
      sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf'
      go
    sp_helpfile ストアド プロシージャを使用して、ファイルの場所が変更されたことを確認します。
    use mydb
       go
       sp_helpfile
       go
    filename 列に、新しい場所が表示されます。
: 「サポート技術情報」 (Microsoft Knowledge Base) の資料 922804 では、Network Attached Storage 上の SQL Server 2005 データベースに関する問題について説明されています。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
922804 [FIX] Network Attached Storage 上にある Microsoft SQL Server 2005 データベースをデタッチした後、SQL Server データベースを再アタッチできない
この問題、および SQL Server 2005 でデータベースをデタッチした場合にデータベースに適用される権限について考慮します。詳細については、SQL Server Books Online で、「データ ファイルとログ ファイルのセキュリティ保護」の「データベースのデタッチとアタッチ」を参照してください。このトピックを参照するには、以下の MSDN (Microsoft Developer Network) Web サイトにアクセスしてください。
http://msdn2.microsoft.com/ja-jp/library/ms189128.aspx

サンプル データベースの移動

Pubs サンプル データベースおよび Northwind サンプル データベース (SQL Server 7.0 または SQL Server 2000 の場合)、または AdventureWorks サンプル データベースおよび AdventureWorksDW サンプル データベース (SQL Server 2005 の場合) を移動するには、ユーザー データベースの移動と同じ手順を実行します。

model データベースの移動

SQL Server 7.0

  1. 現在、SQL Server エージェントが実行されていないことを確認します。
  2. ユーザー データベースの移動と同じ手順を実行します。

SQL Server 2005 および SQL Server 2000

SQL Server 2005 および SQL Server 2000 では、sp_detach_db ストアド プロシージャを使用してシステム データベースをデタッチできません。sp_detach_db 'model' ステートメントを実行すると、次のエラー メッセージが表示されます。
サーバー : メッセージ 7940、レベル 16、状態 1、行 1
システム データベース master、model、msdb、および tempdb はデタッチできません。
model データベースを移動するには、-c オプション、-m オプション、およびトレース フラグ 3608 を指定して SQL Server を起動する必要があります。トレース フラグ 3608 を指定すると、master データベース以外のデータベースが SQL Server で復旧されません。

: これを行った後は、どのユーザー データベースにもアクセスできなくなります。このトレース フラグの使用中は、以下の手順以外の操作は実行しないでください。SQL Server の起動時のパラメータとして、トレース フラグ 3608 を追加するには、以下の手順を実行します。
  1. SQL Server Enterprise Manager でサーバー名を右クリックし、[プロパティ] をクリックします。
  2. [全般] タブで、[起動時のパラメータ] をクリックします。
  3. 次の新しいパラメータを追加します。
    -c -m -T3608
SQL Server 2005 を使用している場合は、SQL Server 構成マネージャを使用して SQL Server サービスの起動時のパラメータを変更できます。起動時のパラメータを変更する方法の詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。
http://msdn2.microsoft.com/ja-jp/library/ms190737.aspx
-c オプション、-m オプション、およびトレース フラグ 3608 の追加後、次の手順を実行します。
  1. SQL Server を停止した後、再開します。
  2. 以下のコマンドを使用して、model データベースをデタッチします。
    use master
       go
       sp_detach_db 'model'
       go
  3. Model.mdf ファイルと Modellog.ldf ファイルを D:\Mssql7\Data フォルダから E:\Sqldata フォルダに移動します。
  4. 以下のコマンドを使用して、model データベースを再アタッチします。
    use master
       go
       sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
       go
  5. SQL Server Enterprise Manager または SQL Server 構成マネージャで、起動時のパラメータから -c -m -T3608 を削除します。
  6. SQL Server を停止した後、再開します。sp_helpfile ストアド プロシージャを使用して、ファイルの場所が変更されたことを確認できます。たとえば、次のコマンドを使用します。
    use model
       go
       sp_helpfile
       go

msdb データベースの移動

SQL Server 7.0

: この手順と model データベースの移動を共に実行する場合は、最初に model、次に msdb の順に再アタッチする必要があります。以下の手順を実行します。
  1. 現在、SQL Server エージェントが実行されていないことを確認します。
  2. ユーザー データベースの移動と同じ手順を実行します。
: SQL Server エージェントが実行されていると、sp_detach_db ストアド プロシージャが失敗し、次のメッセージが表示されます。
サーバー : メッセージ 3702、レベル 16、状態 1、行 0
データベース 'msdb' は現在使用中なので、削除できません。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。

SQL Server 2005 および SQL Server 2000

msdb データベースを移動するには、-c オプション、-m オプション、およびトレース フラグ 3608 を指定して SQL Server を起動する必要があります。トレース フラグ 3608 を指定すると、master データベース以外のデータベースが SQL Server で復旧されません。-c オプション、-m オプション、およびトレース フラグ 3608 を追加するには、「model データベースの移動」に記載されている手順を実行します。-c オプション、-m オプション、およびトレース フラグ 3608 の追加後、以下の手順を実行します。
  1. SQL Server を停止した後、再開します。
  2. 現在、SQL Server エージェント サービスが実行されていないことを確認します。
  3. 次のようにして、msdb データベースをデタッチします。
    use master
    go
    sp_detach_db 'msdb'
    go
  4. Msdbdata.mdf ファイルと Msdblog.ldf ファイルを現在の場所 (D:\Mssql7\Data) から新しい場所 (E:\Sqldata) に移動します。
  5. Enterprise Manager の [起動時のパラメータ] ボックスから -c -m -T3608 を削除します。
  6. SQL Server を停止した後、再開します。

    : -c オプション、-m オプション、およびトレース フラグ 3608 を削除せずに SQL Server を再開した場合、msdb データベースを再アタッチしようとすると、次のエラー メッセージが表示されることがあります。
    サーバー : メッセージ 615、レベル 21、状態 1、行 1
    テーブル ID 3、名前 'model' のデータベース テーブルが見つかりませんでした。
  7. 次のように msdb データベースを再アタッチします。
    use master
    go 
    sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf' 
    go
: この手順と model データベースの移動を共に実行する場合、model データベースのデタッチ中に msdb データベースをデタッチすることになります。これを行う場合、最初に model データベース、次に msdb データベースの順に再アタッチする必要があります。msdb データベースを先に再アタッチした場合、model データベースを再アタッチしようとすると、次のエラー メッセージが表示されます。
メッセージ 0、レベル 11、状態 0、行 0
現在のコマンドで重大なエラーが発生しました。結果は破棄しなければなりません。
この場合、msdb データベースをデタッチし、model データベースを再アタッチした後、msdb データベースを再アタッチする必要があります。

msdb データベースを移動した後で、次のエラー メッセージが表示されることがあります。
エラー 229: EXECUTE 権限は、オブジェクト 'ObjectName'、データベース 'master'、所有者 'dbo' にありません。
この問題は、組み合わせ所有権が破損しているために発生します。msdb データベースの所有者と master データベースの所有者が同一ではありません。この例では、msdb データベースの所有権が変更されています。この問題を回避するには、次の Transact-SQL ステートメントを実行します。これを実行するには、Osql.exe コマンド ライン ユーティリティ (SQL Server 7.0 と SQL Server 2000 の場合) または Sqlcmd.exe コマンド ライン ユーティリティ (SQL Server 2005 の場合) を使用します。
USE MSDB 
Go 
EXEC sp_changedbowner 'sa' 
Go
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
272424 複数のデータベースをチェックする組み合わせオブジェクト所有権は、オブジェクト所有者に割り当てられるログインに依存する

master データベースの移動

  1. SQL Server Enterprise Manager で master データ ファイルと master ログ ファイルのパスを変更します。この作業は、次の手順で行います。

    : ここでエラー ログの場所を変更することもできます。
  2. Enterprise Manager で SQL Server を右クリックし、[プロパティ] をクリックします。
  3. [起動時のパラメータ] をクリックして以下のエントリを確認します。
    -dD:\MSSQL7\data\master.mdf
       -eD:\MSSQL7\log\ErrorLog
       -lD:\MSSQL7\data\mastlog.ldf
    -d は、master データベースのデータ ファイルの完全修飾パスです。

    -e は、エラー ログ ファイルの完全修飾パスです。

    -l は、master データベースのログ ファイルの完全修飾パスです。
  4. これらの値を以下のように変更します。
    1. Master.mdf ファイルと Mastlog.ldf ファイルの現在のエントリを削除します。
    2. 新しい場所を指定するエントリを追加します。
      -dE:\SQLDATA\master.mdf
            -lE:\SQLDATA\mastlog.ldf
  5. SQL Server を停止します。
  6. Master.mdf ファイルと Mastlog.ldf ファイルを新しい場所 (E:\Sqldata) にコピーします。
  7. SQL Server を再開します。
: SQL Server 2005 を使用している場合は、SQL Server 構成マネージャを使用して master データ ファイルと master ログ ファイルのパスを変更します。

tempdb データベースの移動

tempdb データベースは ALTER DATABASE ステートメントを使用して移動できます。
  1. 次のように sp_helpfile を使用して、tempdb データベースの論理ファイル名を確認します。
    use tempdb
    go
    sp_helpfile
    go
    各ファイルの論理名は、name 列に含まれます。この例では、デフォルトのファイル名の tempdev と templog を使用します。
  2. 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 = 'E:\Sqldata\templog.ldf')
    go
    変更を確認する以下のメッセージが表示されます。
    メッセージ 1
    ファイル 'tempdev' が sysaltfiles で変更されました。SQL Server 再起動後に古いファイルを削除してください。
    メッセージ 2
    ファイル 'templog' が sysaltfiles で変更されました。SQL Server 再起動後に古いファイルを削除してください。
  3. SQL Server を再開しないと、tempdb で sp_helpfile を使用して変更を確認できません。
  4. SQL Server を停止した後、再開します。

master データベースと Resource データベースの移動

master データベースと Resource データベースを移動する方法の詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。
http://msdn2.microsoft.com/ja-jp/library/ms345408.aspx

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
912397 SQL Server 2000 のクラスタ化されたインスタンスまたは SQL Server 2005 のクラスタ化されたインスタンスの起動時のパラメータを無効な値に変更すると SQL Server サービスを開始できない
274188 [SQL]PRB: 対応するログインの存在しないユーザー
246133 SQL Server のインスタンス間でログインおよびパスワードを転送する方法
168001 データベースの復元後にデータベース上のユーザー ログインと権限が無効になる

詳細については、以下の書籍を参照してください。
Microsoft Corporation
Microsoft SQL Server 7.0 System Administration トレーニングキット上下巻
Microsoft Press 発行、2001 年
Microsoft Corporation
MCSE Training Kit: Microsoft SQL Server 2000 System Administration
Microsoft Press 発行、2001 年
Microsoft Corporation
Microsoft SQL Server 2000 Resource Kit
Microsoft Press 発行、2001 年

プロパティ

文書番号: 224071 - 最終更新日: 2012年5月1日 - リビジョン: 18.0
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
キーワード:?
kbsqlmanagementtools kbinfo KB224071
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com