

# Amazon RDS での Microsoft SQL Server の追加機能
<a name="User.SQLServer.AdditionalFeatures"></a>

次のセクションで、Microsoft SQL Server DB エンジンを実行する Amazon RDS インスタンスの拡張について説明します。

**Topics**
+ [RDS for SQL Server での SQL Server ログインのパスワードポリシーの使用](SQLServer.Concepts.General.PasswordPolicy.Using.md)
+ [Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合](User.SQLServer.Options.S3-integration.md)
+ [Amazon RDS for SQL Server でのデータベースメールの使用](SQLServer.DBMail.md)
+ [Amazon RDS for SQL Server の tempdb データベースに対するインスタンスストアのサポート](SQLServer.InstanceStore.md)
+ [Amazon RDS for Microsoft SQL Server で拡張イベントを使用する](SQLServer.ExtendedEvents.md)
+ [RDS for SQL Server によるトランザクションログのバックアップへのアクセス](USER.SQLServer.AddlFeat.TransactionLogAccess.md)

# RDS for SQL Server での SQL Server ログインのパスワードポリシーの使用
<a name="SQLServer.Concepts.General.PasswordPolicy.Using"></a>

Amazon RDS では、Microsoft SQL Server を実行している Amazon RDS DB インスタンスのパスワードポリシーを設定できます。これを使用して、SQL Server 認証を使用して DB インスタンスに認証するログインの複雑さ、長さ、およびロックアウト要件を設定します。

## 重要な用語
<a name="SQLServer.Concepts.General.PasswordPolicy.Using.KT"></a>

**「ログイン」 **  
SQL Server では、データベースインスタンスに認証できるサーバーレベルのプリンシパルを**ログイン**と呼びます。他のデータベースエンジンは、このプリンシパルを*ユーザー*と呼ぶ場合があります。RDS for SQL Server では、ログインは SQL Server 認証または Windows 認証を使用して認証できます。

**SQL Server ログイン**  
SQL Server 認証を使用して認証するためにユーザー名とパスワードを使用するログインは、SQL Server ログインです。DB パラメータを使用して設定するパスワードポリシーは、SQL Server ログインにのみ適用されます。

**Windows ログイン**  
Windows プリンシパルに基づき、Windows 認証を使用して認証するログインは Windows ログインです。Active Directory で Windows ログインのパスワードポリシーを設定できます。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。

## 各ログインのポリシーの有効化と無効化
<a name="SQLServer.Concepts.General.PasswordPolicy.EnableDisable"></a>

 各 SQL Server ログインには、`CHECK_POLICY` および `CHECK_EXPIRATION` のフラグがあります。デフォルトでは、新しいログインは、`CHECK_POLICY` を `ON` に設定し、`CHECK_EXPIRATION` を `OFF` に設定して作成されます。

`CHECK_POLICY` がログインについて有効な場合、RDS for SQL Server は複雑さと最小長の要件に照らしてパスワードを検証します。ロックアウトポリシーも適用されます。`CHECK_POLICY` と `CHECK_EXPIRATION` を有効にする T-SQL ステートメントの例: 

```
ALTER LOGIN [master_user] WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
```

`CHECK_EXPIRATION` が有効になっている場合、パスワードはパスワード有効期間ポリシーの対象です。`CHECK_POLICY` と `CHECK_EXPIRATION`が設定されているかどうかを確認する T-SQL ステートメント:

```
SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
```

## パスワードポリシーパラメータ
<a name="SQLServer.Concepts.General.PasswordPolicy.PWDPolicyParams"></a>

すべてのパスワードポリシーパラメータは動的であり、有効にするために DB を再起動する必要はありません。次の表に、SQL Server ログインのパスワードポリシーを変更するために設定できる DB パラメータを示します。


****  

| DB パラメータ | 説明 | 許可された値 | デフォルト値 | 
| --- | --- | --- | --- | 
| rds.password\$1complexity\$1enabled | SQL Server ログインのパスワードを作成または変更するときは、パスワードの複雑さに関する要件を満たす必要があります。次の制約を満たす必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.PasswordPolicy.Using.html)  | 0、1 | 0 | 
| rds.password\$1min\$1length | SQL Server ログインのパスワードに必要な最小文字数。 | 0-14 | 0 | 
| rds.password\$1min\$1age | ユーザーが SQL Server ログインパスワードを変更するまでに使用する必要がある最小日数。パスワードは、0 に設定した直後に変更できます。 | 0～998 | 0 | 
| rds.password\$1max\$1age | SQL Server ログインパスワードを使用できる最大日数。その後、ユーザーがパスワードを変更する必要があります。0 に設定されると、パスワードは期限切れになりません。 | 0～999 | 42 | 
| rds.password\$1lockout\$1threshold | SQL Server ログインがロックアウトされる原因となるログイン試行の連続失敗回数。 | 0～999 | 0 | 
| rds.password\$1lockout\$1duration | ロックアウトされた SQL Server ログインがロック解除されるまでに待機する必要がある時間 (分)。 | 1～60 | 10 | 
| rds.password\$1lockout\$1reset\$1counter\$1after | ログイン試行に失敗してから、失敗したログイン試行カウンターが 0 にリセットされるまでに経過する必要がある時間 (分)。 | 1～60 | 10 | 

**注記**  
SQL Server パスワードポリシーの詳細については、「[パスワードポリシー](https://learn.microsoft.com/en-us/sql/relational-databases/security/password-policy)」を参照してください。  
パスワードの複雑さと最小長ポリシーは、含まれているデータベースの DB ユーザーにも適用されます。詳細については、「[含まれているデータベース](https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases)」を参照してください。

パスワードポリシーパラメータには、次の制約が適用されます。
+ `rds.password_max_age` が 0 に設定されていない限り、`rds.password_min_age` パラメータは `rds.password_max_age parameter` より小さい必要があります。
+ `rds.password_lockout_reset_counter_after` パラメータは、`rds.password_lockout_duration` パラメータ以下である必要があります。
+ `rds.password_lockout_threshold` が 0 に設定されている場合、`rds.password_lockout_duration` と `rds.password_lockout_reset_counter_after` は適用されません。

### 既存のログインに関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.ExistingLogins"></a>

インスタンスのパスワードポリシーを変更した後、ログイン用の既存のパスワードは、新しいパスワードの複雑さと長さの要件に対して遡及的に評価**されません**。新しいパスワードのみが新しいポリシーに対して検証されます。

SQL Server は、既存のパスワードの有効期間要件を評価**します**。

パスワードポリシーが変更されると、パスワードがすぐに期限切れになる可能性があります。例えば、ログインの `CHECK_EXPIRATION` が有効であり、パスワードが 100 日前に変更され、`rds.password_max_age` パラメータを 5 日に設定した場合、パスワードは直ちに期限切れになり、次回のログイン時にパスワードを変更する必要があります。

**注記**  
RDS for SQL Server は、パスワード履歴ポリシーをサポートしていません。履歴ポリシーは、以前に使用されたパスワードを再利用したログインを禁止します。

### マルチ AZ 配置に関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.MAZPasswords"></a>

マルチ AZ インスタンスの失敗したログイン試行カウンターとロックアウト状態は、ノード間でレプリケートされません。マルチ AZ インスタンスがフェイルオーバーしたときにログインがロックアウトされていた場合、新しいノードでログインがすでにロック解除されている可能性があります。

# マスターログインのパスワードに関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin"></a>

RDS for SQL Server DB インスタンスを作成する場合、マスターユーザーパスワードはパスワードポリシーに対して評価されません。新しいマスターパスワードは、マスターユーザーに操作を実行するとき、特に `ModifyDBInstance` コマンドで `MasterUserPassword` を設定するときにも、パスワードに対して評価されません。いずれの場合も、パスワードポリシーを満たさないマスターユーザーのパスワードを設定でき、その場合でも操作は成功します。ポリシーが満たされない場合、RDS は強力なパスワードの設定を推奨して、RDS イベントのレイズを試みます。マスターユーザーには強力なパスワードのみを使用してください。

マスターユーザーのパスワードがパスワードポリシーの要件を満たしていない場合、RDS は次のイベントメッセージの生成を試みます。
+ マスターユーザーは作成されましたが、パスワードがパスワードポリシーの最小長要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーは作成されましたが、パスワードがパスワードポリシーの複雑さ要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーのパスワードはリセットされましたが、パスワードがパスワードポリシーの最小長要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーのパスワードはリセットされましたが、パスワードがパスワードポリシーの複雑さ要件を満たしていません。より強力なパスワードの使用を検討してください。

デフォルトでは、マスターユーザーは `CHECK_POLICY` と `CHECK_EXPIRATION` が `OFF` に設定されて作成されます。パスワードポリシーをマスターユーザーに適用するには、DB インスタンスの作成後、マスターユーザーに対してこれらのフラグを手動で有効にする必要があります。これらのフラグを有効にしたら、SQL Server でマスターユーザーのパスワードを直接 (T-SQL ステートメントや SSMS などを介して) 変更し、新しいパスワードをパスワードポリシーに照らして検証します。

**注記**  
マスターユーザーがロックアウトされた場合は、`ModifyDBInstance` コマンドを使用してマスターユーザーのパスワードをリセットすることで、ユーザーのロックを解除できます。

## マスターユーザーパスワードの変更
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin.Reset"></a>

マスターユーザーのパスワードは、[ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) コマンドを使用して変更できます。

**注記**  
マスターユーザーのパスワードをリセットすると、RDS はマスターユーザーのさまざまなアクセス許可をリセットし、マスターユーザーは特定のアクセス許可を失う可能性があります。マスターユーザーのパスワードをリセットすると、マスターユーザーがロックアウトされた場合もロックが解除されます。

RDS はマスターユーザーの新しいパスワードを検証し、パスワードがポリシーを満たさない場合は RDS イベントの発行を試みます。RDS は、パスワードポリシーを満たさない場合でもパスワードを設定します。

# Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合
<a name="User.SQLServer.Options.S3-integration"></a>

Amazon RDS for SQL Server を実行する DB インスタンスと Amazon S3 バケットの間でファイルを転送できます。これにより、BULK INSERT などの SQL Server 特性で Amazon S3 を使用することができます。例えば、Amazon S3 から .csv、.xml、.txt、その他ファイルを DB インスタンスホストにダウンロードして、`D:\S3\` からデータベースにデータをインポートできます。全てのファイルは DB インスタンスの `D:\S3\` に保存されます。

以下の制限が適用されます。

**注記**  
RDS ホストと S3 間のトラフィックは、S3 を使用するすべての SQL Server 機能の RDS 内部 VPC エンドポイントを経由します。このトラフィックは RDS インスタンスエンドポイント ENI を使用しません。S3 バケットポリシーは、ネットワーク条件によって RDS トラフィックを制限することはできません。
+ `D:\S3` フォルダ内のファイルは、マルチ AZ インスタンスでのフェイルオーバー後にスタンバイレプリカで削除されます。詳細については、「[S3 統合のマルチ AZ の制限](#S3-MAZ)」を参照してください。
+ DB インスタンスと S3 バケットが同じ AWS リージョンに存在する必要があります。
+ 一度に複数の S3 統合タスクを実行する場合、タスクは並列ではなく順次に実行されます。
**注記**  
S3 統合タスクは、ネイティブバックアップおよび復元タスクと同じキューを共有します。このキューでは、一度に最大2つのタスクまで同時進行させることができます。したがって、実行中の 2 つのネイティブバックアップおよび復元タスクによって S3 統合タスクがブロックされます。
+ S3 統合機能を復元インスタンスで再度有効にする必要があります。S3 統合は元のインスタンスから復元インスタンスに伝搬されることはありません。`D:\S3` のファイルは、復元インスタンスで削除されます。
+ DB インスタンスへのダウンロードは、最大 100 ファイルまでです。言い換えれば、`D:\S3\` 内には 100 ファイル以上は入れておけません。
+ ファイル拡張子がない、または次のファイル拡張子があるファイルのみがダウンロードできます。.abf、.asdatabase、.bcp、.configsettings、.csv、.dat、.deploymentoptions、.deploymenttargets、.fmt、.info、.ispac、.lst、.tbl、.txt、.xml、および.xmla
+ S3 バケットは、関連の AWS Identity and Access Management (IAM) 役割に関連した同じオーナーである必要があります。したがって、クロスアカウント S3 統合はサポートされていません。
+ S3 バケットは一般に公開できません。
+ RDS から S3 へのアップロードのファイルサイズは、1 ファイルあたり 50 GB に制限されます。
+ S3 から RDS へのダウンロードのファイルサイズは、S3 でサポートされている最大サイズに制限されます。

**Topics**
+ [RDS for SQL Server を S3 と統合するための前提条件](Appendix.SQLServer.Options.S3-integration.preparing.md)
+ [RDS for SQL Server と S3 の統合を有効にする](Appendix.SQLServer.Options.S3-integration.enabling.md)
+ [RDS for SQL Server と Amazon S3 間のファイル転送](Appendix.SQLServer.Options.S3-integration.using.md)
+ [RDS DB インスタンスでのファイル一覧表示](Appendix.SQLServer.Options.S3-integration.using.listing-files.md)
+ [RDS DB インスタンスでのファイル削除](Appendix.SQLServer.Options.S3-integration.using.deleting-files.md)
+ [ファイル転送タスクのステータスをモニタリングする](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md)
+ [タスクのキャンセル](Appendix.SQLServer.Options.S3-integration.canceltasks.md)
+ [S3 統合のマルチ AZ の制限](#S3-MAZ)
+ [RDS for SQL Server と S3 の統合を無効にする](Appendix.SQLServer.Options.S3-integration.disabling.md)

Amazon S3 でのファイルの操作の詳細については、「[Amazon Simple Storage Service の開始方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3)」を参照してください。

# RDS for SQL Server を S3 と統合するための前提条件
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

開始する前に、使用するS3バケットを選択してください。また、許可を追加してRDS DBインスタンスがS3バケットにアクセスできるようにしてください。このアクセスを設定するには、IAMポリシーとIAMロールの両方を作成します。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**Amazon S3にアクセスするための IAM ポリシーを作成します。**

1. [IAMマネジメントコンソール](https://console.aws.amazon.com/iam/home?#home)のナビゲーションペインで、**ポリシー** を選択します。

1. 新しいポリシーを作成し、**ビジュアルエディタ**タブを使用して以下の手順を行ってください。

1. **サービス**のため、**S3**を入力して**S3**サービスを選択します。

1. **実行**のため，以下を選択してDBインスタンス要件にアクセスできるようにします。
   + `ListAllMyBuckets` – 必須
   + `ListBucket` – 必須
   + `GetBucketAcl` – 必須
   + `GetBucketLocation` – 必須
   + `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
   + `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. [**リソース**] では、表示されるオプションは、前の手順で選択した内容により異なります。[**バケット**]、[**オブジェクト**]、またはその両方に対するオプションが表示されます。それぞれ、適切な Amazon リソースネーム (ARN) を加えてください。

   [**バケット**] は、使用したいバケットに対する ARN を追加します。例えば、バケットの名前が *amzn-s3-demo-bucket* の場合、ARN を `arn:aws:s3:::amzn-s3-demo-bucket` に設定します。

   [**オブジェクト**] は、バケットの ARN を入力してから以下のいずれかを選択します。
   + 特定のバケット内のすべてのファイルへのアクセスを許可するには、[**バケット名**] および [**オブジェクト名**] の両方に対して [**すべて**] を選択してください。
   + バケット内の特定のファイルやフォルダへのアクセスを許可する場合は、SQL Server からのアクセスを希望する特定のバケットやオブジェクトに、ARN を提供します。

1. ポリシーの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ポリシーの簡略設定ガイドです。IAM ポリシーを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)を参照してください。

**前の手順からの IAM ポリシーを使用する IAM ロールを作成します。**

1. [[IAM 管理コンソール](https://console.aws.amazon.com/iam/home?#home)] で、ナビゲーションペインから [**ロール**] を選択します。

1. 新しい IAM ロールを作成し、コンソール内に表示された以下のオプションを選択してください。
   + **AWS サービス**
   + **RDS**
   + **RDS – ロールをデータベースに加える**

   次に、下部の [**次: 許可**] を選択します。

1. **アクセス権限ポリシーをアタッチする** で、事前に作成した IAM ポリシーの名前を入力してください。次にリストからポリシーを選択します。

1. ロールの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ロールの簡略設定ガイドです。ロールを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

Amazon RDS に Amazon S3 バケットへのアクセスを付与するには、次のプロセスを使用します。

1. S3 バケットに Amazon RDS アクセスを付与する IAM ポリシーを作成します。

1. S3 バケットにアクセスするには、お客様に代わって Amazon RDS が引き受けることのできる IAM ロールを作成します。

   詳細については、*IAM ユーザーガイド*の「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

1. 作成した IAM ポリシーを、作成した IAM ロールにアタッチします。

**IAM ポリシーを作成するには**

DB インスタンスが必要とするアクセスを付与するための適切なアクションが含まれるようにしてください。
+ `ListAllMyBuckets` – 必須
+ `ListBucket` – 必須
+ `GetBucketAcl` – 必須
+ `GetBucketLocation` – 必須
+ `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
+ `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. 以下の AWS CLI コマンドでは、これらのオプションを指定して、`rds-s3-integration-policy` という名前の IAM ポリシーを作成します。*amzn-s3-demo-bucket* という名前のバケットへのアクセスを許可します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws iam create-policy \
   	 --policy-name rds-s3-integration-policy \
   	 --policy-document '{
   	        "Version": "2012-10-17",		 	 	 
   	        "Statement": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   Windows の場合:

   インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

   最初に、以下の許可ポリシーで `policy.json` ファイルを作成してください。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:ListAllMyBuckets",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketACL",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:ListMultipartUploadParts",
                   "s3:AbortMultipartUpload"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
           }
       ]
   }
   ```

------

   次のコマンドを使用してポリシーを作成します。

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. ポリシーが作成されたら、そのポリシーの Amazon リソースネーム (ARN) を書き留めます。この ARN は、後のステップで必要になります。

**IAM ロールを作成するには**
+ 次の AWS CLI コマンドでは、この目的で `rds-s3-integration-role` IAM ロールを作成します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole"
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

  最初に、次のポリシーで、`assume_role_policy.json` ファイルを作成します。

------
#### [ JSON ]

****  

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

------

  次に、以下のコマンドを使用して IAM ロールを作成します。

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example グローバル条件コンテキストキーを使用した IAM ロールの作成**  

  リソースポリシー内では [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) のグローバル条件コンテキストキーを使用して、サービスに付与するリソースへのアクセス許可を制限することをお勧めします。これは、[混乱した使節の問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)に対する最も効果的な保護方法です。

  両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合、同じポリシーステートメントで使用する際に、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントで同じアカウント ID を使用する必要があります。
  + 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
  + そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

  ポリシーでは、ロールにアクセスするリソースの完全な ARN を持つ `aws:SourceArn` グローバル条件コンテキストキーを必ず使用してください。S3 統合の場合、次の例に示すように DB インスタンスの ARN を必ず含めてください。

  Linux、macOS、Unix の場合:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  `assume_role_policy.json` にグローバル条件コンテキストキーを追加します。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                  }
              }
          }
      ]
  }
  ```

------

**IAM ポリシーを IAM ロールにアタッチするには**
+ 以下の AWS CLI コマンドでは、`rds-s3-integration-role` という名前のロールにこのポリシーをアタッチします。`your-policy-arn` を、以前のステップで書き留めたポリシー ARN に置き換えます。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws iam attach-role-policy \
  	   --policy-arn your-policy-arn \
  	   --role-name rds-s3-integration-role
  ```

  Windows の場合:

  ```
  aws iam attach-role-policy ^
  	   --policy-arn your-policy-arn ^
  	   --role-name rds-s3-integration-role
  ```

