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

SQL Server データベースのインポートとエクスポート

Amazon Relational Database Service (Amazon RDS) では、完全バックアップファイル (.bak ファイル) を使用した Microsoft SQL Server データベースのネイティブバックアップおよび復元がサポートされています。簡単に移動可能な 1 つのファイルで SQL Server データベースのインポートとエクスポートを行うことができます。 オンプレミスデータベースの完全バックアップを作成して Amazon Simple Storage Service (Amazon S3) に保存した後、SQL Server を実行する既存の Amazon RDS DB インスタンスにバックアップファイルを復元できます。Amazon RDS SQL Server データベースをバックアップして Amazon S3 に保存した後、バックアップファイルをオンプレミスサーバーや、SQL Server を実行する別の Amazon RDS DB インスタンスに復元できます。

次の図は、サポートされるシナリオを示しています。

 ネイティブバックアップおよび復元アーキテクチャ

.bak ファイルを使用したデータベースのバックアップと復元はかなり最適化されているため、通常はデータベースを最もすばやくバックアップおよび復元できます。ネイティブバックアップおよび復元を使用することには、他にも多くの利点があります。以下の操作を行うことができます。

  • データベースを Amazon RDS に移行できます。

  • Amazon RDS SQL Server DB インスタンス間でデータベースを移動できます。

  • データのインポートとエクスポート

  • スキーマ、ストアドプロシージャ、トリガー、他のデータベースコードを移行できます。

  • ストレージのタイプやストレージ容量を変更できます。

  • DB インスタンス全体ではなく、1 つのデータベースをバックアップおよび復元できます。

  • テスト、トレーニング、デモの目的でデータベースのコピーを作成できます。

  • Amazon S3 を通じて Amazon RDS との間でバックアップファイルを保存したり移動したりすることにより、災害復旧用の保護レイヤーが追加されます。

ネイティブバックアップおよび復元は、すべてのリージョンで、シングル AZ とマルチ AZ の両方の DB インスタンスで利用できます。ネイティブバックアップおよび復元は、Amazon RDS でサポートされているすべての Microsoft SQL Server エディション (ライセンス込みのモデルと自分のライセンス使用モデルの両方) で使用できます。

ネイティブバックアップおよび復元を使用する際の制限事項を以下に示します。

  • SQL Server のネイティブバックアップおよび復元は、db.t1.micro DB インスタンスクラスではサポートされていません。 インスタンスクラスの詳細については、「すべての利用可能な DB インスタンスクラスの仕様」を参照してください。

  • Amazon RDS DB インスタンスとは異なるリージョンで Amazon S3 バケットへのバックアップまたは バケットからの復元をすることはできません。

  • あるタイムゾーンのバックアップファイルを、別のタイムゾーンに復元しないことを強くお勧めします。バックアップファイルを別のタイムゾーンに復元した場合は、タイムゾーンの変更によるクエリとアプリケーションへの影響を精査する必要があります。

  • バックアップファイルを、バックアップファイルの作成に使用したのと同じ DB インスタンスに復元することはできません。代わりに、新しい DB インスタンスにバックアップファイルを復元してください。データベースの名前を変更してもこの制限を回避することはできません。

  • 同じバックアップファイルを 1 つの DB インスタンスに複数回復元することはできません。つまり、復元するデータベースを既に含む DB インスタンスにバックアップファイルを復元することはできません。 データベースの名前を変更してもこの制限を回避することはできません。

  • 1 TB を超えるサイズのデータベースをバックアップすることはできません。

  • 4 TB を超えるサイズのデータベースを復元することはできません。

  • メンテナンス時間中や、Amazon RDS がデータベースのスナップショットを作成しているときは、データベースをバックアップすることができません。

  • マルチ AZ DB インスタンスにバックアップファイルを復元するときは、ミラーリングが終了してから、再構築されます。復元しようとしているデータベースだけでなく、DB インスタンスのすべてのデータベースでミラーリングが終了し再構築されます。RDS がミラーリングを再構築している間、DB インスタンスフェイルオーバーすることはできません。復元のサイズよって、ミラーリングの再構築には 30 分以上かかる場合があります。詳細については、「Microsoft SQL Server でのデータベースのミラーリングによるマルチ AZ 配置」を参照してください。

バックアップファイルの作成、コピー、復元時にデータベースをオフラインにできる場合、データベースを Amazon RDS に移行する方法としてネイティブバックアップおよび復元をお勧めします。オンプレミスデータベースをオフラインにできない場合、AWS Database Migration Service を使用してデータベースを Amazon RDS に移行することをお勧めします。詳細については、「AWS Database Migration Service とは」を参照してください。

