メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

他の方法を使用した SQL Server データのインポートとエクスポート

以下は、スナップショットを使用することにより、Microsoft SQL Server データを Amazon RDS にインポートし、SQL Server を実行する Amazon RDS DB インスタンスからデータをエクスポートする方法についての情報です。

シナリオでサポートされている場合は、ネイティブバックアップおよび復元機能を使用して Amazon RDS との間でデータを移動する方が簡単です。詳細については、「SQL Server データベースのインポートとエクスポート」を参照してください。

注記

Microsoft SQL Server 用の Amazon RDS では、msdb データベースへのデータのインポートがサポートされていません。

スナップショットを使用した Amazon RDS での SQL Server へのデータのインポート

スナップショットを使用して SQL Server DB インスタンスにデータをインポートするには

  1. DB インスタンスを作成します。 詳細については、「Microsoft SQL Server データベースエンジンを実行する DB インスタンスを作成する」を参照してください。

  2. アプリケーションの送信先 DB インスタンスへのアクセスを停止します。

    データをインポートしている間 DB インスタンスにアクセスできないようにすると、データ転送が早くなります。さらに、データのロード中に他のアプリケーションが同時に DB インスタンスに書き込むことができなければ、競合について心配する必要がなくなります。何か問題が発生し、前のデータベーススナップショットにロールバックする必要がある場合、損失する変更内容はインポートされたデータのみで、そのデータは問題を解決した後、再度インポートできます。

    DB インスタンスへのアクセス制御の詳細については、「DB セキュリティグループを操作する」を参照してください。

  3. ターゲットデータベースのスナップショットを作成します。

    ターゲットデータベースに既にデータが設定されている場合は、データをインポートする前にデータベースのスナップショットを作成することをお勧めします。データのインポートで何か問題があった場合や、変更を破棄する必要がある場合は、スナップショットを使用してデータベースを前の状態に復元できます。データベースのスナップショットの詳細については、「DB スナップショットの作成」を参照してください。

    注記

    データベースのスナップショットを作成するときは、バックアップ処理中の約 10 秒間、データベースの I/O オペレーションは一時停止されます。

  4. ターゲットデータベースの自動バックアップを無効にします。

    ターゲット DB インスタンスの自動バックアップを無効にすると、データのインポート中のパフォーマンスが向上します。これは、自動バックアップが無効化されると、Amazon RDS がトランザクションを記録しなくなるためです。ただし、考慮しなければならないことがあります。ポイントインタイムリカバリを実行するには自動バックアップが必要であるため、データをインポートしている間は、特定時点へのデータベースの復元はできなくなります。さらに、DB インスタンスに作成されていたすべての自動バックアップが消去されます。以前のスナップショットを使用してデータベースを復元することは依然として可能であり、お客様が作成したスナップショットは、引き続き使用できます。自動バックアップの詳細については、「バックアップの使用 」を参照してください。

  5. 外部キーの制約を無効にします (該当する場合)。

    外部キーの制約を無効にする必要がある場合は、次のスクリプトを使用できます。

    Copy
    --Disable foreign keys on all tables DECLARE @table_name SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @table_name; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' NOCHECK CONSTRAINT ALL'; EXEC (@cmd); FETCH NEXT FROM table_cursor INTO @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor; GO
  6. インデックスを削除します (該当する場合)。

  7. トリガーを無効にします (該当する場合)。

    トリガーを無効にする必要がある場合は、以下のスクリプトを使用できます。

    Copy
    --Disable triggers on all tables DECLARE @enable BIT = 0; DECLARE @trigger SYSNAME; DECLARE @table SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name, table_object.name table_name FROM sysobjects trigger_object JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id WHERE trigger_object.type = 'TR'; OPEN trigger_cursor; FETCH NEXT FROM trigger_cursor INTO @trigger, @table; WHILE @@FETCH_STATUS = 0 BEGIN IF @enable = 1 SET @cmd = 'ENABLE '; ELSE SET @cmd = 'DISABLE '; SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' '; EXEC (@cmd); FETCH NEXT FROM trigger_cursor INTO @trigger, @table; END CLOSE trigger_cursor; DEALLOCATE trigger_cursor; GO
  8. 送信先 DB インスタンスにインポートする必要のあるログインについて、送信元 SQL Server インスタンスに問い合わせます。

    SQL Server では、ログインとパスワードを master データベースに保存します。Amazon RDS では master データベースへのアクセス権を付与しないため、送信先 DB インスタンスに直接ログインとパスワードをインポートすることはできません。代わりに、送信元 SQL Server インスタンスの master データベースに対してクエリを実行し、送信先の DB インスタンスに追加する必要のあるすべてのログインおよびパスワードと、転送が必要なロールのメンバーシップおよびアクセス許可を含む定義言語 (DDL) ファイルを生成します。

    master データベースへのクエリ実行については、Microsoft サポート技術情報で、「SQL Server 2005 と SQL Server 2008 のインスタンス間でログインおよびパスワードを転送する方法」を参照してください。

    スクリプトの出力は、送信先 DB インスタンスで実行できる別のスクリプトです。サポート技術情報の記事にあるスクリプトには、次のコードがあります。

    Copy
    p.type IN

    p.type が表示された場合はいつでも、次のコードを代わりに使用します。

    Copy
    p.type = 'S'
  9. データのインポート」の方法を使用してデータをインポートします。

  10. アプリケーションにターゲット DB インスタンスへのアクセス権を付与します。

    データのインポートが完了したら、インポート中に止めていた DB インスタンスへのアプリケーションのアクセスを許可できます。DB インスタンスへのアクセス制御の詳細については、「DB セキュリティグループを操作する」を参照してください。

  11. ターゲット DB インスタンスの自動バックアップを有効にします。

    自動バックアップの詳細については、「バックアップの使用 」を参照してください。

  12. 外部キーの制約を有効化します。

    以前に外部キーの制約を無効にした場合は、ここで以下のスクリプトを使用してそれらを有効にすることができます。

    Copy
    --Enable foreign keys on all tables DECLARE @table_name SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @table_name; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' CHECK CONSTRAINT ALL'; EXEC (@cmd); FETCH NEXT FROM table_cursor INTO @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor;
  13. インデックスを有効にします (該当する場合)。

  14. トリガーを有効にします (該当する場合)。

    トリガーを無効化していた場合は、以下のスクリプトでそれらを有効にすることができます。

    Copy
    --Enable triggers on all tables DECLARE @enable BIT = 1; DECLARE @trigger SYSNAME; DECLARE @table SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name, table_object.name table_name FROM sysobjects trigger_object JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id WHERE trigger_object.type = 'TR'; OPEN trigger_cursor; FETCH NEXT FROM trigger_cursor INTO @trigger, @table; WHILE @@FETCH_STATUS = 0 BEGIN IF @enable = 1 SET @cmd = 'ENABLE '; ELSE SET @cmd = 'DISABLE '; SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' '; EXEC (@cmd); FETCH NEXT FROM trigger_cursor INTO @trigger, @table; END CLOSE trigger_cursor; DEALLOCATE trigger_cursor;