# RDS for SQL Server と S3 の統合を有効にする
<a name="Appendix.SQLServer.Options.S3-integration.enabling"></a>

このセクションでは、Amazon RDS for SQL Server と Amazon S3 の統合を有効にする方法を確認できます。S3 統合を行うには、`S3_INTEGRATION` FeatureName パラメータを使用する前に、事前に作成した IAM ロールに DB インスタンスが関連付けられていなければなりません。

**注記**  
IAM ロールを DB インスタンスに追加するには、DB インスタンスのステータスが [**有効**] である必要があります。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.enabling.console"></a>

**IAM ロールを DB インスタンスに関連付けるには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS for SQL Server DB インスタンスの名前を選択して詳細を表示します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、[**このインスタンスに IAM ロールを追加**] で追加する IAM ロールを選択します。

1. [**機能**] で、[**S3\$1INTEGRATION**] を選択します。  
![\[S3_INTEGRATION ロールを追加する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. [**Add role**] を選択します。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.enabling.cli"></a>

**IAM ロールを RDS for SQL Server DB インスタンスに追加するには**
+ 以下の AWS CLI コマンドは、IAM ロールを `mydbinstance` と名前の付いた RDS for SQL Server DB インスタンスに追加します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-role-to-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Windows の場合:

  ```
  aws rds add-role-to-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  `your-role-arn` を、以前のステップで書き留めたロール ARN に置き換えます。`S3_INTEGRATION` オプションには `--feature-name` が指定されている必要があります。

# RDS for SQL Server と Amazon S3 間のファイル転送
<a name="Appendix.SQLServer.Options.S3-integration.using"></a>

Amazon RDS ストアドプロシージャを使用して、Amazon S3 と RDS DB インスタンス間でファイルのダウンロードおよびアップロードを行います。また、Amazon RDS ストアドプロシージャを使用して、RDS インスタンスのファイルを記入および削除することができます。

S3 からダウンロードまたは S3 へアップロードするファイルは、`D:\S3` フォルダに保存します。このフォルダは、ファイルにアクセスする際に使用できる唯一のフォルダとなります。ダウンロード時に対象フォルダを設定する際に作成したサブフォルダ内でファイルを構成することができます。

ストアドプロシージャによっては、Amazon Resource Name (ARN) を S3 バケットおよびファイルに指定する必要があります。ARN の形式は `arn:aws:s3:::amzn-s3-demo-bucket/file_name` です。Amazon S3 には、ARN のアカウント番号または AWS リージョンは不要です。

S3 統合タスクは順次実行され、同じキューをネイティブバックアップとして共有し、タスクの復元を行います。このキューでは、一度に最大2つのタスクまで同時進行させることができます。タスクが処理を開始するまでに、最大 5 分かかります。

## Amazon S3 バケットから SQL Server DB インスタンスにファイルをダウンロードする
<a name="Appendix.SQLServer.Options.S3-integration.using.download"></a>

S3 バケットから RDS for SQL Server DB インスタンスにファイルをダウンロードするには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_download_from_s3` を使用してください。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必須  |  ダウンロードするファイルの S3 ARN 例: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  オプション  |  RDS インスタンスのファイルパス。指定されなかった場合、ファイルパスは `D:\S3\<filename in s3>` です。RDS は、絶対パスと相対パスをサポートしています。サブフォルダを作成したい場合、ファイルパス内に含めます。  | 
|  `@overwrite_file`  |  INT  |  0  |  オプション  | 既存のファイルを上書きしてください。 0 = 上書きしないでください 1 = 上書きしてください | 

ファイル拡張子のないファイルと、ファイル拡張子が .bcp、.csv、.dat、.fmt、.info、.lst、.tbl、.txt、.xml のファイルをダウンロードできます。

**注記**  
SQL Server Integration Services が有効になっている場合、ファイル拡張子が .ispac のファイルのダウンロードがサポートされます。SSIS の有効化の詳細については、「[SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)」を参照してください。  
SQL Server Analysis Services が有効になっている場合、ファイル拡張子が .abf、.asdatabase、.configsettings、.deploymentoptions、.deploymenttargets、.xmla のファイルのダウンロードがサポートされます。SSAS の有効化の詳細については、「[SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)」を参照してください。

以下の例は S3 からファイルをダウンロードするためのストアドプロシージャを表します。

```
exec msdb.dbo.rds_download_from_s3
	    @s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/bulk_data.csv',
	    @rds_file_path='D:\S3\seed_data\data.csv',
	    @overwrite_file=1;
```

例 `rds_download_from_s3` の操作は、フォルダがまだない場合、`seed_data` に `D:\S3\` という名前のフォルダを作成します。次に例ではソースファイル `bulk_data.csv` を S3 から DB インスタンスの `data.csv` という名前の新しいファイルにダウンロードします。`@overwrite_file` パラメータが `1` に設定されているため、すでにファイルが存在する場合は上書きされます。

## SQL Server DB インスタンスから Amazon S3 バケットにファイルをアップロードする
<a name="Appendix.SQLServer.Options.S3-integration.using.upload"></a>

RDS for SQL Server DB インスタンスから S3 バケットにファイルをアップロードするには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_upload_to_s3` を以下のパラメータで使用してください。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必須  |  ファイルの S3 ARN が S3 内で作成されます (例: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`)。  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必須  | S3 にアップロードするファイルのファイルパス。絶対パスと相対パスの両方をサポートしています。 | 
|  `@overwrite_file`  |  INT  |  –  |  オプション  |  既存のファイルを上書きしてください。 0 = 上書きしないでください 1 = 上書きしてください  | 

以下の例では、`data.csv` という名前のファイルを `D:\S3\seed_data\` 内の指定の場所から、ARN が指定する S3 バケットに、ファイル `new_data.csv` をアップロードします。

```
exec msdb.dbo.rds_upload_to_s3 
		@rds_file_path='D:\S3\seed_data\data.csv',
		@s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/new_data.csv',
		@overwrite_file=1;
```

@overwrite\$1file パラメータが `1` に設定されているため、ファイルが S3 にすでに存在している場合は上書きされます。

# RDS DB インスタンスでのファイル一覧表示
<a name="Appendix.SQLServer.Options.S3-integration.using.listing-files"></a>

DB インスタンスで使用可能なファイルをリスト表示するには、ストアドプロシージャと機能の両方を使用します。最初に、以下のストアドプロシージャを実行して `D:\S3\` 内のファイルから詳細を集めます。

```
exec msdb.dbo.rds_gather_file_details;
```

ストアドプロシージャは、タスクの ID を返します。保管のタスクと同様、ストアドプロシージャも同期せずに実行されます。タスクのステータスが `SUCCESS` になるとすぐに、`rds_fn_list_file_details` 機能のタスク ID を使用して、 D:\$1S3\$1 内の既存のファイルやディレクトリのリスト表示ができます。以下を参照してください。

```
SELECT * FROM msdb.dbo.rds_fn_list_file_details(TASK_ID);
```

`rds_fn_list_file_details` 機能は、次の列があるテーブルを返します。


| 出力パラメータ | 説明 | 
| --- | --- | 
| filepath | ファイルの絶対パス (例: D:\$1S3\$1mydata.csv) | 
| size\$1in\$1bytes | ファイルサイズ (バイト単位) | 
| last\$1modified\$1utc | UTC 形式での最終変更を行った日時 | 
| is\$1directory | アイテムがディレクトリ (true/false) かどうかを表示するオプション | 

# RDS DB インスタンスでのファイル削除
<a name="Appendix.SQLServer.Options.S3-integration.using.deleting-files"></a>

DB インスタンスで使用可能なファイルを削除するには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_delete_from_filesystem` を以下のパラメータで使用します。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必須  | 削除するファイルのファイルパス。絶対パスと相対パスの両方をサポートしています。 | 
|  `@force_delete`  |  INT  | 0 |  オプション  |  ディレクトリを削除するには、このフラグが `1` に含まれ設定されている必要があります。 `1` = ディレクトリを削除する ファイルを削除する場合、このパラメータは無視されます。  | 

ディレクトリを削除するには、`@rds_file_path` がバックスラッシュ (`\`) で終了し、`@force_delete` が `1` に設定される必要があります。

次の例では、ファイル `D:\S3\delete_me.txt` が削除されます。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\delete_me.txt';
```

次の例では、ディレクトリ `D:\S3\example_folder\` が削除されます。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\example_folder\',
    @force_delete=1;
```

# ファイル転送タスクのステータスをモニタリングする
<a name="Appendix.SQLServer.Options.S3-integration.using.monitortasks"></a>

S3 統合タスクのステータスを追跡するには、`rds_fn_task_status` 機能を呼び出してください。2 つのパラメータを使用します。1 つめのパラメータは常に `NULL` を選択してください。これは、S3 統合に適用されないためです。2 つめのパラメータは、タスク ID を受け入れます。

全タスクのリストを見るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータを `0` に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

特定のタスクを受け取るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータをタスク ID に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 機能は次の情報を返します。


|  出力パラメータ  |  説明  | 
| --- | --- | 
|  `task_id`  |  タスクの ID。  | 
|  `task_type`  |  S3 統合では、タスクには以下のタスクタイプがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `database_name`  | S3 統合タスクには適用できません。 | 
|  `% complete`  |  タスクの進行状況の割合。  | 
|  `duration(mins)`  |  タスクにかかった時間 (分単位)。  | 
|  `lifecycle`  |  タスクのステータス。有効な状態には以下のものがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `task_info`  |  タスクに関する追加情報。処理中にエラーが発生した場合、この列にエラーに関する情報が含まれます。  | 
|  `last_updated`  |  タスクのステータスが最後に更新された日時。  | 
|  `created_at`  |  タスクが作成された日時。  | 
|  `S3_object_arn`  |  S3 オブジェクトの ARN はダウンロードまたはアップロードされます。  | 
|  `overwrite_S3_backup_file`  |  S3 統合タスクには適用できません。  | 
|  `KMS_master_key_arn`  |  S3 統合タスクには適用できません。  | 
|  `filepath`  |  RDS DB インスタンスのファイルパス。  | 
|  `overwrite_file`  |  既存のファイルが上書きされるかどうかを表示するオプション  | 
|  `task_metadata`  |  S3 統合タスクには適用できません。  | 

# タスクのキャンセル
<a name="Appendix.SQLServer.Options.S3-integration.canceltasks"></a>

S3 統合タスクをキャンセルするには、`msdb.dbo.rds_cancel_task` パラメータで `task_id` ストアドプロシージャを使用します。進行中の削除およびリスト作成タスクは、キャンセルできません。以下の例は、タスクをキャンセルするリクエストを示します。

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

すべてのタスクとそのタスク ID の概要を表示するには、 `rds_fn_task_status` に記載のように [ファイル転送タスクのステータスをモニタリングする](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md) 機能を使用してください。

## S3 統合のマルチ AZ の制限
<a name="S3-MAZ"></a>

マルチ AZ インスタンスでは、`D:\S3` フォルダ内のファイルはフェイルオーバー後にスタンバイレプリカから削除されます。フェイルオーバーは、例えば、インスタンスクラスの変更やエンジンバージョンのアップグレードなど、DB インスタンスの変更中に計画できます。または、プライマリの停止中にフェイルオーバーが予定外になることがあります。

**注記**  
`D:\S3` フォルダをファイルストレージに使用することはお勧めしません。ベストプラクティスは、作成したファイルを Amazon S3 にアップロードして耐久性を保持し、データをインポートする必要があるときにファイルをダウンロードすることです。

最後のフェイルオーバー時間を決定するには、`msdb.dbo.rds_failover_time` ストアドプロシージャを使用できます。詳細については、「[Amazon RDS for SQL Server の最終フェイルオーバー時間の決定](Appendix.SQLServer.CommonDBATasks.LastFailover.md)」を参照してください。

**Example 最近のフェイルオーバーがない例**  
この例は、エラーログに最近のフェイルオーバーが存在しない場合の出力を示しています。2020-04-29 23:59:00.01 以降、フェイルオーバーは発生していません。  
したがって、`rds_delete_from_filesystem` ストアドプロシージャを使用して削除されていない、その時間の後にダウンロードされたすべてのファイルは、現在のホストで引き続きアクセスできます。それ以前にダウンロードされたファイルも利用可能になる場合があります。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  null  | 

**Example 最近のフェイルオーバーの**  
この例は、エラーログにフェイルオーバーが存在する場合の出力を示しています。最新のフェイルオーバーは、2020-05-05 18:57:51.89 に発生しています。  
`rds_delete_from_filesystem` ストアドプロシージャを使用して削除されていない、その時間以降にダウンロードされたすべてのファイルは、現在のホストで引き続きアクセスできます。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  2020-05-05 18:57:51.8900000  | 

# RDS for SQL Server と S3 の統合を無効にする
<a name="Appendix.SQLServer.Options.S3-integration.disabling"></a>

ここでは、Amazon RDS for SQL Server と Amazon S3 の統合を無効にする方法について説明します。S3 統合を無効化するときは、`D:\S3\` のファイルは削除されません。

**注記**  
IAM ロールを DB インスタンスから削除するには、DB インスタンスのステータスが `available` である必要があります。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.disabling.console"></a>

**IAM ロールと DB インスタンスの関連を外す**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS for SQL Server DB インスタンスの名前を選択して詳細を表示します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、削除する IAM ロールを選択します。

1. [**削除**] を選択します。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.disabling.cli"></a>

**IAM ロールを RDS for SQL Server DB インスタンスから削除するには**
+ 以下の AWS CLI コマンドが、IAM ロールを `mydbinstance` と名前の付いたRDS for SQL Server DB インスタンスから削除します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-role-from-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Windows の場合:

  ```
  aws rds remove-role-from-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  `your-role-arn` を、`--feature-name` オプションにとって適した IAM ロール ARN に交換します。

# Amazon RDS for SQL Server でのデータベースメールの使用
<a name="SQLServer.DBMail"></a>

データベースメールを使用して、SQL Server データベースインスタンスの Amazon RDS からユーザーに E メールメッセージを送信できます。メッセージには、ファイルとクエリ結果を含めることができます。データベースメールは、次のコンポーネントを含みます。
+ **設定オブジェクトおよびセキュリティオブジェクト** – これらのオブジェクトは 、プロファイルとアカウントを作成し、`msdb` データベースに保存されます。
+ **メッセージングオブジェクト** – これらのオブジェクトは、メッセージの送信に使用する [sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) ストアドプロシージャと、メッセージに関する情報を保持するデータ構造を含みます。それらは `msdb` データベースに保存されます。
+ **ログオブジェクトと監査オブジェクト** – データベースメールは、`msdb` データベースと Microsoft Windows アプリケーションイベントログにログ情報を書き込みます。
+ **データベースメール 実行可能ファイル** – `DatabaseMail.exe` は、`msdb` データベースのキューから読み取り、E メールメッセージを送信します。

RDS は、Web Edition、Standard Edition、および Enterprise Edition の SQL Server のすべてのバージョンで、データベースメールをサポートします。

## 制約事項
<a name="SQLServer.DBMail.Limitations"></a>

SQL Server DB インスタンスでのデータベースメールの使用には、次の制約事項が適用されます。
+ データベースメールは、SQL Server Express Edition ではサポートされていません。
+ データベースメールの設定パラメータの変更はサポートされていません。プリセット (デフォルト) の値を表示するには、[sysmail\$1help\$1configure\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-configure-sp-transact-sql) ストアドプロシージャを使用します。
+ 添付ファイルは、完全にはサポートされていません。詳細については、「[添付ファイルの使用](#SQLServer.DBMail.Files)」を参照してください。
+ 添付ファイルの最大サイズは 1 MB です。
+ データベースメールは、マルチ AZ DB インスタンスで追加の設定が必要です。詳細については、「[マルチ AZ 配置に関する考慮事項](#SQLServer.DBMail.MAZ)」を参照してください。
+ 定義済み演算子に E メールメッセージを送信する SQL Server エージェントの設定はサポートされていません。

# データベースメールの有効化
<a name="SQLServer.DBMail.Enable"></a>

DB インスタンスでデータベースメールを有効にするには、次の手順に従います。

1. 新しいパラメータグループを作成します。

1. パラメータグループを変更して、`database mail xps` パラメータを 1 に設定します。

1. パラメータグループを DB インスタンスに関連付けます。

## データベースメールパラメータグループの作成
<a name="DBMail.CreateParamGroup"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応する `database mail xps` パラメータのパラメータグループを作成します。

**注記**  
既存のパラメータグループを変更することもできます。「[データベースメールを有効にするパラメータの変更](#DBMail.ModifyParamGroup)」 の手順に従います。

### コンソール
<a name="DBMail.CreateParamGroup.Console"></a>

次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、**[パラメータグループ]** を選択します。

1. [**Create parameter group**] を選択します。

1. [**パラメータグループの作成**] ペインで、次の操作を行います。

   1. [**パラメータグループファミリー**] で、[**sqlserver-se-13.0**] を選択します。

   1. [**グループ名**] に、パラメータグループの識別子 (**dbmail-sqlserver-se-13** など) を入力します。

   1. [**説明**] に「**Database Mail XPs**」と入力します。

1. **[作成]** を選択します。

### CLI
<a name="DBMail.CreateParamGroup.CLI"></a>

次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "Database Mail XPs"
  ```

  Windows の場合:

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "Database Mail XPs"
  ```

## データベースメールを有効にするパラメータの変更
<a name="DBMail.ModifyParamGroup"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応するパラメータグループの `database mail xps` パラメータを変更します。

データベースメールを有効にするには、`database mail xps` パラメータを 1 に設定します。

### コンソール
<a name="DBMail.ModifyParamGroup.Console"></a>

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**パラメータグループ**] を選択します。

1. [**dbmail-sqlserver-se-13**] などのパラメータグループを選択します。

1. [**パラメータ**] で、パラメータのリストを **mail** でフィルタ処理します。

1. [**データベースメール xps**] を選択します。

1. [**Edit parameters**] を選択します。

1. **1** と入力します。

1. **[Save changes]** (変更の保存) をクリックします。

### CLI
<a name="DBMail.ModifyParamGroup.CLI"></a>

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

  Windows の場合:

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

## パラメータグループと DB インスタンスの関連付け
<a name="DBMail.AssocParamGroup"></a>

AWS マネジメントコンソール または AWS CLI を使用して、データベースメールパラメータグループを DB インスタンスに関連付けることができます。

### コンソール
<a name="DBMail.AssocParamGroup.Console"></a>

データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれを関連付けます。詳しくは、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

### CLI
<a name="DBMail.AssocParamGroup.CLI"></a>

データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。

**データベースメールパラメータグループを使用して DB インスタンスを作成するには**
+ パラメータグループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

**DB インスタンスを変更し、データベースメールパラメータグループを関連付けるには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --apply-immediately
  ```

# データベースメールの設定
<a name="SQLServer.DBMail.Configure"></a>

データベースメールを設定するには、次のタスクを実行します。

1. データベースメールプロファイルを作成します。

1. データベースメールアカウントを作成します。

1. データベースメールアカウントをデータベースメールプロファイルに追加します。

1. データベースメールプロファイルにユーザーを追加します。

**注記**  
データベースメールを設定するには、`execute` データベースのストアドプロシージャに `msdb` アクセス権限があることを確認します。

## データベースメールプロファイルの作成
<a name="SQLServer.DBMail.Configure.Profile"></a>

データベースメールプロファイルを作成するには、[sysmail\$1add\$1profile\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profile-sp-transact-sql) ストアドプロシージャを使用します。次の例では、`Notifications` という名前のプロファイルを作成します。

**プロファイルを作成するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profile_sp  
      @profile_name         = 'Notifications',  
      @description          = 'Profile used for sending outgoing notifications using Amazon SES.';
  GO
  ```

## データベースメールアカウントの作成
<a name="SQLServer.DBMail.Configure.Account"></a>

データベースメールアカウントを作成するには、[sysmail\$1add\$1account\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-account-sp-transact-sql) ストアドプロシージャを使用します。次の例では、Amazon Simple Email Service を使用して、プライベート VPC の RDS for SQL Server DB インスタンスに `SES` という名前のアカウントを作成します。

Amazon SES を使用するには、以下のパラメータが必要です。
+ `@email_address` – Amazon SES 検証済みの アイデンティティ。詳細については、[Verified identities in Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/verify-addresses-and-domains.html) を参照してください。
+ `@mailserver_name` – Amazon SES SMTP エンドポイント。詳細については、[Amazon SES SMTP エンドポイントへの接続](https://docs.aws.amazon.com/ses/latest/dg/smtp-connect.html)を参照してください。
+ `@username` – Amazon SES SMTP ユーザー名。詳細については、[Amazon SES SMTP 認証情報の取得](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html)を参照してください。

  AWS Identity and Access Management ユーザー名を使用しないでください。
+ `@password` – Amazon SES SMTP パスワード。詳細については、[Amazon SES SMTP 認証情報の取得](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html)を参照してください。

**アカウントを作成するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_account_sp
      @account_name        = 'SES',
      @description         = 'Mail account for sending outgoing notifications.',
      @email_address       = 'nobody@example.com',
      @display_name        = 'Automated Mailer',
      @mailserver_name     = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce.amazonaws.com',
      @port                = 587,
      @enable_ssl          = 1,
      @username            = 'Smtp_Username',
      @password            = 'Smtp_Password';
  GO
  ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

## データベースメールアカウントのデータベースメールプロファイルへの追加
<a name="SQLServer.DBMail.Configure.AddAccount"></a>

データベースメールアカウントをデータベースメールプロファイルに追加するには、[sysmail\$1add\$1profileaccount\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profileaccount-sp-transact-sql) ストアドプロシージャを使用します。次の例では、`SES` アカウントを `Notifications` プロファイルに追加します。

**プロファイルにアカウントを追加するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
      @profile_name        = 'Notifications',
      @account_name        = 'SES',
      @sequence_number     = 1;
  GO
  ```

## データベースメールプロファイルへのユーザーの追加
<a name="SQLServer.DBMail.Configure.AddUser"></a>

`msdb` データベースプリンシパルにデータベースメールプロファイルを使用するアクセス権限を付与するには、[sysmail\$1add\$1principalprofile\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-principalprofile-sp-transact-sql) ストアドプロシージャを使用します。*プリンシパル* は、SQL Server リソースをリクエストできるエンティティです。データベースプリンシパルは、SQL Server 認証ユーザー、Windows 認証ユーザー、または Windows 認証グループにマッピングする必要があります。

次の例では、`Notifications` プロファイルへのパブリックアクセスを許可します。

**プロファイルにユーザーを追加するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_principalprofile_sp  
      @profile_name       = 'Notifications',  
      @principal_name     = 'public',  
      @is_default         = 1;
  GO
  ```

## データベースメールの Amazon RDS ストアドプロシージャと関数
<a name="SQLServer.DBMail.StoredProc"></a>

Microsoft が提供する[ストアドプロシージャ](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/database-mail-stored-procedures-transact-sql)により、データベースメールの使用 (アカウントやプロファイルの作成、一覧表示、更新、削除) が可能です。加えて、RDS は、次の表に示すストアドプロシージャおよびデータベースメールの機能を提供します。


| プロシージャ/関数 | 説明 | 
| --- | --- | 
| rds\$1fn\$1sysmail\$1allitems | 送信メッセージ (他のユーザーの送信メッセージを含む) を表示します。 | 
| rds\$1fn\$1sysmail\$1event\$1log | イベント (他のユーザーの送信メッセージのイベントを含む) を表示します。 | 
| rds\$1fn\$1sysmail\$1mailattachments | 添付ファイル (他のユーザーの送信メッセージの添付ファイルも含む) を表示します。 | 
| rds\$1sysmail\$1control | メールキュー (DatabaseMail.exe プロセス) を開始および停止します。 | 
| rds\$1sysmail\$1delete\$1mailitems\$1sp | すべてのユーザーが送信した E メールメッセージをデータベースメール内部テーブルから削除します。 | 

# データベースメールを使用した E メールメッセージの送信
<a name="SQLServer.DBMail.Send"></a>

データベースメールを使用して E メールメッセージを送信するには、[sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) ストアドプロシージャを使用します。

## Usage
<a name="SQLServer.DBMail.Send.Usage"></a>

```
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'profile_name',
@recipients = 'recipient1@example.com[; recipient2; ... recipientn]',
@subject = 'subject',
@body = 'message_body',
[@body_format = 'HTML'],
[@file_attachments = 'file_path1; file_path2; ... file_pathn'],
[@query = 'SQL_query'],
[@attach_query_result_as_file = 0|1]';
```

以下のパラメータは必須です。
+ `@profile_name` – メッセージの送信元となるデータベースメールプロファイル名
+ `@recipients` – メッセージの送信先となるセミコロン区切りの E メールアドレスリスト
+ `@subject` – メッセージの件名
+ `@body` – メッセージの本文 宣言された変数を本文として使用することもできます。

以下のパラメータはオプションです。
+ `@body_format` – このパラメータは、HTML 形式で E メールを送信するため、宣言された変数と共に使用します。
+ `@file_attachments` – セミコロン区切りのメッセージ添付ファイルリスト。ファイルパスは絶対パスである必要があります。
+ `@query` – 実行する SQL クエリ クエリ結果は、ファイルで添付することも、メッセージの本文に含めることもできます。
+ `@attach_query_result_as_file` – クエリ結果をファイルでアタッチするかどうか。[いいえ] の場合は 0、[はい] の場合は 1 に設定します。デフォルトは 0 です。

## 例
<a name="SQLServer.DBMail.Send.Examples"></a>

次の例は、E メールメッセージを送信する方法をデモンストレーションします。

**Example 単一の受信者へのメッセージの送信の**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Automated DBMail message - 1',
     @body               = 'Database Mail configuration was successful.';
GO
```

**Example 複数の受信者へのメッセージの送信の**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'recipient1@example.com;recipient2@example.com',
     @subject            = 'Automated DBMail message - 2',
     @body               = 'This is a message.';
GO
```

**Example 添付ファイルでの SQL クエリ結果の送信の**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test SQL query',
     @body               = 'This is a SQL query test.',
     @query              = 'SELECT * FROM abc.dbo.test',
     @attach_query_result_as_file = 1;
GO
```

**Example HTML 形式でのメッセージの送信の**  

```
USE msdb
GO

DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>';

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test HTML message',
     @body               = @HTML_Body,
     @body_format        = 'HTML';
GO
```

**Example データベースで特定のイベントが発生した時の、トリガーを使用したメッセージの送信の**  

```
USE AdventureWorks2017
GO
IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL
DROP TRIGGER Purchasing.iProductNotification
GO

CREATE TRIGGER iProductNotification ON Production.Product
   FOR INSERT
   AS
   DECLARE @ProductInformation nvarchar(255);
   SELECT
   @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!'
   FROM INSERTED i;

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'New product information',
     @body               = @ProductInformation;
GO
```

# メッセージ、ログ、添付ファイルの表示
<a name="SQLServer.DBMail.View"></a>

RDS ストアドプロシージャを使用して、メッセージ、イベントログ、および添付ファイルを表示します。

**すべての E メールメッセージを表示するには**
+ 次の SQL クエリを使用します。

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
  ```

**すべての E メールイベントログを表示するには**
+ 次の SQL クエリを使用します。

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
  ```

**すべての E メールの添付ファイルを表示するには**
+ 次の SQL クエリを使用します。

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();
  ```

# メッセージの削除
<a name="SQLServer.DBMail.Delete"></a>

`rds_sysmail_delete_mailitems_sp` ストアドプロシージャを使用して、メッセージを削除します。

**注記**  
RDS は、データベースメール履歴データのサイズが 1 GB に達すると、メールテーブル項目を自動的に削除します。保持期間は最短 24 時間です。  
メールアイテムを長期間保持する場合、アーカイブできます。詳細については、Microsoft ドキュメントの「[データベースメールメッセージとイベントログをアーカイブする SQL Server Agent ジョブの作成](https://docs.microsoft.com/en-us/sql/relational-databases/database-mail/create-a-sql-server-agent-job-to-archive-database-mail-messages-and-event-logs)」を参照してください。

**E メールメッセージをすべて削除するには**
+ 次の SQL 文を使用します。

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE;
  GO
  ```

**特定のステータスの E メールメッセージをすべて削除するには**
+ 失敗したメッセージをすべて削除するには、次の SQL ステートメントを使用します。

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed';
  GO
  ```

# メールキューの開始と停止
<a name="SQLServer.DBMail.StartStop"></a>

DB メールキューを開始および停止するには、次の手順に従います。

**Topics**
+ [メールキューの開始](#SQLServer.DBMail.Start)
+ [メールキューの停止](#SQLServer.DBMail.Stop)

## メールキューの開始
<a name="SQLServer.DBMail.Start"></a>

`rds_sysmail_control` ストアドプロシージャを使用して、データベースメールプロセスを開始します。

**注記**  
データベースメールを有効にすると、メールキューが自動的に開始します。

**メールキューを開始するには**
+ 次の SQL 文を使用します。

  ```
  EXECUTE msdb.dbo.rds_sysmail_control start;
  GO
  ```

## メールキューの停止
<a name="SQLServer.DBMail.Stop"></a>

`rds_sysmail_control` ストアドプロシージャを使用して、データベースメールプロセスを停止します。

**メールキューを停止するには**
+ 次の SQL 文を使用します。

  ```
  EXECUTE msdb.dbo.rds_sysmail_control stop;
  GO
  ```

## 添付ファイルの使用
<a name="SQLServer.DBMail.Files"></a>

SQL Server の RDS からのデータベースメールメッセージでは、次の添付ファイル拡張子をサポートしていません。.ade、.adp、.apk、.appx、.appxbundle、.bat、.bak、.cab、.chm、.cmd、.com、.cpl、.dll、.dmg、.exe、.hta、.inf1、.ins、.isp、.iso、.jar、.job、.js、.jse、.ldf、.lib、.lnk、.mde、.mdf、.msc、.msi、.msix、.msixbundle、.msp、.mst、.nsh、.pif、.ps、.ps1、.psc1、.reg、.rgs、.scr、.sct、.shb、.shs、.svg、.sys、.u3p、.vb、.vbe、.vbs、.vbscript、.vxd、.ws、wsc、.wsf、および.wsh

データベースメールは、現在のユーザーの Microsoft Windows セキュリティコンテキストを使用して、ファイルへのアクセスを制御します。SQL Server 認証でログインするユーザーは、`@file_attachments` ストアドプロシージャで`sp_send_dbmail` パラメータを使用してファイルをアタッチすることはできません。Windows では、リモートコンピュータから別のリモートコンピュータに、SQL Server が認証情報を提供することはできません。したがって、データベースメールは、SQL Server を実行しているコンピュータ以外のコンピュータからコマンドを実行すると、ネットワーク共有からファイルをアタッチすることはできません。

ただし、SQL Server Agent ジョブを使用して、ファイルをアタッチすることができます。SQL Server Agent の詳細については、Microsoft ドキュメントの「[Amazon RDS 用 SQL Server エージェントの使用](Appendix.SQLServer.CommonDBATasks.Agent.md)」および「[SQL Server Agent](https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent)」を参照してください。

## マルチ AZ 配置に関する考慮事項
<a name="SQLServer.DBMail.MAZ"></a>

マルチ AZ DB インスタンスでデータベースメールを設定しても、設定はセカンダリに自動的には反映されません。マルチ AZ インスタンスをシングル AZ インスタンスに変換し、データベースメールを設定した後に、DB インスタンスをマルチ AZ に戻すことをお勧めします。次に、プライマリノードとセカンダリノードの両方に、データベースメールの設定があります。

データベースメールを設定したマルチ AZ インスタンスからリードレプリカを作成すると、レプリカはその設定を継承しますが、SMTP サーバーのパスワードは継承しません。パスワードを使用して、データベースメールアカウントを更新します。

## SMTP (ポート 25) 制限の削除
<a name="SQLServer.DBMail.SMTP"></a>

デフォルトでは、AWS は RDS for SQL Server DB インスタンスの SMTP (ポート 25) でのアウトバウンドトラフィックをブロックします。これは、Elastic Network Interface 所有者のポリシーに基づいてスパムを防ぐために行われます。必要に応じて、この制限を削除できます。詳細については、「[Amazon EC2 インスタンスまたは Lambda 関数のポート 25 の制限を解除するにはどうすればよいですか?](https://repost.aws/knowledge-center/ec2-port-25-throttle)」を参照してください。

# Amazon RDS for SQL Server の tempdb データベースに対するインスタンスストアのサポート
<a name="SQLServer.InstanceStore"></a>

*インスタンスストア*は、DB インスタンスに一時ブロックレベルのストレージを提供します。このストレージは、ホストコンピュータに物理的にアタッチされたディスク上にあります。これらのディスクには、ソリッドステートドライブ (SSD) に基づく不揮発性メモリエクスプレス (NVMe) インスタンスストレージがあります。このストレージは、低レイテンシー、非常に高いランダム I/O パフォーマンス、高いシーケンシャル読み取りスループットを実現するために最適化されています。

`tempdb` データファイルと `tempdb` ログファイルをインスタンスストアに配置することで、Amazon EBS に基づく標準ストレージと比べて、読み取りおよび書き込みのレイテンシーを低く抑えることができます。

**注記**  
SQL Server データベースファイルとデータベースログファイルは、インスタンスストアに配置されません。

## インスタンスストアの有効化
<a name="SQLServer.InstanceStore.Enable"></a>

RDS が次のいずれかのインスタンスクラスを使用して DB インスタンスをプロビジョニングすると、`tempdb` データベースは自動的にインスタンスストアに配置されます。
+ db.m5d
+ db.r5d
+ db.x2iedn

インスタンスストアを有効にするには、次のいずれかの操作を行います。
+ これらのインスタンスタイプの 1 つを使用して SQL Server DB インスタンスを作成します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の SQL Server DB インスタンスを変更して、そのうちの 1 つを使用します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

インスタンスストアは、これらのインスタンスタイプの 1 つ以上がサポートされているすべての AWS リージョンで使用できます。`db.m5d` と `db.r5d` インスタンスクラスの詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。Amazon RDS for SQL Server でサポートされるインスタンスクラスの詳細については、[Microsoft SQL Server の DB インスタンスクラスのサポート](SQLServer.Concepts.General.InstanceClasses.md) を参照してください。

## ファイルの場所とサイズに関する考慮事項
<a name="SQLServer.InstanceStore.Files"></a>

インスタンスストアがないインスタンスでは、RDS は `tempdb` データとログファイルを `D:\rdsdbdata\DATA` ディレクトリに保存します。デフォルトでは、どちらのファイルも 8 MB から始まります。

インスタンスストアがあるインスタンスでは、RDS は `tempdb` データとログファイルを `T:\rdsdbdata\DATA` ディレクトリに保存します。

`tempdb` にデータファイル (`tempdb.mdf`) とログファイル (`templog.ldf`) が 1 つしかない場合、`templog.ldf` はデフォルトでは 8 MB から始まり、`tempdb.mdf` はインスタンスのストレージ容量の 80％以上から始まります。ストレージ容量の 20% または 200 GB のどちらか小さい方を、無料で起動できます。複数の `tempdb` データファイルは 80% のディスク領域を均等に分割しますが、ログファイルの初期サイズは常に 8 MB です。

例えば、DB インスタンスクラスを `db.m5.2xlarge` から `db.m5d.2xlarge` に変更すると、`tempdb` データファイルのサイズはそれぞれ 8 MB から合計 234 GB に増加します。

**注記**  
インスタンスストア (`tempdb`) の `T:\rdsdbdata\DATA` データとログファイルに加えて、データボリューム (`tempdb`) に追加の `D:\rdsdbdata\DATA` データとログファイルを作成することもできます。これらのファイルの初期サイズは常に 8 MB です。

## バックアップに関する考慮事項
<a name="SQLServer.InstanceStore.Backups"></a>

バックアップを長期間保持する必要がありますが、時間の経過とともにコストがかかる場合があります。`tempdb` データブロックとログブロックは、ワークロードに応じて非常に頻繁に変更されることがあります。これにより、DB スナップショットのサイズが大幅に増加する可能性があります。

`tempdb` がインスタンスストアにある場合、スナップショットに一時ファイルは含まれません。つまり、EBS のみのストレージと比べて、スナップショットのサイズが小さくなり、空いたバックアップ割り当ての使用量が少なくなります。

## ディスクがいっぱいになるエラー
<a name="SQLServer.InstanceStore.DiskFull"></a>

インスタンスストア内の使用可能な領域をすべて使用すると、次のようなエラーが表示されることがあります。
+ データベース「tempdb」のトランザクションログは「ACTIVE\$1TRANSACTION」のため、いっぱいになりました。
+ PRIMARY」ファイルグループがいっぱいであるため、データベース「tempdb」のオブジェクト「dbo.SORT の一時実行ストレージ: 140738941419520」に領域を割り当てられませんでした。不要なファイルの削除、ファイルグループ内のオブジェクトの削除、ファイルグループへのファイルの追加、またはファイルグループ内の既存のファイルの自動拡張を有効に設定して、ディスク領域を作ります。

インスタンスストアがいっぱいになると、次の項目のうちから 1 つまたは複数を実行できます。
+ ワークロードや `tempdb` の使用方法を調整します。
+ より多くの NVMe ストレージを持つ DB インスタンスクラスを使用するように拡張します。
+ インスタンスストアの使用を停止し、EBS ストレージのみを持つインスタンスクラスを使用します。
+ EBS ボリューム上の `tempdb` のセカンダリデータまたはログファイルを追加して、混合モードを使用します。

## インスタンスストアの削除
<a name="SQLServer.InstanceStore.Disable"></a>

インスタンスストアを削除するには、インスタンスストアをサポートしないインスタンスタイプ (db.m5、db.r5、db.x1e など) を使用するように SQL Server DB インスタンスを変更します。

**注記**  
インスタンスストアを削除すると、一時ファイルは `D:\rdsdbdata\DATA` ディレクトリに移動され、8 MB に縮小されます。

# Amazon RDS for Microsoft SQL Server で拡張イベントを使用する
<a name="SQLServer.ExtendedEvents"></a>

Microsoft SQL Server の拡張イベントを使用して、Amazon RDS for SQL Server のデバッグおよびトラブルシューティング情報をキャプチャできます。拡張イベントは、Microsoft によって非推奨にされている SQL Trace と Server Profiler を置き換えます。拡張イベントは、プロファイラートレースに似ていますが、トレースされるイベントをより細かく制御できます。拡張イベントは、Amazon RDS で SQL Server バージョン 2016 以降でサポートされています。詳細については、Microsoft のドキュメントの「[Extended events overview](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events)」を参照してください。

Amazon RDS for SQL Server のマスターユーザー特権を持つユーザーの場合、拡張イベントは自動的にオンになります。

**Topics**
+ [制限と推奨事項](#SQLServer.ExtendedEvents.Limits)
+ [RDS for SQL Server での拡張イベントの設定](#SQLServer.ExtendedEvents.Config)
+ [マルチ AZ 配置に関する考慮事項](#SQLServer.ExtendedEvents.MAZ)
+ [拡張イベントファイルのクエリ](#SQLServer.ExtendedEvents.Querying)

## 制限と推奨事項
<a name="SQLServer.ExtendedEvents.Limits"></a>

RDS for SQL Server で拡張イベントを使用する場合、次の制限が適用されます。
+ 拡張イベントは、Enterprise エディションと Standard エディションでのみサポートされます。
+ デフォルトの拡張イベントセッションは変更できません。
+ セッションメモリのパーティションモードを `NONE` に設定してください。
+ セッションイベント保持モードは、`ALLOW_SINGLE_EVENT_LOSS` または `ALLOW_MULTIPLE_EVENT_LOSS` のいずれかになります。
+ Event Tracing for Windows (ETW) ターゲットはサポートされていません。
+ ファイルターゲットが `D:\rdsdbdata\log` ディレクトリにあることを確認します。
+ ペアが一致するターゲットの場合は、`respond_to_memory_pressure` プロパティを `1` に設定します。
+ リングバッファーターゲットメモリは 4 MB を超えることはできません。
+ 次のアクションはサポートされていません。
  + `debug_break`
  + `create_dump_all_threads`
  + `create_dump_single_threads`
+ `rpc_completed` イベントは、15.0.4083.2、14.0.3370.1、13.0.5865.1、12.0.6433.1、11.0.7507.2 以降のバージョンでサポートされています。

## RDS for SQL Server での拡張イベントの設定
<a name="SQLServer.ExtendedEvents.Config"></a>

RDS for SQL Server では、拡張イベントセッションの特定のパラメータ値を設定できます。次の表では、設定可能なパラメータについて説明しています。


| パラメータ名 | 説明 | RDS デフォルト値 | 最小値 | 最大値 | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | イベントバッファリングのためにセッションに割り当てるメモリの最大量を指定します。この値は、イベントセッションの max\$1memory 設定に対応しています。 | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1event\$1size | 大きなイベントで許可される最大メモリサイズを指定します。この値は、イベントセッションの max\$1event\$1size 設定に対応しています。 | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1dispatch\$1latency | 拡張イベントセッションターゲットにディスパッチされるまでにイベントがメモリにバッファされる時間を指定します。この値は、イベントセッションの max\$1dispatch\$1latency 設定に対応しています。 | 30 秒 | 1 秒 | 30 秒 | 
| xe\$1file\$1target\$1size | ファイルターゲットの最大サイズを指定します。この値は、ファイルターゲットの max\$1file\$1size 設定に対応します。 | 100 MB | 10 MB | 1 GB | 
| xe\$1file\$1retention | イベントセッションのファイルターゲットによって生成されたファイルの保存期間を日単位で指定します。 | 7 日間 | 0 日 | 7 日間 | 

**注記**  
`xe_file_retention` をゼロに設定すると、これらのファイルのロックが SQL Server によって解放された後、.xel ファイルが自動的に削除されます。ロックは、.xel ファイルが `xe_file_target_size` で設定されたサイズ制限に達すると解放されます。

`rdsadmin.dbo.rds_show_configuration` ストアドプロシージャを使用して、これらのパラメータの現在の値を表示できます。例えば、`xe_session_max_memory` の現在の設定を表示するには、次の SQL 文を使用します。

```
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
```

`rdsadmin.dbo.rds_set_configuration` ストアドプロシージャを使用して変更することができます。例えば、`xe_session_max_memory` を 4 MB に設定するには、次の SQL ステートメントを使用します。

```
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
```

## マルチ AZ 配置に関する考慮事項
<a name="SQLServer.ExtendedEvents.MAZ"></a>

プライマリ DB インスタンスで拡張イベントセッションを作成すると、そのセッションはスタンバイレプリカに伝達されません。新しいプライマリ DB インスタンスで、拡張イベントセッションをフェイルオーバーして作成できます。または、マルチ AZ 設定を削除してから再び追加して、拡張イベントセッションをスタンバイレプリカに伝達することもできます。RDS は、スタンバイレプリカ上のデフォルト以外の拡張イベントセッションをすべて停止し、これらのセッションがスタンバイ上のリソースを消費しません。このため、スタンバイレプリカがプライマリ DB インスタンスになった後、新しいプライマリで拡張イベントセッションを手動で開始するようにしてください。

**注記**  
このアプローチは、Always On 可用性グループとデータベースミラーリングの両方に適用されます。

SQL Server エージェントジョブを使用して、スタンバイレプリカを追跡し、スタンバイがプライマリになる場合はセッションを開始することもできます。例えば、SQL Server エージェントのジョブステップで次のクエリを使用して、プライマリ DB インスタンスでイベントセッションを再開します。

```
BEGIN
    IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE'
    AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE'
    AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1)
    )
    BEGIN
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1')
            ALTER EVENT SESSION xe1 ON SERVER STATE=START
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2')
            ALTER EVENT SESSION xe2 ON SERVER STATE=START
    END
END
```

このクエリにより、イベントセッション `xe1` と `xe2` が停止状態の場合は、これらのイベントセッションがプライマリ DB インスタンスで再開されます。また、このクエリに便利な間隔のスケジュールを追加することもできます。

## 拡張イベントファイルのクエリ
<a name="SQLServer.ExtendedEvents.Querying"></a>

SQL Server Management Studio または `sys.fn_xe_file_target_read_file` 関数を使用して、ファイルターゲットを使用する拡張イベントのデータを表示できます。この関数の詳細については、Microsoft ドキュメントの [sys.fn\$1xe\$1file\$1target\$1read\$1file (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-xe-file-target-read-file-transact-sql) を参照してください。

拡張イベントファイルターゲットは、RDS for SQL Server の `D:\rdsdbdata\log` ディレクトリにのみファイルを書き込むことができます。

例えば、次の SQL クエリを使用して、名前が `xe` で始まる拡張イベントセッションのすべてのファイルの内容を一覧表示します。

```
SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);
```

# RDS for SQL Server によるトランザクションログのバックアップへのアクセス
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess"></a>

RDS for SQL Server のトランザクションログのバックアップにアクセスすることで、データベースのトランザクションログのバックアップファイルを一覧表示し、ターゲット Amazon S3 バケットにコピーできます。Amazon S3 バケットにトランザクションログのバックアップをコピーすることで、それらをデータベースの完全バックアップや差分バックアップと組み合わせて使用し、特定の時点でのデータベース復元を実行できます。RDS ストアドプロシージャを使用して、トランザクションログのバックアップへのアクセスを設定し、利用可能なトランザクションログバックアップを一覧表示して、Amazon S3 バケットにコピーします。

トランザクションログのバックアップにアクセスすると、次のような機能と利点を利用できます。
+ RDS for SQL Server DB インスタンスにあるデータベースの利用可能なトランザクションログのバックアップのメタデータを一覧表示して表示します。
+ 使用可能なトランザクションログのバックアップを RDS for SQL Server からターゲット Amazon S3 バケットにコピーします。
+ DB インスタンス全体を復元しなくても、データベースのポイントインタイム復元を実行できます。DB クラスターのポイントインタイム復元の方法については、「[Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)」を参照してください。

## 可用性およびサポート
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Availability"></a>

トランザクションログのバックアップへのアクセスは、すべての AWS リージョンでサポートされています。トランザクションログバックアップへのアクセスは、Amazon RDS でサポートされている Microsoft SQL Server のすべてのエディションとバージョンで使用できます。

## 要件
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements"></a>

トランザクションログのバックアップへのアクセスを有効にする前に、以下の要件を満たす必要があります。
+  DB インスタンスで自動バックアップを有効に設定し、バックアップの保存期間を 1 日以上の値に設定する必要があります。自動バックアップの有効化と保存ポリシーの設定の詳細については、「[自動バックアップの有効化](USER_WorkingWithAutomatedBackups.Enabling.md)」を参照してください。
+ Amazon S3 バケットは、ソース DB インスタンスと同じアカウントとリージョンに存在している必要があります。トランザクションログのバックアップへのアクセスを有効にする前に、トランザクションログのバックアップファイルに使用するため、既存の Amazon S3 バケットを選択するか、[新しいバケットを作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)します。
+ Amazon RDS によってトランザクションログファイルをコピーできるように、Amazon S3 バケットのアクセス権限ポリシーを次のように設定する必要があります。

  1. バケットのオブジェクトアカウントの所有権プロパティを **[Bucket Owner Preferred]** (バケット所有者優先) に設定します。

  1. 以下のポリシーを追加します。デフォルトではポリシーがないため、バケットアクセスコントロールリスト (ACL) を使用してバケットポリシーを編集し、追加します。

  

  次の例では、ARN を使用してリソースを指定しています。リソースベースの信頼関係では `SourceArn` および `SourceAccount` のグローバル条件コンテキストキーを使用して、サービスに付与する特定のリソースへのアクセス許可を制限することをお勧めします。ARN での使用の詳細については、「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」および「[Amazon RDS の Amazon リソースネーム (ARN)](USER_Tagging.ARN.md)」を参照してください。

    
**Example トランザクションログのバックアップへのアクセスするための Amazon S3 権限ポリシーの例**  

------
#### [ JSON ]

****  

  ```
      {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Only allow writes to my bucket with bucket owner full control",
              "Effect": "Allow",
              "Principal": {
                  "Service": "backups.rds.amazonaws.com"
              },
              "Action": "s3:PutObject",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/{customer_path}/*",
              "Condition": {
                  "StringEquals": {
                      "s3:x-amz-acl": "bucket-owner-full-control",
                      "aws:sourceAccount": "{customer_account}",
                      "aws:sourceArn": "{db_instance_arn}"
                  }
              }
          }
      ]
  }
  ```

------
+ Amazon S3 バケットにアクセスするための AWS Identity and Access Management (IAM) ロール。IAM ロールが既にある場合はそれを使用できます。AWS マネジメントコンソール を使用して `SQLSERVER_BACKUP_RESTORE` オプションを追加する際に、新しい IAM ロールの作成を選択することもできます。または、手動で新しいロールを作成することもできます。`SQLSERVER_BACKUP_RESTORE` による IAM ロールの作成と設定の詳細については、「[ネイティブバックアップおよび復元用の IAM ロールの手動作成](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)」を参照してください。
+ `SQLSERVER_BACKUP_RESTORE` オプションは、DB インスタンスのオプショングループに追加されている必要があります。`SQLSERVER_BACKUP_RESTORE` オプションの追加についての詳細は、「[SQL Server のネイティブバックアップおよび復元のサポート](Appendix.SQLServer.Options.BackupRestore.md)」を参照してください。
**注記**  
DB インスタンスでストレージ暗号化が有効になっている場合は、ネイティブバックアップと復元オプショングループで提供される IAM ロールに AWS KMS (KMS) アクションとキーを指定する必要があります。

  オプションで、`rds_restore_log` ストアドプロシージャを使用してデータベースのポイントインタイム復元を実行する場合は、ネイティブバックアップ、復元オプショングループ、トランザクションログのバックアップへのアクセスに、同じ Amazon S3 パスを使用することをお勧めします。この方法により、Amazon RDS がオプショングループから復元ログ機能を実行する役割を引き受けると、同じ Amazon S3 パスからトランザクションログのバックアップを取得できるようになります。
+ DB インスタンスが暗号化されている場合、暗号化タイプ (AWSマネージドキーまたはカスタマーマネージドキー) に関係なく、IAM ロールと `rds_tlog_backup_copy_to_S3` ストアドプロシージャでカスタマーマネージド KMS キーを指定する必要があります。

## 制限と推奨事項
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Limitations"></a>

トランザクションログのバックアップへのアクセスには、次の制限と推奨事項があります。
+  バックアップの保存期間が 1 日から 35 日の間に設定されている任意の DB インスタンスについて、過去 7 日間のトランザクションログのバックアップを一覧表示してコピーできます。
+  トランザクションログのバックアップのアクセスに使用する Amazon S3 バケットは、ソース DB インスタンスと同じアカウントとリージョンに存在している必要があります。クロスアカウントおよびクロスリージョンコピーはサポートされていません。
+  トランザクションログのバックアップのコピー先として設定できる Amazon S3 バケットは 1 つだけです。`rds_tlog_copy_setup` ストアドプロシージャを使用して、新しいターゲット Amazon S3 バケットを選択できます。新しいターゲット Amazon S3 バケットの選択の詳細については、「[トランザクションログのバックアップへのアクセス設定](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)」を参照してください。
+  RDS インスタンスでストレージ暗号化が有効になっていない場合、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを使用するときに KMS キーを指定することはできません。
+  マルチアカウントコピーはサポートされていません。コピーに使用される IAM ロールは、DB インスタンスの所有者アカウント内の Amazon S3 バケットへの書き込みアクセスのみを許可します。
+  RDS for SQL Server DB インスタンスでは、どのような種類のタスクでも 2 つまでしか実行できません。
+  1 つのデータベースに対して、同時に実行できるコピータスクは 1 つだけです。DB インスタンス上の複数のデータベースのトランザクションログのバックアップをコピーする場合は、データベースごとに個別のコピータスクを使用します。
+  既に Amazon S3 バケットに同じ名前で存在するトランザクションログのバックアップをコピーすると、既存のトランザクションログのバックアップは上書きされます。
+  プライマリ DB インスタンスのトランザクションログのバックアップへのアクセス権が提供されているストアドプロシージャのみを実行できます。これらのストアドプロシージャは、RDS for SQL Server のリードレプリカや、マルチ AZ DB クラスターのセカンダリインスタンスでは実行できません。
+  `rds_tlog_backup_copy_to_S3` ストアドプロシージャの実行中に RDS for SQL Server DB インスタンスを再起動すると、DB インスタンスがオンラインに戻ったときに、タスクは自動的に最初から再開されます。再起動前に、タスクの実行中に Amazon S3 バケットにコピーされたトランザクションログのバックアップはすべて上書きされます。
+ Microsoft SQL Server システムデータベースと `RDSAdmin` データベースは、トランザクションログのバックアップにアクセスするように設定できません。
+  SSE-KMS で暗号化されたバケットへのコピーはサポートされていません。

# トランザクションログのバックアップへのアクセス設定
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling"></a>

トランザクションログのバックアップへのアクセスを設定するには、[要件](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements) セクションの要件リストを入力して、次に `rds_tlog_copy_setup` ストアドプロシージャを実行します。この手順により、DB インスタンスレベルでトランザクションログのバックアップ機能にアクセスできるようになります。DB インスタンス上の個々のデータベースごとに実行する必要はありません。

**重要**  
トランザクションログのバックアップ機能へのアクセスを設定し、使用するには、データベースユーザーに SQL Server 内の各データベースの `db_owner` ロールを付与する必要があります。

**Example 使用例:**  

```
exec msdb.dbo.rds_tlog_copy_setup
@target_s3_arn='arn:aws:s3:::amzn-s3-demo-bucket/myfolder';
```

以下のパラメータは必須です。
+ `@target_s3_arn` – トランザクションログのバックアップファイルをコピーするターゲット Amazon S3 バケットの ARN。

**Example Amazon S3 バケットのターゲットバケットの設定例:**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket/mytestdb1';
```

設定を検証するには、`rds_show_configuration` ストアドプロシージャを呼び出します。

**Example 設定の検証例:**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

トランザクションログのバックアップへのアクセス先を別の Amazon S3 バケットに変更するには、現在の Amazon S3 バケット値を表示し、`@target_s3_arn` の新しい値を使用して、`rds_tlog_copy_setup` ストアドプロシージャを再実行します。

**Example トランザクションログのバックアップにアクセスするため設定された既存の Amazon S3 バケットの表示例**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

**Example 新しいターゲット Amazon S3 バケットへの更新例**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket1/mynewfolder';
```

# 利用可能なトランザクションログのバックアップの一覧表示
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Listing"></a>

RDS for SQL Server では、完全な復旧モデルを使用するように設定されたデータベースで、DB インスタンスのバックアップ保存期間を 1 日以上に設定すると、トランザクションログのバックアップが自動で有効になります。トランザクションログのバックアップへのアクセスを有効にすると、最大 7 日間分のトランザクションログのバックアップを Amazon S3 バケットにコピーできるようになります。

トランザクションログのバックアップへのアクセスを有効にすると、それを使用して、利用可能なトランザクションログバックアップファイルの一覧表示と、コピーを開始できます。

**トランザクションログのバックアップの一覧表示**

個々のデータベースで利用可能なすべてのトランザクションログのバックアップを一覧表示するには、`rds_fn_list_tlog_backup_metadata` 関数を呼び出します。関数を呼び出すときは、`ORDER BY` または `WHERE` 句を使用できます。

**Example 利用可能なトランザクションログのバックアップファイルの一覧表示とフィルタリング例**  

```
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename');
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE rds_backup_seq_id = 3507;
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE backup_file_time_utc > '2022-09-15 20:44:01' ORDER BY backup_file_time_utc DESC;
```

![\[rds_fn_list_tlog_backup_metadata からの出力\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_func.png)


`rds_fn_list_tlog_backup_metadata` 関数は、次の出力を返します。


****  

| 列名 | データ型 | 説明 | 
| --- | --- | --- | 
| `db_name` | sysname | トランザクションログのバックアップを一覧表示するために指定されたデータベース名。 | 
| `db_id` | int | 入力パラメータ `db_name` の内部データベース識別子。 | 
| `family_guid` | uniqueidentifier | 作成時の元のデータベースの一意の ID。この値は、データベースが復元されても、データベース名が異なっても変わりません。 | 
| `rds_backup_seq_id` | int | RDS が各トランザクションログのバックアップファイルのシーケンス番号を保持するために内部で使用する ID。 | 
| `backup_file_epoch` | bigint | トランザクションのバックアップファイルが生成されたエポック時間。 | 
| `backup_file_time_utc` | datetime | `backup_file_epoch` 値の UTC 時刻変換後の値。 | 
| `starting_lsn` | numeric(25,0) | トランザクションログのバックアップファイルの最初または最も古いログレコードのログシーケンス番号。 | 
| `ending_lsn` | numeric(25,0) | トランザクションログのバックアップファイルの最後またはその次のログレコードのログシーケンス番号。 | 
| `is_log_chain_broken` | bit | 現在のトランザクションログのバックアップファイルと、以前のトランザクションログのバックアップファイル間でログチェーンが壊れているかどうかを示す boolean 値。 | 
| `file_size_bytes` | bigint | トランザクションのバックアップセットのサイズ (バイト単位)。 | 
| `Error` | varCHAR(4000) | `rds_fn_list_tlog_backup_metadata` 関数が例外をスローした場合のエラーメッセージ。例外がない場合は NULL です。 | 

# トランザクションログのバックアップのコピー
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying"></a>

個々のデータベースの利用可能なトランザクションログのバックアップセットを Amazon S3 バケットにコピーするには、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを呼び出します。`rds_tlog_backup_copy_to_S3` ストアドプロシージャでは、トランザクションログのバックアップをコピーする新しいタスクを開始します。

**注記**  
`rds_tlog_backup_copy_to_S3` ストアドプロシージャでは、`is_log_chain_broken` 属性を検証せずにトランザクションログのバックアップをコピーします。このため、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行する前に、ログチェーンが壊れていないことを手動で確認する必要があります。追加の説明については、「[トランザクションログのバックアップログチェーンの検証](#USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain)」を参照してください。

**Example `rds_tlog_backup_copy_to_S3` ストアドプロシージャの使用例**  

```
exec msdb.dbo.rds_tlog_backup_copy_to_S3
	@db_name='mydatabasename',
	[@kms_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@backup_file_start_time='2022-09-01 01:00:15'],
	[@backup_file_end_time='2022-09-01 21:30:45'],
	[@starting_lsn=149000000112100001],
	[@ending_lsn=149000000120400001],
	[@rds_backup_starting_seq_id=5],
	[@rds_backup_ending_seq_id=10];
```

次の入力パラメータが利用可能です。


****  

| パラメータ | 説明 | 
| --- | --- | 
| `@db_name` | トランザクションログのバックアップをコピーするためのデータベース名。 | 
| `@kms_key_arn` |  カスタマーマネージド KMS キー。AWS マネージド KMS キーで DB インスタンスを暗号化する場合は、カスタマーマネージドキーを作成する必要があります。カスタマーマネージドキーで DB インスタンスを暗号化する場合、同じ KMS キー ARN を使用できます。 | 
| `@backup_file_start_time` | `rds_fn_list_tlog_backup_metadata` 関数の `[backup_file_time_utc]` 列から提供された UTC タイムスタンプ。 | 
| `@backup_file_end_time` | `rds_fn_list_tlog_backup_metadata` 関数の `[backup_file_time_utc]` 列から提供された UTC タイムスタンプ。 | 
| `@starting_lsn` | `rds_fn_list_tlog_backup_metadata` 関数の `[starting_lsn]` 列から提供されたログシーケンス番号 (LSN) | 
| `@ending_lsn` | `rds_fn_list_tlog_backup_metadata` 関数の `[ending_lsn]` 列から提供されたログシーケンス番号 (LSN)。 | 
| `@rds_backup_starting_seq_id` | `rds_fn_list_tlog_backup_metadata` 関数の `[rds_backup_seq_id]` 列から提供されたシーケンス ID。 | 
| `@rds_backup_ending_seq_id` | `rds_fn_list_tlog_backup_metadata` 関数の `[rds_backup_seq_id]` 列から提供されたシーケンス ID。 | 

時間、LSN、シーケンス ID のいずれかのパラメータセットを指定できます。必要なパラメータは 1 セットだけです。

また、どのセットでもパラメータを 1 つだけ指定できます。例えば、`backup_file_end_time` パラメータの値のみを指定すると、7 日間の制限内であれば、それ以前に利用可能なすべてのトランザクションログのバックアップファイルが Amazon S3 バケットにコピーされます。

`rds_tlog_backup_copy_to_S3` ストアドプロシージャの有効な入力パラメータの組み合わせは次のとおりです。


****  

| 指定されたパラメータ | 予想される結果 | 
| --- | --- | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3  <br />	@db_name = 'testdb1',<br />            @backup_file_start_time='2022-08-23 00:00:00',<br />            @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 過去 7 日間のトランザクションログのバックアップをコピーします。このバックアップは、指定された `backup_file_start_time` から `backup_file_end_time` の範囲に存在します。この例では、ストアドプロシージャは「2022-08-23 00:00:00」から「2022-08-30 00:00:00」の間に生成されたトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />           @db_name = 'testdb1',<br />           @backup_file_start_time='2022-08-23 00:00:00';</pre>  | 指定された `backup_file_start_time` を起点として、過去 7 日間のトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは「2022-08-23 00:00:00」のトランザクションログのバックアップを最新のトランザクションログのバックアップにコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />          @db_name = 'testdb1',<br />          @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 指定された `backup_file_end_time` まで、過去 7 日間のトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは「2022-08-23 00:00:00」から「2022-08-30 00:00:00」までのトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />         @db_name='testdb1',<br />         @starting_lsn =1490000000040007,<br />         @ending_lsn =  1490000000050009;</pre>  | 過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。このバックアップは、指定された `starting_lsn` から `ending_lsn` の範囲にあります。この例では、ストアドプロシージャは、LSN 範囲が 1490000000040007 から 1490000000050009 までの過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @starting_lsn =1490000000040007;</pre>  |  指定された `starting_lsn` から、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは LSN 1490000000040007 からのトランザクションログのバックアップを最新のトランザクションログのバックアップにコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @ending_lsn  =1490000000050009;</pre>  |  指定された `ending_lsn` まで、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは、LSN が 1490000000050009 までの過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000,<br />       @rds_backup_ending_seq_id= 5000;</pre>  |  過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。このバックアップは、指定された `rds_backup_starting_seq_id` から `rds_backup_ending_seq_id` の範囲に存在します。この例では、ストアドプロシージャは、seq\$1id 2000 から seq\$1id 5000 までの rds バックアップシーケンス ID の範囲内で、過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000;</pre>  |  指定された `rds_backup_starting_seq_id` から、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは seq\$1id 2000 から始まる最新のトランザクションログのバックアップを最新のトランザクションログのバックアップにコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_ending_seq_id= 5000;</pre>  |  指定された `rds_backup_ending_seq_id` まで、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは、seq\$1id 5000 までの過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_starting_seq_id= 2000;<br />      @rds_backup_ending_seq_id= 2000;</pre>  |  過去 7 日以内に利用可能な場合、指定された `rds_backup_starting_seq_id` で 1 つのトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは、seq\$1id が 2000 の 1 つのトランザクションログのバックアップをコピーします (過去 7 日以内に存在する場合)。  | 

## トランザクションログのバックアップログチェーンの検証
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain"></a>

 トランザクションログのバックアップにアクセスするように設定されたデータベースでは、自動バックアップ保持が有効になっている必要があります。自動バックアップ保持により、DB インスタンスのデータベースが `FULL` 復旧モデルに設定されます。データベースのポイントインタイム復元をサポートするには、データベース復旧モデルを変更しないでください。データベース復旧モデルを変更すると、ログチェーンが壊れる可能性があります。データベースは `FULL` 復旧モデルに設定しておくことをお勧めします。

トランザクションログのバックアップをコピーする前にログチェーンを手動で検証するには、`rds_fn_list_tlog_backup_metadata` 関数を呼び出して `is_log_chain_broken` 列の値を確認します。値が「1」の場合、現在のログのバックアップと前回のログのバックアップの間でログチェーンが壊れていたことを示します。

次の例は、`rds_fn_list_tlog_backup_metadata` ストアドプロシージャからの出力のログチェーンが壊れていることを示しています。

![\[rds_fn_list_tlog_backup_metadata からの出力で、壊れたログチェーンを表示します。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_logchain_error.png)


通常のログチェーンでは、特定の rds\$1sequence\$1id の first\$1lsn のログシーケンス番号 (LSN) 値は、前の rds\$1sequence\$1id の last\$1lsn の値と一致する必要があります。この図では、rds\$1sequence\$1id が 45 の first\$1lsn の値は 90987 ですが、その前の rds\$1sequence\$1id が 44 の last\$1lsn 値 90985 と一致しません。

SQL Server のトランザクションログアーキテクチャとログシーケンス番号の詳細については、Microsoft SQL Server ドキュメントの「[トランザクションログの論理アーキテクチャ](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver15#Logical_Arch)」を参照してください。

# Amazon S3 バケットフォルダおよびファイル構造
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.S3namingConvention"></a>

Amazon S3 バケット内のトランザクションログのバックアップには、以下の標準構造と命名規則があります。
+ 各データベースの `target_s3_arn` パスの下に、`{db_id}.{family_guid}` という命名構造を持つ新しいフォルダが作成されます。
+ フォルダ内のトランザクションログのバックアップは、`{db_id}.{family_guid}.{rds_backup_seq_id}.{backup_file_epoch}` のようなファイル名構造を持ちます。
+ `rds_fn_list_tlog_backup_metadata` 関数を使用すると、`family_guid,db_id,rds_backup_seq_id and backup_file_epoch` の詳細を表示できます。

以下の例では、Amazon S3 バケット内の一連のトランザクションログのバックアップのフォルダおよびファイル構造を示しています。

![\[Amazon S3 バケット構造とトランザクションログへのアクセス\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_s3.png)


# タスクのステータスの追跡
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus"></a>

 コピータスクのステータスを追跡するには、`rds_task_status` ストアドプロシージャを呼び出します。パラメータを何も指定しない場合、ストアドプロシージャによりすべてのタスクのステータスが返されます。

**Example 使用例:**  

```
exec msdb.dbo.rds_task_status
  @db_name='database_name',
  @task_id=ID_number;
```

以下のパラメータはオプションです。
+ `@db_name` – タスクのステータスを表示するデータベースの名前。
+ `@task_id` – タスクのステータスを表示するタスクの ID。

**Example 特定タスク ID のステータスの一覧表示例:**  

```
exec msdb.dbo.rds_task_status @task_id=5;
```

**Example 特定データベースおよびタスクのステータスの一覧表示例:**  

```
exec msdb.dbo.rds_task_status@db_name='my_database',@task_id=5;
```

**Example 特定データベースのすべてのタスクおよびステータスの一覧表示例:**  

```
exec msdb.dbo.rds_task_status @db_name='my_database';
```

**Example 現在の DB インスタンスのすべてのタスクおよびステータスの一覧表示例:**  

```
exec msdb.dbo.rds_task_status;
```

# タスクのキャンセル
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.CancelTask"></a>

実行中のタスクをキャンセルするには、`rds_cancel_task` ストアドプロシージャを呼び出します。

**Example 使用例:**  

```
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
```

以下のパラメータは必須です。
+ `@task_id` – キャンセルするタスクの ID。`rds_task_status` ストアドプロシージャを呼び出すことにより、タスク ID を表示できます。

実行中のタスクの表示とキャンセルの詳細については、「[ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート](SQLServer.Procedural.Importing.md)」を参照してください。

# トランザクションログのバックアップへのアクセスについてのトラブルシューティング
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Troubleshooting"></a>

トランザクションログのバックアップへのアクセスにストアドプロシージャを使用する場合、次のような問題が発生する場合があります。


****  

| ストアドプロシージャ | エラーメッセージ | 問題 | トラブルシューティングの推奨事項 | 
| --- | --- | --- | --- | 
| rds\$1tlog\$1copy\$1setup | この DB インスタンスでは、バックアップは無効になっています。DB インスタンスのバックアップを「1」以上の保持期間で有効にして、もう一度試してください。 | DB インスタンスの自動バックアップを有効化する。 |  DB インスタンスのバックアップの保持期間は、最低でも 1 日以上有効にする必要があります。自動バックアップの有効化バックアップの保持期間の設定の詳細については、「[バックアップの保存期間](USER_WorkingWithAutomatedBackups.BackupRetention.md)」を参照してください。 | 
| rds\$1tlog\$1copy\$1setup | rds\$1tlog\$1copy\$1setup ストアドプロシージャの実行中にエラーが発生しました。RDS エンドポイントに再接続して、もう一度試してください。 | 内部エラーが発生しました。 | RDS エンドポイントに再接続し、`rds_tlog_copy_setup` ストアドプロシージャを再実行します。 | 
| rds\$1tlog\$1copy\$1setup | rds\$1tlog\$1backup\$1copy\$1setup ストアドプロシージャをトランザクション内で実行することはサポートされていません。セッションに未処理のトランザクションがないことを確認して、もう一度試してください。 | ストアドプロシージャでは、`BEGIN` および `END` を使用してトランザクション内で試行されました。 | `rds_tlog_copy_setup` ストアドプロシージャを実行するときは、`BEGIN` および `END` を使用しないでください。 | 
| rds\$1tlog\$1copy\$1setup | 入力パラメータ `@target_s3_arn` の S3 バケット名には、スペース以外の文字が少なくとも 1 文字含まれている必要があります。 | 入力パラメータ `@target_s3_arn` に間違った値が指定されました。 | 入力パラメータ `@target_s3_arn` に完全な Amazon S3 バケット ARN が指定されていることを確認します。 | 
| rds\$1tlog\$1copy\$1setup | `SQLSERVER_BACKUP_RESTORE` オプションが有効になっていないか、有効化処理中です。オプションを有効にするか、後でもう一度試してください。 | `SQLSERVER_BACKUP_RESTORE` オプションが DB インスタンスで有効になっていないか、有効化されたばかりで内部アクティベーションが保留されています。 | 要件セクションで指定されている `SQLSERVER_BACKUP_RESTORE` オプションを有効にします。数分間待って、再度 `rds_tlog_copy_setup` ストアドプロシージャを実行してください。 | 
| rds\$1tlog\$1copy\$1setup | 入力パラメータ `@target_s3_arn` のターゲット S3 arn を空または null にすることはできません。 | 入力パラメータ `@target_s3_arn` に `NULL` 値が指定されたか、値が指定されませんでした。 | 入力パラメータ `@target_s3_arn` に完全な Amazon S3 バケット ARN が指定されていることを確認します。 | 
| rds\$1tlog\$1copy\$1setup | 入力パラメータ `@target_s3_arn` のターゲット S3 arn は、arn:aws で始まる必要があります。 | 入力パラメータ `@target_s3_arn` は、前に `arn:aws` を付けずに指定されました。 | 入力パラメータ `@target_s3_arn` に完全な Amazon S3 バケット ARN が指定されていることを確認します。 | 
| rds\$1tlog\$1copy\$1setup | ターゲット S3 ARN は、既に指定された値が設定されています。 | `rds_tlog_copy_setup` ストアドプロシージャは前に実行され、Amazon S3 バケット ARN で設定されていました。 | トランザクションログのバックアップにアクセスするために Amazon S3 バケット値を変更するには、別の `target S3 ARN` を指定します。 | 
| rds\$1tlog\$1copy\$1setup | トランザクションログのバックアップへのアクセスを有効にする認証情報を生成できません。`rds_tlog_copy_setup` で指定されている S3 パス ARN を確認し、後でもう一度試してください。 | トランザクションログのバックアップにアクセスするための認証情報の生成中に、不明なエラーが発生しました。 | 設定設定を確認して、もう一度試してください。 | 
| rds\$1tlog\$1copy\$1setup | 保留中のタスクがある間は、rds\$1tlog\$1copy\$1setup ストアドプロシージャを実行できません。保留中のタスクが完了するのを待ち、もう一度試してください。 | 一度に実行できるタスクは 2 つだけです。完了を待っている保留中のタスクがあります。 | 保留中のタスクを表示して、完了するのを待ちます。モニタリングタスクのステータスの詳細については、「[タスクのステータスの追跡](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)」をご参照ください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | T-log バックアップファイルコピータスクがデータベース: %s、タスク ID: %d で既に発行されています。後でもう一度試してください。 | 特定のデータベースに対して、同時に実行できるコピータスクは 1 つだけです。完了を待っている保留中のコピータスクがあります。 | 保留中のタスクを表示して、完了するのを待ちます。モニタリングタスクのステータスの詳細については、「[タスクのステータスの追跡](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)」をご参照ください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | これらの 3 セットのパラメータセットのうち、少なくとも 1 セットを指定する必要があります。SET-1:(@backup\$1file\$1start\$1time、@backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn、@ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id、@rds\$1backup\$1ending\$1seq\$1id) | 3 セットのパラメータセットのいずれも指定されていないか、指定されたパラメータセットに必要なパラメータが不足しています。 | 時間、lsn、シーケンス ID のいずれかのパラメータを指定できます。これら 3 セットのパラメータのうち 1 セットが必要です。必要なパラメータの詳細については、「[トランザクションログのバックアップのコピー](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | インスタンスでは、バックアップは無効になっています。バックアップを有効にして、しばらくしてからもう一度試してください。 | DB インスタンスの自動バックアップを有効化する。 |  自動バックアップの有効化バックアップの保持期間の設定の詳細については、「[バックアップの保存期間](USER_WorkingWithAutomatedBackups.BackupRetention.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 指定されたデータベース %s が見つかりません。 | 入力パラメータ `@db_name` に指定された値が DB インスタンスのデータベース名と一致しません。 | 正しいデータベース名を使用してください。すべてのデータベースを名前で一覧表示するには、`SELECT * from sys.databases` を実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | SQL Server システムデータベースまたは rdsadmin データベースの RDS\$1TLOG\$1Backup\$1copy\$1to\$1S3 ストアドプロシージャを実行できません。 | 入力パラメータ `@db_name` として指定された値は、SQL Server システムデータベース名または RDSAdmin データベースと一致します。 | データベース `master, model, msdb, tempdb, RDSAdmin.` は、トランザクションログバックアップへのアクセスには使用できません。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ @db\$1name のデータベース名を空または null にすることはできません。 | 入力パラメータ `@db_name` に空または `NULL` の値が指定されました。 | 正しいデータベース名を使用してください。すべてのデータベースを名前で一覧表示するには、`SELECT * from sys.databases` を実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | rds\$1tlog\$1backup\$1copy\$1setup ストアドプロシージャを実行するには、DB インスタンスのバックアップ保持期間を少なくとも 1 に設定する必要があります。 | DB インスタンスの自動バックアップを有効化する。 | 自動バックアップの有効化バックアップの保持期間の設定の詳細については、「[バックアップの保存期間](USER_WorkingWithAutomatedBackups.BackupRetention.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | ストアドプロシージャ rds\$1tlog\$1backup\$1copy\$1to\$1S3 の実行中にエラーが発生しました。RDS エンドポイントに再接続して、もう一度試してください。 | 内部エラーが発生しました。 | RDS エンドポイントに再接続し、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを再実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | これらの 3 セットのパラメータセットのうち、1 セットのみ指定できます。SET-1:(@backup\$1file\$1start\$1time、@backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn、@ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id、@rds\$1backup\$1ending\$1seq\$1id) | 複数のパラメータセットが指定されました。 | 時間、lsn、シーケンス ID のいずれかのパラメータを指定できます。これら 3 セットのパラメータのうち 1 セットが必要です。必要なパラメータの詳細については、「[トランザクションログのバックアップのコピー](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | rds\$1tlog\$1backup\$1copy\$1to\$1S3 ストアドプロシージャをトランザクション内で実行することはサポートされていません。セッションに未処理のトランザクションがないことを確認して、もう一度試してください。 | ストアドプロシージャでは、`BEGIN` および `END` を使用してトランザクション内で試行されました。 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行するときは、`BEGIN` および `END` を使用しないでください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 指定されたパラメータは、トランザクションバックアップログの保持期間外です。使用可能なトランザクションログのバックアップファイルを一覧表示するには、rds\$1fn\$1list\$1tlog\$1backup\$1metadata 関数を実行します。  | 指定された入力パラメータで、コピー保持期間内で該当するトランザクションのログバックアップはありませんでした。 | 有効なパラメータセットを使用してもう一度試してください。必要なパラメータの詳細については、「[トランザクションログのバックアップのコピー](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | リクエストの処理中にアクセス許可エラーがありました。バケットが DB インスタンスと同じアカウントとリージョンにあることを確認し、公開ドキュメントのテンプレートに対する S3 バケットポリシーのアクセス許可を確認してください。  | 指定された S3 バケットまたはそのポリシーのアクセス許可で問題が検出されました。 | トランザクションログのバックアップにアクセスするための設定が正しいことを確認します。S3 バケットの設定要件の詳細については、「[要件](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | RDS リードレプリカインスタンスで `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行することは許可されていません。 | RDS リードレプリカインスタンスでストアドプロシージャが試行されました。 | RDS プライマリ DB インスタンスに接続して、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ `@starting_lsn` の LSN は `@ending_lsn` 未満である必要があります。 | 入力パラメータ `@starting_lsn` に指定された値が、入力パラメータ `@ending_lsn` に指定された値より大きい。 | 入力パラメータ `@starting_lsn` に指定された値が、入力パラメータ `@ending_lsn` に指定された値より小さいことを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャは、ソースデータベース内の `db_owner` ロールのメンバーのみが実行できます。 | 指定された `db_name` で `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行しようとしているアカウントには、`db_owner` ロールが付与されていません。 | ストアドプロシージャを実行しているアカウントに、指定された `db_name` の `db_owner` ロールが付与されていることを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ `@rds_backup_starting_seq_id` のシーケンス ID は、`@rds_backup_ending_seq_id` 以下である必要があります。 | 入力パラメータ `@rds_backup_starting_seq_id` に指定された値が、入力パラメータ `@rds_backup_ending_seq_id` に指定された値より大きい。 | 入力パラメータ `@rds_backup_starting_seq_id` に指定された値が、入力パラメータ `@rds_backup_ending_seq_id` に指定された値より小さいことを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | SQLSERVER\$1BACKUP\$1RESTORE オプションが有効になっていないか、有効化処理中です。オプションを有効にするか、後でもう一度試してください。 | `SQLSERVER_BACKUP_RESTORE` オプションが DB インスタンスで有効になっていないか、有効化されたばかりで内部アクティベーションが保留されています。 | 要件セクションで指定されている `SQLSERVER_BACKUP_RESTORE` オプションを有効にします。数分間待って、再度 `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ `@backup_file_start_time` の開始時刻は `@backup_file_end_time` より早い必要があります。 | 入力パラメータ `@backup_file_start_time` に指定された値が、入力パラメータ `@backup_file_end_time` に指定された値より遅い。 | 入力パラメータ `@backup_file_start_time` に指定された値が、入力パラメータ `@backup_file_end_time` に指定された値より小さいことを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | アクセスできないため、リクエストを処理できませんでした。機能の設定とアクセス許可を確認してください。 | Amazon S3 バケットのアクセス許可に問題があるか、指定された Amazon S3 バケットが別のアカウントまたはリージョンにある可能性があります。 | Amazon S3 バケットポリシーのアクセス許可が、RDS のアクセスを許可するように設定されていることを確認してください。Amazon S3 バケットが DB インスタンスと同じアカウントとリージョンにあることを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | ストレージが暗号化されていないインスタンスのストアドプロシージャへの入力パラメータとして、KMS Key ARN は指定できません。 | DB インスタンスでストレージ暗号化が有効化されていない場合は、入力パラメータ `@kms_key_arn` を指定しないでください。 | `@kms_key_arn` の入力パラメータは指定しないでください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | ストレージ暗号化インスタンスのストアドプロシージャへの入力パラメータとして、KMS キー ARN を指定する必要があります。 | DB インスタンスでストレージ暗号化が有効化されている場合は、入力パラメータ `@kms_key_arn` を指定する必要があります。 | `@kms_key_arn` の入力パラメータに、トランザクションログのバックアップに使用する Amazon S3 バケットの ARN と一致する値を指定します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行する前に、`rds_tlog_copy_setup` ストアドプロシージャを実行して、`@target_s3_arn` を設定する必要があります。 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャの実行を試行する前に、トランザクションログのバックアップへのアクセスのセットアップ手順が完了しませんでした。 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行する前に、`rds_tlog_copy_setup` ストアドプロシージャを実行してください。トランザクションログのバックアップにアクセスするためのセットアップ手順の実行の詳細については、「[トランザクションログのバックアップへのアクセス設定](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)」を参照してください。 | 