Amazon Relational Database Service
ユーザーガイド (API バージョン 2014-10-31)

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

Amazon RDS では、完全バックアップファイル (.bak ファイル) を使用した Microsoft SQL Server データベースのネイティブバックアップおよび復元がサポートされています。RDS を使用すると、データベースサーバー上のローカルファイルシステムを使用せずに Amazon S3 に格納されているファイルにアクセスします。

たとえば、ローカルサーバーから完全バックアップを作成し、それを S3 に保存してから、既存の Amazon RDS DB インスタンスに復元することができます。RDS からバックアップを作成し、S3 に保存してから、必要な場所に復元することもできます。

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

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


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

ネイティブの .bak ファイルを使用したデータベースのバックアップと復元は、通常はデータベースを最もすばやくバックアップおよび復元できます。ネイティブバックアップおよび復元を使用することには、他にも多くの利点があります。たとえば、次の操作を実行できます。

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

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

  • データ、スキーマ、ストアドプロシージャ、トリガー、他のデータベースコードを .bak ファイル内に移行できます。

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

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

  • 災害対策の追加保護レイヤーとして、Amazon S3 を使用したバックアップファイルの保管および転送ができます。

制限と推奨事項

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

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

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

  • 1 TB を超えるサイズのデータベースのネイティブバックアップはサポート外です。

  • 差分バックアップのネイティブ復元は現在サポートされていません。

  • RDS では最大 16 TB のデータベースのネイティブ復元をサポートしています。SQL Server Express でのデータベースのネイティブ復元は、MSSQL エディションによって 10 GB 以下に制限されています。

  • メンテナンスウィンドウや、Amazon RDS がデータベースのスナップショットを作成しているときは、ネイティブバックを行うことはできません。

  • マルチ AZ DB インスタンスでは、完全な復元モデルでバックアップされているデータベースのみネイティブに復元することができます。

  • トランザクション内でのネイティブバックアップと復元を目的とした RDS プロシージャの呼び出しはサポート外です。

  • ネイティブバックアップファイルは、「暗号化のみ」の暗号モードを使用して、指定された AWS Key Management Service キーで暗号化されます。暗号化されたバックアップファイルを復元するときは、「暗号化のみ」の暗号モードで暗号化されていることに注意してください。

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

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

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

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

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

    バックアップファイルに使用する S3 バケットを用意してから、RDS に移行するバックアップをアップロードする必要があります。Amazon S3 バケットがすでにある場合はそれを使用できます。バケットがない場合、バケットを作成できます。または、AWS マネジメントコンソール を使用して SQLSERVER_BACKUP_RESTORE オプションを追加するときに新しいバケットの作成を選択することもできます。

    S3 の使用方法の概要については、『Amazon Simple Storage Service 入門ガイド』を参照してください。詳細については、「Amazon Simple Storage Service コンソールユーザーガイド」を参照してください。

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

    IAM ロールがすでにある場合はそれを使用できます。IAM ロールがない場合、手動で新しいロールを作成できます。または、AWS マネジメントコンソール を使用して SQLSERVER_BACKUP_RESTORE オプションを追加するときに新しい IAM ロールの作成を選択することもできます。

    手動で新しい IAM ロールを作成する場合は、次のセクションで示されている方法を使用します。また、信頼ポリシーとアクセス許可ポリシーを既存の IAM ロールにアタッチする場合は、次のセクションで説明されている方法を使用します。

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

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

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

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

ネイティブバックアップおよび復元機能では、このセクションの例と同様の信頼ポリシーおよびアクセス許可ポリシーを使用します。以下の例では、すべてのサービスアカウントにサービスのプリンシパル名 rds.amazon.aws.com をエイリアスとして使用します。他の例では、Amazon リソースネーム (ARN) を指定して、信頼ポリシーでアクセス許可を付与している別のアカウント、ユーザー、またはロールを特定します。

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

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

次の例では、ARN を使用してリソースを指定しています。ARN の使用の詳細については、「Amazon リソースネーム (ARN)」を参照してください。

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

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

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

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