データのインポート

Microsoft SQL Server Management Studio は、Microsoft SQL Server の Express エディションを除くすべてのエディションに含まれるグラフィカル SQL Server クライアントです。SQL Server Management Studio Express は、Microsoft から無料でダウンロードできます。このダウンロードを確認するには、「Microsoft ウェブサイト」を参照してください。

注記

SQL Server Management Studio は、Windows ベースのアプリケーションとしてのみ使用できます。

SQL Server Management Studio には、SQL Server DB インスタンスにデータをインポートするときに便利な、次のツールが含まれています。

  • スクリプトの生成とパブリッシュウィザード

  • インポートおよびエクスポートウィザード

  • 一括コピー

スクリプトの生成とパブリッシュウィザード

スクリプトの生成とパブリッシュウィザードは、データベースのスキーマ、データそのもの、または両方を含むスクリプトを作成します。ローカル SQL Server デプロイメントのデータベース用のスクリプトを生成する場合、そのスクリプトを実行して、そこに含まれる情報を Amazon RDS DB インスタンスに転送することができます。

注記

1 GB 以上のデータベースについては、データベーススキーマのみのスクリプトを作成し、SQL Server のインポートおよびエクスポートウィザード、または一括コピー機能を使用してデータを転送するとより効率的です。

スクリプトの生成とパブリッシュウィザードの詳細については、Microsoft SQL Server のドキュメントを参照してください。

ウィザードでは、特に [Set Scripting Options] ページの高度なオプションに注意を払い、スクリプトに含める必要のあるものがすべて選択されていることを確認します。たとえば、デフォルトでは、データベースのトリガーはスクリプトに含まれていません。

スクリプトが生成されて保存されると、SQL Server Management Studio を使用して DB インスタンスに接続し、スクリプトを実行することができます。

インポートおよびエクスポートウィザード

インポートおよびエクスポートウィザードは、特別な Integration Services パッケージを作成します。これを使用して、ローカルの SQL Server データベースから転送先 DB インスタンスにデータをコピーすることができます。ウィザードでは、転送先 DB インスタンスにコピーするテーブルおよびタプルをフィルタできます。

