SQL Server を実行しているコンピューター間でデータベースを移動する方法

概要

この資料では、Microsoft SQL Server を実行しているコンピューター間で SQL Server ユーザー データベースおよび最も一般的な SQL Server コンポーネントを移動する手順について説明します。

この資料で説明する手順では、mastermodeltempdb、または msdb システム データベースの移動は想定していません。手順では、master データベースと msdb データベースに含まれるログインおよび最も一般的なコンポーネントを転送する方法を提供します。

この資料で説明している手順を実行しても転送されない特定の項目に関する詳細については、「詳細」を参照してください。

注: SQL Server 2008 の場合は、Microsoft Developer Network (MSDN) Web サイトで「データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理」を参照してください。


注: SQL Server 2000 から Microsoft SQL Server 2000 (64 ビット) へのデータの移行がサポートされています。sp_attach_db システム ストアド プロシージャまたは sp_attach_single_file_db システム ストアド プロシージャを使用するか、32 ビット Enterprise Manager のバックアップと復元を使用して、32 ビット データベースを 64 ビット データベースにアタッチできます。データベースを SQL Server の 32 ビット バージョンと 64 ビット バージョンの間で相互に移動できます。また、同じ方法を使用して、データを SQL Server 7.0 から移行することもできます。ただし、SQL Server 2000 (64 ビット) から SQL Server 7.0 へのデータのダウングレードはサポートされていません。 各方法について以下に説明します。



手順 1: ユーザー データベースを移動する方法
SQL Server 2005 を使用している場合は、同じ方法を使って SQL Server 7.0 または SQL Server 2000 からデータを移行できます。ただし、SQL Server 2005 の管理ツールは SQL Server 7.0 または SQL Server 2000 の管理ツールとは異なります。SQL Server Enterprise Manager ではなく SQL Server Management Studio を使用する必要があります。また、データ変換サービスのデータのインポートおよびエクスポート ウィザードではなく SQL Server インポートおよびエクスポート ウィザード (DTSWizard.exe) を使用する必要があります。

ユーザー データベースを移動するには、次の方法のどれかを使用します。 

方法 1: ユーザー データベースをバックアップおよび復元する
転送元サーバーでユーザー データベースをバックアップし、バックアップしたユーザー データベースを転送先サーバーに復元します。
  • データベースは、バックアップの処理中にも使用できます。バックアップの完了後に、ユーザーが INSERT、UPDATE、または DELETE ステートメントを実行した場合、それらの変更はバックアップに含まれません。すべての変更内容を転送する必要がある場合は、トランザクション ログのバックアップとデータベースの完全バックアップの両方を行うと、ダウンタイムを最小限に抑えて、変更内容を転送できます。
    1. WITH NORECOVERY オプションを指定して、転送先サーバーにデータベースの完全バックアップを復元します。

      注: 作業中にデータベースに新たな変更が加えられないようにするには、転送元サーバーのデータベースを使用しないようユーザーに指示します。
    2. WITH RECOVERY オプションを使用してトランザクション ログのバックアップを実行し、トランザクション ログのバックアップを転送先サーバーに復元します。ダウンタイムは、トランザクション ログのバックアップと復元の時間にのみ発生します。詳細については、SQL Server Books Online の「Transact-SQL リファレンス」の「RESTORE」を参照してください。
  • 転送先サーバーのデータベースは、転送元サーバーのデータベースと同じサイズになります。データベースのサイズを縮小するには、バックアップを行う前に転送元データベースのサイズを縮小するか、または復元が完了した後に転送先データベースのサイズを縮小する必要があります。詳細については、SQL Server Books Online の「データベースの作成と保守」の「データベースの圧縮」を参照してください。
  • データベースを転送元のデータベースと異なる場所に復元する場合は、WITH MOVE オプションを指定する必要があります。たとえば、転送元サーバーではデータベースが D:\Mssql\Data フォルダーにあり、転送先サーバーには D ドライブがないため、データベースを C:\Mssql\Data フォルダーに復元する場合は、このオプションを指定します。
    データベースを他の場所に復元する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

    221465 [INF] RESTORE ステートメントでの WITH MOVE オプションの使用

    304692 [INF] BACKUP および RESTORE を使用して SQL Server 7.0 データベースを新しいサーバーに移動する

  • 転送先サーバーで既存のデータベースを上書きする場合は、WITH REPLACE オプションを指定する必要があります。詳細については、SQL Server Books Online の「Transact-SQL リファレンス」の「RESTORE」を参照してください。
  • 復元する SQL Server のバージョンによって、転送元および転送先サーバーで文字セット、並べ替え順、Unicode の照合順序を一致させておく必要がある場合があります。詳細についてはこのセクションの「照合順序に関する注意」を参照してください。