ネイティブバックアップおよび復元は、クロスリージョンスナップショットコピー機能のデータ復旧機能に代わるものではありません。Amazon RDS におけるクロスリージョン災害復旧のために、データベーススナップショットを別のリージョンにコピーする方法としてスナップショットコピーの使用をお勧めします。 詳細については、「DB スナップショットまたは DB クラスタースナップショットのコピー」を参照してください。

ネイティブバックアップおよび復元のセットアップ

ネイティブバックアップおよび復元をセットアップするには、3 つのコンポーネントが必要です。

  • バックアップファイルを保存する Amazon S3 バケット。

  • バケットにアクセスするための AWS Identity and Access Management (IAM) ロール。

  • DB インスタンスのオプショングループに追加された SQLSERVER_BACKUP_RESTORE オプション。

Amazon S3 バケットがすでにある場合はそれを使用できます。Amazon S3 バケットがない場合、手動で新しいバケットを作成できます。または、AWS マネジメントコンソール を使用して SQLSERVER_BACKUP_RESTORE オプションを追加するときに新しいバケットの作成を選択することもできます。新しいバケットを手動で作成する場合は、「バケットの作成」を参照してください。

IAM ロールがすでにある場合はそれを使用できます。IAM ロールがない場合、手動で新しいロールを作成できます。または、AWS マネジメントコンソール を使用して SQLSERVER_BACKUP_RESTORE オプションを追加するときに新しい IAM ロールの作成を選択することもできます。新しい IAM ロールを手動で作成する場合や、信頼ポリシーとアクセス権限ポリシーを既存の IAM ロールにアタッチする場合は、次のセクションで説明されているアプローチを取ります。

DB インスタンスでネイティブバックアップおよび復元を有効にするには、DB インスタンスのオプショングループに SQLSERVER_BACKUP_RESTORE オプションを追加します。詳細と手順については、「Microsoft SQL Server によるネイティブバックアップおよび復元のサポート」を参照してください。

ネイティブバックアップおよび復元用の IAM ロールの手動作成

ネイティブバックアップおよび復元で使用する新しい IAM ロールを手動で作成するには、Amazon RDS サービスから Amazon S3 バケットにアクセス権限を委任するロールを作成します。IAM ロールを作成したら、信頼ポリシーとアクセス権限ポリシーをアタッチします。ネイティブバックアップおよび復元機能では、次の例と同様の信頼ポリシーおよびアクセス権限ポリシーを使用します。ロールの作成の詳細については、「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。

信頼ポリシーとアクセス権限ポリシーを使用するには、Amazon リソースネーム (ARN) を指定する必要があります。ARN 形式の詳細については、「Amazon リソースネーム (ARN) と AWS サービスの名前空間」を参照してください。

例 ネイティブバックアップおよび復元の信頼ポリシー

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole" }] }