注記

インポートおよびエクスポートウィザードは、大規模なデータセットには有効に機能しますが、ローカルデプロイメントからリモートにデータをエクスポートするには、最速の方法とはいえません。より速い方法については、SQL Server の一括コピー機能を検討できます。

インポートおよびエクスポートウィザードの詳細については、Microsoft SQL Server のドキュメントを参照してください。

ウィザードでは、[Choose a Destination] ページで、次の操作を行います。

  • [Server Name] に、DB インスタンスのエンドポイント名を入力します。

  • サーバー認証のモードの場合は、[Use SQL Server Authentication] を選択します。

  • [User name] と [Password] に、DB インスタンス用に作成したマスターユーザーの認証情報を入力します。

一括コピー

SQL Server の一括コピー機能は、ソースデータベースから DB インスタンスにデータをコピーするための効率的な手段です。一括コピーは、指定したデータを ASCII ファイルなどのデータファイルに書き込みます。その後、一括コピーを再度実行して、そのファイルのコンテンツを転送先の DB インスタンスに書き込みます。

このセクションでは、SQL Server のすべてのエディションに含まれる bcp ユーティリティを使用します。一括インポートおよびエクスポートオペレーションの詳細については、Microsoft SQL Server のドキュメントを参照してください。

注記

一括コピーを使用する前に、データベーススキーマを転送先の DB インスタンスにインポートする必要があります。これを行うには、このトピックですでに説明したスクリプトの生成とパブリッシュウィザードが最適なツールです。

以下のコマンドは、ローカル SQL Server インスタンスに接続し、指定されたテーブルのタブ区切りファイルを、既存の SQL Server デプロイメントの C:\ ルートディレクトリに生成します。テーブルは完全修飾名で指定し、テキストファイルはコピーされるテーブルと同じ名前になります。

Copy
bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P password -b 10000

前述のコードには、以下のオプションがあります。

  • -n 一括コピーではコピーするデータのネイティブデータ型を使用するように指定します。

  • -S bcp ユーティリティが接続する SQL Server インスタンスを指定します。

  • -U SQL Server インスタンスにログインするアカウントのユーザー名を指定します。

  • -P -U で指定したユーザーのパスワードを指定します。

  • -b 一括インポートするデータの行数を指定します。

注記

インポートの状況にとって重要な他のパラメーターがある場合があります。 たとえば、ID 値に関連する -E パラメーターを必要とする場合があります。 詳細については、『Microsoft SQL Server のドキュメント』の bcp ユーティリティのコマンドライン構文の詳細な説明を参照してください。

たとえば、store という名前のデータベースには、デフォルトスキーマ dbo を使用し、customers という名前のテーブルが含まれているとします。ユーザーアカウント admin とパスワード insecure で、customers テーブルの 10,000 行を customers.txt という名前のファイルにコピーします。

Copy
bcp store.dbo.customers out C:\customers.txt -n -S localhost -U admin -P insecure -b 10000

データファイルを生成した後、ターゲット DB インスタンスにデータベースとスキーマが作成されている場合は、同じコマンドを使用して、DB インスタンスにデータをアップロードできます。この場合、out 引数で出力ファイルを指定する代わりに、in 引数を使用して入力ファイルを指定します。localhost を使用してローカル SQL Server インスタンスを指定する代わりに、DB インスタンスのエンドポイントを指定します。1433 以外のポートを使用する場合は、それも指定します。ユーザー名とパスワードは、DB インスタンスのマスターユーザーとパスワードになります。構文は次のとおりです。

Copy
bcp dbname.schema_name.table_name in C:\table_name.txt -n -S endpoint,port -U master_user_name -P master_user_password -b 10000

前の例を続行するために、マスターユーザー名を admin、パスワードを insecure とします。DB インスタンスのエンドポイントは rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com で、ポート 4080 を使用します。 コマンドは次のとおりです。

Copy
bcp store.dbo.customers in C:\customers.txt -n -S rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com,4080 -U admin -P insecure -b 10000

Amazon RDS の SQL Server からのデータのエクスポート

次のいずれかのオプションを選択して、Amazon RDS SQL DB インスタンスからデータをエクスポートします。

SQL Server インポートおよびエクスポートウィザード

SQL Server インポートおよびエクスポートウィザードを使用して、Amazon RDS SQL DB インスタンスから別のデータストアに 1 つ以上のテーブル、ビュー、またはクエリをコピーできます。この選択は、ターゲットデータストアが SQL Server でない場合に最適です。詳細については、SQL Server のドキュメントの「SQL Server インポートおよびエクスポートウィザード」を参照してください。