方法 2: sp_detach_db および sp_attach_db ストアド プロシージャを使用する
sp_detach_db ストアド プロシージャおよび sp_attach_db ストアド プロシージャを使用するには、以下の手順を実行します。
  1. sp_detach_db ストアド プロシージャを使用して、転送元サーバーでデータベースをデタッチします。このデータベースに関連付けられた .mdf、.ndf および .ldf ファイルを転送先サーバーにコピーする必要があります。ファイルの種類の説明については、次の表を参照してください。
    ファイル名の拡張子説明
    .mdfプライマリ データ ファイル
    .ndfセカンダリ データ ファイル
    .ldfトランザクション ログ ファイル
  2. sp_attach_db ストアド プロシージャを使用して転送先サーバーでデータベースをアタッチし、上記の手順で転送先サーバーにコピーしたファイルを指定します。これらの方法の使用方法の詳細については、以下のサポート技術情報番号をクリックしてください。

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

  • データベースをデタッチすると、そのデータベースにはアクセスできなくなります。ファイルをコピーしている間はデータベースを使用できません。デタッチの実行時までにデータベースに含まれていたすべてのデータが移動されます。
  • Attach メソッドまたは Detach メソッドを使用するときは、転送元および転送先の両方のサーバーで同じ文字セット、並べ替え順、Unicode 照合順序を使用する必要が生じる場合があります。詳細については、照合順序についての以下の注意を参照してください。
注: バックアップと復元、または Attach メソッドおよび Detach メソッドを使用して SQL Server 7.0 サーバー間でデータベースを移動する場合は、移動元と移動先の両方のサーバーで同じ文字セット、並べ替え順、Unicode 照合順序を使用している必要があります。SQL Server 7.0 サーバーから SQL Server 2000 サーバーにデータベースを移動する場合、または SQL Server 2000 サーバー間でデータベースを移動する場合は、移動元のデータベースの照合順序が保持されます。この結果、SQL Server 2000 を実行している移動先サーバーで、移動元のデータベースとは異なる照合順序を使用している場合、移動するデータベースでは移動先サーバーの mastermodeltempdb、および msdb データベースと異なる照合順序が使用されます。詳細については、SQL Server 2000 Books Online の「照合順序が混在している環境」を参照してください。



方法 3: データのインポートとエクスポート ウィザードを使用 (SQL Server データベース間でオブジェクトとデータをコピー)

データ変換サービス インポート/エクスポート ウィザードを使用して、データベース全体または指定したオブジェクトとデータを転送元データベースから転送先データベースにコピーできます。
  • 転送中に、転送元データベースが使用中になることがあります。転送元データベースが転送中に使用されると、転送処理中にブロッキングが発生することがあります。
  • データ変換サービス インポート/エクスポート ウィザードを使用する場合は、転送元サーバーと転送先サーバーで同じ文字セット、並べ替え順、および照合順序を使用する必要はありません。
  • 転送元データベースの未使用領域は移動されないため、転送先データベースのサイズは転送元データベースほど大きくならないこともあります。同様に、一部のオブジェクトのみを移動した場合も、転送先データベースのサイズは転送元データベースほど大きくならないことがあります。
  • SQL Server 7.0 データ変換サービスでは、64 KB を超える大きさの TEXT データおよび IMAGE データを正常に転送できない場合があります。この問題は SQL Server 2000 バージョンのデータ変換サービスでは発生しません。
    詳細については、以下のサポート技術情報番号をクリックしてください。

    257425 修正: DTS オブジェクトの転送は 64 KB 以上の BLOB データを転送しない



手順 2: ログインおよびパスワードを転送する方法
転送元サーバーから転送先サーバーにログインを転送しないと、現在 SQL Server を使用しているユーザーが転送先サーバーにログオンできない場合があります。ログインおよびパスワードを転送するには、次のサポート技術情報に記載された手順を実行します。
246133 SQL Server のインスタンス間でログインおよびパスワードを転送する方法

転送先サーバーのログインの既定のデータベースは、転送元サーバーのログインの既定のデータベースと異なる場合があります。ログインの既定のデータベースは、sp_defaultdb ストアド プロシージャを使用して変更できます。詳細については、SQL Server Books Online の「Transact-SQL リファレンス」の「sp_defaultdb」を参照してください。