{ "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: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 バケット + キー ARN)。

    ファイルは任意の拡張子を持つことができますが、.bak は従来の拡張子です。

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

  • @kms_master_key_arn – バックアップを暗号化するためのキー (KMS 顧客マスターキー ARN)。AWS KMS キー識別子を指定しない場合、Amazon RDS では新しい DB インスタンスに対してデフォルトの暗号化キーを使用します。AWS KMS では、AWS アカウント用に Amazon RDS のデフォルトの暗号化キーを作成します。AWS アカウントには、AWS のリージョンごとにデフォルトの暗号化キーがあります。

    詳細については、「Amazon RDS リソースの暗号化」を参照してください。

  • @overwrite_S3_backup_file – デフォルトは 0 です。

    • 0 – 既存のファイルを上書きしないでください。ファイルがすでに存在する場合はエラーを返します。

    • 1 – バックアップファイルではない場合でも、指定された名前を持つ既存のファイルを上書きします。

  • @type – デフォルトは FULL で、大文字と小文字は区別されません

    • differential – 差分バックアップを取ります。

    • full – 完全バックアップを取ります。

例 暗号化なしの差分バックアップ

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, @type='differential';

例 暗号化による完全バックアップ

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, @type='FULL';

差分バックアップは、最後の完全バックアップに基づいています。差分バックアップを機能させるには、最後の完全バックアップと差分バックアップの間でスナップショットを作成することはできません。差分バックアップを作成し、スナップショットが存在する場合は、差分バックアップを続行する前に別の完全バックアップを作成してください。

注記

差分バックアップの復元は現在サポートされていません。

最後の完全バックアップまたはスナップショットは、次のサンプル SQL を使用して検索できます。

select top 1 database_name , backup_start_date , backup_finish_date from msdb.dbo.backupset where database_name='name-of-database' and type = 'D' order by backup_start_date desc;

データベースの復元

データベースを復元するには、rds_restore_database ストアドプロシージャを呼び出します。ネイティブ復元を使用するたびに、Amazon RDS は復元されたデータベースの初期スナップショットを作成します。

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

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

  • @s3_arn_to_restore_from – データベースの復元に使用するバックアップファイルの Amazon S3 ARN プレフィックス。単一ファイルのバックアップの場合は、名前全体を入力します。複数ファイルのバックアップから復元するには、ファイルに共通のプレフィックスを付けてから、そのプレフィックスにアスタリスクを付けます (*)。以下に例を示します。

    次の例では、1 つのファイルを復元を示します。

    exec msdb.dbo.rds_restore_database @restore_db_name='database_name', @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/bakup_file'

    複数のファイルの復元中のエラーを回避するために、すべてのバックアップファイルに同じプレフィックスがあり、他のファイルでそのプレフィックスが使用されていないことを確認します。

    次の例では、複数のファイルを復元を示します。

    exec msdb.dbo.rds_restore_database @restore_db_name='database_name', @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/bakup_file_*'

    @s3_arn_to_restore_from が空の場合は、次のエラーが返ります: "S3 ARN prefix cannot be empty"

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

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

次の例では、暗号化を行わない復元を示します。

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

次の例では、暗号化を使用した復元を示します。

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 を取得できます。

exec msdb.dbo.rds_cancel_task @task_id=1234;

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

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

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

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

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

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

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

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

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

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

トラブルシューティング

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

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

Access Denied

バックアップまたは復元プロセスは、バックアップファイルにアクセスできません。通常、この原因は以下のような問題にあります。

  • 間違ったバケットを参照している。間違った形式を使用してバケットを参照している。ARN を使用しないでファイル名を参照している。

  • バケットファイルへのアクセス許可が正しくない。たとえば、アクセスを試行しているアカウントとは別のアカウントでファイルが作成されている場合は、正しいアクセス許可を追加します。

  • IAM ポリシーが正しくないか、不完全である。IAM ロールには、すべての必要な要素 (正しいバージョンなど) を含める必要があります。これらについては、「SQL Server データベースのインポートとエクスポート」で詳しく説明しています。

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

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

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

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 インスタンスとは異なる AWS リージョンで 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 のアクセス権限が正しくありません。適切なアクセス権限を持っていることを確認してください。持っていない場合は、追加してください。

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

The Restore task is unable to restore from more than n backup file(s). Please reduce the number of files matched and try again. 復元しようとしているファイル数を減らします。必要に応じて、個々のファイルを大きくすることができます。

関連トピック