SQL Server インポートおよびエクスポートウィザードは、Microsoft SQL Server Management Studio の一部として入手できます。Microsoft SQL Server Management Studio は、Microsoft SQL Server の Express Edition を除くすべてのエディションに含まれるグラフィカル SQL Server クライアントです。SQL Server Management Studio は、Windows ベースのアプリケーションとしてのみ使用できます。SQL Server Management Studio Express は、Microsoft から無料でダウンロードできます。このダウンロードを確認するには、「Microsoft ウェブサイト」を参照してください。

SQL Server インポートおよびエクスポートウィザードを使用してデータをエクスポートするには

  1. SQL Server Management Studio で、Amazon RDS SQL DB インスタンスに接続します。この操作の詳細については、「Microsoft SQL Server データベースエンジンを実行する DB インスタンスに接続する」を参照してください。

  2. [Object Explorer] で、[Databases] を展開し、ソースデータベースのコンテクスト (右クリック) メニューを開き、[Tasks] を選択してから、[Export Data] を選択します。 ウィザードが表示されます。

  3. [Choose a Data Source] ページで、次の作業を行います。

    1. [Data source] で、[SQL Server Native Client 11.0] を選択します。

    2. [Server name] ボックスに、Amazon RDS SQL DB インスタンスのエンドポイントが表示されていることを確認します。

    3. [Use SQL Server Authentication] を選択します。 [User name] および [Password] で、Amazon RDS SQL DB のマスターユーザーの名前とパスワードを入力します。

    4. [Database] ボックスに、データのエクスポート元のデータベースが表示されていることを確認します。

    5. [Next] を選択します。

  4. [Choose a Destination] ページで、次の作業を行います。

    1. [Destination] で、[SQL Server Native Client 11.0] を選択します。

      注記

      他のターゲットデータソースも使用できます。たとえば、.NET Framework データプロバイダー、OLE DB プロバイダー、SQL Server Native Client プロバイダー、ADO.NET プロバイダー、Microsoft Office Excel、Microsoft Office Access、フラットファイルソースを使用できます。このようなデータソースのいずれかをターゲットとして選択する場合は、ステップ 4 の残りの手順をスキップし、SQL Server のドキュメントの「[変換先の選択]」で、指定する接続情報の詳細を参照してください。

    2. [Server name] で、ターゲット SQL Server DB インスタンスのサーバー名を入力します。

    3. 適切な認証タイプを選択します。 必要に応じてユーザー名とパスワードを入力します。

    4. [Database] でターゲットデータベース名を選択するか、[New] を選択して、エクスポートされたデータを格納する新しいデータベースを作成します。

      [New] を選択した場合は、SQL Server のドキュメントの「[データベースの作成]」で、指定するデータベース情報の詳細を確認してください。

    5. [Next] を選択します。

  5. [Table Copy or Query] ページで、[Copy data from one or more tables or views] または [Write a query to specify the data to transfer] を選択します。[Next] を選択します。

  6. [Write a query to specify the data to transfer] を選択した場合は、[Provide a Source Query] ページが表示されます。SQL クエリを入力するか、貼り付けた後、[Parse] を選択してクエリを検証します。クエリを検証したら、[Next] を選択します。

  7. [Select Source Tables and Views] ページで、次の作業を行います。

    1. エクスポートするテーブルやビューを選択するか、指定したクエリが選択されていることを確認します。

    2. [Edit Mappings] を選択し、データベースと列のマッピング情報を指定します。詳細については、SQL Server のドキュメントの「[列マッピング]」を参照してください。

    3. (オプション) エクスポートされるデータのプレビューを表示するには、テーブル、ビュー、またはクエリを選択し、[Preview] を選択します。

    4. [Next] を選択します。

  8. [Run Package] ページで、[Run immediately] が選択されていることを確認します。[Next] を選択します。

  9. [Complete the Wizard] ページで、データのエクスポートの詳細が想定したとおりになっていることを確認します。[Finish] を選択します。

  10. [The execution was successful] ページで、[Close] を選択します。

SQL Server のスクリプトの生成とパブリッシュウィザードおよび bcp ユーティリティ

