他の方法による SQL Server データのインポートとエクスポート - Amazon Relational Database Service

他の方法による SQL Server データのインポートとエクスポート

次に、自分の Microsoft SQL Server データを Amazon RDS にインポートするためのスナップショット使用に関する情報を、確認することができます。また、SQL Server を実行する RDS DB インスタンスからデータをエクスポートするためのスナップショット使用に関する情報を確認することができます。

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

注記

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

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

スナップショットを使用して SQL Server DB インスタンスにデータをインポートするには
  1. DB インスタンスを作成します。詳細については、「Amazon RDS DB インスタンスの作成」を参照してください。

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

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

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

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

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

    注記

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

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

    ターゲット DB インスタンスの自動バックアップを無効にすると、データのインポート中のパフォーマンスが向上します。これは、自動バックアップが無効化されると、Amazon RDS がトランザクションを記録しなくなるためです。ただし、考慮しなければならないことがあります。ポイントインタイムリカバリを実行するには、自動化バックアップが必要です。そのため、データのインポート中は、データベースを指定のところまで復元することはできません。さらに、保持することを選択する場合を除き、DB インスタンスに作成されていた自動バックアップはすべて消去されます。

    自動バックアップを保持するよう選択すると、誤ってデータを削除することを防止できます。また Amazon RDS では、それぞれの自動バックアップとともにデータベースインスタンスのプロパティも保存されます。これにより、復元が容易になります。このオプションを使用することで、削除後でも、削除されたデータベースインスタンスをバックアップ保存期間内の指定された時点に復元することができます。削除したデータベースインスタンスの自動バックアップは、アクティブなデータベースインスタンスの自動バックアップと同様、指定したバックアップ期間の終了時に自動的に削除されます。

    以前のスナップショットを使用してデータベースを復元することもできます。また、お客様が作成したスナップショットは、引き続き使用できます。自動バックアップの詳細については、「バックアップの概要」を参照してください。

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

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

    --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. トリガーを無効にします (該当する場合)。

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

    --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 サーバーインスタンスの master データベースに問い合わせ、データ定義言語 (DDL) を作成しなければなりません。このファイルには、最終的な DB インスタンスに加えたいすべてのログイン情報とパスワードが含まれるようにします。またファイルには、転送したロールメンバーシップと許可も含まれます。

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

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

    p.type IN

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

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

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

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

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

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

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

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

    --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. トリガーを有効にします (該当する場合)。

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

    --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 サーバーのデプロイ内のデータベースに、スクリプトを作成することができます。その後スクリプトを実行し、そこに含まれる情報を Amazon RDS DB インスタンスに転送することができます。

注記

1 GiB 以上のデータベースについては、データベーススキーマのみをスクリプトするほうが効率的です。次に、インポートおよびエクスポートウィザードを使用するか、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:\ ルートディレクトリに生成します。テーブルは完全修飾名で指定し、テキストファイルはコピーされるテーブルと同じ名前になります。

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 という名前のファイルにコピーします。

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

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

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 を使用します。コマンドは次のとおりです。

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
注記

セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

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

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

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

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

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

SQL Server インポートおよびエクスポートウィザードを使用してデータをエクスポートするには
  1. SQL Server Management Studio で、RDS for SQL Server 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] ボックスに、RDS for SQL Server DB インスタンスのエンドポイントが表示されていることを確認します。

    3. [Use SQL Server Authentication] を選択します。[User name] および [Password] で、マスターユーザーの名前と 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] を選択して、エクスポートされたデータを格納する新しいデータベースを作成します。

      [新規作成] を選択した場合は、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 の一部として使用できます。このグラフィカル SQL Server クライエントは、Express エディションを除くすべての Microsoft SQL Server エディションに含まれます。SQL Server Management Studio は、Windows ベースのアプリケーションとしてのみ使用できます。SQL Server Management Studio Express は、Microsoft から無料でダウンロードできます。

SQL Server のスクリプトの生成とパブリッシュウィザードおよび bcp ユーティリティを使用してデータをエクスポートするには
  1. SQL Server Management Studio で、RDS for SQL Server 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 ユーティリティを使用して、RDS for SQL Server DB インスタンスからファイルにデータをエクスポートします。コマンドプロンプトを開き、次のコマンドを入力します。

    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

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

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