例 暗号化をサポートしないネイティブバックアップおよび復元のアクセス権限ポリシー

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucket_name" }, { "Effect": "Allow", "Action": [ "s3:GetObjectMetaData", "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::bucket_name/*" } ] }

例 暗号化をサポートするネイティブバックアップおよび復元のアクセス権限ポリシー

バックアップファイルを暗号化する場合は、アクセス権限ポリシーに暗号化キーを含めます。暗号化キーの詳細については、AWS Key Management Service (AWS KMS) のドキュメントの「はじめに」を参照してください。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Encrypt", "kms:Decrypt" ], "Resource": "arn:aws:kms:region:account-id:key/key-id" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucket_name" }, { "Effect": "Allow", "Action": [ "s3:GetObjectMetaData", "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::bucket_name/*" } ] }

ネイティブバックアップおよび復元の使用

ネイティブバックアップおよび復元を有効に設定した後、使用を開始できます。最初に、Microsoft SQL Server データベースに接続し、Amazon RDS ストアドプロシージャを呼び出して作業を行います。データベースに接続する手順については、「Microsoft SQL Server データベースエンジンを実行する DB インスタンスに接続する」を参照してください。

ストアドプロシージャによっては、Amazon リソースネーム (ARN) を Amazon S3 バケットおよびファイルに指定する必要があります。ARN の形式は arn:aws:s3:::bucket_name/file_name です。Amazon S3 には、ARN のアカウント番号またはリージョンは不要です。オプションの AWS KMS 暗号化キーも指定する場合、ARN の形式は arn:aws:kms:region:account-id:key/key-id です。詳細については、「Amazon リソースネーム (ARN) と AWS サービスの名前空間」を参照してください。

データベースのバックアップ、データベースの復元、進行中のタスクのキャンセル、バックアップおよび復元タスクのステータスの追跡を行うためのストアドプロシージャがあります。各ストアドプロシージャを呼び出す方法については、以下のサブセクションを参照してください。

データベースのバックアップ

データベースをバックアップするには、rds_backup_database ストアドプロシージャを呼び出します。

注記

メンテナンス時間中や、Amazon RDS がデータベースのスナップショットを作成しているときは、データベースをバックアップすることができません。

以下のパラメータは必須です:

  • @source_db_name – バックアップを作成するデータベースの名前。

  • @s3_arn_to_backup_to – バックアップを保存する Amazon S3 バケットと、ファイルの名前。ファイルの拡張子は .bak、または任意の拡張子にすることができます。

以下のパラメータはオプションです。

  • @kms_master_key_arn – バックアップファイルを暗号化する場合、ファイルの暗号化に使用するキー。暗号化キーの詳細については、AWS Key Management Service (AWS KMS) のドキュメントの「はじめに」を参照してください。

  • @overwrite_S3_backup_file – Amazon S3 バケットにすでに存在する場合にバックアップファイルを上書きするかどうか。既存のファイルを上書きするには 1 を指定します。これを指定すると、バックアップファイルであるか別のタイプのファイルであるかに関係なく、指定した名前を持つバケット内のファイルはすべて上書きされます。ファイルがすでに存在する場合は、既存のファイルを上書きせず、代わりにエラーを返すには、0 を指定します。デフォルト: 0

例 暗号化なし

Copy
exec msdb.dbo.rds_backup_database @source_db_name='database_name', @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension', @overwrite_S3_backup_file=1;

例 暗号化あり

Copy
exec msdb.dbo.rds_backup_database @source_db_name='database_name', @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension', @kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id', @overwrite_S3_backup_file=1;

データベースの復元

データベースを復元するには、rds_restore_database ストアドプロシージャを呼び出します。

以下のパラメータは必須です:

  • @restore_db_name – 復元するデータベースの名前。

  • @s3_arn_to_restore_from – バックアップファイルが含まれる Amazon S3 バケットと、ファイルの名前。

以下のパラメータはオプションです。

  • @kms_master_key_arn – バックアップファイルを暗号化した場合、ファイルの復号化に使用するキー。

例 暗号化なし

Copy
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';

例 暗号化あり

Copy
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', @kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id';

タスクのキャンセル

バックアップまたは復元タスクをキャンセルするには、rds_cancel_task ストアドプロシージャを呼び出します。

以下のパラメータはオプションです。

  • @db_name – タスクをキャンセルするデータベースの名前。

  • @task_id – キャンセルするタスクの ID。rds_task_status を呼び出すことにより、タスク ID を取得できます。

Copy
exec msdb.dbo.rds_cancel_task @task_id=1234;

タスクのステータスの追跡

バックアップおよび復元タスクのステータスを追跡するには、rds_task_status ストアドプロシージャを呼び出します。パラメータを何も指定しない場合、ストアドプロシージャによりすべてのタスクのステータスが返されます。タスクのステータスは、約 2 分ごとに更新されます。

以下のパラメータはオプションです。

  • @db_name – タスクのステータスを表示するデータベースの名前。

  • @task_id – タスクのステータスを表示するタスクの ID。

Copy
exec msdb.dbo.rds_task_status @db_name='database_name';

rds_task_status ストアドプロシージャは、次の列を返します。

説明

task_id

タスクの ID。

task_type

バックアップタスクの BACKUP_DB、または復元タスクの RESTORE_DB の両方。

database_name

タスクが関連付けられているデータベースの名前。

% complete

タスクの進行状況の割合。

duration (mins)

タスクにかかった時間 (分単位)。

lifecycle

タスクのステータス。 タスクのステータスは以下のとおりです。

  • CREATEDrds_backup_database または rds_restore_database を呼び出すとすぐ、タスクが作成されてステータスが CREATED に設定されます。

  • IN_PROGRESS – バックアップまたは復元タスクが開始されると、ステータスが IN_PROGRESS に設定されます。ステータスが CREATED から IN_PROGRESS に変わるまで、最大 5 分かかることがあります。

  • SUCCESS – バックアップまたは復元タスクが完了すると、ステータスが SUCCESS に設定されます。

  • ERROR – バックアップまたは復元タスクに失敗した場合、ステータスが ERROR に設定されます。エラーの詳細については、task_info 列をご覧ください。

  • CANCEL_REQUESTEDrds_cancel_task を呼び出すとすぐに、タスクのステータスが CANCEL_REQUESTED に設定されます。

  • CANCELLED – タスクが正常にキャンセルされると、タスクのステータスが CANCELLED に設定されます。

task_info

タスクに関する追加情報。

データベースのバックアップまたは復元中にエラーが発生した場合は、この列にエラーに関する情報が表示されます。発生する可能性があるエラーのリストと軽減戦略については、「トラブルシューティング」を参照してください。

last_updated

タスクのステータスが最後に更新された日時。 5% 進行するたびに、ステータスが更新されます。

created_at

タスクが作成された日時。

overwrite_S3_backup_file

バックアップタスクを呼び出すときに指定される @overwrite_S3_backup_file パラメータの値。 詳細については、「データベースのバックアップ」を参照してください。

バックアップファイルの圧縮

Amazon S3 バケットの容量を節約するために、バックアップファイルを圧縮できます。バックアップファイルの圧縮の詳細については、Microsoft ドキュメントの「バックアップの圧縮」を参照してください。

バックアップファイルの圧縮は、以下のデータベースエディションでサポートされています。

  • Microsoft SQL Server Enterprise Edition

  • Microsoft SQL Server Standard Edition

バックアップファイルの圧縮を有効にするには、以下のコードを実行します。

Copy
exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';

バックアップファイルの圧縮を無効にするには、以下のコードを実行します。

Copy
exec rdsadmin..rds_set_configuration 'S3 backup compression', 'false';

ネイティブバックアップおよび復元を使用した Amazon RDS への移行

社内データセンターから Amazon RDS にデータベースを移行するには、このトピックの手順に従います。ただし、次のステップを実行して準備できます。

  1. Amazon S3 バケットを作成します。詳細については、「バケットの作成」を参照してください。

  2. データベースバックアップファイルを Amazon S3 バケットにアップロードします。詳細については、「Amazon S3 へのオブジェクトのアップロード」を参照してください。

トラブルシューティング

以下は、ネイティブ バックアップおよび復元を使用する場合に遭遇する可能性のある問題です。

問題 トラブルシューティングの提案

Access Denied

正しいバケットを正しい形式で指定していることを確認してください。ARN にはファイル名を含める必要があります。

詳細については、「ネイティブバックアップおよび復元の使用」を参照してください。

BACKUP DATABASE WITH COMPRESSION is not supported on <edition_name> Edition

バックアップファイルの圧縮は、Microsoft SQL Server Enterprise Edition と Standard Edition でのみサポートされています。

詳細については、「バックアップファイルの圧縮」を参照してください。

Database <database_name> cannot be restored because there is already an existing database with the same family_guid on the instance

バックアップファイルを、バックアップファイルの作成に使用したのと同じ DB インスタンスに復元することはできません。代わりに、新しい DB インスタンスにバックアップファイルを復元してください。

また、同じバックアップファイルを 1 つの DB インスタンスに繰り返し復元することはできません。 つまり、復元するデータベースを既に含む DB インスタンスにバックアップファイルを復元することはできません。 代わりに、新しい DB インスタンスにバックアップファイルを復元してください。

Key <ARN> does not exist

暗号化されたバックアップを復元しようとしましたが、有効な暗号化キーを指定しませんでした。暗号化キーを確認し、再試行してください。

詳細については、「データベースの復元」を参照してください。

Please reissue task with correct type and overwrite property

データベースをバックアップする際に、既存のファイル名を指定して上書きのプロパティを false に設定すると、保存オペレーションは失敗します。このエラーを修正するには、既存のファイル名以外の名前を指定するか、上書きのプロパティを true に設定します。

詳細については、「データベースのバックアップ」を参照してください。

また、データベースを復元しようとして、間違えて rds_backup_database ストアドプロシージャを呼び出した可能性もあります。この場合は、代わりに rds_restore_database ストアドプロシージャを呼び出します。

詳細については、「データベースの復元」を参照してください。

データベースを復元するために rds_restore_database ストアドプロシージャを呼び出した場合は、有効なバックアップファイルの名前を指定したことを確認してください。

詳細については、「ネイティブバックアップおよび復元の使用」を参照してください。

Please specify a bucket that is in the same region as RDS instance

Amazon RDS DB インスタンスとは異なるリージョンで Amazon S3 バケットへのバックアップまたは バケットからの復元をすることはできません。Amazon S3 レプリケーションを使用すると、正しいリージョンにバックアップファイルをコピーできます。

詳細については、Amazon S3 に関するドキュメントの「クロスリージョンレプリケーション」を参照してください。

The specified bucket does not exist

バケットとファイルの正しい ARN を正しい形式で指定したこと確認してください。

詳細については、「ネイティブバックアップおよび復元の使用」を参照してください。

User <ARN> is not authorized to perform <kms action> on resource <ARN>

暗号化されたオペレーションをリクエストしましたが、指定した AWS KMS のアクセス権限が正しくありません。適切なアクセス権限を持っていることを確認してください。持っていない場合は、追加してください。

詳細については、「ネイティブバックアップおよび復元のセットアップ」を参照してください。

関連トピック