手順 3: 不明なユーザーを解決する方法
ログインおよびパスワードを転送先サーバーに転送した後にも、ユーザーが移動先データベースにアクセスできない場合があります。ログインは SID (セキュリティ識別子) によってユーザーに関連付けられています。データベースの移動後に SID の一貫性が失われると、SQL Server では、そのユーザーのデータベースへのアクセスが拒否される場合があります。この問題は、"不明なユーザー" と呼ばれています。SQL Server 2000 の DTS ログイン転送機能を使用してログインおよびパスワードを転送すると、不明なユーザーが発生する可能性があります。また、Windows 統合ログインによるアクセス許可が、転送元サーバーのドメインと異なるドメインにある転送先サーバーに与えられている場合にも、不明なユーザーが発生することがあります。
  1. 不明なユーザーを検索します。転送先サーバーでクエリ アナライザーを起動し、移動したユーザー データベースで次のコードを実行します。
    exec sp_change_users_login 'Report'
    このプロシージャを実行すると、ログオンにリンクされていないすべての不明なユーザーが一覧で表示されます。ユーザーが表示されない場合は、手順 2. と手順 3. を省略して手順 4. に進みます。
  2. 不明なユーザーを解決します。ユーザーが不明な場合は、データベース ユーザーはサーバーに正常にログオンできますが、データベースにアクセスする権限はありません。ユーザーは既に存在しているため、データベースへのログオン アクセスを許可しようとすると、次のエラー メッセージが表示されます。
    Microsoft SQL-DMO (ODBC SQLState: 42000) エラー 15023: ユーザーまたはロール '%s' は現在のデータベースに既に存在します。
    不明なユーザーを解決する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

    240872 [HOWTO] SQL Server を実行しているサーバー間でデータベースを移動するときに、権限の問題を解決する方法


    次のサポート技術情報資料にはログインをデータベース ユーザーにマップする手順が記載されています。この手順を実行することで、標準の SQL Server ログインおよび Windows 統合ログインにおける不明なユーザーを解決できます。

    274188 [SQL]PRB: 対応するログインの存在しないユーザー


    この資料では、不明なユーザーを個別に解決する sp_change_users_login ストアド プロシージャの使用方法を説明しています。sp_change_users_login ストアド プロシージャで解決できるユーザーは、標準の SQL Server ログインの不明なユーザーのみです。
  3. データベース所有者 (dbo) が不明なユーザーとして表示されている場合は、ユーザー データベースで次のコードを実行します。
    exec sp_changedbowner 'sa'
    このストアド プロシージャはデータベース所有者を dbo に変更して問題を解決します。データベース所有者を別のユーザーに変更するには、変更するユーザーを指定して再度 sp_changedbowner を実行します。詳細については、SQL Server Books Online の「Transact-SQL リファレンス」の「sp_changedbowner」を参照してください。
  4. 転送先サーバーで SQL Server 2000 Service Pack 1 が実行されている場合、アタッチまたは復元 (またはその両方) を実行すると、データベース所有者のユーザーが Enterprise Manager の [ユーザー] フォルダーに表示されない場合があります。詳細については、以下のサポート技術情報番号をクリックしてください。

    305711 [BUG] Enterprise Manager に DBO ユーザーが表示されない

  5. 転送元サーバーの dbo にマップされているログオンが転送先サーバーに存在しない場合に、Enterprise Manager を使用してシステム管理者 (SA) のパスワードを変更しようとすると、次のエラー メッセージが表示される場合があります。
    エラー 21776: [SQL-DMO] 名前 'dbo' が Users コレクション内に見つかりませんでした。名前が限定されている場合は、名前の可変部分を [] で囲み、再試行してください。
    詳細については、以下のサポート技術情報番号をクリックしてください。

    218172 [PRB] Enterprise Manager で SA パスワードを変更できない

警告: データベースを再度アタッチまたは復元すると、データベース ユーザーが再度不明になる場合があります。その場合、手順 3. を再度実行する必要があります。


