エクスポート (0) 印刷
すべて展開

bcp を使用して Windows Azure SQL データベースにデータベースを移行する方法

更新日: 2014年4月

SQL Server データベースを Windows Azure SQL データベースに移行する場合、SQL Server bcp ユーティリティを使用すると、高いパフォーマンスでデータを移動できます。まず、ソース テーブルからデータ ファイルにデータをコピーするために bcp を使用します。次に、再度 bcp を実行して、データ ファイルからコピー先のテーブルにデータをコピーします。bcp はデータのみを移動するため、データベース スキーマの移行には別の処理を併用する必要があります。

執筆者: Shaun Tinline-Jones

作業を開始する準備

bcp ユーティリティは、SQL Server または Windows Azure SQL データベースへの一括アップロードを高いパフォーマンスで実行できるように設計されたコマンド ライン ユーティリティです。このツールは移行ツールではなく、スキーマの抽出や作成には使用できません。スクリプト生成ウィザード、データ層アプリケーション (DAC) パッケージの抽出と配置など、事前にいずれかのスキーマ移行ツールを使用して、Windows Azure SQL データベース内のデータベースにスキーマを転送しておく必要があります。スキーマの移行プロセスを見極める方法については、「Windows Azure SQL データベースにデータベースを移行するツールの選択」を参照してください。

bcp ユーティリティは、SQL Server アプリケーション プログラミング インターフェイス (API) で公開されている SQL Server 一括コピー機能を呼び出します。Windows Azure SQL データベース移行ウィザードや DAC BACPAC などの移行ツールも、データの転送に一括コピー機能を使用します。

推奨事項

大規模な対象テーブルへのデータ コピー時にパフォーマンスを向上させるには、一括コピーに関するベスト プラクティスに従います。次にその例を示します。

  • データ型を変換しなくても済むように、–N オプションを使用してネイティブ モードでデータを転送します。

  • –b オプションを使用してバッチ サイズを指定します。各バッチは、個別のトランザクションとしてインポートおよび記録されます。既定では、データ ファイルのすべての行が 1 つのバッチとしてインポートされます。トランザクションが失敗した場合、現在のバッチの挿入のみがロールバックされます。データの移行時に Windows Azure SQL データベースへの接続が切断されないように、最適なバッチ サイズを特定して使用することをお勧めします。

  • bcp ヒントを使用します。

    • インポートに –h "TABLOCK" ヒントを使用して、一括読み込み操作中に一括更新のテーブルレベルのロックを行うよう指定します。これによって、行ごとのロックではなく 1 つのテーブル ロックが使用されるため、ロックのオーバーヘッドが減少します。

    • エクスポートに –h "ORDER(…)" ヒントを使用して、データ ファイルを並べ替えます。インポートするデータをテーブル上のクラスター化インデックスに従って並べ替えると、一括インポートのパフォーマンスが向上します。

  • 大規模なテーブルでは、同時に実行できる複数のストリームにインポート コピーを分割します。ソース テーブルから 1 つのデータ ファイルにデータを一括コピーした場合は、–F firstrow パラメーターと –L lastrow パラメーターを使用して、bcp の実行ごとにデータ ファイルのどの部分を処理するかを指定します。

一括コピーのベスト プラクティスに関する詳細については、「一括インポートのパフォーマンスの最適化」を参照してください。

IDENTITY を使用してテーブルの主キーを生成している場合は、bcp –E パラメーターを使用して、ソース データベース内に生成されたキーを保持します。-E は、インポート実行中にテーブルにその他の更新が行われない限り、インポート時の外部キーの違反を防ぎます。データベースを読み取り専用モードに設定するなどして、他の更新が行われないようにしてください。

note
bcp は一度に 1 つのテーブルを操作するため、ソース データベースからのデータ抽出時には、複数テーブル間のトランザクション整合性が維持されません。この問題に対処するには、エクスポート時に、ソース データベースをシングル ユーザー モードまたは読み取り専用モードに設定します。

[先頭に戻る]

制限事項と制約事項

一括コピーのインポートでは、コピー先のデータベース内のテーブルを空にしておく必要があります。前回の一括コピーで挿入されたすべての行を切り捨てるか削除しない限り、同じテーブルに対して複数の一括コピーのインポートは実行できません。

[先頭に戻る]

前提条件

bcp は SQL Server に付属しています。Windows Azure SQL データベースで使用できる bcp を取得するには、SQL Server 2008 R2 またはそれ以降のバージョンの SQL Server からクライアント ユーティリティをインストールしてください。

[先頭に戻る]

bcp を使用したデータの移行

bcp を使用してソース データベースのテーブルからコピー先のデータベースのテーブルのコピーにデータを移動するには、次の 5 つの手順を実行します。

  1. スキーマを移行します。

    スクリプト生成ウィザード、DAC BACPAC などのスキーマ転送メカニズムを使用して、Windows Azure SQL データベース内にデータベースのコピーを作成します。この処理の終了時には、SQL データベースのデータベース内にすべてのテーブルが作成されていますが、テーブルにデータは格納されていません。

  2. データをデータ ファイルにエクスポートします。

    SQL Server のソース データベース内の各テーブルに対して bcp out 操作を実行し、テーブルからデータ ファイルにデータをコピーします。1 つのテーブルからデータ ファイルにデータをエクスポートする例を次に示します。

    bcp tableName out C:\filePath\exportFileName.dat –S serverName –T –n -q
    
    out パラメーターは、SQL Server からデータをコピーすることを示します。-n パラメーターを指定することで、データのネイティブのデータベース データ型を使用して一括コピー操作を実行します。また、-q パラメーターを指定して、bcp ユーティリティとデータベース エンジン インスタンスとの接続で SET QUOTED_IDENTIFIERS ON ステートメントを実行します。

  3. 一括コピーの最適化を実行する

    非クラスター化インデックス、トリガー、制約を無効にするなど、大規模なテーブルへのデータ コピーを高速化するのに必要な変更を、コピー先のデータベース スキーマに加えます。

  4. データ ファイルを にインポートするSQL データベース

    Windows Azure SQL データベースのコピー先データベース内の各テーブルに対して bcp ユーティリティを実行し、エクスポート データ ファイルからテーブルにデータをコピーします。次の例では、bcp を 3 回実行して、約 300,000 行のデータ ファイルから 1 つのテーブルにデータをコピーしています。実行のたびに約 100,000 行がコピーされます。

    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –L 99999 –h”TABLOCK”
    
    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –F 100000 –L 199999 –h”TABLOCK”
    
    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –F 200000 –h”TABLOCK”
    
    in パラメーターは、Windows Azure SQL データベースにデータをコピーすることを示します。–b パラメーターで、インポートするデータのバッチあたりの行数を指定します。–L lastrow パラメーターと –F firstrow パラメーターで、実行ごとにデータ ファイルのどの部分を処理するかを指定します。

  5. スキーマの最適化を削除する

    一括挿入を最適化するために削除されたスキーマのアイテムを復元します。たとえば、手順 3. で無効化された非クラスター化インデックス、トリガー、または制約を有効にします。

[先頭に戻る]

リソース

コミュニティの追加

追加
表示:
© 2014 Microsoft