現在オフラインです。再接続するためにインターネットの接続を待っています

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

Extended support for SQL Server 2005 ends on April 12, 2016

If you are still running SQL Server 2005 after April 12, 2016, you will no longer receive security updates and technical support. We recommend upgrading to SQL Server 2014 and Azure SQL Database to achieve breakthrough performance, maintain security and compliance, and optimize your data platform infrastructure. Learn more about the options for upgrading from SQL Server 2005 to a supported version here.

この記事は、以前は次の 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 サイトにアクセスしてください。
詳細
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>gosp_helpfilego
  • 移動するデータベースに排他的にアクセスする必要があります。処理中に問題が発生し、移動したデータベースにアクセスできない場合、または 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 サイトにアクセスしてください。

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

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 サイトを参照してください。-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 mastergosp_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 mastergo 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 tempdbgosp_helpfilego
    各ファイルの論理名は、name 列に含まれます。この例では、デフォルトのファイル名の tempdev と templog を使用します。
  2. ALTER DATABASE ステートメントで、論理ファイル名を次のように指定します。
    use mastergoAlter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')goAlter 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 サイトを参照してください。
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (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 年
Moving database files new location move place
プロパティ

文書番号:224071 - 最終更新日: 05/01/2012 22:09:00 - リビジョン: 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
フィードバック