手順 4: ジョブ、警告、およびオペレーターを移動する方法
「手順 4」は省略できます。転送元サーバーですべてのジョブ、警告およびオペレーターのスクリプトを生成し、転送先サーバーでスクリプトを実行できます。
  • ジョブ、警告およびオペレーターを移動するには、以下の手順を実行します。
    1. SQL Server Enterprise Manager を起動し、[管理] フォルダーを展開します。
    2. [SQL Server エージェント] を展開し、[警告]、[ジョブ]、または [オペレーター] のいずれかを右クリックします。
    3. [すべてのタスク] をポイントし、[SQL スクリプト生成] をクリックします。SQL Server 7.0 では、[全ジョブのスクリプト作成]、[全警告のスクリプト作成]、または [全オペレーターのスクリプト作成] をクリックします。
    右クリックする項目によって、[全警告のスクリプト作成]、[全ジョブのスクリプト作成]、または [全オペレーターのスクリプト作成] のいずれかのオプションが表示されます。
  • ジョブ、警告、およびオペレーターは、SQL Server 7.0 から SQL Server 2000、または SQL Server 7.0 および SQL Server 2000 を実行しているコンピューター サーバー間で移動できます。
  • 転送元サーバーに SQLMail による通知を行うように設定したオペレーターがある場合、転送先サーバーで同じ機能を使用するには転送先サーバーで SQLMail をセットアップする必要があります。
    詳細については、以下のサポート技術情報番号をクリックしてください。

    263556 [INF] SQL Mail の設定方法



手順 5: DTS パッケージを移動する方法
「手順 5」は省略できます。DTS パッケージが転送元サーバーの SQL Server またはリポジトリに格納されている場合は、DTS パッケージを移動できます。サーバー間で DTS パッケージを移動するには、以下のいずれかの方法を使用します。

方法 1: DTS パッケージを SQL Server に保存する

  1. 転送元サーバーの DTS パッケージをファイルに保存し、転送先サーバーで DTS パッケージ ファイルを開きます。
  2. 転送先サーバーでパッケージを SQL Server またはリポジトリに保存します。
    : 各パッケージは 1 つずつ個別のファイルを使用して移動する必要があります。


方法 2: DTS デザイナーで DTS パッケージを開く

  1. DTS デザイナーで DTS パッケージを開きます。
  2. [パッケージ] メニューの [名前を付けて保存] をクリックします。
  3. 転送先の SQL Server を指定します。
注: パッケージは、新しいサーバーで正常に機能しない場合があります。パッケージを変更し、パッケージ内にある転送元のサーバーの接続、ファイル、データ ソース、プロファイル、およびその他の情報への参照を新しい転送先サーバーのものに変更することが必要な場合があります。これらの変更は、各パッケージのデザインに応じて、パッケージごとに行う必要があります。

手順 6: sp_configure 設定を以前のコンピューターに合わせて変更する
新しいコンピューターの設定と一致するよう設定を変更する必要がある場合があります。たとえば、新しいコンピューターに複数のメモリがある場合または異なる SQL インスタンスおよびアプリケーションを実行している場合は、最小および最大サーバー メモリ設定または AWE 設定を変更することをお勧めします。オペレーティング システムがアクセスできる CPU コアの数が異なる場合は MAXDOP 設定を変更する必要がある場合があります。

詳細

また、リンク サーバー、ミラーリング、レプリケーション、ログ配布、フルテキスト カタログ、特定のバックアップ デバイス、保守計画、データベース ダイアグラム、データベース スナップショット、資格情報およびプロキシ アカウント、エンドポイント、サーバーに設定された DDL トリガー (ログオン トリガーなど)、または master または msdb に関する他の項目などを移動させる方がよい場合もあります。これらの構成のソース サーバーを調べて、必要に応じて転送先サーバーで手動で設定するのに必要な手順を実行してください。

フルテキスト コンポーネントを移動する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

240867 フルテキスト カタログ フォルダーとファイルを移動、コピー、およびバックアップする方法

この資料の手順を実行しても、データベース ダイアグラムおよびバックアップと復元ヒストリは移動できません。この情報を移動する必要がある場合は、msdb システム データベースを移動します。msdb データベースを移動する方法の詳細については、この資料の「手順 1: ユーザー データベースを移動する方法」に記載されているサポート技術情報を参照してください。msdb データベースを移動する場合は、「手順 4: ジョブ、警告、およびオペレーターを移動する方法」または「手順 5: DTS パッケージを移動する方法」の手順を実行する必要はありません。

関連情報

詳細については、以下のサポート技術情報番号をクリックしてください。

320125 [HOWTO] データベース ダイアグラムを移動する方法

プロパティ

文書番号:314546 - 最終更新日: 2014/01/08 - リビジョン: 1

フィードバック