データベースを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたはオンプレミスの Microsoft SQL Server インスタンスから、Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server インスタンスに移行したいです。
簡単な説明
データベースを移行するには、次のいずれかの方法を使用します。
- ネイティブ SQL Server のバックアップと復元
- AWS Database Migration Service (AWS DMS)
- トランザクションレプリケーション
- バックアップパッケージ (.bacpac) ファイル
- SQL Server スクリプトの生成と発行ウィザード
- SQL Server インポート/エクスポートウィザード
- SQL Server 一括コピープログラム (bcp) ユーティリティ
移行時間とダウンタイムは、移行方法によって異なります。詳細については、「Amazon RDS for SQL Server への移行のベストプラクティス」を参照してください。
解決策
ネイティブ SQL Server のバックアップと復元
ネイティブのバックアップと復元は、レプリケーションを使用する方法よりも時間がかかりますが、制限は少なくなります。
次の手順を実行します。
-
Amazon Simple Storage Service (Amazon S3) バケットを作成して、オンプレミスまたは EC2 インスタンスのバックアップを保存します。Amazon S3 バケットは RDS for SQL Server インスタンスと同じ AWS リージョンにある必要があります。
-
バケットにアクセスするための AWS Identity and Access Management (IAM) ロールを作成します。
-
RDS for SQL Server インスタンスに関連付けられたオプショングループに SQLSERVER_BACKUP_RESTORE オプションを追加します。
-
オンプレミスまたは EC2 インスタンスのバックアップを作成し、それを S3 バケットに移動します。
-
次のスクリプトを実行し、バックアップを RDS for SQL Server インスタンスに復元します。
exec msdb.dbo.rds_restore_database
@restore_db_name='database_name',
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name file_name_and_extension';
注: database_name を実際のデータベースの名前に、bucket_name をバケットの名前に、file_name_and_extension をファイルの名前に置き換えてください。
-
次のスクリプトを実行して、バックアップのステータスを追跡します。
exec msdb.dbo.rds_task_status;
タスクが失敗した場合は、出力の task_info 列にエラーメッセージがないかどうかを確認します。Amazon RDS の問題については、トラブルシューティングの表でエラーメッセージを調べてください。
注: 差分バックアップをバックアップおよび復元できます。ログを復元して特定の時点に復元することもできます。
AWS DMS
次の手順を実行します。
- SQL Server を AWS DMS のソースまたはターゲットとして使用するには、前提条件を満たし、制限を確認してください。
- AWS DMS レプリケーションインスタンスを作成します。
- AWS DMS を使用してソースおよびターゲットのエンドポイントを作成します。
- 移行タスクを作成します。
トランザクションレプリケーション
オンプレミスまたは EC2 SQL Server インスタンスから、RDS for SQL Server インスタンスへのトランザクションレプリケーションを設定できます。ただし、RDS for SQL Server インスタンスはサブスクライバーにのみ設定できます。また、プッシュサブスクリプションでは、オンプレミスまたは EC2 SQL Server インスタンスはパブリッシャーまたはディストリビューターにのみ設定できます。
注: トランザクションレプリケーションは、RDS for SQL Server で変更できる EC2 ホスト名によって異なります。この制限があるため、トランザクションレプリケーションは RDS for SQL Server インスタンスへのデータの 1 回限りの移行にのみ使用するのがベストプラクティスです。
バックアップパッケージ (.bacpac) ファイル
.bacpac ファイルは、コピーされたメタデータとファイルに圧縮されたデータで構成されます。200 GB 未満のデータベースには、.bacpac ファイルの使用をお勧めします。エクスポート/インポートまたは SQLPackage.exe (コマンドライン) ユーティリティを使用すると、.bacpac ファイルを作成できます。.bacpac ファイルの詳細については、「Migrate SQL Server databases from an Azure SQL database to Amazon RDS for SQL Server using bacpac method」(bacpac 方式を使用して SQL Server データベースを Azure SQL データベースから Amazon RDS for SQL Server に移行する) を参照してください。
SQL Server スクリプトの生成と発行ウィザード
データベースが 1 GB 未満の場合は、スクリプトの生成と発行ウィザードを使用できます。大規模なデータベースの場合は、インポート/エクスポートウィザードまたは一括コピー方式を使用すると、データベースのスキーマをスクリプト化できます。スクリプトの生成と発行ウィザードの詳細については、Microsoft SQL Server ドキュメントの「 スクリプトを生成する方法 (SQL Server Management Studio)」を参照してください。
注: [Set Scripting Option] (スクリプトオプションの設定) ページで [Save scripts to specific location] (スクリプトを特定の場所に保存) と [Advanced] (詳細設定) を選択したことを確認してください。[Advanced] (詳細設定) には、インポートおよびエクスポート中にテーブルにオブジェクトを含めるか除外するための追加オプションが用意されています。
SQL Server インポート/エクスポートウィザード
インポート/エクスポートウィザードは、統合パッケージを作成します。統合パッケージは、オンプレミスまたは EC2 SQL Server インスタンスから RDS for SQL Server インスタンスにデータをコピーするのに使用します。RDS for SQL Server インスタンスにコピーする特定のテーブルをフィルタリングできます。
インポート/エクスポートウィザードを実行する前に、ネットワークに接続できることを確認し、セキュリティグループのアクセス許可を設定します。Microsoft Learn のウェブサイトの「どのアクセス許可が必要ですか?」を参照してください。
インポート/エクスポートウィザードの詳細については、Microsoft Learn のウェブサイトの「 SQL Server インポートおよびエクスポート ウィザードを実行する方法」を参照してください。
インポート/エクスポートウィザードを実行する際は、送信先の RDS for SQL Server インスタンスで次のオプションを選択する必要があります。
- [Server Name] (サーバー名) に、Amazon RDS データベースインスタンスのエンドポイント名を入力します。
- [Authentication mode] (認証モード) で [SQL Server Authentication] (SQL Server 認証) を選択します。
- [Username] (ユーザー名) と [Password] (パスワード) には、RDS for SQL Server インスタンスで作成したメインユーザーを入力します。
SQL Server bcp ユーティリティ
コマンドラインユーティリティを使用して、SQL Server インスタンス間で大量のデータを一括インポートするか、ファイルにエクスポートします。bcp ユーティリティを使用すると、大量のデータを SQL Server インスタンスにインポートしたり、ファイルにエクスポートしたりできます。
in コマンドと out コマンドの例を次に示します。
out
次の out コマンドを実行して、テーブルのレコードをファイルにエクスポートまたはダンプします。
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 インスタンスにログインする AWS アカウントのユーザー名を指定します。
- -P: -U で指定されたユーザーのパスワードを指定します。
- -b: インポートしたデータのバッチあたりの行数を指定します。
in
次の in コマンドを実行して、ダンプファイルからすべてのレコードをテーブルにインポートします。
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
詳細については、Microsoft Learn のウェブサイトで「bcp ユーティリティ」を参照してください。