SQL Server のスクリプトの生成とパブリッシュウィザードを使用すると、データベース全体のスクリプトまたは選択したオブジェクトのみのスクリプトを作成できます。ターゲット SQL Server DB インスタンスにこれらのスクリプトを実行して、スクリプト化されたオブジェクトを再作成できます。次に、bcp ユーティリティを使用して、選択したオブジェクトのデータをターゲット DB インスタンスに一括エクスポートすることができます。この選択肢は、データベース全体 (テーブル以外のオブジェクトを含む) または大量のデータを、2 つの SQL Server DB インスタンス間で移動する場合に最適です。bcp のコマンドライン構文の詳細については、Microsoft SQL Server のドキュメントの「bcp ユーティリティ」を参照してください。

SQL Server のスクリプトの生成とパブリッシュウィザードは、Microsoft SQL Server Management Studio の一部として入手できます。Microsoft SQL Server Management Studio は、Microsoft SQL Server の Express Edition を除くすべてのエディションに含まれるグラフィカル SQL Server クライアントです。SQL Server Management Studio は、Windows ベースのアプリケーションとしてのみ使用できます。SQL Server Management Studio Express は、Microsoft から無料でダウンロードできます。

SQL Server のスクリプトの生成とパブリッシュウィザードおよび bcp ユーティリティを使用してデータをエクスポートするには

  1. SQL Server Management Studio で、Amazon RDS SQL DB インスタンスに接続します。この操作の詳細については、「Microsoft SQL Server データベースエンジンを実行する DB インスタンスに接続する」を参照してください。

  2. [Object Explorer] で、[Databases] ノードを展開し、スクリプト化するデータベースを選択します。

  3. SQL Server のドキュメントの「スクリプトの生成とパブリッシュウィザード」の手順に従ってスクリプトファイルを作成します。

  4. SQL Server Management Studio で、ターゲット SQL Server DB インスタンスに接続します。

  5. [Object Explorer] でターゲット SQL Server DB インスタンスが選択された状態で、[File] メニューの [Open] を選択し、[File] を選択してスクリプトファイルを開きます。

  6. データベース全体をスクリプト化した場合は、スクリプト内の CREATE DATABASE ステートメントを調べて、データベースが必要な場所に、必要なパラメーターを使用して作成されていることを確認します。詳細については、SQL Server のドキュメントの「CREATE DATABASE」を参照してください。

  7. スクリプトでデータベースユーザーを作成している場合は、それらのユーザーのサーバーログインがターゲット DB インスタンスに存在するかどうかを確認します。存在しない場合は、それらのユーザーのログインを作成します。そうしないと、データベースユーザーを作成するスクリプト化されたコマンドは失敗します。詳細については、SQL Server のドキュメントの「ログインの作成」を参照してください。

  8. [SQL Editor] メニューの [!Execute] を選択してスクリプトファイルを実行し、データベースオブジェクトを作成します。スクリプトが終了したら、すべてのデータベースオブジェクトが想定したとおりに存在していることを確認します。

  9. bcp ユーティリティを使用して、Amazon RDS SQL DB インスタンスからファイルにデータをエクスポートします。コマンドプロンプトを開き、次のコマンドを入力します。

    Copy
    bcp database_name.schema_name.table_name out data_file -n -S aws_rds_sql_endpoint -U username -P password

    前述のコードには、以下のオプションがあります。

    • table_name は、ターゲットデータベースに再作成し、データを挿入するテーブルの 1 つの名前です。

    • data_file は、作成されるデータファイルのフルパスと名前です。

    • -n 一括コピーではコピーするデータのネイティブデータ型を使用するように指定します。

    • -S は、エクスポート元の SQL Server DB インスタンスを指定します。

    • -U は、SQL Server DB インスタンスに接続するときに使用するユーザー名を指定します。

    • -P -U で指定したユーザーのパスワードを指定します。

    コマンドの例を次に示します。

    Copy
    bcp world.dbo.city out C:\Users\JohnDoe\city.dat -n -S sql-jdoe.1234abcd.us-west-2.rds.amazonaws.com,1433 -U JohnDoe -P ClearTextPassword

    エクスポートするすべてのテーブルのデータファイルが作成されるまで、この手順を繰り返します。

  10. SQL Server のドキュメントの「データの一括インポートの準備」の手順に従って、ターゲット DB インスタンスでデータを一括インポートするための準備をします。

  11. SQL Server のドキュメントの「一括インポート操作と一括エクスポート操作について」で説明されているパフォーマンスやその他の注意点を検討した後、使用する一括インポートの方法を決定します。

  12. 作成したデータファイルからデータを一括インポートします。ステップ 11 で決定した結果に応じて、SQL Server のドキュメントの「bcp ユーティリティを使用した一括データのインポートとエクスポート」または「BULK INSERT または OPENROWSET(BULK...) を使用した一括データのインポート」の手順に従います。

関連トピック