この資料では、Microsoft SQL Server を実行しているコンピューター間で SQL Server ユーザー データベースおよび最も一般的な SQL Server コンポーネントを移動する手順について説明します。
この資料で説明する手順は、
master、
model、
tempdb、または
msdb システム データベースを移動させないことを前提としています。この手順は、
master および
msdb データベースに含まれるログインおよび最も一般的なコンポーネントを転送するための異なるオプションを提供します。
この資料で説明している手順を実行しても転送されない特定の項目に関する詳細については、「詳細」を参照してください。
注 Microsoft SQL Server 2008 については、SQL Server 2008 オンライン ブック Web サイトの以下の URL で「データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理」のトピックを参照してください。
注 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 からデータを移行できます。ただし、Microsoft SQL Server 2005 の管理ツールは SQL Server 7.0 または SQL Server 2000 の管理ツールとは異なります。SQL Server Enterprise Manager ではなく SQL Server Management Studio を使用する必要があります。また、データ変換サービスのデータのインポートおよびエクスポート ウィザードではなく SQL Server インポートおよびエクスポート ウィザード (DTSWizard.exe) を使用する必要があります。
ユーザー データベースを移動するには、次の 3 つの方法のうちのどれかを使用します。
方法 1: ユーザー データベースをバックアップして復元
転送元サーバーでユーザー データベースをバックアップし、バックアップしたユーザー データベースを転送先サーバーに復元します。
- バックアップ実行中はデータベースを使用できます。バックアップ完了後にユーザーが INSERT、UPDATE、または DELETE ステートメントを実行した場合、バックアップにはこれらの変更は含まれません。変更すべてを転送する必要がある場合、トランザクション ログ バックアップおよびデータベースの完全バックアップを実行すれば、最小限のダウンタイムで変更を転送できます。
- WITH NORECOVERY オプションを指定して、転送先サーバーにデータベースの完全バックアップを復元します。
注: 作業中にデータベースに新たな変更が加えられないようにするには、転送元サーバーのデータベースを使用しないようユーザーに指示します。 - WITH RECOVERY オプションを使用してトランザクション ログのバックアップを実行し、トランザクション ログのバックアップを転送先サーバーに復元します。ダウンタイムは、トランザクション ログ バックアップおよび復元の時間のみとなります。詳細については、SQL Server Books Online の「Transact-SQL リファレンス」トピック内で「RESTORE」サブトピックを参照してください。
- 転送先サーバー上のデータベースは転送元サーバー上のデータベースと同じサイズになります。データベースのサイズを縮小するには、バックアップを実行する前に転送元データベースのサイズを縮小するか、または復元完了後に転送先データベースのサイズを縮小します。詳細については、SQL Server Books Online の「データベースの作成と保守」で「データベースの圧縮」サブトピックを参照してください。
- 転送元データベースと異なる場所にデータベース ファイルを復元する場合、WITH MOVE オプションを指定する必要があります。たとえば、転送元サーバーではデータベースは D:\Mssql\Data フォルダーにあります。転送先サーバーには D ドライブがないため、C:\Mssql\Data フォルダーでデータベースを復元します。
データベースを他の場所に復元する方法の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
221465?
(http://support.microsoft.com/kb/221465/
)
[INF] RESTORE ステートメントでの WITH MOVE オプションの使用
304692?
(http://support.microsoft.com/kb/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 ストアド プロシージャを使用するには、以下の手順を実行します。
- sp_detach_db ストアド プロシージャを使って転送元サーバー上のデータベースをデタッチします。データベースに関連付けられた .mdf、.ndf、および .ldf ファイルを転送先サーバーにコピーする必要があります。ファイルの種類については、次の表を参照してください。
元に戻す全体を表示する
| ファイル名の拡張子 | 説明 |
|---|
| .mdf | プライマリ データ ファイル |
| .ndf | セカンダリ データ ファイル |
| .ldf | トランザクション ログ ファイル |
- sp_attach_db ストアド プロシージャを使用して転送先サーバーでデータベースをアタッチし、上記の手順で転送先サーバーにコピーしたファイルを指定します。
これらの方法の使用方法の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
224071?
(http://support.microsoft.com/kb/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 を実行している転送先サーバーの照合順序が転送元サーバーと異なる場合、転送先データベースの照合順序が転送先サーバーの
master、
model、
tempdb、および
msdb データベースと異なるということを意味します。詳細については、SQL Server 2000 Books Online の「照合順序が混在している環境」トピックを参照してください。
方法 3: データのインポートとエクスポート ウィザードを使用 (SQL Server データベース間でオブジェクトとデータをコピー)
データ変換サービス インポート/エクスポート ウィザードを使用して、データベース全体または指定したオブジェクトとデータを転送元データベースから転送先データベースにコピーできます。
- 転送中は転送元データベースを使用できます。転送中に転送元データベースを使用する場合、転送実行中にブロッキングが発生する場合があります。
- データ変換サービス インポート/エクスポート ウィザードを使用する場合は、転送元サーバーと転送先サーバーで同じ文字セット、並べ替え順、および照合順序を使用する必要はありません。
- 転送元データベース内の未使用の領域は移動しないため、転送先のデータベースは必ずしも転送元データベースと同じサイズではありません。同様に、一部のオブジェクトのみを移動させる場合、転送先のデータベースは必ずしも転送元データベースと同じサイズにはなりません。
- SQL Server 7.0 のデータ変換サービスは、64 KB を超えるテキストおよび画像データを正常に転送できない場合があります。この問題は、SQL Server 2000 バージョンのデータ変換サービスでは発生しません。
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
257425?
(http://support.microsoft.com/kb/257425/
)
[FIX] DTS オブジェクトの転送は 64 KB 以上の BLOB データを転送しない
手順 2: ログインおよびパスワードの転送方法
転送元サーバーから転送先サーバーにログインを転送しない場合、現在の SQL Server のユーザーは転送先サーバーでログオンできない場合があります。次のサポート技術情報で示す手順でログインおよびパスワードを転送できます。
246133?
(http://support.microsoft.com/kb/246133/
)
SQL Server のインスタンス間でログインおよびパスワードを転送する方法
転送先サーバー上でログインする場合の既定のデータベースは転送元サーバー上でログインする場合の既定のデータベースとは異なる場合があります。sp_defaultdb ストアド プロシージャでログオンの既定のデータベースを変更できます。詳細については、SQL Server Books Online 内の「Transact-SQL リファレンス」トピックで「sp_defaultdb」サブトピックを参照してください。
手順 3: 不明なユーザーの解決方法
ログインおよびパスワードを転送先サーバーに転送した後、ユーザーがデータベースにアクセスできない場合があります。ログインはセキュリティ識別子 (SID) によってユーザーに関連付けられており、データベース移動後に SID が整合しない場合、SQL Server はそのユーザーのデータベースへのアクセスを拒否する場合があります。この問題は、不明なユーザーと呼ばれます。SQL Server 2000 の DTS ログイン転送機能を使用してログインおよびパスワードを転送する場合、不明なユーザーが発生する可能性が高くなります。また、Windows 統合ログインによるアクセス許可が、転送元サーバーのドメインと異なるドメインにある転送先サーバーに与えられている場合にも、不明なユーザーが発生することがあります。
- 不明なユーザーを検索します。転送先サーバーでクエリ アナライザーを起動し、移動したユーザー データベースで次のコードを実行します。
exec sp_change_users_login 'Report'
プロシージャがログオンにリンクしていない不明なユーザーを示します。不明なユーザーが示されない場合は、手順 2 および 3 を省略して手順 4. に進みます。 - 不明なユーザーを解決します。不明なユーザーはサーバーには正常にログオンできますが、データベースにアクセスする許可は与えられません。データベースへのログオン アクセスを許可しようとすると、このユーザーが既に存在しているため次のエラー メッセージが表示されます。
Microsoft SQL-DMO (ODBC SQLState: 42000) エラー 15023: ユーザーまたはロール '%s' は現在のデータベースに既に存在します。
不明なユーザーを解決する方法の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
240872?
(http://support.microsoft.com/kb/240872/
)
[HOWTO] SQL Server を実行しているサーバー間でデータベースを移動するときに、権限の問題を解決する方法
この資料にはログインをデータベース ユーザーにマップする手順が記載されています。この手順を実行することで、標準の SQL Server ログインおよび Windows 統合ログインにおける不明なユーザーを解決できます。
274188?
(http://support.microsoft.com/kb/274188/
)
[SQL]PRB: 対応するログインの存在しないユーザー
この資料は、sp_change_users_login ストアド プロシージャを使用して不明なユーザーを 1 人ずつ修正する方法を説明します。sp_change_users_login ストアド プロシージャは、標準の SQL Server ログインにおいて不明なユーザーのみを解決します。 - データベース所有者 (dbo) が不明なユーザーとして表示されている場合は、ユーザー データベースで次のコードを実行します。
exec sp_changedbowner 'sa'
ストアド プロシージャはデータベース所有者を dbo に変更して問題を修正します。データベース所有者を他のユーザーに変更するには、このユーザーで sp_changedbowner を再度実行します。詳細については、SQL Server Books Online の「Transact-SQL リファレンス」トピック内で「sp_changedbowner」サブトピックを参照してください。 - 転送先サーバーで SQL Server 2000 Service Pack 1 が実行されている場合、アタッチまたは復元 (またはその両方) を実行すると、データベース所有者のユーザーが Enterprise Manager の [ユーザー] フォルダーに表示されない場合があります。
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
305711?
(http://support.microsoft.com/kb/305711/
)
[BUG] Enterprise Manager に DBO ユーザーが表示されない
- 転送元サーバーの dbo にマップされているログオンが転送先サーバーに存在しない場合に、Enterprise Manager を使用してシステム管理者 (sa) のパスワードを変更しようとすると、次のエラー メッセージが表示される場合があります。
エラー 21776[SQL-DMO] 名前 'dbo' が Users コレクション内に見つかりませんでした。名前が限定されている場合は、名前の可変部分を [] で囲み、再試行してください。
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
218172?
(http://support.microsoft.com/kb/218172/
)
[PRB] Enterprise Manager で SA パスワードを変更できない
警告: データベースを再度アタッチまたは復元すると、データベース ユーザーが再度不明になる場合があります。その場合、手順 3. を再度実行する必要があります。
手順 4: ジョブ、警告、およびオペレーターを移動する方法
手順 4. は省略できます。転送元サーバーですべてのジョブ、警告およびオペレーターのスクリプトを生成し、転送先サーバーでスクリプトを実行できます。
- ジョブ、警告およびオペレーターを移動するには、以下の手順を実行します。
- SQL Server Enterprise Manager を起動し、[管理] フォルダーを展開します。
- [SQL Server エージェント] を展開し、[警告]、[ジョブ]、または [オペレーター] のいずれかを右クリックします。
- [すべてのタスク] をポイントし、[SQL スクリプト生成] をクリックします。SQL Server 7.0 では、[全ジョブのスクリプト作成]、または [全警告のスクリプト作成]、または [全オペレーターのスクリプト作成] をクリックします。
右クリックする項目によって、[全警告のスクリプト作成]、[全ジョブのスクリプト作成]、または [全オペレーターのスクリプト作成] のいずれかのオプションが表示されます。 - ジョブ、警告、およびオペレーターは、SQL Server 7.0 から SQL Server 2000、または SQL Server 7.0 および SQL Server 2000 を実行しているコンピューター サーバー間で移動できます。
- 転送元サーバーに SQLMail による通知を行うように設定したオペレーターがある場合、転送先サーバーで同じ機能を使用するには転送先サーバーで SQLMail をセットアップする必要があります。
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
263556?
(http://support.microsoft.com/kb/263556/
)
[INF] SQL Mail の設定方法
手順 5: DTS パッケージの移動方法
手順 5. は省略できます。DTS パッケージが SQL Server またはリポジトリ内の転送元サーバー上に格納されている場合、必要に応じてこれを移動できます。サーバー間で DTS パッケージを移動するには、次の方法のうちの 1 つを使用します。
方法 1
- 転送元サーバーの DTS パッケージをファイルに保存し、転送先サーバーで DTS パッケージ ファイルを開きます。
- 転送先サーバーでパッケージを SQL Server またはリポジトリに保存します。
注: 各パッケージは 1 つずつ個別のファイルを使用して移動する必要があります。
方法 2
- DTS デザイナーで DTS パッケージを開きます。
- [パッケージ] メニューの [名前を付けて保存] をクリックします。
- 転送先の SQL Server を指定します。
注 パッケージは新しいサーバーで正しく動作しない場合があります。パッケージを変更したり、接続、ファイル、データ ソース、プロファイル、および以前のソース サーバーに配置されたその他の情報へのパッケージ内の参照を変更して新しい転送先サーバーを参照させる必要がある場合があります。各パッケージの仕様に基づいて、パッケージごとにこれらの変更を行う必要があります。
手順 6: sp_configure 設定を以前のシステムに合わせて変更
新しいシステムの設定と一致するよう設定を変更する必要がある場合があります。たとえば、新しいシステムに複数のメモリがある場合または異なる SQL インスタンスおよびアプリケーションを実行している場合は、最小および最大サーバー メモリ設定または AWE 設定を変更することをお勧めします。オペレーティング システムがアクセスできる CPU コアの数が異なる場合は MAXDOP 設定を変更する必要がある場合があります。
また、リンク サーバー、ミラーリング、レプリケーション、ログ配布、フルテキスト カタログ、特定のバックアップ デバイス、保守計画、データベース ダイアグラム、データベース スナップショット、資格情報およびプロキシ アカウント、エンドポイント、サーバーに設定された DDL トリガー (ログオン トリガーなど)、または master または msdb に関する他の項目などを移動させる方がよい場合もあります。これらの構成のソース サーバーを調べて、必要に応じて転送先サーバーで手動で設定するのに必要な手順を実行してください。
フルテキスト コンポーネントを移動する方法の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
240867?
(http://support.microsoft.com/kb/240867/
)
フルテキスト カタログ フォルダとファイルを移動、コピー、およびバックアップする方法
この資料の手順に従った場合、データベース ダイアグラムおよびバックアップと復元の履歴は移動しません。この情報を移動する必要がある場合、
msdb システム データベースを移動させてください。
msdb データベースの移動方法についての詳細は、「手順 1: ユーザー データベースの移動方法」で記載しているサポート技術情報の資料を参照してください。
msdb データベースを移動させる場合、「手順 4: ジョブ、警告、およびオペレーターを移動する方法」および「手順 5: DTS パッケージの移動方法」を実行する必要はありません。
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
320125?
(http://support.microsoft.com/kb/320125/
)
[HOWTO] データベース ダイアグラムを移動する方法