

# 适用于 Microsoft SQL Server 数据库引擎的选项
<a name="Appendix.SQLServer.Options"></a>

在本节中，您可以找到选项的说明，这些选项可供运行 Microsoft SQL Server 数据库引擎的 Amazon RDS 实例使用。要启用这些选项，可将它们添加到选项组中，然后将选项组关联到数据库实例。有关更多信息，请参阅“[使用选项组](USER_WorkingWithOptionGroups.md)”。

如果要查找未通过 RDS 选项组添加的可选功能（例如 SSL、Microsoft Windows 身份验证和 Amazon S3 集成），请参阅[Amazon RDS 上的 Microsoft SQL Server 的其他功能](User.SQLServer.AdditionalFeatures.md)。

Amazon RDS 支持 Microsoft SQL Server 数据库实例的以下选项。


****  

| 选项 | 选项 ID | 引擎版本 | 
| --- | --- | --- | 
|  [带有 Oracle OLEDB 的链接服务器](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)  |  `OLEDB_ORACLE`  |  SQL Server 企业版 SQL Server 标准版  | 
|  [本机备份和还原](Appendix.SQLServer.Options.BackupRestore.md)  |  `SQLSERVER_BACKUP_RESTORE`  |  SQL Server 企业版 SQL Server 标准版 SQL Server Web Edition SQL Server Express Edition  | 
|  [透明数据加密](Appendix.SQLServer.Options.TDE.md)  |  `TRANSPARENT_DATA_ENCRYPTION`（RDS 控制台） `TDE`（AWS CLI 和 RDS API）  |  SQL Server 2016–2022 企业版 SQL Server 2022 标准版 | 
|  [SQL Server Audit](Appendix.SQLServer.Options.Audit.md)  |  `SQLSERVER_AUDIT`  |  在 RDS 中，从 SQL Server 2016 开始，SQL Server 的所有版本都支持服务器级审计，而企业版还支持数据库级审计。 从 SQL Server SQL Server 2016 (13.x) SP1 开始，所有版本均支持服务器级别和数据库级别审核。 有关更多信息，请参阅 SQL Server 文档中的 [SQL Server Audit（数据库引擎）](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-2017)。 | 
|  [SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)  |  `SSAS`  |  SQL Server 企业版 SQL Server 标准版  | 
|  [SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)  |  `SSIS`  |  SQL Server 企业版 SQL Server 标准版  | 
|  [SQL Server Reporting Services](Appendix.SQLServer.Options.SSRS.md)  |  `SSRS`  |  SQL Server 企业版 SQL Server 标准版  | 
|  [Microsoft 分布式事务处理协调器](Appendix.SQLServer.Options.MSDTC.md)  |  `MSDTC`  |  在 RDS 中，从 SQL Server 2016 开始，SQL Server 的所有版本都支持分布式事务。  | 
|  [SQL Server 资源调控器](Appendix.SQLServer.Options.ResourceGovernor.md)  |  `RESOURCE_GOVERNOR`  |  SQL Server 企业版 SQL Server 2022 开发人员版  | 

## 列出 SQL Server 版本的可用选项
<a name="Appendix.SQLServer.Options.Describe"></a>

您可以使用 `describe-option-group-options` AWS CLI 命令列出 SQL Server 版本的可用选项以及这些选项的设置。

以下示例显示了 SQL Server 2019 企业版的选项和选项设置。`--engine-name` 选项是必需的。

```
aws rds describe-option-group-options --engine-name sqlserver-ee --major-engine-version 15.00
```

输出与以下内容类似：

```
{
    "OptionGroupOptions": [
        {
            "Name": "MSDTC",
            "Description": "Microsoft Distributed Transaction Coordinator",
            "EngineName": "sqlserver-ee",
            "MajorEngineVersion": "15.00",
            "MinimumRequiredMinorEngineVersion": "4043.16.v1",
            "PortRequired": true,
            "DefaultPort": 5000,
            "OptionsDependedOn": [],
            "OptionsConflictsWith": [],
            "Persistent": false,
            "Permanent": false,
            "RequiresAutoMinorEngineVersionUpgrade": false,
            "VpcOnly": false,
            "OptionGroupOptionSettings": [
                {
                    "SettingName": "ENABLE_SNA_LU",
                    "SettingDescription": "Enable support for SNA LU protocol",
                    "DefaultValue": "true",
                    "ApplyType": "DYNAMIC",
                    "AllowedValues": "true,false",
                    "IsModifiable": true,
                    "IsRequired": false,
                    "MinimumEngineVersionPerAllowedValue": []
                },
        ...

        {
            "Name": "TDE",
            "Description": "SQL Server - Transparent Data Encryption",
            "EngineName": "sqlserver-ee",
            "MajorEngineVersion": "15.00",
            "MinimumRequiredMinorEngineVersion": "4043.16.v1",
            "PortRequired": false,
            "OptionsDependedOn": [],
            "OptionsConflictsWith": [],
            "Persistent": true,
            "Permanent": false,
            "RequiresAutoMinorEngineVersionUpgrade": false,
            "VpcOnly": false,
            "OptionGroupOptionSettings": []
        }
    ]
}
```

# 在 Amazon RDS for SQL Server 中支持带有 Oracle OLEDB 的链接服务器
<a name="Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB"></a>

RDS for SQL Server 上带有 Oracle Provider for OLEDB 的链接服务器可让您访问 Oracle 数据库上的外部数据来源。您可以从远程 Oracle 数据来源读取数据，并对您的 RDS for SQL Server 数据库实例之外的远程 Oracle 数据库服务器运行命令。使用带有 Oracle OLEDB 的链接服务器，您可以：
+ 直接访问 SQL Server 以外的数据来源
+ 使用相同的查询对不同的 Oracle 数据来源进行查询，无需移动数据
+ 对整个企业生态系统中的数据来源发出分布式查询、更新、命令和事务
+ 在 Microsoft 商业智能套件（SSIS、SSRS、SSAS）中集成与 Oracle 数据库的连接
+ 从 Oracle 数据库迁移到 RDS for SQL Server

您可以在现有或新的 RDS for SQL Server 数据库实例上激活一个或多个适用于 Oracle 的链接服务器。然后，您可以将外部 Oracle 数据来源与您的数据库实例集成。

**Contents**
+ [支持的版本和区域](#LinkedServers_Oracle_OLEDB.VersionRegionSupport)
+ [限制和建议](#LinkedServers_Oracle_OLEDB.Limitations)
+ [激活适用于 Oracle 的链接服务器](#LinkedServers_Oracle_OLEDB.Enabling)
  + [为 OLEDB\$1ORACLE 创建选项组](#LinkedServers_Oracle_OLEDB.OptionGroup)
  + [将 `OLEDB_ORACLE` 选项添加到选项组](#LinkedServers_Oracle_OLEDB.Add)
  + [将 `OLEDB_ORACLE` 版本选项修改为另一个版本](#LinkedServers_Oracle_OLEDB.Modify)
  + [将选项组与数据库实例关联](#LinkedServers_Oracle_OLEDB.Apply)
+ [修改 OLEDB 提供程序属性](#LinkedServers_Oracle_OLEDB.ModifyProviderProperties)
+ [修改 OLEDB 驱动程序属性](#LinkedServers_Oracle_OLEDB.ModifyDriverProperties)
+ [停用适用于 Oracle 的链接服务器](#LinkedServers_Oracle_OLEDB.Disable)

## 支持的版本和区域
<a name="LinkedServers_Oracle_OLEDB.VersionRegionSupport"></a>

在以下版本上，对于 SQL Server 标准版和企业版，RDS for SQL Server 在所有区域中支持带有 Oracle OLEDB 的链接服务器：
+ SQL Server 2022，所有版本
+ SQL Server 2019，所有版本
+ SQL Server 2017，所有版本

以下 Oracle Database 版本支持带有 Oracle OLEDB 的链接服务器：
+ Oracle Database 21c，所有版本
+ Oracle Database 19c，所有版本
+ Oracle Database 18c，所有版本

以下 OLEDB Oracle 驱动程序版本支持带有 Oracle OLEDB 的链接服务器：
+ 21.7
+ 21.16

## 限制和建议
<a name="LinkedServers_Oracle_OLEDB.Limitations"></a>

请记住以下适用于带有 Oracle OLEDB 的链接服务器的限制和建议：
+ 通过在每个 RDS for SQL Server 数据库实例的安全组中添加适用的 TCP 端口来允许网络流量。例如，如果您在 EC2 Oracle 数据库实例和 RDS for SQL Server 数据库实例之间配置链接服务器，则必须允许来自 EC2 Oracle 数据库实例的 IP 地址的流量。您还必须允许 SQL Server 用于侦听数据库通信的端口上的流量。有关安全组的更多信息，请参阅[使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。
+ 在打开、关闭或修改选项组中的 `OLEDB_ORACLE` 选项后，重启 RDS for SQL Server 数据库实例。选项组状态对于这些事件显示 `pending_reboot` 且是必需的。对于启用了 AlwaysOn 或镜像选项的 RDS for SQL Server 多可用区实例，在新实例创建或还原后重启实例时，预计会进行失效转移。
+ Oracle 数据来源的用户名和密码仅支持简单身份验证。
+ 不支持开放式数据库连接（ODBC）驱动程序。仅支持上面列出的 OLEDB 驱动程序版本。
+ 支持分布式事务（XA）。要激活分布式事务，请为您的数据库实例开启选项组中的 `MSDTC` 选项，并确保 XA 事务处于开启状态。有关更多信息，请参阅 [RDS for SQL Server 中的 Microsoft 分布式事务处理协调器支持](Appendix.SQLServer.Options.MSDTC.md)。
+ 不支持创建用作连接字符串的快捷方式的数据来源名称（DSN）。
+ 不支持 OLEDB 驱动程序跟踪。您可以使用 SQL Server 扩展事件来跟踪 OLEDB 事件。有关更多信息，请参阅[在 RDS for SQL Server 中设置扩展事件](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)。
+ 不支持使用 SQL Server Management Studio（SSMS）访问 Oracle 链接服务器的目录文件夹。

## 激活适用于 Oracle 的链接服务器
<a name="LinkedServers_Oracle_OLEDB.Enabling"></a>

通过在 RDS for SQL Server 数据库实例中添加 `OLEDB_ORACLE` 选项来激活适用于 Oracle 的链接服务器。使用以下过程：

1. 创建新的选项组或选择现有的选项组。

1. 将 `OLEDB_ORACLE` 选项添加到该选项组。

1. 选择要使用的 OLEDB 驱动程序的版本。

1. 将选项组与数据库实例相关联。

1. 重启数据库实例。

### 为 OLEDB\$1ORACLE 创建选项组
<a name="LinkedServers_Oracle_OLEDB.OptionGroup"></a>

要使用适用于 Oracle 的链接服务器，请创建或修改与您计划使用的 SQL Server 版本和数据库实例版本对应的选项组。要完成此过程，请使用 AWS 管理控制台或 AWS CLI。

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.Console"></a>

以下过程创建适用于 SQL Server 标准版 2019 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗口中，执行以下操作：

   1. 对于**名称**，输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **oracle-oledb-se-2019**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **OLEDB\$1ORACLE option group for SQL Server SE 2019**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于 **Major engine version**（主引擎版本），选择 **15.00**。

1. 选择**创建**。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.CLI"></a>

以下过程创建适用于 SQL Server 标准版 2019 的选项组。

**创建选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --engine-name sqlserver-se \
      --major-engine-version 15.00 \
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

  对于：Windows

  ```
  aws rds create-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --engine-name sqlserver-se ^
      --major-engine-version 15.00 ^
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

### 将 `OLEDB_ORACLE` 选项添加到选项组
<a name="LinkedServers_Oracle_OLEDB.Add"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `OLEDB_ORACLE` 选项添加到您的选项组。

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.Add.Console"></a>

**添加 OLEDB\$1ORACLE 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择您刚刚创建的选项组（本例中为 **oracle-oledb-se-2019**）。

1. 选择**添加选项**。

1. 在 **Option details**（选项详细信息）下，为 **Option name**（选项名称）选择 **OLEDB\$1ORACLE**。

1. 在**版本**下，选择要安装的 OLEDB Oracle 驱动程序版本。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

1. 选择**添加选项**。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

**添加 OLEDB\$1ORACLE 选项**
+ 将 `OLEDB_ORACLE` 选项添加到该选项组。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 ^
      --apply-immediately
  ```

### 将 `OLEDB_ORACLE` 版本选项修改为另一个版本
<a name="LinkedServers_Oracle_OLEDB.Modify"></a>

要将 `OLEDB_ORACLE` 选项版本修改为另一个版本，请使用 AWS 管理控制台或 AWS CLI。

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.Modify.Console"></a>

**修改 OLEDB\$1ORACLE 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `OLEDB_ORACLE` 选项的选项组（在前面的示例中为 **oracle-oledb-se-2019**）。

1. 选择 **Modify option**（修改选项）。

1. 在 **Option details**（选项详细信息）下，为 **Option name**（选项名称）选择 **OLEDB\$1ORACLE**。

1. 在**版本**下，选择要使用的 OLEDB Oracle 驱动程序版本。

1. 在**计划**下，选择是立即修改选项，还是在下一个维护时段修改选项。

1. 选择 **Modify option**（修改选项）。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

要修改 `OLEDB_ORACLE` 选项版本，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html) AWS CLI 命令来处理要使用的选项组和选项版本。

**修改 OLEDB\$1ORACLE 选项**
+   
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 ^
      --apply-immediately
  ```

### 将选项组与数据库实例关联
<a name="LinkedServers_Oracle_OLEDB.Apply"></a>

要将 `OLEDB_ORACLE` 选项组和参数组与数据库实例关联，请使用 AWS 管理控制台或 AWS CLI 

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.Apply.Console"></a>

要完成激活适用于 Oracle 的链接服务器，请将您的 `OLEDB_ORACLE` 选项组与新的或现有的数据库实例关联：
+ 对于新数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Apply.CLI"></a>

您可以将 `OLEDB_ORACLE` 选项组和参数组与新的或现有的数据库实例关联。

**使用 `OLEDB_ORACLE` 选项组和参数组创建实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 15.0.4236.7.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name
  ```

  对于：Windows

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 15.0.4236.7.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name
  ```

**修改实例并关联 `OLEDB_ORACLE` 选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name ^
      --apply-immediately
  ```

## 修改 OLEDB 提供程序属性
<a name="LinkedServers_Oracle_OLEDB.ModifyProviderProperties"></a>

您可以查看和更改 ODB 提供程序的属性。只有 `master` 用户才能执行此任务。在数据库实例上创建的所有适用于 Oracle 的链接服务器都使用该 OLEDB 提供程序的相同属性。调用 `sp_MSset_oledb_prop` 存储过程以更改 OLEDB 提供程序的属性。

更改 OLEDB 提供程序属性

```
				
USE [master]
GO
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'DynamicParameters', 0
GO
```

可以修改以下属性：


****  

| 属性名称 | 建议的值（1 = 开启，0 = 关闭） | 说明 | 
| --- | --- | --- | 
| `Dynamic parameter` | 1 | 在参数化查询中允许 SQL 占位符（以“?”表示）。 | 
| `Nested queries` | 1 | 允许在 `FROM` 子句中嵌套 `SELECT` 语句，例如子查询。 | 
| `Level zero only` | 0 | 仅针对此提供程序调用基级 OLEDB 接口。 | 
| `Allow inprocess` | 1 | 如果开启，Microsoft SQL Server 允许将提供程序实例化为进程内服务器。将此属性设置为 1 可使用 Oracle 链接服务器。 | 
| `Non transacted updates` | 0 | 如果不为零，则 SQL Server 允许更新。 | 
| `Index as access path` | False | 如果不为零，则 SQL Server 会尝试使用提供程序的索引来获取数据。 | 
| `Disallow adhoc access` | False | 如果已设置，则 SQL Server 不允许对 OLEDB 提供程序运行传递查询。虽然可以选中此选项，但有时运行传递查询是合适的。 | 
| `Supports LIKE operator` | 1 | 表示提供程序支持使用 LIKE 关键字进行查询。 | 

## 修改 OLEDB 驱动程序属性
<a name="LinkedServers_Oracle_OLEDB.ModifyDriverProperties"></a>

在创建适用于 Oracle 的链接服务器时，可以查看和更改 OLEDB 驱动程序的属性。只有 `master` 用户才能执行此任务。驱动程序属性定义了在使用远程 Oracle 数据来源时 OLEDB 驱动程序如何处理数据。驱动程序属性特定于在数据库实例上创建的每个 Oracle 链接服务器。调用 `master.dbo.sp_addlinkedserver` 存储过程以更改 OLEDB 驱动程序的属性。

示例：创建链接服务器并更改 OLEDB 驱动程序 `FetchSize` 属性

```
	
EXEC master.dbo.sp_addlinkedserver
@server = N'Oracle_link2',
@srvproduct=N'Oracle',
@provider=N'OraOLEDB.Oracle',
@datasrc=N'my-oracle-test.cnetsipka.us-west-2.rds.amazonaws.com:1521/ORCL',
@provstr='FetchSize=200'
GO
```

```
	
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'Oracle_link2',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'master',
@rmtpassword='Test#1234'
GO
```

**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

## 停用适用于 Oracle 的链接服务器
<a name="LinkedServers_Oracle_OLEDB.Disable"></a>

要停用适用于 Oracle 的链接服务器，请从其选项组中删除 `OLEDB_ORACLE` 选项。

**重要**  
删除此选项不会删除数据库实例上现有的链接服务器配置。您必须手动删除它们，才能将其从数据库实例中删除。  
删除后，您可以重新激活 `OLEDB_ORACLE` 选项，以重用先前在数据库实例上配置的链接服务器配置。

### 控制台
<a name="LinkedServers_Oracle_OLEDB.Disable.Console"></a>

以下过程删除 `OLEDB_ORACLE` 选项。

**从其选项组中删除 OLEDB\$1ORACLE 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `OLEDB_ORACLE` 选项的选项组（在前面的示例中为 `oracle-oledb-se-2019`）。

1. 选择 **Delete option (删除选项)**。

1. 在 **Deletion options**（删除选项）下，为 **Options to delete**（待删除的选项）选择 **OLEDB\$1ORACLE**。

1. 在 **Apply immediately**（立即应用）下，选择 **Yes**（是）可立即删除选项，选择 **No**（否）可在下一个维护时段删除它。

1. 选择**删除**。

### CLI
<a name="LinkedServers_Oracle_OLEDB.Disable.CLI"></a>

以下过程删除 `OLEDB_ORACLE` 选项。

**从选项组中删除 OLEDB\$1ORACLE 选项**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OLEDB_ORACLE \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OLEDB_ORACLE ^
      --apply-immediately
  ```

# RDS for SQL Server 中适用于 Teradata ODBC 的链接服务器
<a name="USER_SQLServerTeradata"></a>

在 RDS for SQL Server 上通过 Teradata ODBC 驱动程序支持链接服务器，可让您访问 Teradata 数据库上的外部数据来源。您可以从 RDS for SQL Server 实例外部的远程 Teradata 数据库服务器读取数据并运行命令。将链接服务器与 Teradata ODBC 结合使用可启用以下功能：
+ 直接访问 SQL Server 以外的数据来源。
+ 使用相同的查询对不同的 Teradata 数据来源进行查询，而无需移动数据。
+ 对整个企业生态系统中的数据来源发出分布式查询、更新、命令和事务。
+ 从 Microsoft 商业智能套件（SSIS、SSRS、SSAS）中集成与 Teradata 数据库的连接。
+ 从 Teradata 数据库迁移到 RDS for SQL Server。

您可以选择在现有或新的 RDS for SQL Server 数据库实例上激活一个或多个适用于 Teradata 的链接服务器。然后，您可以将外部 Teradata 数据来源与您的数据库实例集成。

**Topics**
+ [支持的版本和区域](#USER_SQLServerTeradata.VersionRegionSupport)
+ [限制和建议](#USER_SQLServerTeradata.LimitsandRecommendations)
+ [多可用区部署的注意事项](#USER_SQLServerTeradata.MultiAZ)
+ [激活适用于 Teradata 的链接服务器](USER_SQLServerTeradata.Activate.md)
+ [创建适用于 Teradata 的链接服务器](USER_SQLServerTeradata.CreateLinkedServers.md)
+ [停用链接到 Teradata 的服务器](USER_SQLServerTeradata.Deactivate.md)

## 支持的版本和区域
<a name="USER_SQLServerTeradata.VersionRegionSupport"></a>

在以下版本上，对于 SQL Server 标准版和企业版，RDS for SQL Server 在所有 AWS 区域中支持适用于 Teradata ODBC 的链接服务器：
+ SQL Server 2022，所有版本
+ SQL Server 2019，所有版本
+ SQL Server 2017，所有版本

以下 Teradata 数据库版本支持与 RDS for SQL Server 进行链接
+ Teradata 17.20，所有版本

## 限制和建议
<a name="USER_SQLServerTeradata.LimitsandRecommendations"></a>

以下限制适用于面向 Teradata ODBC 的链接服务器：
+ RDS for SQL Server 仅支持针对 Teradata 源使用用户名和密码进行简单身份验证。
+ RDS for SQL Server 仅支持 Teradata ODBC 驱动程序版本 17.20.0.33。
+ RDS for SQL Server 不支持创建用作连接字符串的快捷方式的数据来源名称（DSN）。
+ RDS for SQL Server 不支持 ODBC 驱动程序跟踪。使用 SQL Server 扩展事件来跟踪 ODBC 事件。有关更多信息，请参阅[在 RDS for SQL Server 中设置扩展事件](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)。
+ 使用 SQL Server Management Studio（SSMS）时，RDS for SQL Server 不支持访问 Teradata 链接服务器的目录文件夹。

将链接服务器与 Teradata ODBC 结合使用时，请考虑以下建议：
+ 通过在每个 RDS for SQL Server 数据库实例的安全组中添加适用的 TCP 端口来允许网络流量。如果您在 EC2 Teradata 数据库实例和 RDS for SQL Server 数据库实例之间配置链接服务器，则必须支持来自 EC2 Teradata 数据库实例的 IP 地址的流量。您还必须支持 RDS for SQL Server 数据库实例用于侦听数据库通信的端口上的流量。有关安全组的更多信息，请参阅[使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。
+ 支持分布式事务（XA）。要激活分布式事务，请为您的数据库实例开启选项组中的 `MSDTC` 选项，并确保 XA 事务处于开启状态。有关更多信息，请参阅 [RDS for SQL Server 中的 Microsoft 分布式事务处理协调器支持](Appendix.SQLServer.Options.MSDTC.md)。
+ 只要在 Teradata 服务器上进行了配置，链接的 Teradata ODBC 就支持 SSL/TLS。有关更多信息，请参阅 [Enable TLS Connectivity on Teradata Vantage](https://docs.teradata.com/r/Enterprise_IntelliFlex_Lake_VMware/Teradata-Call-Level-Interface-Version-2-Reference-for-Workstation-Attached-Systems-20.00/Mainframe-TLS-Connectivity-Supplement/Enable-TLS-Connectivity-on-Teradata-Vantage)。

## 多可用区部署的注意事项
<a name="USER_SQLServerTeradata.MultiAZ"></a>

RDS for SQL Server 目前不在多可用区部署中将链接服务器复制到镜像的数据库服务器（或 Always-On 可用性组辅助服务器）。如果在更改配置以添加镜像或 Always-On 之前添加了链接服务器，则会为现有的链接服务器复制这些链接服务器。

或者，您可以在主实例上创建链接服务器，失效转移到高可用性服务器实例，然后再次创建链接服务器，使它们位于这两个 RDS for SQL Server 实例上。

# 激活适用于 Teradata 的链接服务器
<a name="USER_SQLServerTeradata.Activate"></a>

通过在 RDS for SQL Server 数据库实例中添加 `ODBC_TERADATA` 选项，激活适用于 Teradata 的链接服务器。使用以下过程：

**Topics**
+ [为 `ODBC_TERADATA` 创建选项组](#USER_SQLServerTeradata.Activate.CreateOG)
+ [将 `ODBC_TERADATA` 选项添加到选项组](#USER_SQLServerTeradata.Activate.AddOG)
+ [将 `ODBC_TERADATA` 选项与数据库实例关联](#USER_SQLServerTeradata.Activate.AssociateOG)

## 为 `ODBC_TERADATA` 创建选项组
<a name="USER_SQLServerTeradata.Activate.CreateOG"></a>

要使用适用于 Teradata 的链接服务器，请创建或修改与您计划使用的 SQL Server 版本和数据库实例版本对应的选项组。要完成此过程，请使用 AWS 管理控制台或 AWS CLI。

### 控制台
<a name="USER_SQLServerTeradata.Activate.CreateOG.Console"></a>

使用以下过程创建适用于 SQL Server 标准版 2019 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建群组**。

1. 在**创建选项组**窗口中，执行以下操作：

   1. 对于 **Name**（名称），输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 `teradata-odbc-se-2019`。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于 **Major engine version**（主引擎版本），选择 **15.00**。

1. 选择**创建**。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.CreateOG.CLI"></a>

以下过程创建适用于 SQL Server 标准版 2019 的选项组。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds create-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --engine-name sqlserver-se \
    --major-engine-version 15.00 \
    --option-group-description "ODBC_TERADATA option group for SQL Server SE 2019"
```

**Example**  
对于 Windows：  

```
aws rds create-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --engine-name sqlserver-se ^
    --major-engine-version 15.00 ^
    --option-group-description "ODBC_TERADATA option group for SQL Server SE 2019"
```

## 将 `ODBC_TERADATA` 选项添加到选项组
<a name="USER_SQLServerTeradata.Activate.AddOG"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `ODBC_Teradata` 选项添加到您的选项组。

### 控制台
<a name="USER_SQLServerTeradata.Activate.AddOG.Console"></a>

使用以下过程创建适用于 SQL Server 标准版 2019 的选项组。

**添加 `ODBC_TERADATA` 选项。**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择您的新选项组。

1. 选择**添加选项**。

1. 在**选项详细信息**下：

   1. 对于**选项名称**，选择 **ODBC\$1TERADATA**。

   1. 对于**选项版本**，选择 `17.20.33.00`。

1. 在“计划”下，选择是立即添加选项，还是在下一个维护时段添加选项。

1. 选择**添加选项**。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.AddOG.CLI"></a>

以下过程将 `ODBC_TERADATA` 选项添加到您的选项组。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds add-option-to-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --options "OptionName=ODBC_TERADATA,OptionVersion=17.20.33.00" \
    --apply-immediately
```

**Example**  
对于 Windows：  

```
aws rds add-option-to-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --options "OptionName=ODBC_TERADATA,OptionVersion=17.20.33.00" ^
    --apply-immediately
```

## 将 `ODBC_TERADATA` 选项与数据库实例关联
<a name="USER_SQLServerTeradata.Activate.AssociateOG"></a>

要将 `ODBC_TERADATA` 选项组与数据库实例关联，请使用 AWS 管理控制台或 AWS CLI。

### 控制台
<a name="USER_SQLServerTeradata.Activate.AssociateOG.Console"></a>

要完成激活适用于 Teradata 的链接服务器，请将选项组与新的或现有的数据库实例关联：
+ 对于新的数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.AssociateOG.CLI"></a>

指定创建选项组时使用的相同数据库引擎类型和主要版本。

对于 Linux、macOS 或 Unix：

```
aws rds create-db-instance \
    --db-instance-identifier mytestsqlserverteradataodbcinstance \
    --db-instance-class db.m5.2xlarge \
    --engine sqlserver-se \
    --engine-version 15.00 \
    --license-model license-included \
    --allocated-storage 100 \
    --master-username admin \
    --master-user-password password \
    --storage-type gp2 \
    --option-group-name teradata-odbc-se-2019
```

对于 Windows：

```
aws rds create-db-instance ^
    --db-instance-identifier mytestsqlserverteradataodbcinstance ^
    --db-instance-class db.m5.2xlarge ^
    --engine sqlserver-se ^
    --engine-version 15.00 ^
    --license-model license-included ^ 
    --allocated-storage 100 ^
    --master-username admin ^
    --master-user-password password ^
    --storage-type gp2 ^
    --option-group-name teradata-odbc-se-2019
```

修改实例并关联新的选项组：

对于 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier mytestsqlserverteradataodbcinstance \
    --option-group-name teradata-odbc-se-2019 \
    --apply-immediately
```

对于 Windows：

```
aws rds modify-db-instance ^
    --db-instance-identifier mytestsqlserverteradataodbcinstance ^
    --option-group-name teradata-odbc-se-2019 ^
    --apply-immediately
```

# 创建适用于 Teradata 的链接服务器
<a name="USER_SQLServerTeradata.CreateLinkedServers"></a>

要创建适用于 Teradata 的链接服务器，请运行以下命令：

```
EXECUTE master.dbo.sp_addlinkedserver 
    @server = N'LinkedServer_NAME', 
    @srvproduct=N'', 
    @provider=N'MSDASQL', 
    @provstr=N'"PROVIDER=MSDASQL;DRIVER={Teradata Database ODBC Driver 17.20};
                DBCName=Server;UID=user_name;PWD=user_password;
                UseDataEncryption=YES/NO;SSLMODE=PREFER/ALLOW/DISABLE>;"', 
    @catalog='database'
```

```
EXECUTE master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname = N'LinkedServer_NAME', 
    @locallogin = NULL , 
    @useself = N'False', 
    @rmtuser = N'user_name', 
    @rmtpassword = N'user_password'
```

上面的命令示例如下所示：

```
EXECUTE master.dbo.sp_addlinkedserver 
    @server = N'LinkedServerToTeradata', 
    @srvproduct=N'', 
    @provider=N'MSDASQL', 
    @provstr=N'"PROVIDER=MSDASQL;DRIVER={Teradata Database ODBC Driver 17.20};
                DBCName=my-teradata-test.cnetsipka.us-west-2.rds.amazonaws.com;
                UID=master;
                PWD=Test#1234;
                UseDataEncryption=YES;
                SSLMODE=PREFER;"', 
    @catalog='MyTestTeradataDB'

EXECUTE master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname = N'LinkedServerToTeradata', 
    @locallogin = NULL , 
    @useself = N'False', 
    @rmtuser = N'master', 
    @rmtpassword = N'Test#1234'
```

**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

# 停用链接到 Teradata 的服务器
<a name="USER_SQLServerTeradata.Deactivate"></a>

要停用到 Teradata 的链接服务器，请从其选项组中移除 `ODBC_TERADATA` 选项。

**重要**  
删除此选项不会删除数据库实例上的链接服务器配置。您必须手动删除它们，才能将其从数据库实例中删除。  
移除后，您可以重新激活 `ODBC_TERADATA`，以重用先前在数据库实例上配置的链接服务器配置。

## 控制台
<a name="USER_SQLServerTeradata.Deactivate.Console"></a>

从选项组中移除 `ODBC_TERADATA` 选项

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `ODBC_TERADATA` 选项的选项组。

1. 选择**删除**。

1. 在**删除选项**下，在**待删除的选项**下选择 `ODBC_TERADATA`。

1. 在 **Apply immediately**（立即应用）下，选择 **Yes**（是）可立即删除选项，选择 **No**（否）可在下一个维护时段删除它。

1. 选择**删除**。

## AWS CLI
<a name="USER_SQLServerTeradata.Deactivate.CLI"></a>

以下命令移除 `ODBC_TERADATA` 选项。

对于 Linux、macOS 或 Unix：

```
aws rds remove-option-from-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --options ODBC_TERADATA \
    --apply-immediately
```

对于 Windows：

```
aws rds remove-option-from-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --options ODBC_TERADATA ^
    --apply-immediately
```

# SQL Server 中对本机备份和还原的支持
<a name="Appendix.SQLServer.Options.BackupRestore"></a>

通过在 SQL Server 数据库中使用本机备份和还原，您可以创建本地数据库的差异备份或完整备份，并将备份文件存储在 Amazon S3 上。然后您可以将其恢复到运行 SQL Server 的现有 Amazon RDS 数据库实例。您也可以备份 RDS for SQL Server 数据库，将其存储在 Amazon S3 中，然后在其他位置恢复它。此外，您还可以将备份还原到本地服务器或运行 SQL Server 的不同 Amazon RDS 数据库实例。有关更多信息，请参阅“[使用本机备份和还原导入和导出 SQL Server 数据库](SQLServer.Procedural.Importing.md)”。

Amazon RDS 支持使用差异备份或完整备份文件（.bak 文件）对 Microsoft SQL Server 数据库进行本机备份和还原。

## 添加本机备份和还原选项
<a name="Appendix.SQLServer.Options.BackupRestore.Add"></a>

将本机备份和还原选项添加到数据库实例的一般过程如下所示：

1. 创建新的选项组，或者复制或修改现有选项组。

1. 将 `SQLSERVER_BACKUP_RESTORE` 选项添加到该选项组。

1. 将一个 AWS Identity and Access Management (IAM) 角色与该选项相关联。该 IAM 角色必须有权访问 S3 存储桶以存储数据库备份。

   也就是说，该选项必须将使用 `arn:aws:iam::account-id:role/role-name` 格式的有效 Amazon Resource Name (ARN) 作为其选项设置。有关更多信息，请参阅《AWS 一般参考》**中的 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)。

   IAM 角色还必须有信任关系和附加的权限策略。信任关系允许 RDS 代入角色，权限策略定义了角色可以执行的操作。有关更多信息，请参阅“[为本机备份和还原手动创建 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)”。

1. 将选项组与数据库实例相关联。

在添加本机备份和还原选项后，您无需重新启动数据库实例。一旦激活此选项组，您就可以立即开始备份和还原。

### 控制台
<a name="Add.Native.Backup.Restore.Console"></a>

**添加本机备份和还原选项**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 创建新的选项组或使用现有的选项组。有关如何创建自定义数据库选项组的信息，请参阅[创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

   要使用现有的选项组，请跳到下一步。

1. 将 **SQLSERVER\$1BACKUP\$1RESTORE** 选项添加到选项组中。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 请执行下列操作之一：
   + 要使用现有的 IAM 角色和 Amazon S3 设置，请为 **IAM 角色**选择一个现有的 IAM 角色。如果使用现有的 IAM 角色，则 RDS 使用为该角色配置的 Amazon S3 设置。
   + 要创建新的角色并配置 Amazon S3 设置，请执行以下操作：

     1. 对于 **IAM Role (IAM 角色)**，选择 **Create a new role (创建新角色)**。

     1. 对于 **S3 bucket**（S3 存储桶），请从列表中选择一个 S3 存储桶。

     1. 对于 **S3 prefix (optional)**（S3 前缀（可选）），请指定要用于 Amazon S3 存储桶中存储的文件的前缀。

        该前缀可以包含文件路径，但不是必需的。如果提供一个前缀，则 RDS 将该前缀附加到所有备份文件。然后，RDS 在还原期间使用该前缀识别相关的文件，并忽略不相关的文件。例如，除了保存备份文件以外，您还可以将 S3 存储桶用于其他用途。在这种情况下，您可以使用前缀让 RDS 仅在特定文件夹及其子文件夹上执行本机备份和还原。

        如果将前缀保留空白，则 RDS 不会使用前缀标识备份文件或要还原的文件。因此，在多文件还原期间，RDS 尝试还原 S3 存储桶的每个文件夹中的每个文件。

     1. 选择 **Enable encryption**（启用加密）复选框以加密备份文件。保持清除该复选框（原定设置）以使备份文件保持不加密状态。

        如果你选择了 **Enable encryption**（启用加密），请为 **AWS KMS key** 选择一个加密密钥。有关加密密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[入门](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)。

1. 选择**添加选项**。

1. 将选项组应用到新的或现有的数据库实例：
   + 对于新数据库实例，请在启动实例时应用选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
   + 对于现有数据库实例，请修改实例并附加新的选项组以应用选项组。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### CLI
<a name="Add.Native.Backup.Restore.CLI"></a>

此过程作出以下假设：
+ 您正在将 SQLSERVER\$1BACKUP\$1RESTORE 选项添加到已存在的选项组。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。
+ 您正在将选项与已存在且有权访问 S3 存储桶以存储备份的 IAM 角色关联。
+ 您正在将选项组应用于已存在的数据库实例。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

**添加本机备份和还原选项**

1. 将 `SQLSERVER_BACKUP_RESTORE` 选项添加到该选项组。  
**Example**  

   对于 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
   	--apply-immediately \
   	--option-group-name mybackupgroup \
   	--options "OptionName=SQLSERVER_BACKUP_RESTORE, \
   	  OptionSettings=[{Name=IAM_ROLE_ARN,Value=arn:aws:iam::account-id:role/role-name}]"
   ```

   对于 Windows：

   ```
   aws rds add-option-to-option-group ^
   	--option-group-name mybackupgroup ^
   	--options "[{\"OptionName\": \"SQLSERVER_BACKUP_RESTORE\", ^
   	\"OptionSettings\": [{\"Name\": \"IAM_ROLE_ARN\", ^
   	\"Value\": \"arn:aws:iam::account-id:role/role-name"}]}]" ^
   	--apply-immediately
   ```
**注意**  
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

1. 将选项组应用于数据库实例。  
**Example**  

   对于 Linux、macOS 或 Unix：

   ```
   aws rds modify-db-instance \
   	--db-instance-identifier mydbinstance \
   	--option-group-name mybackupgroup \
   	--apply-immediately
   ```

   对于 Windows：

   ```
   aws rds modify-db-instance ^
   	--db-instance-identifier mydbinstance ^
   	--option-group-name mybackupgroup ^
   	--apply-immediately
   ```

## 修改本机备份和还原选项设置
<a name="Appendix.SQLServer.Options.BackupRestore.ModifySettings"></a>

在启用本机备份和还原选项后，您可以修改该选项的设置。有关如何修改选项设置的更多信息，请参阅 [修改选项设置](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

## 删除本机备份和还原选项
<a name="Appendix.SQLServer.Options.BackupRestore.Remove"></a>

您可以从数据库实例中删除该选项以禁用本机备份和还原。在删除本机备份和还原选项后，您无需重新启动数据库实例。

要从数据库实例中删除本机备份和还原选项，请执行以下操作之一：
+ 从 选项所属的选项组中删除该选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息，请参阅“[从选项组中删除选项](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)”。
+ 修改数据库实例，并指定不包含本机备份和还原选项的不同选项组。此更改会影响单个数据库实例。您可以指定默认 (空) 选项组，或指定其他自定义选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

# SQL Server 中的透明数据加密支持
<a name="Appendix.SQLServer.Options.TDE"></a>

Amazon RDS 支持使用透明数据加密 (TDE) 来加密运行 Microsoft SQL Server 的数据库实例中存储的数据。TDE 会在数据写入存储前自动加密这些数据，并在从存储中读取时自动解密这些数据。

Amazon RDS 支持在以下 SQL Server 版本中使用 TDE：
+ SQL Server 2022 标准版和企业版
+ SQL Server 2019 标准版和企业版
+ SQL Server 2017 企业版
+ SQL Server 2016 企业版

**注意**  
RDS for SQL Server 不支持只读数据库的 TDE。

适用于 SQL Server 的透明数据加密使用双层密钥体系结构提供加密密钥管理。系统会从数据库主密钥中生成证书，用于保护数据加密密钥。数据库加密密钥对用户数据库上的数据执行实际的加密与解密操作。Amazon RDS 备份和管理数据库主密钥和 TDE 证书。

透明数据加密在您需要加密敏感数据的场景中使用。例如，您可能想要将数据文件和备份提供给第三方，或者想要解决有关安全的合规性问题。您不能加密 SQL Server 的系统数据库，例如 `model` 数据库或 `master` 数据库。

详细讨论透明数据加密超出了本指南的范围，但确保您了解每个加密算法和密钥的安全优缺点。有关适用于 SQL Server 的透明数据加密的信息，请参阅 Microsoft 文档中的[透明数据加密 (TDE)](http://msdn.microsoft.com/en-us/library/bb934049.aspx)。

**Topics**
+ [为 RDS for SQL Server 开启 TDE](#TDE.Enabling)
+ [在 RDS for SQL Server 上加密数据](TDE.Encrypting.md)
+ [在 RDS for SQL Server 上备份和还原 TDE 证书](TDE.BackupRestoreRDS.md)
+ [备份和还原本地数据库的 TDE 证书](TDE.BackupRestoreOnPrem.md)
+ [为 RDS for SQL Server 关闭 TDE](TDE.Disabling.md)

## 为 RDS for SQL Server 开启 TDE
<a name="TDE.Enabling"></a>

要为 RDS for SQL Server 数据库实例开启透明数据加密，请在与该数据库实例关联的 RDS 选项组中指定 TDE 选项。

1. 确定您的数据库实例是否已与具有 TDE 选项的选项组关联。要查看与数据库实例关联的选项组，请使用 RDS 控制台、AWS CLI 命令 [describe-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 或 API 操作 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html)。

1.  如果数据库实例未与已开启 TDE 的选项组关联，则您有两个选择。您可以创建选项组并添加 TDE 选项，或您可以修改关联选项组以添加它。
**注意**  
在 RDS 控制台中，该选项名为 `TRANSPARENT_DATA_ENCRYPTION`。在 AWS CLI 和 RDS API 中，它名为 `TDE`。

   有关创建或者修改选项组的信息，请参阅 [使用选项组](USER_WorkingWithOptionGroups.md)。有关向选项组添加选项的信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1.  将数据库实例与具有 TDE 选项的选项组相关联。有关将数据库实例与选项组关联的信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### 选项组注意事项
<a name="TDE.Options"></a>

TDE 选项是一种持久性选项。除非所有数据库实例和备份都不再与选项组关联，否则无法将此选项从选项组中删除。将 TDE 选项添加到选项组之后，该选项组只能与使用 TDE 的数据库实例关联。有关选项组中持久性选项的详细信息，请参阅[选项组概述](USER_WorkingWithOptionGroups.md#Overview.OptionGroups)。

由于 TDE 选项是一个持久性选项，因此在选项组与关联的数据库实例之间可能发生冲突。在以下情况下，可能会发生冲突：
+ 当前选项组具有 TDE 选项，而您将它替换为没有 TDE 选项的选项组。
+ 从数据库快照还原到新的数据库实例，但该实例不具有包含 TDE 选项的选项组。有关此方案的更多信息，请参阅[选项组的注意事项](USER_CopySnapshot.md#USER_CopySnapshot.Options)。

### SQL Server 性能注意事项
<a name="TDE.Perf"></a>

使用透明数据加密可能会影响 SQL Server 数据库实例的性能。

如果数据库实例上的数据库拥有至少一个加密的数据库，那么，也可能会降低未加密数据库的性能。因此，我们建议您将加密数据库和未加密数据库保存在不同的数据库实例上。

# 在 RDS for SQL Server 上加密数据
<a name="TDE.Encrypting"></a>

将 TDE 选项添加到选项组后，Amazon RDS 将生成在加密过程中使用的证书。然后，您就可以使用该证书运行为数据库实例上的数据库加密数据的 SQL 语句。

下例使用 RDS 创建的、名为 `RDSTDECertificateName` 的证书加密名为 `myDatabase` 的数据库。

```
 1. ---------- Turning on TDE -------------
 2. 
 3. -- Find an RDS TDE certificate to use
 4. USE [master]
 5. GO
 6. SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%'
 7. GO
 8. 
 9. USE [myDatabase]
10. GO
11. -- Create a database encryption key (DEK) using one of the certificates from the previous step
12. CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
13. ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName]
14. GO
15. 
16. -- Turn on encryption for the database
17. ALTER DATABASE [myDatabase] SET ENCRYPTION ON
18. GO
19. 
20. -- Verify that the database is encrypted
21. USE [master]
22. GO
23. SELECT name FROM sys.databases WHERE is_encrypted = 1
24. GO
25. SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys
26. GO
```

使用 TDE 加密 SQL Server 数据库所花的时间取决于几个因素。其中包括数据库实例的大小、实例是否使用预调配 IOPS、数据量及其他因素。

# 在 RDS for SQL Server 上备份和还原 TDE 证书
<a name="TDE.BackupRestoreRDS"></a>

RDS for SQL Server 提供了用于备份、还原和删除 TDE 证书的存储过程。RDS for SQL Server 还提供了用于查看已还原的用户 TDE 证书的功能。

用户 TDE 证书用于将数据库还原到 RDS for SQL Server，这些数据库位于本地并已开启 TDE。这些证书具有前缀 `UserTDECertificate_`。还原数据库之后，在使其可供使用之前，RDS 会修改已开启 TDE 的数据库以使用 RDS 生成的 TDE 证书。这些证书具有前缀 `RDSTDECertificate`。

用户 TDE 证书保留在 RDS for SQL Server 数据库实例上，除非您使用 `rds_drop_tde_certificate` 存储过程删除它们。有关更多信息，请参阅 [删除还原的 TDE 证书](#TDE.BackupRestoreRDS.Drop)。

您可以使用用户 TDE 证书从源数据库实例还原其他数据库。要还原的数据库必须使用相同的 TDE 证书并开启 TDE。您不必再次导入（还原）同一证书。

**Topics**
+ [先决条件](#TDE.BackupRestoreRDS.Prereqs)
+ [限制](#TDE.Limitations)
+ [备份 TDE 证书](#TDE.BackupRestoreRDS.Backup)
+ [还原 TDE 证书](#TDE.BackupRestoreRDS.Restore)
+ [查看还原的 TDE 证书](#TDE.BackupRestoreRDS.Show)
+ [删除还原的 TDE 证书](#TDE.BackupRestoreRDS.Drop)

## 先决条件
<a name="TDE.BackupRestoreRDS.Prereqs"></a>

在 RDS for SQL Server 上备份或还原 TDE 证书之前，请确保执行以下任务。[针对本机备份和还原进行设置](SQLServer.Procedural.Importing.Native.Enabling.md)中介绍了前三个任务。

1. 创建 Amazon S3 通用型存储桶或目录存储桶，以存储要备份和还原的文件。

   我们建议您使用单独的桶进行数据库备份和 TDE 证书备份。

1. 创建用于备份和还原文件的 IAM 角色。

   IAM 角色必须既是 AWS KMS key 的用户又是其管理员。

   使用目录存储桶时，除了针对目录存储桶[为本机备份和还原手动创建 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)所需的权限外，不需要其他权限。

   在使用 S3 资源时，除了[为本机备份和还原手动创建 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)所需的权限外，IAM 角色还需要以下权限：
   + 针对 S3 桶资源的 `s3:GetBucketAcl`、`s3:GetBucketLocation` 和 `s3:ListBucket`

1. 将 `SQLSERVER_BACKUP_RESTORE` 选项添加到数据库实例上的选项组。

   这是对 `TRANSPARENT_DATA_ENCRYPTION` (`TDE`) 选项的补充。

1. 请确保您有对称的加密 KMS 密钥。您有以下选项：
   + 如果您的账户中有现有的 KMS 密钥，则可以使用它。无需进一步操作。
   + 如果您的账户中没有对称的加密 KMS 密钥，请按照《AWS Key Management Service 开发人员指南》**中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)部分的说明创建一个 KMS 密钥。

1. 启用 Amazon S3 集成以在数据库实例和 Amazon S3 之间传输文件。

   有关启用 Amazon S3 集成的更多信息，请参阅[将 Amazon RDS for SQL Server 数据库实例与 Amazon S3 集成](User.SQLServer.Options.S3-integration.md)。

   请注意，S3 集成不支持目录存储桶。此步骤仅对于[备份和还原本地数据库的 TDE 证书](TDE.BackupRestoreOnPrem.md)是必需的。

## 限制
<a name="TDE.Limitations"></a>

使用存储过程备份和还原 TDE 证书具有以下限制：
+ 必须将 `SQLSERVER_BACKUP_RESTORE` 和 `TRANSPARENT_DATA_ENCRYPTION` (`TDE`) 这两个选项添加到与数据库实例关联的数据库选项组。
+ 多可用区数据库实例不支持 TDE 证书备份和还原。
+ 不支持取消 TDE 证书备份和还原任务。
+ 您不能使用用户 TDE 证书对 RDS for SQL Server 数据库实例上的任何其他数据库进行 TDE 加密。您可以使用它从源数据库实例中仅还原已启用 TDE 并且使用相同 TDE 证书的其他数据库。
+ 您只能删除用户 TDE 证书。
+ RDS 上支持的最大用户 TDE 证书数量为 10 个。如果此数字超过 10，请删除未使用的 TDE 证书，然后重试。
+ 证书名称不能为空或为 null。
+ 还原证书时，证书名称不能包含 `RDSTDECERTIFICATE` 关键字，并且必须以 `UserTDECertificate_` 前缀开头。
+ `@certificate_name` 参数只能包含以下字符：a-z、0-9、@、\$1、\$1 和下划线 (\$1)。
+ `@certificate_file_s3_arn` 的文件扩展名必须为 .cer（不区分大小写）。
+ `@private_key_file_s3_arn` 的文件扩展名必须为 .pvk（不区分大小写）。
+ 私有密钥文件的 S3 元数据必须包括 `x-amz-meta-rds-tde-pwd` 标签。有关更多信息，请参阅 [备份和还原本地数据库的 TDE 证书](TDE.BackupRestoreOnPrem.md)。
+ RDS for SQL Server 不支持在 TDE 中使用跨账户密钥。

## 备份 TDE 证书
<a name="TDE.BackupRestoreRDS.Backup"></a>

要备份 TDE 证书，请使用 `rds_backup_tde_certificate` 存储过程。它具有以下语法。

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name | RDSTDECertificatetimestamp',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id',
    [@overwrite_s3_files=0|1];
```

以下参数为必需参数：
+ `@certificate_name` – 要备份的 TDE 证书的名称。
+ `@certificate_file_s3_arn` – Amazon S3 中证书备份文件的目标 Amazon 资源名称 (ARN)。
+ `@private_key_file_s3_arn` – 保护 TDE 证书的私有密钥文件的目标 S3 ARN。
+ `@kms_password_key_arn` – 用于加密私有密钥密码的对称 KMS 密钥的 ARN。

以下参数为可选参数：
+ `@overwrite_s3_files` – 指示是否覆盖 S3 中的现有证书和私有密钥文件：
  + `0` – 不覆盖现有文件。此值是默认值。

    如果文件已存在，则将 `@overwrite_s3_files` 设置为 0 会返回错误。
  + `1` – 覆盖具有指定名称的现有文件，即使该文件不是备份文件也是如此。

**Example 备份 TDE 证书**  

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='RDSTDECertificate20211115T185333',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE',
    @overwrite_s3_files=1;
```

## 还原 TDE 证书
<a name="TDE.BackupRestoreRDS.Restore"></a>

可以使用 `rds_restore_tde_certificate` 存储过程来还原（导入）用户 TDE 证书。它具有以下语法。

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id';
```

以下参数为必需参数：
+ `@certificate_name` –要还原的 TDE 证书的名称。名称必须以 `UserTDECertificate_` 前缀开头。
+ `@certificate_file_s3_arn` – 用于还原 TDE 证书的备份文件的 S3 ARN。
+ `@private_key_file_s3_arn` – 要还原的 TDE 证书的私有密钥备份文件的 S3 ARN。
+ `@kms_password_key_arn` – 用于加密私有密钥密码的对称 KMS 密钥的 ARN。

**Example 还原 TDE 证书**  

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_myTDEcertificate',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

## 查看还原的 TDE 证书
<a name="TDE.BackupRestoreRDS.Show"></a>

可以使用 `rds_fn_list_user_tde_certificates` 函数来查看已还原（导入）的用户 TDE 证书。它具有以下语法。

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

输出与以下内容类似。此处并未显示所有列。


|  |  |  |  |  |  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |--- |--- |
| name | certificate\$1id | principal\$1id | pvt\$1key\$1encryption\$1type\$1desc | issuer\$1name | cert\$1serial\$1number | thumbprint | subject | start\$1date | expiry\$1date | pvt\$1key\$1last\$1backup\$1date | 
| UserTDECertificate\$1tde\$1cert | 343 | 1 | ENCRYPTED\$1BY\$1MASTER\$1KEY | AnyCompany Shipping | 79 3e 57 a3 69 fd 1d 9e 47 2c 32 67 1d 9c ca af | 0x6BB218B34110388680B FE1BA2D86C695096485B5 | AnyCompany Shipping | 2022-04-05 19:49:45.0000000 | 2023-04-05 19:49:45.0000000 | NULL | 

## 删除还原的 TDE 证书
<a name="TDE.BackupRestoreRDS.Drop"></a>

要删除您未使用的已还原（导入）的用户 TDE 证书，请使用 `rds_drop_tde_certificate` 存储过程。它具有以下语法。

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';
```

以下参数是必需参数：
+ `@certificate_name` – 要删除的 TDE 证书的名称。

您只能删除已还原（导入）的 TDE 证书。您不能删除 RDS 创建的证书。

**Example 删除 TDE 证书**  

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate';
```

# 备份和还原本地数据库的 TDE 证书
<a name="TDE.BackupRestoreOnPrem"></a>

您可以备份本地数据库的 TDE 证书，然后将其还原到 RDS for SQL Server。您还可以将 RDS for SQL Server TDE 证书还原到本地数据库实例。

**注意**  
RDS for SQL Server 不支持在 TDE 中使用跨账户密钥。

以下过程备份 TDE 证书和私有密钥。私有密钥使用从对称加密 KMS 密钥生成的数据密钥进行加密。

**备份本地 TDE 证书**

1. 使用 AWS CLI 命令 [generate-data-key](https://docs.aws.amazon.com/cli/latest/reference/kms/generate-data-key.html) 生成数据密钥。

   ```
   aws kms generate-data-key \
       --key-id my_KMS_key_ID \
       --key-spec AES_256
   ```

   输出与以下内容类似。

   ```
   {
   "CiphertextBlob": "AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
   BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
   2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==",
   "Plaintext": "U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=",
   "KeyId": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-00ee-99ff-88dd-aa11bb22cc33"
   }
   ```

   您可以在下一步中使用纯文本输出作为私有密钥密码。

1. 备份 TDE 证书，如以下示例所示。

   ```
   BACKUP CERTIFICATE myOnPremTDEcertificate TO FILE = 'D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (
   FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\cert-backup-key.pvk',
   ENCRYPTION BY PASSWORD = 'U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=');
   ```

1. 将证书备份文件保存到 Amazon S3 证书桶。

1. 将私有密钥备份文件保存到 S3 证书桶，并在文件的元数据中使用以下标签：
   + 密钥 – `x-amz-meta-rds-tde-pwd`
   + 值 – `CiphertextBlob` 值来自生成数据密钥过程，如以下示例所示。

     ```
     AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
     BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
     2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==
     ```

以下过程将 RDS for SQL Server TDE 证书还原到本地数据库实例。您可以使用证书备份、相应的私有密钥文件和数据密钥在目标数据库实例上复制和还原 TDE 证书。还原的证书由新服务器的数据库主密钥加密。

**还原 TDE 证书**

1. 将 TDE 证书备份文件和私有密钥文件从 Amazon S3 复制到目标实例。有关从 Amazon S3 中复制文件的更多信息，请参阅[在 RDS for SQL Server 和 Amazon S3 之间传输文件](Appendix.SQLServer.Options.S3-integration.using.md)。

1. 使用 KMS 密钥解密输出密码文本，以检索数据密钥的纯文本。密码文本位于私有密钥备份文件的 S3 元数据中。

   ```
   aws kms decrypt \
       --key-id my_KMS_key_ID \
       --ciphertext-blob fileb://exampleCiphertextFile | base64 -d \
       --output text \
       --query Plaintext
   ```

   您可以在下一步中使用纯文本输出作为私有密钥密码。

1. 使用以下 SQL 命令还原 TDE 证书。

   ```
   CREATE CERTIFICATE myOnPremTDEcertificate FROM FILE='D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (FILE = N'D:\tde-cert-key.pvk',
   DECRYPTION BY PASSWORD = 'plain_text_output');
   ```

有关 KMS 解密的更多信息，请参阅《AWS CLI 命令参考》**的 KMS 部分中的[解密](https://docs.aws.amazon.com/cli/latest/reference/kms/decrypt.html)。

在目标数据库实例上还原 TDE 证书后，您可以使用该证书还原加密的数据库。

**注意**  
您可以使用同一 TDE 证书对源数据库实例上的多个 SQL Server 数据库进行加密。要将多个数据库迁移到目标实例，请将与它们关联的 TDE 证书仅复制到目标实例（仅限一次）。

# 为 RDS for SQL Server 关闭 TDE
<a name="TDE.Disabling"></a>

要为 RDS for SQL Server 数据库实例关闭 TDE，首先应确保数据库实例上没有留下加密的对象。为此，请解密对象或删除它们。如果该数据库实例中存在任何加密的对象，则您不能为该数据库实例关闭 TDE。如果用于加密的用户 TDE 证书已还原（已导入），则应将其删除。当您使用控制台从选项组中删除 TDE 选项时，控制台会指明它正在处理。此外，如果选项组与加密数据库实例或数据库快照关联，则会创建一个错误事件。

下例从名为 `customerDatabase` 的数据库中删除 TDE 加密。

```
 1. ------------- Removing TDE ----------------
 2. 
 3. USE [customerDatabase]
 4. GO
 5. 
 6. -- Turn off encryption of the database
 7. ALTER DATABASE [customerDatabase]
 8. SET ENCRYPTION OFF
 9. GO
10. 
11. -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while
12. SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys
13. GO
14. 
15. -- Drop the DEK used for encryption
16. DROP DATABASE ENCRYPTION KEY
17. GO
18. 
19. -- Drop a user TDE certificate if it was restored (imported)
20. EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';
21. 
22. -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated
23. USE [master]
24. GO
25. ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE
26. GO
```

解密所有对象后，您有两个选项：

1. 您可以修改数据库实例，使其与没有 TDE 选项的选项组关联。

1. 您可以从选项组中删除 TDE 选项。

# SQL Server Audit
<a name="Appendix.SQLServer.Options.Audit"></a>

在 Amazon RDS 中，您可以使用内置 SQL Server 审核机制来审核 Microsoft SQL Server 数据库。您可以按照为本地数据库服务器创建审核和审核规范的相同方式来创建它们。

RDS 使用您提供的 IAM 角色将完成的审核日志上传到 S3 存储桶。如果您启用保留，则 RDS 会在配置的时间段内将您的审核日志保留在您的数据库实例中。

有关更多信息，请参阅 Microsoft SQL Server 文档中的 [SQL Server Audit（数据库引擎）](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)。

## SQL Server 审计与数据库活动流
<a name="Appendix.SQLServer.DAS.Audit"></a>

您可以使用 RDS 的数据库活动流，将 SQL Server 审计事件与 Imperva、McAfee 和 IBM 中的数据库活动监控工具集成。有关使用 RDS SQL Server 的数据库活动流进行审计的详细信息，请参阅[Microsoft SQL Server 中的审计](DBActivityStreams.md#DBActivityStreams.Overview.SQLServer-auditing) 

**Topics**
+ [SQL Server 审计与数据库活动流](#Appendix.SQLServer.DAS.Audit)
+ [SQL Server Audit 支持](#Appendix.SQLServer.Options.Audit.Support)
+ [将 SQL Server Audit 添加到数据库实例选项](Appendix.SQLServer.Options.Audit.Adding.md)
+ [使用 SQL Server Audit](Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications.md)
+ [查看审核日志](Appendix.SQLServer.Options.Audit.AuditRecords.md)
+ [将 SQL Server Audit 与多可用区实例结合使用](#Appendix.SQLServer.Options.Audit.Multi-AZ)
+ [配置 S3 存储桶](Appendix.SQLServer.Options.Audit.S3bucket.md)
+ [手动为 SQL Server Audit 创建 IAM 角色](Appendix.SQLServer.Options.Audit.IAM.md)

## SQL Server Audit 支持
<a name="Appendix.SQLServer.Options.Audit.Support"></a>

在 Amazon RDS 中，从 SQL Server 2016 开始，SQL Server 的所有版本都支持服务器级审计，而企业版还支持数据库级审计。从 SQL Server 2016 (13.x) SP1 开始，所有版本支持服务器级别和数据库级别审核。有关更多信息，请参阅 SQL Server 文档中的 [SQL Server Audit（数据库引擎）](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)。

RDS 支持为 SQL Server Audit 配置以下选项设置。


| 选项设置 | 有效值 | 描述 | 
| --- | --- | --- | 
| IAM\$1ROLE\$1ARN | 采用 arn:aws:iam::account-id:role/role-name 格式的有效 Amazon Resource Name (ARN)。 | IAM 角色的 ARN，该角色对您想要用于存储审核日志的 S3 存储桶授予访问权。有关更多信息，请参阅《AWS 一般参考》中的 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)。 | 
| S3\$1BUCKET\$1ARN | 有效 ARN 为 arn:aws:s3:::amzn-s3-demo-bucket 或 arn:aws:s3:::amzn-s3-demo-bucket/key-prefix 格式 | 您想要用于存储审核日志的 S3 存储桶的 ARN。 | 
| ENABLE\$1COMPRESSION | true 或者 false | 控制审核日志压缩。默认情况下，启用压缩（设置为 true）。 | 
| RETENTION\$1TIME | 0 到 840 | SQL Server 审核记录在您的 RDS 实例上保留的时间（按小时计）。默认情况下，禁用保留。 | 

# 将 SQL Server Audit 添加到数据库实例选项
<a name="Appendix.SQLServer.Options.Audit.Adding"></a>

启用 SQL Server Audit 需要两个步骤：在数据库实例上启用选项，然后在 SQL Server 内启用功能。将 SQL Server Audit 选项添加到数据库实例的流程如下：

1. 创建新的选项组，或者复制或修改现有选项组。

1. 添加和配置所有必需的选项。

1. 将选项组与数据库实例相关联。

添加 SQL Server Audit 选项后，您无需重新启动数据库实例。只要选项组处于活动状态，您就可以创建审核并在 S3 存储桶中存储审核日志。

**若要在数据库实例的选项组中添加和配置 SQL Server Audit**

1. 选择以下选项之一：
   + 使用现有选项组。
   + 创建自定义数据库选项组并使用该选项组。有关更多信息，请参阅“[创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)”。

1. 将 **SQLSERVER\$1AUDIT** 选项添加到选项组，然后配置选项设置。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。
   + 对于 **IAM 角色**，如果已经有具备必需策略的 IAM 角色，则可选择该角色。要创建新的 IAM 角色，请选择**创建新角色**。有关必需策略的信息，请参阅 [手动为 SQL Server Audit 创建 IAM 角色](Appendix.SQLServer.Options.Audit.IAM.md)。
   + 对于**选择 S3 目标**，如果已经有要使用的 S3 存储桶，则可选择该存储桶。要创建 S3 存储桶，请选择 **Create a New S3 Bucket**（创建新的 S3 存储桶）。
   + 对于**启用压缩**，请将此选项保留为选中状态以压缩审核文件。默认情况下，压缩已启用。若要禁用压缩，请取消选中 **Enable Compression (启用压缩)**。
   + 对于**审核日志保留**，如需在数据库实例上保留审核记录，请选择此选项。指定保留时间，按小时计。最长保留时间为 35 天。

1. 将选项组应用到新的或现有的数据库实例。选择以下选项之一：
   + 如果您正在创建新的数据库实例，请在启动实例时应用选项组。
   + 在现有数据库实例上，请通过修改实例并附加新的选项组来应用选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

## 修改 SQL Server Audit 选项
<a name="Appendix.SQLServer.Options.Audit.Modifying"></a>

启用 SQL Server Audit 选项后，您可以修改各项设置。有关如何修改选项设置的信息，请参阅[修改选项设置](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

## 从数据库实例选项中删除 SQL Server Audit
<a name="Appendix.SQLServer.Options.Audit.Removing"></a>

您可以通过禁用审核并删除选项来关闭 SQL Server Audit 功能。

**若要删除审核**

1. 禁用 SQL Server 内的所有审核设置。若要了解审核在何处运行，请查询 SQL Server 安全性目录视图。有关更多信息，请参阅 Microsoft SQL Server 文档中的[安全性目录视图](https://docs.microsoft.com/sql/relational-databases/system-catalog-views/security-catalog-views-transact-sql)。

1. 从数据库实例中删除 SQL Server Audit 选项。选择以下选项之一：
   + 从数据库实例使用的选项组中删除 SQL Server Audit 选项。此更改会影响使用相同选项组的所有数据库实例。有关更多信息，请参阅“[从选项组中删除选项](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)”。
   + 修改数据库实例，然后选择一个没有 SQL Server Audit 选项的选项组。此更改仅影响您修改的数据库实例。您可以指定默认 (空) 选项组，或指定其他自定义选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

1. 从数据库实例中删除 SQL Server Audit 选项之后，不需要重新启动实例。从您的 S3 存储桶中删除不需要的审核文件。

# 使用 SQL Server Audit
<a name="Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications"></a>

您可以按照与控制本地数据库服务器相同的方式控制服务器审核、服务器审核规范和数据库审核规范。

## 创建审核
<a name="Appendix.SQLServer.Options.Audit.CreateAudits"></a>

按照为本地数据库服务器创建服务器审核的相同方式来创建它们。有关如何创建服务器审核的信息，请参阅 Microsoft SQL Server 文档中的[创建服务器审核](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-transact-sql)。

为避免错误，请遵循以下限制：
+ 不要超过每个实例支持的服务器审核最大数目：50。
+ 指示 SQL Server 将数据写入二进制文件。
+ 请勿在服务器审核名称中使用 `RDS_` 作为前缀。
+ 对于 `FILEPATH`，请指定 `D:\rdsdbdata\SQLAudit`。
+ 对于 `MAXSIZE`，请指定 2 MB 至 50 MB 之间的大小。
+ 请勿配置 `MAX_ROLLOVER_FILES` 或 `MAX_FILES`。
+ 请勿将 SQL Server 配置为在数据库实例未能写入审核记录时将其关闭。

## 创建审核规范
<a name="Appendix.SQLServer.Options.Audit.CreateSpecifications"></a>

按照为本地数据库服务器创建服务器审核规范和数据库审核规范相同的方式来创建它们。有关创建审核规范的信息，请参阅 Microsoft SQL Server 文档中的[创建服务器审核规范](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-specification-transact-sql)和[创建数据库审核规范](https://docs.microsoft.com/sql/t-sql/statements/create-database-audit-specification-transact-sql)。

为避免错误，请勿在数据库审核规范或服务器审核规范的名称中使用 `RDS_` 作为前缀。

# 查看审核日志
<a name="Appendix.SQLServer.Options.Audit.AuditRecords"></a>

审核日志存储在 `D:\rdsdbdata\SQLAudit` 中。

SQL Server 完成写入到审核日志文件之后（当文件达到其大小限制时），Amazon RDS 会将文件上传到您的 S3 存储桶。如果启用了保留，Amazon RDS 会将文件移入到保留文件夹：`D:\rdsdbdata\SQLAudit\transmitted`。

有关配置保留的信息，请参阅[将 SQL Server Audit 添加到数据库实例选项](Appendix.SQLServer.Options.Audit.Adding.md)。

在上传审核日志文件之前，审核记录会一直保留在数据库实例上。您可以通过运行以下命令来查看审核记录。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\*.sqlaudit'
	             , default
	             , default )
```

您可以使用相同的命令来查看保留文件夹中的审核记录，只需将筛选条件更改为 `D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit`。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit'
	             , default
	             , default )
```

## 将 SQL Server Audit 与多可用区实例结合使用
<a name="Appendix.SQLServer.Options.Audit.Multi-AZ"></a>

对于多可用区实例，将审核日志文件发送到 Amazon S3 的过程与单可用区实例类似。但是，二者之间存在一些重要区别：
+ 数据库审核规范对象复制到所有节点。
+ 服务器审核和服务审核规范不会复制到辅助节点。相反，您必须手动创建或修改它们。

若要从两个节点捕获服务器审核或服务器审核规范：

1. 在主节点上创建服务器审核或服务器审核规范。

1. 故障转移到辅助节点，并在辅助节点上使用相同名称和 GUID 创建服务器审核或服务器审核规范。使用 `AUDIT_GUID` 参数指定 GUID。

# 配置 S3 存储桶
<a name="Appendix.SQLServer.Options.Audit.S3bucket"></a>

审核日志文件会自动从数据库实例上传到您的 S3 存储桶。以下限制适用于您用作审核文件目标的 S3 存储桶。
+ 它必须与数据库实例位于相同的 AWS 区域和 AWS 账户中。
+ 它不得对公众开放。
+ 存储桶拥有者也必须是 IAM 角色拥有者。
+ IAM 角色必须对与 S3 存储桶服务器端加密关联的客户自主管理型 KMS 密钥拥有权限。

用于存储数据的目标键遵循以下命名模式：`amzn-s3-demo-bucket/key-prefix/instance-name/audit-name/node_file-name.ext`

**注意**  
您使用 (`S3_BUCKET_ARN`) 选项设置来设定存储桶名称和键前缀值。

模式由以下元素组成：
+ ***amzn-s3-demo-bucket*** – S3 存储桶的名称。
+ **`key-prefix`** – 您想要为审核日志使用的自定义键前缀。
+ **`instance-name`** – 您的 Amazon RDS 实例的名称。
+ **`audit-name`** – 审核的名称。
+ **`node`** – 审核日志来源节点（`node1` 或 `node2`）的标识符。单可用区实例有一个节点，多可用区实例有两个复制节点。这些不是主要和辅助节点，因为主要和辅助节点的角色会随时间而变化。相反，节点标识符是一个简单的标签。
  + **`node1`** – 第一个复制节点（单可用区只有一个节点）。
  + **`node2`** – 第二个复制节点（多可用区有两个节点）。
+ **`file-name`** – 目标文件名称。文件名按原样从 SQL Server 获取。
+ **`ext`** – 文件的扩展名（`zip` 或 `sqlaudit`）：
  + **`zip`** – 是否已启用压缩（默认）。
  + **`sqlaudit`** – 是否已禁用压缩。

# 手动为 SQL Server Audit 创建 IAM 角色
<a name="Appendix.SQLServer.Options.Audit.IAM"></a>

通常，当您创建新选项时，AWS 管理控制台会为您创建 IAM 角色和 IAM 信任策略。但是，您可以手动创建与 SQL Server Audit 一起使用的新 IAM 角色，以便您可以根据自己的任何附加需求对其进行定制。为此，创建一个 IAM 角色并委托权限，以便 Amazon RDS 服务可使用您的 Amazon S3 存储桶。创建这个 IAM 角色时，附加信任和权限策略。信任策略允许 Amazon RDS 担任此角色。权限策略定义此角色可以执行的操作。有关更多信息，请参阅 *AWS Identity and Access Management 用户指南*中的[创建角色以向 AWS 服务委托权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

您可以使用本节中的示例来创建所需的信任关系和权限策略。

以下示例显示了 SQL Server Audit 的信任关系。该关系使用*服务主体* `rds.amazonaws.com` 来允许 RDS 写入到 S3 存储桶。*服务委托人*是一个标识符，用于向服务授予权限。任何时候您通过这种方式允许访问 `rds.amazonaws.com`，即表示您允许 RDS 代表您执行操作。有关服务委托人的更多信息，请参阅 [AWS JSON 策略元素：Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

**Example SQL Server Audit 的信任关系**    
****  

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

我们建议在基于资源的信任关系中使用 [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`。

在信任关系中，请务必使用 `aws:SourceArn` 全局条件上下文键和访问角色资源的完整 Amazon Resource Name (ARN)。对于 SQL Server Audit，请确保同时包含数据库选项组和数据库实例，如以下示例所示。

**Example 与 SQL Server Audit 的全局条件上下文键的信任关系**    
****  

```
{
    "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",
                        "arn:aws:rds:Region:my_account_ID:og:option_group_name"
                    ]
                }
            }
        }
    ]
}
```

在以下 SQL Server Audit 权限策略示例中，我们为 Amazon S3 存储桶指定 ARN。您可以使用 ARN 来识别您想要为其授予访问权的特定账户、用户或角色。有关使用 ARN 的更多信息，请参阅 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

**Example SQL Server Audit 的权限策略**    
****  

```
{
	    "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:PutObject",
	                "s3:ListMultipartUploadParts",
	                "s3:AbortMultipartUpload"
	            ],
	            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
	        }
	    ]
	}
```

**注意**  
要验证同一 `s3:ListAllMyBuckets` 账户是否同时拥有 S3 存储桶和 SQL Server 数据库实例，需要执行 AWS 操作。该操作会列出该账户中的存储桶的名称。  
S3 存储桶命名空间是全局的。如果您意外删除了您的存储桶，则另一用户可以在其他账户中创建具有相同名称的存储桶。然后将 SQL Server Audit 数据写入新的存储桶。

# Amazon RDS for SQL Server 中对 SQL Server Analysis Services 的支持
<a name="Appendix.SQLServer.Options.SSAS"></a>

Microsoft SQL Server Analysis Services (SSAS) 属于 Microsoft Business Intelligence (MSBI) 套件。SSAS 是一个在线分析处理 (OLAP) 和数据挖掘工具，安装在 SQL Server 中。您可以使用 SSAS 分析数据来帮助制定业务决策。SSAS 不同于 SQL Server 关系数据库，因为 SSAS 针对商业智能环境中常见的查询和计算进行了优化。

 您可以为现有或新数据库实例启用 SSAS。它安装在与您的数据库引擎相同的数据库实例上。有关 SSAS 的更多信息，请参阅 Microsoft [分析服务文档](https://docs.microsoft.com/en-us/analysis-services)。

Amazon RDS 支持在 SQL Server 标准版和企业版的以下版中使用 SSAS：
+ 表格模式：
  + SQL Server 2019，版本 15.00.4043.16.v1 和更高版本
  + SQL Server 2017，版本 14.00.3223.3.v1 和更高版本
  + SQL Server 2016，版本 13.00.5426.0.v1 和更高版本
+ 多维模式：
  + SQL Server 2019，版本 15.00.4153.1.v1 和更高版本
  + SQL Server 2017，版本 14.00.3381.3.v1 和更高版本
  + SQL Server 2016，版本 13.00.5882.1.v1 和更高版本

**Contents**
+ [限制](#SSAS.Limitations)
+ [启用 SSAS](SSAS.Enabling.md)
  + [为 SSAS 创建选项组](SSAS.Enabling.md#SSAS.OptionGroup)
  + [将 SSAS 选项添加到选项组](SSAS.Enabling.md#SSAS.Add)
  + [将选项组与数据库实例关联](SSAS.Enabling.md#SSAS.Apply)
  + [允许对 VPC 安全组的入站访问](SSAS.Enabling.md#SSAS.InboundRule)
  + [启用 Amazon S3 集成](SSAS.Enabling.md#SSAS.EnableS3)
+ [在 Amazon RDS 上部署 SSAS 项目](SSAS.Deploy.md)
+ [监控部署任务的状态](SSAS.Monitor.md)
+ [在 Amazon RDS 上使用 SSAS](SSAS.Use.md)
  + [为 SSAS 设置经 Windows 身份验证的用户](SSAS.Use.md#SSAS.Use.Auth)
  + [添加域用户作为数据库管理员](SSAS.Use.md#SSAS.Admin)
  + [创建 SSAS 代理](SSAS.Use.md#SSAS.Use.Proxy)
  + [使用 SQL Server Agent 安排 SSAS 数据库处理](SSAS.Use.md#SSAS.Use.Schedule)
  + [从代理撤消 SSAS 访问权限](SSAS.Use.md#SSAS.Use.Revoke)
+ [备份 SSAS 数据库](SSAS.Backup.md)
+ [还原 SSAS 数据库](SSAS.Restore.md)
  + [将数据库实例还原到指定时间](SSAS.Restore.md#SSAS.PITR)
+ [更改 SSAS 模式](SSAS.ChangeMode.md)
+ [禁用 SSAS](SSAS.Disable.md)
+ [解决 SSAS 问题](SSAS.Trouble.md)

## 限制
<a name="SSAS.Limitations"></a>

以下限制适用于在 RDS for SQL Server 上使用 SSAS：
+ RDS for SQL Server 支持在表格模式或多维模式下运行 SSAS。有关更多信息，请参阅 Microsoft 文档中的[比较表格和多维解决方案](https://docs.microsoft.com/en-us/analysis-services/comparing-tabular-and-multidimensional-solutions-ssas)。
+ 一次只能使用一个 SSAS 模式。在更改模式之前，请确保删除所有 SSAS 数据库。

  有关更多信息，请参阅 [更改 SSAS 模式](SSAS.ChangeMode.md)。
+ 不支持多可用区实例。
+ 实例必须使用自行管理的 Active Directory 或 AWS Directory Service for Microsoft Active Directory 才能进行 SSAS 身份验证。有关更多信息，请参阅 [将 Active Directory 用于 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。
+ 用户不会被授予 SSAS 服务器管理员访问权限，但可以向他们授予数据库级管理员访问权限。
+ 唯一支持访问 SSAS 的端口是 2383。
+ 您不能直接部署项目。我们提供 RDS 存储过程来执行部署。有关更多信息，请参阅“[在 Amazon RDS 上部署 SSAS 项目](SSAS.Deploy.md)”。
+ 部署期间不支持进行处理。
+ 不支持使用 .xmla 文件进行部署。
+ SSAS 项目输入文件和数据库备份输出文件只能位于数据库实例的 `D:\S3` 文件夹中。

# 启用 SSAS
<a name="SSAS.Enabling"></a>

使用以下过程为数据库实例启用 SSAS：

1. 创建新的选项组或选择现有的选项组。

1. 将 `SSAS` 选项添加到该选项组。

1. 将选项组与数据库实例相关联。

1. 允许对 SSAS 侦听器端口的 Virtual Private Cloud (VPC) 安全组进行入站访问。

1. 启用 Amazon S3 集成。

## 为 SSAS 创建选项组
<a name="SSAS.OptionGroup"></a>

使用 AWS 管理控制台 或 AWS CLI 创建对应于计划使用的 SQL Server 引擎和数据库实例版本的选项组。

**注意**  
如果现有选项组针对的是正确的 SQL Server 引擎和版本，也可以使用现有选项组。

### 控制台
<a name="SSAS.OptionGroup.Console"></a>

以下控制台过程创建适用于 SQL Server 标准版 2017 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗格中，执行以下操作：

   1. 对于**名称**，输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **ssas-se-2017**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **SSAS option group for SQL Server SE 2017**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于**主引擎版本**，选择 **14.00**。

1. 选择**创建**。

### CLI
<a name="SSAS.OptionGroup.CLI"></a>

以下 CLI 示例为 SQL Server 标准版 2017 创建一个选项组。

**创建选项组**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name ssas-se-2017 \
      --engine-name sqlserver-se \
      --major-engine-version 14.00 \
      --option-group-description "SSAS option group for SQL Server SE 2017"
  ```

  对于 Windows：

  ```
  aws rds create-option-group ^
      --option-group-name ssas-se-2017 ^
      --engine-name sqlserver-se ^
      --major-engine-version 14.00 ^
      --option-group-description "SSAS option group for SQL Server SE 2017"
  ```

## 将 SSAS 选项添加到选项组
<a name="SSAS.Add"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `SSAS` 选项添加到选项组。

### 控制台
<a name="SSAS.Add.Console"></a>

**添加 SSAS 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择刚刚创建的选项组。

1. 选择**添加选项**。

1. 在 **Option details (选项详细信息)** 下，为 **Option name (选项名称)** 选择 **SSAS**。

1. 在**选项设置**下，执行以下操作：

   1. 在 **Max memory**（最大内存）中，输入 10–80 这个范围内的一个值。

      **Max memory (最大内存)** 指定上限阈值，超过该阈值后，SSAS 将开始更积极地释放内存，以便为正在运行的请求以及新的高优先级请求释放空间。该数字是占数据库实例总内存的百分比。允许的值是 10–80；默认值为 45。

   1. 在 **Mode**（模式）中选择 SSAS 服务器模式：**Tabular**（表格）或 **Multidimensional**（多维）。

      如果没有看到 **Mode**（模式）选项设置，则表示 AWS 区域不支持多维模式。有关更多信息，请参阅 [限制](Appendix.SQLServer.Options.SSAS.md#SSAS.Limitations)。

      默认为 **Tabular**（表格）模式。

   1. 对于 **Security groups (安全组)**，请选择要与选项关联的 VPC 安全组。
**注意**  
用于访问 SSAS 的端口 2383 已预先填充。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

1. 选择**添加选项**。

### CLI
<a name="SSAS.Add.CLI"></a>

**添加 SSAS 选项**

1. 使用以下参数创建 JSON 文件 ，例如 `ssas-option.json`：
   + `OptionGroupName` – 您之前创建或选择的选项组的名称（以下示例中的 `ssas-se-2017`）。
   + `Port` – 用于访问 SSAS 的端口。唯一支持的端口是 2383。
   + `VpcSecurityGroupMemberships`：RDS 数据库实例的 VPC 安全组成员。
   + `MAX_MEMORY` – 上限阈值，超过该阈值后，SSAS 将开始更积极地释放内存，以便为正在运行的请求以及新的高优先级请求释放空间。该数字是占数据库实例总内存的百分比。允许的值是 10–80；默认值为 45。
   + `MODE`：SSAS 服务器模式，即 `Tabular` 和 `Multidimensional`，默认为 `Tabular`。

     如果收到的错误消息显示 `MODE` 选项设置无效，则表示 AWS 区域不支持多维模式。有关更多信息，请参阅 [限制](Appendix.SQLServer.Options.SSAS.md#SSAS.Limitations)。

   以下是具有 SSAS 选项设置的 JSON 文件示例。

   ```
   {
   "OptionGroupName": "ssas-se-2017",
   "OptionsToInclude": [
   	{
   	"OptionName": "SSAS",
   	"Port": 2383,
   	"VpcSecurityGroupMemberships": ["sg-0abcdef123"],
   	"OptionSettings": [{"Name":"MAX_MEMORY","Value":"60"},{"Name":"MODE","Value":"Multidimensional"}]
   	}],
   "ApplyImmediately": true
   }
   ```

1. 将 `SSAS` 选项添加到该选项组。  
**Example**  

   对于 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://ssas-option.json \
       --apply-immediately
   ```

   对于 Windows：

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://ssas-option.json ^
       --apply-immediately
   ```

## 将选项组与数据库实例关联
<a name="SSAS.Apply"></a>

您可以使用控制台或 CLI 将选项组与数据库实例关联。

### 控制台
<a name="SSAS.Apply.Console"></a>

将您的选项组与新的或现有的数据库实例关联：
+ 对于新数据库实例，请在启动实例时将选项组与数据库实例关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请修改实例并将新选项组与其关联。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。
**注意**  
如果您使用现有实例，则该实例必须已关联 Active Directory 域和 AWS Identity and Access Management (IAM) 角色。如果您创建新实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅 [将 Active Directory 用于 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

### CLI
<a name="SSAS.Apply.CLI"></a>

您可将您的选项组与新的或现有的数据库实例关联。

**注意**  
如果您使用现有实例，则该实例必须已经关联了 Active Directory 域和 IAM 角色。如果您创建新实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅 [将 Active Directory 用于 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

**创建使用选项组的数据库实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssasinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 14.00.3223.3.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssas-se-2017
  ```

  对于 Windows：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssasinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 14.00.3223.3.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssas-se-2017
  ```

**修改数据库实例以关联选项组**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssasinstance \
      --option-group-name ssas-se-2017 \
      --apply-immediately
  ```

  对于 Windows：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssasinstance ^
      --option-group-name ssas-se-2017 ^
      --apply-immediately
  ```

## 允许对 VPC 安全组的入站访问
<a name="SSAS.InboundRule"></a>

在与数据库实例关联的 VPC 安全组中，为指定的 SSAS 侦听器端口创建入站规则。有关设置安全组的更多信息，请参阅[通过创建安全组提供对 VPC 中的数据库实例的访问](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)。

## 启用 Amazon S3 集成
<a name="SSAS.EnableS3"></a>

要将模型配置文件下载到主机进行部署，请使用 Amazon S3 集成。有关更多信息，请参阅 [将 Amazon RDS for SQL Server 数据库实例与 Amazon S3 集成](User.SQLServer.Options.S3-integration.md)。

# 在 Amazon RDS 上部署 SSAS 项目
<a name="SSAS.Deploy"></a>

在 RDS 上，您不能使用 SQL Server Management Studio (SSMS) 直接部署 SSAS 项目。要部署项目，请使用 RDS 存储过程。

**注意**  
不支持使用 .xmla 文件进行部署。

在部署项目之前，请确保满足以下条件：
+ Amazon S3 集成已启用。有关更多信息，请参阅 [将 Amazon RDS for SQL Server 数据库实例与 Amazon S3 集成](User.SQLServer.Options.S3-integration.md)。
+ `Processing Option` 配置设置已设置为 `Do Not Process`。此设置意味着部署后不会进行任何处理。
+ 您有 `myssasproject.asdatabase` 和 `myssasproject.deploymentoptions` 文件。在您构建 SSAS 项目时，这些文件会自动生成。

**在 RDS 上部署 SSAS 项目**

1. 将 `.asdatabase`（SSAS 模型）文件从 S3 存储桶下载到数据库实例，如以下示例所示。有关下载参数的更多信息，请参阅[将文件从 Amazon S3 存储桶下载到 SQL Server 数据库实例](Appendix.SQLServer.Options.S3-integration.using.md#Appendix.SQLServer.Options.S3-integration.using.download)。

   ```
   exec msdb.dbo.rds_download_from_s3 
   @s3_arn_of_file='arn:aws:s3:::bucket_name/myssasproject.asdatabase', 
   [@rds_file_path='D:\S3\myssasproject.asdatabase'],
   [@overwrite_file=1];
   ```

1. 将 `.deploymentoptions` 文件从 S3 存储桶下载到数据库实例。

   ```
   exec msdb.dbo.rds_download_from_s3
   @s3_arn_of_file='arn:aws:s3:::bucket_name/myssasproject.deploymentoptions', 
   [@rds_file_path='D:\S3\myssasproject.deploymentoptions'],
   [@overwrite_file=1];
   ```

1. 部署项目。

   ```
   exec msdb.dbo.rds_msbi_task
   @task_type='SSAS_DEPLOY_PROJECT',
   @file_path='D:\S3\myssasproject.asdatabase';
   ```

# 监控部署任务的状态
<a name="SSAS.Monitor"></a>

要跟踪部署（或下载）任务的状态，请调用 `rds_fn_task_status` 函数。它获取两个参数。第一个参数应该始终为 `NULL`，因为它不适用于 SSAS。第二个参数接受任务 ID。

要查看所有任务的列表，请将第一个参数设置为 `NULL`，将第二个参数设置为 `0`，如以下示例所示。

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

要获取特定任务，请将第一个参数设置为 `NULL`，将第二个参数设置为任务 ID，如以下示例所示。

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

`rds_fn_task_status` 函数将返回以下信息。


| 输出参数 | 描述 | 
| --- | --- | 
| `task_id` | 任务的 ID。 | 
| `task_type` | 对于 SSAS，任务可以具有以下任务类型： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SSAS.Monitor.html)  | 
| `database_name` | 不适用于 SSAS 任务。 | 
| `% complete` | 用百分比表示的任务进度。 | 
| `duration (mins)` | 在任务上花费的时间 (以分钟为单位)。 | 
| `lifecycle` |  任务的状态。有以下可能状态： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SSAS.Monitor.html)  | 
| `task_info` | 有关任务的其他信息。如果在处理过程中发生错误，则此列包含有关错误的信息。 有关更多信息，请参阅 [解决 SSAS 问题](SSAS.Trouble.md)。 | 
| `last_updated` | 上次更新任务状态的日期和时间。 | 
| `created_at` | 任务的创建日期和时间。 | 
| `S3_object_arn` |  不适用于 SSAS 任务。  | 
| `overwrite_S3_backup_file` | 不适用于 SSAS 任务。 | 
| `KMS_master_key_arn` |  不适用于 SSAS 任务。  | 
| `filepath` |  不适用于 SSAS 任务。  | 
| `overwrite_file` |  不适用于 SSAS 任务。  | 
| `task_metadata` | 与 SSAS 任务关联的元数据。 | 

# 在 Amazon RDS 上使用 SSAS
<a name="SSAS.Use"></a>

部署 SSAS 项目后，您可以直接在 SSMS 上处理 OLAP 数据库。

**在 RDS 上使用 SSAS**

1. 在 SSMS 中，使用 Active Directory 域的用户名和密码连接到 SSAS。

1. 展开 **Databases (数据库)**。此时将显示新部署的 SSAS 数据库。

1. 找到连接字符串，再更新用户名和密码，以便有权访问源 SQL 数据库。处理 SSAS 对象必须要执行此操作。

   1. 针对表格模式执行以下操作：

      1. 展开 **Connections**（连接）选项卡。

      1. 打开连接对象的上下文（右键单击）菜单，然后选择 **Properties**（属性）。

      1. 更新连接字符串中的用户名和密码。

   1. 针对多维模式执行以下操作：

      1. 展开 **Data Sources**（数据源）选项卡。

      1. 打开数据源对象的上下文（右键单击）菜单，然后选择 **Properties**（属性）。

      1. 更新连接字符串中的用户名和密码。

1. 打开您创建的 SSAS 数据库的上下文（右键单击）菜单，然后选择 **Process Database (处理数据库)**。

   根据输入数据的大小，处理操作可能需要几分钟时间才能完成。

**Topics**
+ [为 SSAS 设置经 Windows 身份验证的用户](#SSAS.Use.Auth)
+ [添加域用户作为数据库管理员](#SSAS.Admin)
+ [创建 SSAS 代理](#SSAS.Use.Proxy)
+ [使用 SQL Server Agent 安排 SSAS 数据库处理](#SSAS.Use.Schedule)
+ [从代理撤消 SSAS 访问权限](#SSAS.Use.Revoke)

## 为 SSAS 设置经 Windows 身份验证的用户
<a name="SSAS.Use.Auth"></a>

主管理员用户（有时也被称为主用户）可以使用以下代码示例设置经 Windows 身份验证的登录并授予所需的过程权限。执行此操作可向域用户授予权限以运行 SSAS 客户任务、使用 S3 文件传输过程、创建凭证以及使用 SQL Server Agent 代理。有关更多信息，请参阅 Microsoft 文档中的[凭证（数据库引擎）](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15)和[创建 SQL Server Agent 代理](https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-sql-server-agent-proxy?view=sql-server-ver15)。

您可以根据需要向经 Windows 身份验证的用户授予以下部分或所有权限。

**Example**  

```
-- Create a server-level domain user login, if it doesn't already exist
USE [master]
GO
CREATE LOGIN [mydomain\user_name] FROM WINDOWS
GO

-- Create domain user, if it doesn't already exist
USE [msdb]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]
GO

-- Grant necessary privileges to the domain user
USE [master]
GO
GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name]
GO

USE [msdb]
GO
GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option
GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] with grant option
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name]
GO
```

## 添加域用户作为数据库管理员
<a name="SSAS.Admin"></a>

您可以通过以下方式，将域用户添加为 SSAS 数据库管理员：
+ 数据库管理员可以使用 SSMS 创建具有 `admin` 权限的角色，然后将用户添加到该角色。
+ 您可以使用以下存储过程。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSAS_ADD_DB_ADMIN_MEMBER',
  @database_name='myssasdb',
  @ssas_role_name='exampleRole',
  @ssas_role_member='domain_name\domain_user_name';
  ```

  以下参数为必需参数：
  + `@task_type` – MSBI 任务的类型，在此例中为 `SSAS_ADD_DB_ADMIN_MEMBER`。
  + `@database_name` – 要向其授予管理员特权的 SSAS 数据库的名称。
  + `@ssas_role_name` – SSAS 数据库管理员角色名称。如果角色尚不存在，则会创建它。
  + `@ssas_role_member` – 要添加到管理员角色的 SSAS 数据库用户。

## 创建 SSAS 代理
<a name="SSAS.Use.Proxy"></a>

要先创建 SSAS 凭证和 SSAS 代理，才能使用 SQL Server Agent 来安排 SSAS 数据库处理。以经 Windows 身份验证的用户身份运行这些过程。

**创建 SSAS 凭证**
+ 为代理创建凭证。为此，您可以使用 SSMS 或以下 SQL 语句。

  ```
  USE [master]
  GO
  CREATE CREDENTIAL [SSAS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret'
  GO
  ```
**注意**  
`IDENTITY` 必须是经域身份验证的登录名。将 `mysecret` 替换为经域身份验证的登录的密码。

**创建 SSAS 代理**

1. 使用以下 SQL 语句创建代理。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSAS_Proxy',@credential_name=N'SSAS_Credential',@description=N''
   GO
   ```

1. 使用以下 SQL 语句向其他用户授予对代理的访问权限。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSAS_Proxy',@login_name=N'mydomain\user_name'
   GO
   ```

1. 使用以下 SQL 语句向代理授予 SSAS 子系统访问权限。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS'
   GO
   ```

**查看代理和代理上的授权**

1. 使用以下 SQL 语句查看代理的被授权者。

   ```
   USE [msdb]
   GO
   EXEC sp_help_proxy
   GO
   ```

1. 使用以下 SQL 语句查看子系统授权。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_enum_proxy_for_subsystem
   GO
   ```

## 使用 SQL Server Agent 安排 SSAS 数据库处理
<a name="SSAS.Use.Schedule"></a>

创建凭证和代理并向 SSAS 授予对代理的访问权限后，您可以创建 SQL Server Agent 任务来安排 SSAS 数据库处理。

**安排 SSAS 数据库处理**
+ 使用 SSMS 或 T-SQL 创建 SQL Server Agent 任务。以下示例使用 T-SQL。您可以通过 SSMS 或 T-SQL 进一步配置其任务计划。
  + `@command` 参数概述了将由 SQL Server Agent 任务运行的 XML for Analysis (XMLA) 命令。此示例配置了 SSAS 多维数据库处理。
  + `@server` 参数概述了 SQL Server Agent 任务的目标 SSAS 服务器名称。

    要在 SQL Server Agent 任务所在的同一 RDS 数据库实例中调用 SSAS 服务，请使用 `localhost:2383`。

    要从 RDS 数据库实例外部调用 SSAS 服务，请使用 RDS 端点。如果 RDS 数据库实例是由同一个域联接，则还可以使用 Kerberos Active Directory (AD) 端点 (`your-DB-instance-name.your-AD-domain-name`)。对于外部数据库实例，请确保正确配置与 RDS 数据库实例关联的 VPC 安全组，以便实现安全连接。

  您可以进一步编辑查询来支持各种 XMLA 操作。可以直接修改 T-SQL 查询进行编辑，也可以在创建 SQL Server Agent 任务后使用 SSMS UI 进行编辑。

  ```
  USE [msdb]
  GO
  DECLARE @jobId BINARY(16)
  EXEC msdb.dbo.sp_add_job @job_name=N'SSAS_Job', 
      @enabled=1, 
      @notify_level_eventlog=0, 
      @notify_level_email=0, 
      @notify_level_netsend=0, 
      @notify_level_page=0, 
      @delete_level=0, 
      @category_name=N'[Uncategorized (Local)]', 
      @job_id = @jobId OUTPUT
  GO
  EXEC msdb.dbo.sp_add_jobserver 
      @job_name=N'SSAS_Job', 
      @server_name = N'(local)'
  GO
  EXEC msdb.dbo.sp_add_jobstep @job_name=N'SSAS_Job', @step_name=N'Process_SSAS_Object', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=1, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'ANALYSISCOMMAND', 
      @command=N'<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
          <Parallel>
              <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" 
                  xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" 
                  xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" 
                  xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" 
                  xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" 
                  xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
                  <Object>
                      <DatabaseID>Your_SSAS_Database_ID</DatabaseID>
                  </Object>
                  <Type>ProcessFull</Type>
                  <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
              </Process>
          </Parallel>
      </Batch>', 
      @server=N'localhost:2383', 
      @database_name=N'master', 
      @flags=0, 
      @proxy_name=N'SSAS_Proxy'
  GO
  ```

## 从代理撤消 SSAS 访问权限
<a name="SSAS.Use.Revoke"></a>

您可以使用以下存储过程撤消对 SSAS 子系统的访问权限并删除 SSAS 代理。

**撤消访问权限并删除代理**

1. 撤消子系统访问权限。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS'
   GO
   ```

1. 撤消代理上的授权。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSAS_Proxy',@name=N'mydomain\user_name'
   GO
   ```

1. 删除代理。

   ```
   USE [msdb]
   GO
   EXEC dbo.sp_delete_proxy @proxy_name = N'SSAS_Proxy'
   GO
   ```

# 备份 SSAS 数据库
<a name="SSAS.Backup"></a>

您只能在数据库实例的 `D:\S3` 文件夹中创建 SSAS 数据库备份文件。要将备份文件移动到 S3 存储桶，请使用 Amazon S3。

您可以如下所示备份 SSAS 数据库：
+ 特定数据库具有 `admin` 角色的域用户可以使用 SSMS 将数据库备份到 `D:\S3` 文件夹。

  有关更多信息，请参阅“[添加域用户作为数据库管理员](SSAS.Use.md#SSAS.Admin)”。
+ 您可以使用以下存储过程。此存储过程不支持加密。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSAS_BACKUP_DB',
  @database_name='myssasdb',
  @file_path='D:\S3\ssas_db_backup.abf',
  [@ssas_apply_compression=1],
  [@ssas_overwrite_file=1];
  ```

  以下参数为必需参数：
  + `@task_type` – MSBI 任务的类型，在此例中为 `SSAS_BACKUP_DB`。
  + `@database_name` – 要备份的 SSAS 数据库的名称。
  + `@file_path` – SSAS 备份文件的路径。`.abf` 扩展名必需。

  以下参数为可选参数：
  + `@ssas_apply_compression` – 是否应用 SSAS 备份压缩。有效值为 1（是）和 0（否）。
  + `@ssas_overwrite_file` – 是否覆盖 SSAS 备份文件。有效值为 1（是）和 0（否）。

# 还原 SSAS 数据库
<a name="SSAS.Restore"></a>

使用以下存储过程从备份还原 SSAS 数据库。

如果存在同名的现有 SSAS 数据库，则无法还原数据库。用于还原的存储过程不支持加密的备份文件。

```
exec msdb.dbo.rds_msbi_task
@task_type='SSAS_RESTORE_DB',
@database_name='mynewssasdb',
@file_path='D:\S3\ssas_db_backup.abf';
```

以下参数为必需参数：
+ `@task_type` – MSBI 任务的类型，在此例中为 `SSAS_RESTORE_DB`。
+ `@database_name` – 您要还原到的新 SSAS 数据库的名称。
+ `@file_path` – SSAS 备份文件的路径。

## 将数据库实例还原到指定时间
<a name="SSAS.PITR"></a>

时间点恢复 (PITR) 不适用于 SSAS 数据库。如果您执行 PITR，则在还原的实例上，只有在请求时间之前的最后一个快照中的 SSAS 数据可用。

**在还原的数据库实例上拥有最新的 SSAS 数据库**

1. 将您的 SSAS 数据库备份到源实例上的 `D:\S3` 文件夹。

1. 将备份文件传输到 S3 存储桶。

1. 将备份文件从 S3 存储桶传输到还原后的实例上的 `D:\S3` 文件夹。

1. 运行存储过程，将 SSAS 数据库还原到还原后的实例上。

   您还可以重新处理 SSAS 项目以还原数据库。

# 更改 SSAS 模式
<a name="SSAS.ChangeMode"></a>

您可以更改 SSAS 的运行模式，无论其采用的是表格模式还是多维模式。若要更改模式，请使用 AWS 管理控制台 或 AWS CLI 修改 SSAS 选项中的选项设置。

**重要**  
一次只能使用一个 SSAS 模式。更改模式之前，请务必删除所有 SSAS 数据库，否则会收到错误消息。

## 控制台
<a name="SSAS.ChangeMode.CON"></a>

以下 Amazon RDS 控制台程序可将 SSAS 模式更改为表格模式，然后将 `MAX_MEMORY` 参数设置为 70%。

**修改 SSAS 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有要修改的 `SSAS` 选项（前面示例中的 `ssas-se-2017`）的选项组。

1. 选择 **Modify option**（修改选项）。

1. 更改选项设置：

   1. 在 **Max memory**（最大内存）中输入 **70**。

   1. 在**Mode**（模式）中选择 **Tabular**（表格）。

1. 选择 **Modify option**（修改选项）。

## AWS CLI
<a name="SSAS.ChangeMode.CLI"></a>

以下 AWS CLI 示例会将 SSAS 模式更改为表格模式，然后将 `MAX_MEMORY` 参数设置为 70%。

为了使 CLI 命令正常运行，请确保命令中包含所有必要参数，即使未对其进行修改。

**修改 SSAS 选项**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name ssas-se-2017 \
      --options "OptionName=SSAS,VpcSecurityGroupMemberships=sg-12345e67,OptionSettings=[{Name=MAX_MEMORY,Value=70},{Name=MODE,Value=Tabular}]" \
      --apply-immediately
  ```

  对于 Windows：

  ```
  aws rds add-option-to-option-group ^
      --option-group-name ssas-se-2017 ^
      --options OptionName=SSAS,VpcSecurityGroupMemberships=sg-12345e67,OptionSettings=[{Name=MAX_MEMORY,Value=70},{Name=MODE,Value=Tabular}] ^
      --apply-immediately
  ```

# 禁用 SSAS
<a name="SSAS.Disable"></a>

若要禁用 SSAS，请从选项组中删除 `SSAS` 选项。

**重要**  
删除 `SSAS` 选项之前，请先删除您的 SSAS 数据库。  
我们强烈建议您先备份 SSAS 数据库，然后再删除这些数据库并删除 `SSAS` 选项。

## 控制台
<a name="SSAS.Disable.Console"></a>

**从其选项组中删除 SSAS 选项**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有要删除的 `SSAS` 选项（前面示例中的 `ssas-se-2017`）的选项组。

1. 选择 **Delete option (删除选项)**。

1. 在 **Delete option (删除选项)** 下，为 **Options to delete (要删除的选项)** 选择 **SSAS**。

1. 在 **Apply immediately (立即应用)** 下，选择 **Yes (是)** 可立即删除选项，选择 **No (否)** 可在下次维护时段时删除。

1. 选择**删除**。

## AWS CLI
<a name="SSAS.Disable.CLI"></a>

**从其选项组中删除 SSAS 选项**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssas-se-2017 \
      --options SSAS \
      --apply-immediately
  ```

  对于 Windows：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssas-se-2017 ^
      --options SSAS ^
      --apply-immediately
  ```

# 解决 SSAS 问题
<a name="SSAS.Trouble"></a>

您可能会在使用 SSAS 时遇到以下问题。


| 问题 | 类型 | 故障排除建议 | 
| --- | --- | --- | 
| 无法配置 SSAS 选项。请求的 SSAS 模式是 new\$1mode，但当前数据库实例有 number 个 current\$1mode 数据库。在切换到 new\$1mode 模式之前，请删除现有数据库。要重新获得数据库删除 current\$1mode 模式的访问权限，可以更新当前数据库选项组，也可以附加新选项组（将 %s 作为 SSAS 选项的模式选项设置值）。 | RDS 事件 | 如果仍有 SSAS 数据库使用当前模式，则无法更改 SSAS 模式。请删除 SSAS 数据库，然后重试。 | 
| 无法删除 SSAS 选项，因为存在 number 个现有 mode 数据库。删除所有 SSAS 数据库后，才能删除 SSAS 选项。再次添加 SSAS 选项，删除所有 SSAS 数据库，然后重试。 | RDS 事件 | 如果仍然有 SSAS 数据库，则无法禁用 SSAS。请删除 SSAS 数据库，然后重试。 | 
| SSAS 选项未启用或处于启用过程中。请稍后重试。 | RDS 存储过程 | 选项被禁用或正在启用时，您无法运行 SSAS 存储过程。 | 
| SSAS 选项配置不正确。确保选项组成员资格状态为“同步中”，然后查看 RDS 事件日志以获取相关 SSAS 配置错误消息。在完成这些调查后重试一次。如果仍会出现错误，请联系 AWS Support。 | RDS 存储过程 |  如果选项组成员资格不是 `in-sync` 状态，则无法运行 SSAS 存储过程。这会让 SSAS 选项处于不正确的配置状态。 如果选项组成员资格状态因 SSAS 选项修改而变为 `failed`，则有两个可能原因： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SSAS.Trouble.html) 重新配置 SSAS 选项，因为 RDS 一次只允许一个 SSAS 模式，并且不支持在存在 SSAS 数据库的情况下删除 SSAS 选项。 检查 RDS 事件日志中 SSAS 实例的配置错误，再相应地解决问题。  | 
| 部署失败。只能在以 deployment\$1file\$1mode 模式运行的服务器上部署更改。当前服务器模式为 current\$1mode。 | RDS 存储过程 |  无法将表格数据库部署到多维服务器，也无法将多维数据库部署到表格服务器。 确保使用的是具有正确模式的文件，然后验证 `MODE` 选项设置是否设置为合适的值。  | 
| 还原失败。只能在以 restore\$1file\$1mode 模式运行的服务器上恢复备份文件。当前服务器模式为 current\$1mode。 | RDS 存储过程 |  无法将表格数据库还原到多维服务器，也无法将多维数据库还原到表格服务器。 确保使用的是具有正确模式的文件，然后验证 `MODE` 选项设置是否设置为合适的值。  | 
| 还原失败。备份文件与 RDS 数据库实例版本不兼容。 | RDS 存储过程 |  无法使用与 SQL Server 实例版本不兼容的版本还原 SSAS 数据库。 有关更多信息，请参阅 Microsoft 文档中的[表格模型的兼容性级别](https://docs.microsoft.com/en-us/analysis-services/tabular-models/compatibility-level-for-tabular-models-in-analysis-services)和[多维数据库的兼容性级别](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/compatibility-level-of-a-multidimensional-database-analysis-services)。  | 
| 还原失败。还原操作中指定的备份文件已损坏或不是 SSAS 备份文件。确保 @rds\$1file\$1path 格式正确。 | RDS 存储过程 |  无法使用受损文件还原 SSAS 数据库。 确保文件未遭破坏或损坏。 此错误也会在 `@rds_file_path` 格式不正确时发生。（例如 `D:\S3\\incorrect_format.abf` 中存在两条反斜杠）。  | 
| 还原失败。还原的数据库名称不能包含任何保留字或无效字符（. , ; ' ` : / \$1\$1 \$1 \$1 ? \$1" & % \$1 \$1 \$1 = ( ) [ ] \$1 \$1 <>），长度不能超过 100 个字符。 | RDS 存储过程 |  还原的数据库名称不能包含任何保留字或无效字符，长度不能超过 100 个字符。 有关 SSAS 对象命名惯例，请参阅 Microsoft 文档中的[对象命名规则](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)。  | 
| 提供的角色名称无效。角色名称不能包含任何保留字符串。 | RDS 存储过程 |  角色名称不能包含任何保留字符串。 有关 SSAS 对象命名惯例，请参阅 Microsoft 文档中的[对象命名规则](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)。  | 
| 提供的角色名称无效。角色名称不能包含以下任何保留字符：. , ; ' ` : / \$1\$1 \$1 \$1 ? \$1" & % \$1 \$1 \$1 = ( ) [ ] \$1 \$1 <> | RDS 存储过程 |  角色名称不能包含任何保留字符。 有关 SSAS 对象命名惯例，请参阅 Microsoft 文档中的[对象命名规则](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)。  | 

# 支持 Amazon RDS for SQL Server 中的 SQL Server Integration Services
<a name="Appendix.SQLServer.Options.SSIS"></a>

Microsoft SQL Server Integration Services (SSIS) 是一个组件，可用于执行一系列广泛的数据迁移任务。SSIS 是一个用于数据集成和工作流应用程序的平台。它具有用于数据提取、转换和加载 (ETL) 的数据仓库工具。您还可以使用此工具自动维护 SQL Server 数据库以及对多维数据集数据的更新。

SSIS 项目将整理到另存为基于 XML 的 .dtsx 文件的包中。包可以包含控制流和数据流。您可以使用数据流来表示 ETL 操作。部署后，包存储在 SQL Server 中的 SSISDB 数据库中。SSISDB 是处于完全恢复模式的联机事务处理 (OLTP) 数据库。

Amazon RDS for SQL Server 支持直接在 RDS 数据库实例上运行 SSIS。您可以在现有的或新的数据库实例上启用 SSIS。SSIS 安装在与您的数据库引擎相同的数据库实例上。

RDS 在以下版本上对于 SQL Server 标准版和企业版支持 SSIS：
+ SQL Server 2022，所有版本
+ SQL Server 2019，版本 15.00.4043.16.v1 和更高版本
+ SQL Server 2017，版本 14.00.3223.3.v1 和更高版本
+ SQL Server 2016，版本 13.00.5426.0.v1 和更高版本

**Contents**
+ [限制和建议](#SSIS.Limitations)
+ [启用 SSIS](#SSIS.Enabling)
  + [为 SSIS 创建选项组](#SSIS.OptionGroup)
  + [将 SSIS 选项添加到选项组](#SSIS.Add)
  + [为 SSIS 创建参数组](#SSIS.CreateParamGroup)
  + [修改 SSIS 的参数](#SSIS.ModifyParam)
  + [将选项组和参数组与数据库实例关联](#SSIS.Apply)
  + [启用 S3 集成](#SSIS.EnableS3)
+ [SSISDB 上的管理权限](SSIS.Permissions.md)
  + [为 SSIS 设置经 Windows 身份验证的用户](SSIS.Permissions.md#SSIS.Use.Auth)
+ [部署 SSIS 项目](SSIS.Deploy.md)
+ [监控部署任务的状态](SSIS.Monitor.md)
+ [使用 SSIS](SSIS.Use.md)
  + [为 SSIS 项目设置数据库连接管理器](SSIS.Use.md#SSIS.Use.ConnMgrs)
  + [创建 SSIS 代理](SSIS.Use.md#SSIS.Use.Proxy)
  + [使用 SQL Server Agent 安排 SSIS 程序包](SSIS.Use.md#SSIS.Use.Schedule)
  + [从代理撤消 SSIS 访问权限](SSIS.Use.md#SSIS.Use.Revoke)
+ [禁用并删除 SSIS 数据库](SSIS.DisableDrop.md)
  + [禁用 SSIS](SSIS.DisableDrop.md#SSIS.Disable)
  + [删除 SSISDB 数据库](SSIS.DisableDrop.md#SSIS.Drop)

## 限制和建议
<a name="SSIS.Limitations"></a>

以下限制和建议适用于在 RDS for SQL Server 上运行 SSIS：
+ 数据库实例必须具有 `clr enabled` 参数设置为 1 的关联参数组。有关更多信息，请参阅 [修改 SSIS 的参数](#SSIS.ModifyParam)。
**注意**  
如果在 SQL Server 2017 或 2019 上启用 `clr enabled` 参数，则无法在数据库实例上使用公共语言运行时 (CLR)。有关更多信息，请参阅 [不支持的功能以及有限支持的功能](SQLServer.Concepts.General.FeatureNonSupport.md)。
+ 支持以下控制流任务：
  + 分析服务执行 DDL 任务
  + 分析服务处理任务
  + 批量插入任务
  + 检查数据库完整性任务
  + 数据流任务
  + 数据挖掘查询任务
  + 数据分析任务
  + 执行包任务
  + 执行 SQL Server Agent 作业任务
  + 执行 SQL 任务
  + 执行 T-SQL 语句任务
  + 通知操作员任务
  + 重建索引任务
  + 重新组织索引任务
  + 收缩数据库任务
  + 传输数据库任务
  + 传输作业任务
  + 传输登录名任务
  + 传输 SQL Server 对象任务
  + 更新统计数据任务
+ 仅支持项目部署。
+ 支持使用 SQL Server Agent 运行 SSIS 程序包。
+ SSIS 日志记录只能插入用户创建的数据库中。
+ 仅使用 `D:\S3` 文件夹来处理文件。放置在任何其他目录中的文件将被删除。请注意其他几个文件位置的详细信息：
  + 将 SSIS 项目输入和输出文件置于 `D:\S3` 文件夹中。
  + 对于数据流任务，将 `BLOBTempStoragePath` 和 `BufferTempStoragePath` 的位置更改为 `D:\S3` 文件夹中的文件。文件路径必须以 `D:\S3\` 开头。
  + 确保用于文件连接的所有参数、变量和表达式都指向 `D:\S3` 文件夹。
  + 在多可用区实例上，SSIS 在 `D:\S3` 文件夹中创建的文件将在故障转移后被删除。有关更多信息，请参阅“[S3 集成的多可用区限制](User.SQLServer.Options.S3-integration.md#S3-MAZ)”。
  + 将 SSIS 在 `D:\S3` 文件夹中创建的文件上传到您的 Amazon S3 存储桶以使其持久存在。
+ 不支持导入列和导出列转换以及数据流任务上的脚本组件。
+ 无法对正在运行的 SSIS 程序包启用转储，也无法在 SSIS 程序包上添加数据分接头。
+ 不支持 SSIS 扩展功能。
+ 您不能直接部署项目。我们提供 RDS 存储过程来执行此操作。有关更多信息，请参阅“[部署 SSIS 项目](SSIS.Deploy.md)”。
+ 使用 `DoNotSavePasswords` 保护模式构建 SSIS 项目 (.ispac) 文件以便在 RDS 上进行部署。
+ 具有只读副本的“始终打开”实例不支持 SSIS。
+ 您无法备份与 `SSIS` 选项关联的 SSISDB 数据库。
+ 不支持从 SSIS 的其他实例导入和还原 SSISDB 数据库。
+ 您可以连接到其他 SQL Server 数据库实例或 Oracle 数据来源。RDS for SQL Server 上的 SSIS 不支持连接到其他数据库引擎（例如 MySQL 或 PostgreSQL）。有关连接到 Oracle 数据来源的更多信息，请参阅 [带有 Oracle OLEDB 的链接服务器](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)。
+ SSIS 不支持与本地域建立传出信任的已加入域的实例。在使用传出信任时，请从本地 AWS 域中的账户运行 SSIS 作业。
+ 不支持执行基于文件系统的软件包。

## 启用 SSIS
<a name="SSIS.Enabling"></a>

您可以通过向数据库实例添加 SSIS 选项来启用 SSIS。使用以下过程：

1. 创建新的选项组或选择现有的选项组。

1. 将 `SSIS` 选项添加到该选项组。

1. 创建新的参数组，或选择现有参数组。

1. 修改参数组以将 `clr enabled` 参数设置为 1。

1. 将选项组和参数组与数据库实例关联。

1. 启用 Amazon S3 集成。

**注意**  
如果数据库实例上已存在带有名称 SSISDB 或预留的 SSIS 登录名的数据库，则无法在实例上启用 SSIS。

### 为 SSIS 创建选项组
<a name="SSIS.OptionGroup"></a>

要使用 SSIS，请创建或修改与您计划使用的 SQL Server 版本和数据库实例版本对应的选项组。为此，请使用 AWS 管理控制台或 AWS CLI。

#### 控制台
<a name="SSIS.OptionGroup.Console"></a>

以下控制台过程创建适用于 SQL Server 标准版 2016 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗口中，执行以下操作：

   1. 对于**名称**，输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **ssis-se-2016**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **SSIS option group for SQL Server SE 2016**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于**主要引擎版本**，选择 **13.00**。

1. 选择**创建**。

#### CLI
<a name="SSIS.OptionGroup.CLI"></a>

以下控制台过程创建适用于 SQL Server 标准版 2016 的选项组。

**创建选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name ssis-se-2016 \
      --engine-name sqlserver-se \
      --major-engine-version 13.00 \
      --option-group-description "SSIS option group for SQL Server SE 2016"
  ```

  对于：Windows

  ```
  aws rds create-option-group ^
      --option-group-name ssis-se-2016 ^
      --engine-name sqlserver-se ^
      --major-engine-version 13.00 ^
      --option-group-description "SSIS option group for SQL Server SE 2016"
  ```

### 将 SSIS 选项添加到选项组
<a name="SSIS.Add"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `SSIS` 选项添加到您的选项组。

#### 控制台
<a name="SSIS.Add.Console"></a>

**添加 SSIS 选项**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择您刚刚创建的选项组（在此示例中为 **ssis-se-2016**）。

1. 选择**添加选项**。

1. 在**选项详细信息**下，为**选项名称**选择 **SSIS**。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

1. 选择**添加选项**。

#### CLI
<a name="SSIS.Add.CLI"></a>

**添加 SSIS 选项**
+ 将 `SSIS` 选项添加到该选项组。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name ssis-se-2016 \
      --options OptionName=SSIS \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds add-option-to-option-group ^
      --option-group-name ssis-se-2016 ^
      --options OptionName=SSIS ^
      --apply-immediately
  ```

### 为 SSIS 创建参数组
<a name="SSIS.CreateParamGroup"></a>

为与您计划用于 SSIS 的 SQL Server 版本和数据库实例版本对应的 `clr enabled` 参数创建或修改参数组。

#### 控制台
<a name="SSIS.CreateParamGroup.Console"></a>

以下过程为 SQL Server 标准版 2016 创建一个参数组。

**创建参数组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择**创建参数组**。

1. 在**创建参数组**窗格中，执行以下操作：

   1. 对于**参数组系列**，选择 **sqlserver-se-13.0**。

   1. 对于**组名称**，输入参数组的标识符，如 **ssis-sqlserver-se-13**。

   1. 对于**描述**，输入 **clr enabled parameter group**。

1. 选择**创建**。

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

以下过程为 SQL Server 标准版 2016 创建一个参数组。

**创建参数组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "clr enabled parameter group"
  ```

  对于：Windows

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "clr enabled parameter group"
  ```

### 修改 SSIS 的参数
<a name="SSIS.ModifyParam"></a>

修改与 SQL Server 版本和数据库实例版本对应的参数组中的 `clr enabled` 参数。对于 SSIS，将 `clr enabled` 参数设置为 1。

#### 控制台
<a name="SSIS.ModifyParam.Console"></a>

以下过程修改您为 SQL Server 标准版 2016 创建的参数组。

**修改参数组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择参数组，例如 **ssis-sqlserver-se-13**。

1. 在**参数**下，从参数列表中筛选 **clr**。

1. 选择 **clr enabled (启用 clr)**。

1. 选择**编辑参数**。

1. 从**值**中选择 **1**。

1. 选择**保存更改**。

#### CLI
<a name="SSIS.ModifyParam.CLI"></a>

以下过程修改您为 SQL Server 标准版 2016 创建的参数组。

**修改参数组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --parameters "ParameterName='clr enabled',ParameterValue=1,ApplyMethod=immediate"
  ```

  对于：Windows

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --parameters "ParameterName='clr enabled',ParameterValue=1,ApplyMethod=immediate"
  ```

### 将选项组和参数组与数据库实例关联
<a name="SSIS.Apply"></a>

要将 SSIS 选项组和参数组与数据库实例关联，请使用 AWS 管理控制台或 AWS CLI 

**注意**  
如果您使用现有实例，则该实例必须已关联 Active Directory 域和 AWS Identity and Access Management (IAM) 角色。如果您创建新实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅 [将 Active Directory 用于 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

#### 控制台
<a name="SSIS.Apply.Console"></a>

要完成对 SSIS 的启用，请将 SSIS 选项组和参数组与新的或现有的数据库实例关联：
+ 对于新数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

#### CLI
<a name="SSIS.Apply.CLI"></a>

您可以将 SSIS 选项组和参数组与新的或现有的数据库实例关联。

**使用 SSIS 选项组和参数组创建实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssisinstance \
      --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 \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssis-se-2016 \
      --db-parameter-group-name ssis-sqlserver-se-13
  ```

  对于：Windows

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssisinstance ^
      --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 ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssis-se-2016 ^
      --db-parameter-group-name ssis-sqlserver-se-13
  ```

**修改实例并关联 SSIS 选项组和参数组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssisinstance \
      --option-group-name ssis-se-2016 \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssisinstance ^
      --option-group-name ssis-se-2016 ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --apply-immediately
  ```

### 启用 S3 集成
<a name="SSIS.EnableS3"></a>

要将 SSIS 项目 (.ispac) 文件下载到主机以进行部署，请使用 S3 文件集成。有关更多信息，请参阅 [将 Amazon RDS for SQL Server 数据库实例与 Amazon S3 集成](User.SQLServer.Options.S3-integration.md)。

# SSISDB 上的管理权限
<a name="SSIS.Permissions"></a>

如果使用 SSIS 选项创建或修改实例，则结果是一个 SSISDB 数据库，其中包含向主用户授予的 ssis\$1admin 和 ssis\$1logreader 角色。在 SSISDB 中，主用户有权执行以下操作：
+ 更改 ssis\$1admin 角色
+ 更改 ssis\$1logreader 角色
+ 更改任何用户

由于主用户是经 SQL 身份验证的用户，因此，您不能使用主用户执行 SSIS 程序包。主用户可以使用这些权限创建新的 SSISDB 用户并将这些用户添加到 ssis\$1admin 和 ssis\$1logreader 角色。这样做对于向域用户授予访问权限以使用 SSIS 非常有用。

## 为 SSIS 设置经 Windows 身份验证的用户
<a name="SSIS.Use.Auth"></a>

主用户可以使用以下代码示例在 SSISDB 中设置经 Windows 身份验证的登录并授予所需的过程权限。执行此操作可向域用户授予权限以部署和运行 SSIS 程序包、使用 S3 文件传输过程、创建凭证以及使用 SQL Server Agent 代理。有关更多信息，请参阅 Microsoft 文档中的[凭证（数据库引擎）](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15)和[创建 SQL Server Agent 代理](https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-sql-server-agent-proxy?view=sql-server-ver15)。

**注意**  
您可以根据需要向经 Windows 身份验证的用户授予以下部分或所有权限。

**Example**  

```
-- Create a server-level SQL login for the domain user, if it doesn't already exist
USE [master]
GO
CREATE LOGIN [mydomain\user_name] FROM WINDOWS
GO						
						
-- Create a database-level account for the domain user, if it doesn't already exist						
USE [SSISDB]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]

-- Add SSIS role membership to the domain user
ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO

-- Add MSDB role membership to the domain user
USE [msdb]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]

-- Grant MSDB stored procedure privileges to the domain user
GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option
GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name]  with grant option
GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] WITH GRANT OPTION


-- Add the SQLAgentUserRole privilege to the domain user
USE [msdb]
GO
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name]
GO

-- Grant the ALTER ANY CREDENTIAL privilege to the domain user
USE [master]
GO
GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name]
GO
```

# 部署 SSIS 项目
<a name="SSIS.Deploy"></a>

在 RDS 上，您不能使用 SQL Server Management Studio (SSMS) 或 SSIS 过程直接部署 SSIS 项目。要从 Amazon S3 中下载项目文件并在随后进行部署，请使用 RDS 存储过程。

要运行存储过程，请以您已向其授予运行存储过程的权限的任何用户身份登录。有关更多信息，请参阅“[为 SSIS 设置经 Windows 身份验证的用户](SSIS.Permissions.md#SSIS.Use.Auth)”。

**部署 SSIS 项目**

1. 下载项目 (.ispac) 文件。

   ```
   exec msdb.dbo.rds_download_from_s3
   @s3_arn_of_file='arn:aws:s3:::bucket_name/ssisproject.ispac',
   @rds_file_path='D:\S3\ssisproject.ispac',
   @overwrite_file=1;
   ```

1. 提交部署任务并确保：
   + 该文件夹存在于 SSIS 目录中。
   + 该项目名称与您在开发 SSIS 项目时使用的项目名称匹配。

   ```
   exec msdb.dbo.rds_msbi_task
   @task_type='SSIS_DEPLOY_PROJECT',
   @folder_name='DEMO',
   @project_name='ssisproject',
   @file_path='D:\S3\ssisproject.ispac';
   ```

# 监控部署任务的状态
<a name="SSIS.Monitor"></a>

要跟踪部署任务的状态，请调用 `rds_fn_task_status` 函数。它获取两个参数。第一个参数应该始终为 `NULL`，因为它不适用于 SSIS。第二个参数接受任务 ID。

要查看所有任务的列表，请将第一个参数设置为 `NULL`，将第二个参数设置为 `0`，如以下示例所示。

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

要获取特定任务，请将第一个参数设置为 `NULL`，将第二个参数设置为任务 ID，如以下示例所示。

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

`rds_fn_task_status` 函数将返回以下信息。


| 输出参数 | 描述 | 
| --- | --- | 
| `task_id` | 任务的 ID。 | 
| `task_type` | `SSIS_DEPLOY_PROJECT` | 
| `database_name` | 不适用于 SSIS 任务。 | 
| `% complete` | 用百分比表示的任务进度。 | 
| `duration (mins)` | 在任务上花费的时间 (以分钟为单位)。 | 
| `lifecycle` |  任务的状态。有以下可能状态： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SSIS.Monitor.html)  | 
| `task_info` | 有关任务的其他信息。如果在处理过程中发生错误，则此列包含有关错误的信息。 | 
| `last_updated` | 上次更新任务状态的日期和时间。 | 
| `created_at` | 任务的创建日期和时间。 | 
| `S3_object_arn` |  不适用于 SSIS 任务。  | 
| `overwrite_S3_backup_file` | 不适用于 SSIS 任务。 | 
| `KMS_master_key_arn` |  不适用于 SSIS 任务。  | 
| `filepath` |  不适用于 SSIS 任务。  | 
| `overwrite_file` |  不适用于 SSIS 任务。  | 
| `task_metadata` | 与 SSIS 任务关联的元数据。 | 

# 使用 SSIS
<a name="SSIS.Use"></a>

将 SSIS 项目部署到 SSIS 目录中后，您可以直接从 SSMS 运行程序包或使用 SQL Server Agent 安排这些程序包。您必须使用经 Windows 身份验证的登录名来执行 SSIS 程序包。有关更多信息，请参阅“[为 SSIS 设置经 Windows 身份验证的用户](SSIS.Permissions.md#SSIS.Use.Auth)”。

**Topics**
+ [为 SSIS 项目设置数据库连接管理器](#SSIS.Use.ConnMgrs)
+ [创建 SSIS 代理](#SSIS.Use.Proxy)
+ [使用 SQL Server Agent 安排 SSIS 程序包](#SSIS.Use.Schedule)
+ [从代理撤消 SSIS 访问权限](#SSIS.Use.Revoke)

## 为 SSIS 项目设置数据库连接管理器
<a name="SSIS.Use.ConnMgrs"></a>

在使用连接管理器时，可以使用以下类型的身份验证：
+ 对于使用 AWS Managed Active Directory 的本地数据库连接，您可以使用 SQL 身份验证或 Windows 身份验证。对于 Windows 身份验证，请使用 `DB_instance_name.fully_qualified_domain_name` 作为连接字符串的服务器名称。

  以 `myssisinstance.corp-ad.example.com` 为例，其中 `myssisinstance` 是数据库实例名称，`corp-ad.example.com` 是完全限定域名。
+ 对于远程连接，请始终使用 SQL 身份验证。
+ 对于使用自托管式 Active Directory 的本地数据库连接，您可以使用 SQL 身份验证或 Windows 身份验证。对于 Windows 身份验证，请使用 `.` 或 `LocalHost` 作为连接字符串的服务器名称。

## 创建 SSIS 代理
<a name="SSIS.Use.Proxy"></a>

您需要创建 SSIS 凭证和 SSIS 代理，才能使用 SQL Server Agent 安排 SSIS 程序包。以经 Windows 身份验证的用户身份运行这些过程。

**创建 SSIS 凭证**
+ 为代理创建凭证。为此，您可以使用 SSMS 或以下 SQL 语句。

  ```
  USE [master]
  GO
  CREATE CREDENTIAL [SSIS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret'
  GO
  ```
**注意**  
`IDENTITY` 必须是经域身份验证的登录名。将 `mysecret` 替换为经域身份验证的登录的密码。  
每当更改 SSISDB 主机时，请更改 SSIS 代理凭证以允许新主机访问它们。

**创建 SSIS 代理**

1. 使用以下 SQL 语句创建代理。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSIS_Proxy',@credential_name=N'SSIS_Credential',@description=N''
   GO
   ```

1. 使用以下 SQL 语句向其他用户授予对代理的访问权限。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSIS_Proxy',@login_name=N'mydomain\user_name'
   GO
   ```

1. 使用以下 SQL 语句向代理授予 SSIS 子系统访问权限。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
   GO
   ```

**查看代理和代理上的授权**

1. 使用以下 SQL 语句查看代理的被授权者。

   ```
   USE [msdb]
   GO
   EXEC sp_help_proxy
   GO
   ```

1. 使用以下 SQL 语句查看子系统授权。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_enum_proxy_for_subsystem
   GO
   ```

## 使用 SQL Server Agent 安排 SSIS 程序包
<a name="SSIS.Use.Schedule"></a>

创建凭证和代理并向 SSIS 授予对代理的访问权限后，您可以创建 SQL Server Agent 作业来安排 SSIS 程序包。

**安排 SSIS 程序包**
+ 您可以使用 SSMS 或 T-SQL 创建 SQL Server Agent 作业。以下示例使用 T-SQL。

  ```
  USE [msdb]
  GO
  DECLARE @jobId BINARY(16)
  EXEC msdb.dbo.sp_add_job @job_name=N'MYSSISJob',
  @enabled=1,
  @notify_level_eventlog=0,
  @notify_level_email=2,
  @notify_level_page=2,
  @delete_level=0,
  @category_name=N'[Uncategorized (Local)]',
  @job_id = @jobId OUTPUT
  GO
  EXEC msdb.dbo.sp_add_jobserver @job_name=N'MYSSISJob',@server_name=N'(local)'
  GO
  EXEC msdb.dbo.sp_add_jobstep @job_name=N'MYSSISJob',@step_name=N'ExecuteSSISPackage',
  @step_id=1,
  @cmdexec_success_code=0,
  @on_success_action=1,
  @on_fail_action=2,
  @retry_attempts=0,
  @retry_interval=0,
  @os_run_priority=0,
  @subsystem=N'SSIS',
  @command=N'/ISSERVER "\"\SSISDB\MySSISFolder\MySSISProject\MySSISPackage.dtsx\"" /SERVER "\"my-rds-ssis-instance.corp-ad.company.com/\"" 
  /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E',
  @database_name=N'master',
  @flags=0,
  @proxy_name=N'SSIS_Proxy'
  GO
  ```

## 从代理撤消 SSIS 访问权限
<a name="SSIS.Use.Revoke"></a>

您可以使用以下存储过程撤消对 SSIS 子系统的访问权限并删除 SSIS 代理。

**撤消访问权限并删除代理**

1. 撤消子系统访问权限。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
   GO
   ```

1. 撤消代理上的授权。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSIS_Proxy',@name=N'mydomain\user_name'
   GO
   ```

1. 删除代理。

   ```
   USE [msdb]
   GO
   EXEC dbo.sp_delete_proxy @proxy_name = N'SSIS_Proxy'
   GO
   ```

# 禁用并删除 SSIS 数据库
<a name="SSIS.DisableDrop"></a>

使用以下步骤禁用或删除 SSIS 数据库：

**Topics**
+ [禁用 SSIS](#SSIS.Disable)
+ [删除 SSISDB 数据库](#SSIS.Drop)

## 禁用 SSIS
<a name="SSIS.Disable"></a>

要禁用 SSIS，请从其选项组中删除 `SSIS` 选项。

**重要**  
删除该选项不会删除 SSISDB 数据库，因此，您可以安全地删除该选项，而不会丢失 SSIS 项目。  
您可以在删除后重新启用 `SSIS` 选项，以重用先前部署到 SSIS 目录的 SSIS 项目。

### 控制台
<a name="SSIS.Disable.Console"></a>

以下过程删除 `SSIS` 选项。

**从其选项组中删除 SSIS 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `SSIS` 选项的选项组（在前面的示例中为 `ssis-se-2016`）。

1. 选择 **Delete option (删除选项)**。

1. 在**删除选项**下，为**待删除的选项**选择 **SSIS**。

1. 在 **Apply immediately (立即应用)** 下，选择 **Yes (是)** 可立即删除选项，选择 **No (否)** 可在下次维护时段时删除。

1. 选择**删除**。

### CLI
<a name="SSIS.Disable.CLI"></a>

以下过程删除 `SSIS` 选项。

**从其选项组中删除 SSIS 选项**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssis-se-2016 \
      --options SSIS \
      --apply-immediately
  ```

  对于 Windows：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssis-se-2016 ^
      --options SSIS ^
      --apply-immediately
  ```

## 删除 SSISDB 数据库
<a name="SSIS.Drop"></a>

删除 SSIS 选项后并不会删除 SSISDB 数据库。要删除 SSISDB 数据库，请在删除 SSIS 选项后使用 `rds_drop_ssis_database` 存储过程。

**删除 SSIS 数据库**
+ 使用以下存储过程。

  ```
  USE [msdb]
  GO
  EXEC dbo.rds_drop_ssis_database
  GO
  ```

删除 SSISDB 数据库后，如果您重新启用 SSIS 选项，则会获得一个新的 SSISDB 目录。

# Amazon RDS for SQL Server 中的 SQL Server Reporting Services 支持
<a name="Appendix.SQLServer.Options.SSRS"></a>

Microsoft SQL Server Reporting Services (SSRS) 是一个基于服务器的应用程序，用于生成和分发报告。它是 SQL Server 服务套件的一部分，其中还包括 SQL Server Analysis Services (SSAS) 和 SQL Server Integration Services (SSIS)。SSRS 是在 SQL Server 之上构建的服务。您可以使用它从各种数据源收集数据，并以易于理解和直接可供分析的方式呈现。

Amazon RDS for SQL Server 支持直接在 RDS 数据库实例上运行 SSRS。您可以将 SSR 用于现有或新的数据库实例。

RDS 在以下版本上对于 SQL Server 标准版和企业版支持 SSRS：
+ SQL Server 2022，所有版本
+ SQL Server 2019，版本 15.00.4043.16.v1 和更高版本
+ SQL Server 2017，版本 14.00.3223.3.v1 和更高版本
+ SQL Server 2016，版本 13.00.5820.21.v1 和更高版本

**Contents**
+ [限制和建议](#SSRS.Limitations)
+ [开启 SSRS](SSRS.Enabling.md)
  + [为 SSRS 创建选项组](SSRS.Enabling.md#SSRS.OptionGroup)
  + [将 SSRS 选项添加到选项组](SSRS.Enabling.md#SSRS.Add)
  + [将选项组与数据库实例关联](SSRS.Enabling.md#SSRS.Apply)
  + [允许对 VPC 安全组的入站访问](SSRS.Enabling.md#SSRS.Inbound)
+ [报告服务器数据库](#SSRS.DBs)
+ [SSRS 日志文件](#SSRS.Logs)
+ [访问 SSRS Web 门户](SSRS.Access.md)
  + [在 RDS 上使用 SSL](SSRS.Access.md#SSRS.Access.SSL)
  + [将访问权限授予域用户](SSRS.Access.md#SSRS.Access.Grant)
  + [访问 Web 门户](SSRS.Access.md#SSRS.Access)
+ [部署报告和配置报告数据来源](SSRS.DeployConfig.md)
  + [将报告部署到 SSRS](SSRS.DeployConfig.md#SSRS.Deploy)
  + [配置报告数据来源。](SSRS.DeployConfig.md#SSRS.ConfigureDataSource)
+ [使用 SSRS 电子邮件发送报告](SSRS.Email.md)
+ [撤销系统级权限](SSRS.Access.Revoke.md)
+ [监控任务的状态](SSRS.Monitor.md)
+ [禁用和删除 SSRS 数据库](SSRS.DisableDelete.md)
  + [关闭 SSRS](SSRS.DisableDelete.md#SSRS.Disable)
  + [删除 SSRS 数据库](SSRS.DisableDelete.md#SSRS.Drop)

## 限制和建议
<a name="SSRS.Limitations"></a>

以下限制和建议适用于在 RDS for SQL Server 上运行 SSRS：
+ 您不能在具有只读副本的数据库实例上使用 SSRS。
+ 实例必须使用自行管理的 Active Directory 或 AWS Directory Service for Microsoft Active Directory，才能进行 SSRS Web 门户和 Web 服务器身份验证。有关更多信息，请参阅 [将 Active Directory 用于 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。
+ 您无法备份使用 SSRS 选项创建的报表服务器数据库。
+ 不支持从 SSRS 的其他实例导入和恢复报告服务器数据库。有关更多信息，请参阅 [报告服务器数据库](#SSRS.DBs)。
+ 您无法将 SSRS 配置为侦听默认 SSL 端口 (443)。允许的值为 1150–49511，但不包括 1234、1434、3260、3343、3389 和 47001。
+ 不支持通过 Microsoft Windows 文件共享进行订阅。
+ 不支持使用报告服务配置管理器。
+ 不支持创建和修改角色。
+ 不支持修改报告服务器属性。
+ 未授予系统管理员和系统用户角色。
+ 无法通过 Web 门户编辑系统级角色分配。

# 开启 SSRS
<a name="SSRS.Enabling"></a>

使用以下过程为数据库实例开启 SSRS：

1. 创建新的选项组或选择现有的选项组。

1. 将 `SSRS` 选项添加到该选项组。

1. 将选项组与数据库实例相关联。

1. 允许对 SSRS 侦听器端口的 Virtual Private Cloud (VPC) 安全组进行入站访问。

## 为 SSRS 创建选项组
<a name="SSRS.OptionGroup"></a>

要使用 SSRS，请创建对应于计划使用的 SQL Server 引擎和数据库实例版本的选项组。为此，请使用 AWS 管理控制台或 AWS CLI。

**注意**  
如果现有选项组针对的是正确的 SQL Server 引擎和版本，也可以使用现有选项组。

### 控制台
<a name="SSRS.OptionGroup.Console"></a>

以下过程创建适用于 SQL Server 标准版 2017 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗格中，执行以下操作：

   1. 对于 **Name**（名称），输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **ssrs-se-2017**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **SSRS option group for SQL Server SE 2017**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于**主引擎版本**，选择 **14.00**。

1. 选择**创建**。

### CLI
<a name="SSRS.OptionGroup.CLI"></a>

以下过程创建适用于 SQL Server 标准版 2017 的选项组。

**创建选项组**
+ 运行以下命令之一。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds create-option-group \
    --option-group-name ssrs-se-2017 \
    --engine-name sqlserver-se \
    --major-engine-version 14.00 \
    --option-group-description "SSRS option group for SQL Server SE 2017"
```
对于：Windows  

```
aws rds create-option-group ^
    --option-group-name ssrs-se-2017 ^
    --engine-name sqlserver-se ^
    --major-engine-version 14.00 ^
    --option-group-description "SSRS option group for SQL Server SE 2017"
```

## 将 SSRS 选项添加到选项组
<a name="SSRS.Add"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `SSRS` 选项添加到您的选项组。

### 控制台
<a name="SSRS.Add.CON"></a>

**添加 SSRS 选项**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择刚创建的选项组，然后选择 **Add Option**（添加选项）。

1. 在**选项详细信息**下，为**选项名称**选择 **SSRS**。

1. 在**选项设置**下，执行以下操作：

   1. 输入 SSRS 服务要侦听的端口。默认值为 8443。有关允许值的列表，请参阅 [限制和建议](Appendix.SQLServer.Options.SSRS.md#SSRS.Limitations)。

   1. 输入**最大内存**的值。

      **最大内存**指定阈值上限，超过该阈值后，不会允许报告服务器应用程序的新内存分配请求。该数字是占数据库实例总内存的百分比。允许的值为 10–80。

   1. 对于 **Security groups (安全组)**，请选择要与选项关联的 VPC 安全组。使用与您数据库实例关联的相同安全组。

1. 要使用 SSRS 电子邮件发送报告，选择 **Email delivery in reporting services**（报告服务中的电子邮件递送）下的 **Configure email delivery options**（配置电子邮件递送选项）复选框，然后执行以下操作：

   1. 对于 **Sender email address**（发件人电子邮件地址），在 SSRS 电子邮件发送的邮件的 **From**（发件人）字段中输入要使用的电子邮件地址。

      指定有权从 SMTP 服务器发送邮件的用户账户。

   1. 对于 **SMTP server**（SMTP 服务器），请指定要使用的 SMTP 服务器或网关。

      它可以是 IP 地址、公司内部网中计算机的 NetBIOS 名称或完全限定域名。

   1. 对于 **SMTP port**（SMTP 端口），输入要用于连接到邮件服务器的端口。默认值为 25。

   1. 要使用身份验证：

      1. 选择 **Use authentication**（使用身份验证）复选框。

      1. 对于 **Secret Amazon Resource Name (ARN)** [密钥 Amazon 资源名称（ARN）]，输入用户凭证的 AWS Secrets Manager ARN。

         使用以下格式：

         **arn:aws:secretsmanager:*Region*:*AccountId*:secret:*SecretName*-*6RandomCharacters***

         例如：

         **arn:aws:secretsmanager:*us-west-2*:*123456789012*:secret:*MySecret-a1b2c3***

         有关创建密钥的更多信息，请参阅[使用 SSRS 电子邮件发送报告](SSRS.Email.md)。

   1. 选中 **Use Secure Sockets Layer (SSL)** [使用安全套接字层 (SSL)] 复选框可使用 SSL 加密电子邮件。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

1. 选择**添加选项**。

### CLI
<a name="SSRS.Add.CLI"></a>

**添加 SSRS 选项**

1. 创建 JSON 文件，例如：`ssrs-option.json`。

   1. 设置以下必需参数：
      + `OptionGroupName` – 您之前创建或选择的选项组的名称（以下示例中的 `ssrs-se-2017`）。
      + `Port` – SSRS 服务要侦听的端口。默认值为 8443。有关允许值的列表，请参阅 [限制和建议](Appendix.SQLServer.Options.SSRS.md#SSRS.Limitations)。
      + `VpcSecurityGroupMemberships` – RDS 数据库实例的 VPC 安全组成员。
      + `MAX_MEMORY` – 阈值上限，超过该阈值后，不会允许报告服务器应用程序的新内存分配请求。该数字是占数据库实例总内存的百分比。允许的值为 10–80。

   1. （可选）设置以下参数以使用 SSRS 电子邮件：
      + `SMTP_ENABLE_EMAIL` – 设置为 `true` 以使用 SSRS 电子邮件。默认值为 `false`。
      + `SMTP_SENDER_EMAIL_ADDRESS` – SSRS 电子邮件发送的邮件的 **From**（发件人）字段中要使用的电子邮件地址。指定有权从 SMTP 服务器发送邮件的用户账户。
      + `SMTP_SERVER` – 要使用的 SMTP 服务器或网关。它可以是 IP 地址、公司内部网中计算机的 NetBIOS 名称或完全限定域名。
      + `SMTP_PORT` – 用于连接到邮件服务器的端口。默认值为 25。
      + `SMTP_USE_SSL` – 设置为 `true` 以使用 SSL 加密电子邮件。默认值为 `true`。
      + `SMTP_EMAIL_CREDENTIALS_SECRET_ARN` – 用于保存用户凭证的 Secrets Manager ARN。采用以下格式：

        **arn:aws:secretsmanager:*Region*:*AccountId*:secret:*SecretName*-*6RandomCharacters***

        有关创建密钥的更多信息，请参阅[使用 SSRS 电子邮件发送报告](SSRS.Email.md)。
      + `SMTP_USE_ANONYMOUS_AUTHENTICATION` – 设置为 `true`，如果不想使用身份验证，则不包括 `SMTP_EMAIL_CREDENTIALS_SECRET_ARN`。

        当 `SMTP_ENABLE_EMAIL` 为 `true` 时，原定设置值为 `false`。

   以下示例包含使用密钥 ARN 的 SSRS 电子邮件参数。

   ```
   {
   "OptionGroupName": "ssrs-se-2017",
   "OptionsToInclude": [
   	{
   	"OptionName": "SSRS",
   	"Port": 8443,
   	"VpcSecurityGroupMemberships": ["sg-0abcdef123"],
   	"OptionSettings": [
               {"Name": "MAX_MEMORY","Value": "60"},
               {"Name": "SMTP_ENABLE_EMAIL","Value": "true"}
               {"Name": "SMTP_SENDER_EMAIL_ADDRESS","Value": "nobody@example.com"},
               {"Name": "SMTP_SERVER","Value": "email-smtp.us-west-2.amazonaws.com"},
               {"Name": "SMTP_PORT","Value": "25"},
               {"Name": "SMTP_USE_SSL","Value": "true"},
               {"Name": "SMTP_EMAIL_CREDENTIALS_SECRET_ARN","Value": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3"}
               ]
   	}],
   "ApplyImmediately": true
   }
   ```

1. 将 `SSRS` 选项添加到该选项组。  
**Example**  

   对于 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://ssrs-option.json \
       --apply-immediately
   ```

   对于：Windows

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://ssrs-option.json ^
       --apply-immediately
   ```

## 将选项组与数据库实例关联
<a name="SSRS.Apply"></a>

使用 AWS 管理控制台 或 AWS CLI 将您的选项组与数据库实例关联。

如果您使用现有数据库实例，则该实例必须已经关联了 Active Directory 域和 AWS Identity and Access Management (IAM) 角色。如果您创建新实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅 [将 Active Directory 用于 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

### 控制台
<a name="SSRS.Apply.Console"></a>

您可将您的选项组与新的或现有的数据库实例关联：
+ 对于新数据库实例，请在启动实例时关联选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请修改实例并关联新选项组。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### CLI
<a name="SSRS.Apply.CLI"></a>

您可将您的选项组与新的或现有的数据库实例关联。

**创建使用选项组的数据库实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssrsinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 14.00.3223.3.v1 \
      --allocated-storage 100 \
      --manage-master-user-password  \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssrs-se-2017
  ```

  对于：Windows

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssrsinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 14.00.3223.3.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssrs-se-2017
  ```

**修改数据库实例以使用选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssrsinstance \
      --option-group-name ssrs-se-2017 \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssrsinstance ^
      --option-group-name ssrs-se-2017 ^
      --apply-immediately
  ```

## 允许对 VPC 安全组的入站访问
<a name="SSRS.Inbound"></a>

要允许对与您数据库实例关联的 VPC 安全组的入站访问，请为指定的 SSRS 侦听器端口创建入站规则。有关设置安全组的更多信息，请参阅[通过创建安全组提供对 VPC 中的数据库实例的访问](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)。

## 报告服务器数据库
<a name="SSRS.DBs"></a>

当数据库实例与 SSRS 选项关联时，将在数据库实例上创建两个新的数据库：
+ `rdsadmin_ReportServer`
+ `rdsadmin_ReportServerTempDB`

这些数据库充当 ReportServer 和 ReportServerTempDB 数据库。SSRS 将其数据存储在 ReportServer 数据库中，并将其数据缓存在 ReportServerTempDB 数据库中。有关更多信息，请参阅 Microsoft 文档中的[报表服务器数据库](https://learn.microsoft.com/en-us/sql/reporting-services/report-server/report-server-database-ssrs-native-mode?view=sql-server-ver15)。

RDS 拥有和管理这些数据库，因此不允许对它们进行 ALTER 和 DROP 等数据库操作。不允许访问 `rdsadmin_ReportServerTempDB` 数据库。但是，您可以对 `rdsadmin_ReportServer` 数据库执行读取操作。

## SSRS 日志文件
<a name="SSRS.Logs"></a>

您可以列出、查看并下载 SSRS 日志文件。SSRS 日志文件遵循 ReportServerService\$1*timestamp*.log 的命名约定。这些报表服务器日志位于 `D:\rdsdbdata\Log\SSRS` 目录中。（`D:\rdsdbdata\Log` 目录也是错误日志和 SQL Server 代理日志的父目录。） 有关更多信息，请参阅 [查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)。

对于现有 SSRS 实例，可能需要重启 SSRS 服务才能访问报表服务器日志。可以通过更新 `SSRS` 选项来重启服务。

有关更多信息，请参阅 [使用 Amazon RDS for Microsoft SQL Server 日志](Appendix.SQLServer.CommonDBATasks.Logs.md)。

# 访问 SSRS Web 门户
<a name="SSRS.Access"></a>

使用以下过程访问 SSRS Web 门户：

1. 开启安全套接字层（SSL）。

1. 将访问权限授予域用户。

1. 使用浏览器和域用户凭证访问 Web 门户。

## 在 RDS 上使用 SSL
<a name="SSRS.Access.SSL"></a>

SSRS 为其连接使用 HTTPS SSL 协议。若要使用此协议，请将 SSL 证书导入客户端计算机上的 Microsoft Windows 操作系统。

有关 SSL 证书的更多信息，请参阅[使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。有关将 SSL 与 SQL Server 一起使用的更多信息，请参阅[将 SSL 与 Microsoft SQL Server 数据库实例结合使用](SQLServer.Concepts.General.SSL.Using.md)。

## 将访问权限授予域用户
<a name="SSRS.Access.Grant"></a>

在新的 SSRS 激活中，SSRS 中没有角色分配。为了授予域用户或用户组访问 Web 门户的访问权限，RDS 提供了一个存储过程。

**向 Web 门户上的域用户授予访问权限**
+ 使用以下存储过程。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSRS_GRANT_PORTAL_PERMISSION',
  @ssrs_group_or_username=N'AD_domain\user';
  ```

向域用户或用户组授予 `RDS_SSRS_ROLE` 系统角色。此角色授予了以下系统级任务：
+ 运行报告
+ 管理作业。
+ 管理共享计划
+ 查看共享计划

还授予根文件夹上 `Content Manager` 的项目级角色。

## 访问 Web 门户
<a name="SSRS.Access"></a>

`SSRS_GRANT_PORTAL_PERMISSION` 任务成功完成后，您具有使用 Web 浏览器访问门户的权限。Web 门户 URL 的格式如下。

```
https://rds_endpoint:port/Reports
```

在此格式中，以下项适用：
+ *`rds_endpoint`* – 与 SSRS 一起使用的 RDS 数据库实例的终端节点。

  您可以在数据库实例的**连接和安全性**选项卡上找到终端节点。有关更多信息，请参阅“[连接到 Microsoft SQL Server 数据库实例](USER_ConnectToMicrosoftSQLServerInstance.md)”。
+ `port` – 您在 `SSRS` 选项中设置的 SSRS 侦听器端口。

**访问 Web 门户**

1. 在浏览器中输入 Web 门户网址。

   ```
   https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/Reports
   ```

1. 使用您通过 `SSRS_GRANT_PORTAL_PERMISSION` 任务授予访问权限的域用户的凭证登录。

# 部署报告和配置报告数据来源
<a name="SSRS.DeployConfig"></a>

使用以下过程将报告部署到 SSRS 并配置报告数据来源：

**Topics**
+ [将报告部署到 SSRS](#SSRS.Deploy)
+ [配置报告数据来源。](#SSRS.ConfigureDataSource)

## 将报告部署到 SSRS
<a name="SSRS.Deploy"></a>

访问 Web 门户后，您可以将报告部署到其中。您可以使用 Web 门户中的上传工具来上传报告，或直接从 [SQL Server Data Tools (SSDT)](https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt) 部署。从 SSDT 部署时，请确保以下各项：
+ 启动 SSDT 的用户可以访问 SSRS Web 门户。
+ SSRS 项目属性中的 `TargetServerURL` 值设置为带 `ReportServer` 后缀的 RDS 数据库实例的 HTTPS 终端节点，例如：

  ```
  https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/ReportServer
  ```

## 配置报告数据来源。
<a name="SSRS.ConfigureDataSource"></a>

将报告部署到 SSRS 后，应配置报告数据来源。配置报告数据来源时，请确保满足以下条件：
+ 对于已加入 AWS Directory Service for Microsoft Active Directory 的 RDS for SQL Server 数据库实例，使用完全限定域名（FQDN）作为连接字符串的数据来源名称。以 `myssrsinstance.corp-ad.example.com` 为例，其中 `myssrsinstance` 是数据库实例名称，`corp-ad.example.com` 是完全限定域名。
+ 对于已加入自行管理的 Active Directory 的 RDS for SQL Server 数据库实例，请使用 `.` 或 `LocalHost` 作为连接字符串的数据来源名称。

# 使用 SSRS 电子邮件发送报告
<a name="SSRS.Email"></a>

SSRS 包括 SSRS 电子邮件扩展，您可以使用它向用户发送报告。

要配置 SSRS 电子邮件，请使用 `SSRS` 选项设置。有关更多信息，请参阅 [将 SSRS 选项添加到选项组](SSRS.Enabling.md#SSRS.Add)。

配置 SSRS 电子邮件后，您可以在报告服务器上订阅报表。有关更多信息，请参阅 Microsoft 文档中的[报告服务中的电子邮件递送](https://docs.microsoft.com/en-us/sql/reporting-services/subscriptions/e-mail-delivery-in-reporting-services)。

与 AWS Secrets Manager 集成是 SSRS 电子邮件在 RDS 上运行所必需的。要与 Secrets Manager 集成，您需要创建密钥。

**注意**  
如果您稍后更改密钥，则还必须更新选项组中的 `SSRS` 选项。

**为 SSRS 电子邮件创建密钥**

1. 按照《AWS Secrets Manager 用户指南》**中[创建密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)的步骤操作。

   1. 对于**选择密钥类型**，选择**其他密钥类型**。

   1. 对于 **Key/value pairs**（键值对），输入以下内容：
      + **SMTP\$1USERNAME** – 输入有权从 SMTP 服务器发送邮件的用户。
      + **SMTP\$1PASSWORD** – 输入 SMTP 用户的密码。

   1. 对于 **Encryption key**（加密密钥），不要使用原定设置 AWS KMS key。使用您自己的现有密钥，或创建新密钥。

      KMS 密钥策略必须允许 `kms:Decrypt` 操作，例如：

      ```
      {
          "Sid": "Allow use of the key",
          "Effect": "Allow",
          "Principal": {
              "Service": [
                  "rds.amazonaws.com"
              ]
          },
          "Action": [
              "kms:Decrypt"
          ],
          "Resource": "*"
      }
      ```

1. 按照《AWS Secrets Manager 用户指南》**中的[将权限策略附加到密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_resource-policies.html)中的步骤进行操作。权限策略将 `secretsmanager:GetSecretValue` 操作提供给 `rds.amazonaws.com` 服务主体。

   我们建议您在策略中使用 `aws:sourceAccount` 和 `aws:sourceArn` 条件，以避免出现*混淆代理人*问题。将您的 AWS 账户用于 `aws:sourceAccount`，并将选项组 ARN 用于 `aws:sourceArn`。有关更多信息，请参阅 [防范跨服务混淆代理问题](cross-service-confused-deputy-prevention.md)。

   下面显示了一个示例权限策略。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [ {
       "Effect" : "Allow",
       "Principal" : {
         "Service" : "rds.amazonaws.com"
       },
       "Action" : "secretsmanager:GetSecretValue",
       "Resource" : "*",
       "Condition" : {
         "StringEquals" : {
           "aws:sourceAccount" : "123456789012"
         },
         "ArnLike" : {
           "aws:sourceArn" : "arn:aws:rds:us-west-2:123456789012:og:ssrs-se-2017"
         }
       }
     } ]
   }
   ```

------

   有关更多示例，请参阅《AWS Secrets Manager 用户指南》**中的 [AWS Secrets Manager 的权限策略示例](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html)。

# 撤销系统级权限
<a name="SSRS.Access.Revoke"></a>

`RDS_SSRS_ROLE` 系统角色没有足够的权限来删除系统级角色分配。要从 `RDS_SSRS_ROLE` 中删除用户或用户组，请使用在授予角色时使用的相同存储过程，但使用 `SSRS_REVOKE_PORTAL_PERMISSION` 任务类型。

**撤消域用户对 Web 门户的访问权限**
+ 使用以下存储过程。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSRS_REVOKE_PORTAL_PERMISSION',
  @ssrs_group_or_username=N'AD_domain\user';
  ```

执行此操作将从 `RDS_SSRS_ROLE` 系统角色中删除用户。如果用户有 `Content Manager` 项目级角色，则还会从其中删除该用户。

# 监控任务的状态
<a name="SSRS.Monitor"></a>

要跟踪您的授予或撤消任务的状态，请调用 `rds_fn_task_status` 函数。它获取两个参数。第一个参数应该始终为 `NULL`，因为它不适用于 SSRS。第二个参数接受任务 ID。

要查看所有任务的列表，请将第一个参数设置为 `NULL`，将第二个参数设置为 `0`，如以下示例所示。

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

要获取特定任务，请将第一个参数设置为 `NULL`，将第二个参数设置为任务 ID，如以下示例所示。

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

`rds_fn_task_status` 函数将返回以下信息。


| 输出参数 | 描述 | 
| --- | --- | 
| `task_id` | 任务的 ID。 | 
| `task_type` | 对于 SSRS，任务可以具有以下任务类型： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SSRS.Monitor.html)  | 
| `database_name` | 不适用于 SSRS 任务。 | 
| `% complete` | 用百分比表示的任务进度。 | 
| `duration (mins)` | 在任务上花费的时间 (以分钟为单位)。 | 
| `lifecycle` |  任务的状态。有以下可能状态： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SSRS.Monitor.html)  | 
| `task_info` | 有关任务的其他信息。如果在处理过程中发生错误，则此列包含有关错误的信息。 | 
| `last_updated` | 上次更新任务状态的日期和时间。 | 
| `created_at` | 任务的创建日期和时间。 | 
| `S3_object_arn` |  不适用于 SSRS 任务。  | 
| `overwrite_S3_backup_file` | 不适用于 SSRS 任务。 | 
| `KMS_master_key_arn` |  不适用于 SSRS 任务。  | 
| `filepath` |  不适用于 SSRS 任务。  | 
| `overwrite_file` |  不适用于 SSRS 任务。  | 
| `task_metadata` | 与 SSRS 任务关联的元数据。 | 

# 禁用和删除 SSRS 数据库
<a name="SSRS.DisableDelete"></a>

使用以下过程禁用 SSRS 并删除 SSRS 数据库：

**Topics**
+ [关闭 SSRS](#SSRS.Disable)
+ [删除 SSRS 数据库](#SSRS.Drop)

## 关闭 SSRS
<a name="SSRS.Disable"></a>

要关闭 SSRS，请从其选项组中删除 `SSRS` 选项。删除该选项不会删除 SSRS 数据库。有关更多信息，请参阅 [删除 SSRS 数据库](#SSRS.Drop)。

您可以通过重新添加 `SSRS` 选项以再次开启 SSRS。如果您还删除了 SSRS 数据库，则在同一数据库实例上重新添加此选项会创建新的报告服务器数据库。

### 控制台
<a name="SSRS.Disable.Console"></a>

**从其选项组中删除 SSRS 选项**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `SSRS` 选项的选项组（在前面的示例中为 `ssrs-se-2017`）。

1. 选择 **Delete option (删除选项)**。

1. 在**删除选项**下，为**待删除的选项**选择 **SSRS**。

1. 在 **Apply immediately (立即应用)** 下，选择 **Yes (是)** 可立即删除选项，选择 **No (否)** 可在下次维护时段时删除。

1. 选择**删除**。

### CLI
<a name="SSRS.Disable.CLI"></a>

**从其选项组中删除 SSRS 选项**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssrs-se-2017 \
      --options SSRS \
      --apply-immediately
  ```

  对于 Windows：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssrs-se-2017 ^
      --options SSRS ^
      --apply-immediately
  ```

## 删除 SSRS 数据库
<a name="SSRS.Drop"></a>

删除 `SSRS` 选项不会删除报告服务器数据库。要删除数据库，请使用以下存储过程。

要删除报表服务器数据库，请务必先删除 `SSRS` 选项。

**删除 SSRS 数据库**
+ 使用以下存储过程。

  ```
  exec msdb.dbo.rds_drop_ssrs_databases
  ```

# RDS for SQL Server 中的 Microsoft 分布式事务处理协调器支持
<a name="Appendix.SQLServer.Options.MSDTC"></a>

*分布式事务*是涉及两个或多个网络主机的数据库事务。RDS for SQL Server 支持在主机之间存在分布式事务，其中一个主机可以是以下之一：
+ RDS for SQL Server DB 实例
+ 本地 SQL Server 主机
+ 安装了 SQL Server 的 Amazon EC2 主机
+ 具有支持分布式事务的数据库引擎的任何其他 EC2 主机或 RDS 数据库实例

在 RDS 中，从 SQL Server 2012（版本 11.00.5058.0.v1 及更高版本）开始，RDS for SQL Server 的所有版本都支持分布式事务。该支持使用 Microsoft 分布式事务处理协调器 (MSDTC) 提供。有关 MSDTC 的详细信息，请参阅 Microsoft 文档中的[分布式事务处理协调器](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms684146(v=vs.85))。

**Contents**
+ [限制](#Appendix.SQLServer.Options.MSDTC.Limitations)
+ [启用 MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md)
  + [为 MSDTC 创建选项组](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.OptionGroup)
  + [将 MSDTC 选项添加到选项组](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Add)
  + [为 MSDTC 创建参数组](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.CreateParamGroup)
  + [修改 MSDTC 的参数](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)
  + [将选项组和参数组与数据库实例关联](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.Apply)
  + [修改 MSDTC 选项](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Modify)
+ [使用事务](#Appendix.SQLServer.Options.MSDTC.Using)
  + [使用分布式事务](#Appendix.SQLServer.Options.MSDTC.UsingXA)
  + [使用 XA 事务](#MSDTC.XA)
  + [使用事务跟踪](#MSDTC.Tracing)
+ [禁用 MSDTC](Appendix.SQLServer.Options.MSDTC.Disable.md)
+ [RDS for SQL Server 的 MSDTC 故障排除](Appendix.SQLServer.Options.MSDTC.Troubleshooting.md)

## 限制
<a name="Appendix.SQLServer.Options.MSDTC.Limitations"></a>

以下限制适用于在 RDS for SQL Server 上使用 MSDTC：
+ 使用 SQL Server 数据库镜像的实例上不支持 MSDTC。有关详细信息，请参阅[事务 – 可用性组和数据库镜像](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-ver15#non-support-for-distributed-transactions)。
+ `in-doubt xact resolution` 参数必须设置为 1 或 2。有关更多信息，请参阅 [修改 MSDTC 的参数](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)。
+ MSDTC 要求参与分布式事务的所有主机都可以使用其主机名进行解析。RDS 会自动为加入域的实例维护此功能。但是，对于独立实例，请确保手动配置 DNS 服务器。
+ SQL Server 2017 版本 14.00.3223.3 及更高版本和 SQL Server 2019 支持 Java Database Connectivity (JDBC) XA 事务。
+ 依赖于 RDS 实例上的客户端动态链接库 (DLL) 的分布式事务不受支持。
+ 不支持使用自定义 XA 动态链接库。

# 启用 MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Enabling"></a>

使用以下过程为数据库实例启用 MSDTC：

1. 创建新的选项组或选择现有的选项组。

1. 将 `MSDTC` 选项添加到该选项组。

1. 创建新的参数组，或选择现有参数组。

1. 修改参数组以将 `in-doubt xact resolution` 参数设置为 1 或 2。

1. 将选项组和参数组与数据库实例关联。

## 为 MSDTC 创建选项组
<a name="Appendix.SQLServer.Options.MSDTC.OptionGroup"></a>

使用 AWS 管理控制台 或 AWS CLI 创建对应于 SQL Server 引擎和数据库实例版本的选项组。

**注意**  
如果现有选项组针对的是正确的 SQL Server 引擎和版本，也可以使用现有选项组。

### 控制台
<a name="OptionGroup.MSDTC.Console"></a>

以下控制台过程创建适用于 SQL Server 标准版 2016 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗格中，执行以下操作：

   1. 对于**名称**，输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **msdtc-se-2016**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **MSDTC option group for SQL Server SE 2016**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于**主要引擎版本**，选择 **13.00**。

1. 选择**创建**。

### CLI
<a name="OptionGroup.MSDTC.CLI"></a>

以下示例为 SQL Server 标准版 2016 创建一个选项组。

**创建选项组**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name msdtc-se-2016 \
      --engine-name sqlserver-se \
      --major-engine-version 13.00 \
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

  对于 Windows：

  ```
  aws rds create-option-group ^
      --option-group-name msdtc-se-2016 ^
      --engine-name sqlserver-se ^
      --major-engine-version 13.00 ^
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

## 将 MSDTC 选项添加到选项组
<a name="Appendix.SQLServer.Options.MSDTC.Add"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `MSDTC` 选项添加到选项组。

以下选项设置为必需：
+ **端口** – 用于访问 MSDTC 的端口。允许的值为 1150–49151，但不包括 1234、1434、3260、3343、3389 和 47001。默认值是 5000。

  确保在防火墙规则中启用了要使用的端口。此外，请确保根据需要，在与数据库实例关联的安全组的入站和出站规则中启用了此端口。有关更多信息，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。
+ **Security groups**（安全组）– RDS 数据库实例的 VPC 安全组成员。
+ **身份验证类型** – 主机之间的身份验证模式。支持以下身份验证类型：
  + 双向 – RDS 实例使用集成身份验证双向进行身份验证。如果选择此选项，则与此选项组关联的所有实例都必须加入域。
  + 无 – 主机之间不进行身份验证。我们建议不要在生产环境中使用此模式。
+ **事务日志大小** – MSDTC 事务日志的大小。允许的值为 4–1024 MB。默认大小为 4 MB。

以下选项设置可选：
+ **启用入站连接** – 是否允许指向与此选项组关联的实例的入站 MSDTC 连接。
+ **启用出站连接** – 是否允许来自与此选项组关联的实例的出站 MSDTC 连接。
+ **启用 XA** – 是否允许 XA 事务。有关 XA 协议的更多信息，请参阅 [XA 规范](https://publications.opengroup.org/c193)。
+ **启用 SNA LU** – 是否允许将 SNA LU 协议用于分布式事务。有关 SNA LU 协议支持的更多信息，请参阅 Microsoft 文档中的[管理 IBM CICS LU 6.2 事务](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms685136(v=vs.85))。

### 控制台
<a name="Options.MSDTC.Add.Console"></a>

**添加 MSDTC 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择刚刚创建的选项组。

1. 选择**添加选项**。

1. 在**选项详细信息**下，为**选项名称** 选择 **MSDTC**。

1. 在**选项设置**下：

   1. 对于**端口**，输入访问 MSDTC 的端口号。默认值为 **5000**。

   1. 对于 **Security groups (安全组)**，请选择要与选项关联的 VPC 安全组。

   1. 对于**身份验证类型**，请选择**双向**或**无**。

   1. 对于**事务日志大小**，请输入 4–1024 之间的值。默认值为 **4**。

1. 在**其他配置**下，执行以下操作：

   1. 对于**连接**，根据需要选择**启用入站连接**和**启用出站连接**。

   1. 对于**允许的协议**，根据需要选择**启用 XA** 和**启用 SNA LU**。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

1. 选择**添加选项**。

   添加此选项不需要重新启动。

### CLI
<a name="Options.MSDTC.Add.CLI"></a>

**添加 MSDTC 选项**

1. 使用以下必需参数创建 JSON 文件，例如 `msdtc-option.json`：

   ```
   {
   "OptionGroupName":"msdtc-se-2016",
   "OptionsToInclude": [
   	{
   	"OptionName":"MSDTC",
   	"Port":5000,
   	"VpcSecurityGroupMemberships":["sg-0abcdef123"],
   	"OptionSettings":[{"Name":"AUTHENTICATION","Value":"MUTUAL"},{"Name":"TRANSACTION_LOG_SIZE","Value":"4"}]
   	}],
   "ApplyImmediately": true
   }
   ```

1. 将 `MSDTC` 选项添加到该选项组。  
**Example**  

   对于 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://msdtc-option.json \
       --apply-immediately
   ```

   对于 Windows：

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://msdtc-option.json ^
       --apply-immediately
   ```

   无需重新启动。

## 为 MSDTC 创建参数组
<a name="MSDTC.CreateParamGroup"></a>

为与 SQL Server 版本和数据库实例版本对应的 `in-doubt xact resolution` 参数创建或修改参数组。

### 控制台
<a name="CreateParamGroup.MSDTC.Console"></a>

以下示例为 SQL Server 标准版 2016 创建一个参数组。

**创建参数组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择**创建参数组**。

1. 在**创建参数组**窗格中，执行以下操作：

   1. 对于**参数组系列**，选择 **sqlserver-se-13.0**。

   1. 对于**组名称**，输入参数组的标识符，如 **msdtc-sqlserver-se-13**。

   1. 对于**描述**，输入 **in-doubt xact resolution**。

1. 选择**创建**。

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

以下示例为 SQL Server 标准版 2016 创建一个参数组。

**创建参数组**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "in-doubt xact resolution"
  ```

  对于 Windows：

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "in-doubt xact resolution"
  ```

## 修改 MSDTC 的参数
<a name="ModifyParam.MSDTC"></a>

修改与 SQL Server 版本和数据库实例版本对应的参数组中的 `in-doubt xact resolution` 参数。

对于 MSDTC，将 `in-doubt xact resolution` 参数设置为以下选项之一：
+ `1` – `Presume commit`。任何 MSDTC 有疑问的事务都假定为已经提交。
+ `2` – `Presume abort`。任何 MSDTC 有疑问的事务都假定为已停止。

有关更多信息，请参阅 Microsoft 文档中的[有疑问的 Xact 解析服务器配置选项](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option)。

### 控制台
<a name="ModifyParam.MSDTC.Console"></a>

以下示例修改您为 SQL Server 标准版 2016 创建的参数组。

**修改参数组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择参数组，例如 **msdtc-sqlserver-se-13**。

1. 在**参数**下，从参数列表中筛选 **xact**。

1. 选择 **in-doubt xact resolution (有疑问的 Xact 解析)**。

1. 选择**编辑参数**。

1. 输入 **1** 或 **2**。

1. 选择 **Save changes（保存更改）**。

### CLI
<a name="ModifyParam.MSDTC.CLI"></a>

以下示例修改您为 SQL Server 标准版 2016 创建的参数组。

**修改参数组**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

  对于 Windows：

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

## 将选项组和参数组与数据库实例关联
<a name="MSDTC.Apply"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 将 MSDTC 选项组和参数组与数据库实例相关联。

### 控制台
<a name="MSDTC.Apply.Console"></a>

您可以将 MSDTC 选项组和参数组与新的或现有的数据库实例相关联。
+ 对于新数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。
**注意**  
如果您使用加入域的现有数据库实例，则该实例必须已经关联了 Active Directory 域和 AWS Identity and Access Management (IAM) 角色。如果您创建新的加入域实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅 [将 AWS Managed Active Directory 用于 RDS for SQL Server](USER_SQLServerWinAuth.md)。

### CLI
<a name="MSDTC.Apply.CLI"></a>

您可以将 MSDTC 选项组和参数组与新的或现有的数据库实例相关联。

**注意**  
如果您使用现有的加入域数据库实例，则该实例必须已经关联了 Active Directory 域和 IAM 角色。如果您创建新的加入域实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅“[将 AWS Managed Active Directory 用于 RDS for SQL Server](USER_SQLServerWinAuth.md)”。

**使用 MSDTC 选项组和参数组创建数据库实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**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 \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name msdtc-se-2016 \
      --db-parameter-group-name msdtc-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 ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name msdtc-se-2016 ^
      --db-parameter-group-name msdtc-sqlserver-se-13
  ```

**修改数据库实例并关联 MSDTC 选项组和参数组**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

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

  对于 Windows：

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

## 修改 MSDTC 选项
<a name="Appendix.SQLServer.Options.MSDTC.Modify"></a>

启用 `MSDTC` 选项后，您可以修改其设置。有关如何修改选项设置的信息，请参阅[修改选项设置](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

**注意**  
对 MSDTC 选项设置的一些更改需要重新启动 MSDTC 服务。此要求可能会影响正在运行的分布式事务。

## 使用事务
<a name="Appendix.SQLServer.Options.MSDTC.Using"></a>

### 使用分布式事务
<a name="Appendix.SQLServer.Options.MSDTC.UsingXA"></a>

在 Amazon RDS for SQL Server 中，您可以按照与本地运行分布式事务相同的方式运行分布式事务：
+ 使用 .NET 框架 `System.Transactions` 可提升事务，它通过将分布式事务的创建推迟到在需要时进行，以此优化分布式事务。

  在这种情况下，提升是自动的，不需要您进行任何干预。如果事务中只有一个资源管理器，则不执行任何提升。有关隐式事务范围的更多信息，请参阅 Microsoft 文档中的[使用事务范围实施隐式事务](https://docs.microsoft.com/en-us/dotnet/framework/data/transactions/implementing-an-implicit-transaction-using-transaction-scope)。

  以下 .NET 实施支持可提升事务：
  + 从 ADO.NET 2.0 开始，`System.Data.SqlClient` 支持 SQL Server 的可提升事务。有关更多信息，请参阅 Microsoft 文档中的 [System.Transactions 与 SQL Server 的集成](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server)。
  + ODP.NET 支持 `System.Transactions`。将为在 `TransactionsScope` 范围内与 Oracle Database 11g 发行版 1（版本 11.1）及更高版本建立的第一个连接创建一个本地事务。建立第二个连接时，此事务将自动提升为分布式事务。有关 ODP.NET 中的分布式事务支持的更多信息，请参阅 Microsoft 文档中的 [Microsoft 分布式事务处理协调器集成](https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/ntmts/using-mts-with-oracledb.html)。
+ 使用 `BEGIN DISTRIBUTED TRANSACTION` 语句。有关更多信息，请参阅 Microsoft 文档中的 [BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-distributed-transaction-transact-sql)。

### 使用 XA 事务
<a name="MSDTC.XA"></a>

从 RDS for SQL Server 2017 版本 14.00.3223.3 开始，您可以使用 JDBC 控制分布式事务。当您在 `MSDTC` 选项将 `Enable XA` 选项设置为 `true` 时，RDS 会自动启用 JDBC 事务并授予 `SqlJDBCXAUser` 角色给 `guest` 用户。这允许通过 JDBC 执行分布式事务。有关包括代码示例在内的更多信息，请参阅 Microsoft 文档中的[了解 XA 事务](https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-xa-transactions)。

### 使用事务跟踪
<a name="MSDTC.Tracing"></a>

RDS 支持控制 MSDTC 事务跟踪并从 RDS 数据库实例下载它们以进行故障排除。您可以通过运行以下 RDS 存储过程来控制事务跟踪会话。

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'trace_action',
[@traceall='0|1'],
[@traceaborted='0|1'],
[@tracelong='0|1'];
```

以下参数是必需参数：
+ `trace_action` – 跟踪操作。它可以是 `START`、`STOP` 或 `STATUS`。

以下参数为可选参数：
+ `@traceall` – 设置为 1 可跟踪所有分布式事务。默认值为 0。
+ `@traceaborted` – 设置为 1 可跟踪已取消的分布式事务。默认值为 0。
+ `@tracelong` – 设置为 1 可跟踪长时间运行的分布式事务。默认值为 0。

**Example 启动跟踪操作示例**  
要启动新的事务跟踪会话，请运行以下示例语句。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'START',
@traceall='0',
@traceaborted='1',
@tracelong='1';
```
一次只能有一个活动的事务跟踪会话。如果在有跟踪会话处于活动状态时发出了新的跟踪会话 `START` 命令，则返回错误，并且活动的跟踪会话保持不变。

**Example 停止跟踪操作示例**  
要停止事务跟踪会话，请运行以下语句。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
```
此语句停止活动的事务跟踪会话，并将事务跟踪数据保存到 RDS 数据库实例上的日志目录中。输出的第一行包含整体结果，后面的行表示操作的详细信息。  
以下是成功跟踪会话停止的示例。  

```
OK: Trace session has been successfully stopped.
Setting log file to: D:\rdsdbdata\MSDTC\Trace\dtctrace.log
Examining D:\rdsdbdata\MSDTC\Trace\msdtctr.mof for message formats,  8 found.
Searching for TMF files on path: (null)
Logfile D:\rdsdbdata\MSDTC\Trace\dtctrace.log:
 OS version    10.0.14393  (Currently running on 6.2.9200)
 Start Time    <timestamp>
 End Time      <timestamp>
 Timezone is   @tzres.dll,-932 (Bias is 0mins)
 BufferSize            16384 B
 Maximum File Size     10 MB
 Buffers  Written      Not set (Logger may not have been stopped).
 Logger Mode Settings (11000002) ( circular paged
 ProcessorCount         1 
Processing completed   Buffers: 1, Events: 3, EventsLost: 0 :: Format Errors: 0, Unknowns: 3
Event traces dumped to d:\rdsdbdata\Log\msdtc_<timestamp>.log
```
您可以使用详细信息查询生成的日志文件的名称。有关从 RDS 数据库实例下载日志文件的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。  
跟踪会话日志在实例上保留 35 天。任何较旧的跟踪会话日志都会自动删除。

**Example 状态跟踪操作示例**  
要跟踪事务跟踪会话的状态，请运行以下语句。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
```
此语句在规则集中将以下内容作为单独的行输出。  

```
OK
SessionStatus: <Started|Stopped>
TraceAll: <True|False>
TraceAborted: <True|False>
TraceLongLived: <True|False>
```
第一行表示操作的整体结果：`OK` 或 `ERROR`，并带有详细信息（如果适用）。后面的行指示有关跟踪会话状态的详细信息：  
+ `SessionStatus` 的值可以是以下值之一：
  + `Started`，有跟踪会话正在运行时。
  + `Stopped`，没有跟踪会话正在运行时。
+ 跟踪会话标志可以是 `True` 或 `False`，具体取决于它们在 `START` 命令中的设置方式。

# 禁用 MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Disable"></a>

要禁用 MSDTC，请从其选项组中删除 `MSDTC` 选项。

## 控制台
<a name="Options.MSDTC.Disable.Console"></a>

**从其选项组中删除 MSDTC 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `MSDTC` 选项的选项组（在前面的示例中为 `msdtc-se-2016`）。

1. 选择 **Delete option (删除选项)**。

1. 在**删除选项**下，为**待删除的选项**选择 **MSDTC**。

1. 在 **Apply immediately (立即应用)** 下，选择 **Yes (是)** 可立即删除选项，选择 **No (否)** 可在下次维护时段时删除。

1. 选择**删除**。

## CLI
<a name="Options.MSDTC.Disable.CLI"></a>

**从其选项组中删除 MSDTC 选项**
+ 使用以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name msdtc-se-2016 \
      --options MSDTC \
      --apply-immediately
  ```

  对于 Windows：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name msdtc-se-2016 ^
      --options MSDTC ^
      --apply-immediately
  ```

# RDS for SQL Server 的 MSDTC 故障排除
<a name="Appendix.SQLServer.Options.MSDTC.Troubleshooting"></a>

在某些情况下，您可能无法在客户端计算机上运行的 MSDTC，与在 RDS for SQL Server 数据库实例上运行的 MSDTC 服务之间建立连接。如果是这样，请确保满足以下条件：
+ 与数据库实例关联的安全组的入站规则配置正确。有关更多信息，请参阅“[无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)”。
+ 您的客户端计算机配置正确。
+ 客户端计算机上的 MSDTC 防火墙规则已启用。

**配置客户端计算机**

1. 打开**组件服务**。

   或者，在**服务器管理器**中，选择**工具**，然后选择**组件服务**。

1. 展开**组件服务**，展开**计算机**，展开 **我的电脑**，然后展开**分布式事务处理协调器**。

1. 打开 **Local DTC (本地 DTC)** 的上下文（右键单击）菜单，然后选择 **Properties (属性)**。

1. 选择**安全性**选项卡。

1. 选择以下所有选项：
   + **网络 DTC 访问**
   + **允许入站**
   + **允许出站**

1. 确保选择了正确的身份验证模式：
   + **需要双向身份验证** – 客户端计算机与参与分布式事务的其他节点加入到同一个域中，或者在域之间配置了信任关系。
   + **无需身份验证** – 所有其他情况。

1. 选择**确定**以保存您的更改。

1. 如果系统提示您重新启动服务，请选择**是**。

**启用 MSDTC 防火墙规则**

1. 打开 Windows 防火墙，然后选择**高级设置**。

   打开**服务器管理器**，选择**工具**，然后选择**高级安全 Windows 防火墙**。
**注意**  
根据您的操作系统，Windows 防火墙可能称为 Windows Defender 防火墙。

1. 在左侧窗格中选择**入站规则**。

1. 如果尚未启用以下防火墙规则，请启用：
   + **分布式事务处理协调器 (RPC)**
   + **分布式事务处理协调器 (RPC) - EPMAP**
   + **分布式事务处理协调器 (TCP-In)**

1. 关闭 Windows 防火墙。

# 适用于 RDS for SQL Server 的 Microsoft SQL Server 资源调控器
<a name="Appendix.SQLServer.Options.ResourceGovernor"></a>

资源调控器是 SQL Server 企业版的一项功能，可让您精确控制实例资源。它支持您对工作负载如何使用 CPU、内存和物理 I/O 资源设置特定的限制。使用资源调控器，您可以：
+ 通过管理不同工作负载共享实例资源的方式，防止在多租户环境中发生资源垄断
+ 通过为不同的用户和应用程序设置特定的资源限制和优先级，提供可预测的性能

您可以在现有或新的 RDS for SQL Server 数据库实例上启用资源调控器。

资源调控器使用三个基本概念：
+ **资源池**：管理实例物理资源（CPU、内存和 I/O）的容器。您将获得两个内置池（内部和默认），并且可以创建其它自定义池。
+ **工作负载组**：用于存放具有相似特征的数据库会话的容器。每个工作负载组都属于一个资源池。您将获得两个内置工作负载组（内部和默认），并且可以创建其它自定义工作负载组。
+ **分类**：根据用户名、应用程序名称、数据库名称或主机名，确定哪个工作负载组处理传入会话的过程。

有关 SQL Server 中资源调控器功能的更多详细信息，请参阅 Microsoft 文档中的 [Resource Governor](https://learn.microsoft.com/en-us/sql/relational-databases/resource-governor/resource-governor?view=sql-server-ver16)。

**Contents**
+ [支持的版本和区域](#ResourceGovernor.SupportedVersions)
+ [限制和建议](#ResourceGovernor.Limitations)
+ [对 RDS for SQL Server 实例启用 Microsoft SQL Server 资源调控器](ResourceGovernor.Enabling.md)
  + [为 `RESOURCE_GOVERNOR` 创建选项组](ResourceGovernor.Enabling.md#ResourceGovernor.OptionGroup)
  + [将 `RESOURCE_GOVERNOR` 选项添加到选项组](ResourceGovernor.Enabling.md#ResourceGovernor.Add)
  + [将选项组与数据库实例关联](ResourceGovernor.Enabling.md#ResourceGovernor.Apply)
+ [对 RDS for SQL Server 实例使用 Microsoft SQL Server 资源调控器](ResourceGovernor.Using.md)
  + [管理资源池](ResourceGovernor.Using.md#ResourceGovernor.ManageResourcePool)
    + [创建资源池](ResourceGovernor.Using.md#ResourceGovernor.CreateResourcePool)
    + [更改资源池](ResourceGovernor.Using.md#ResourceGovernor.AlterResourcePool)
    + [删除资源池](ResourceGovernor.Using.md#ResourceGovernor.DropResourcePool)
  + [管理工作负载组](ResourceGovernor.Using.md#ResourceGovernor.ManageWorkloadGroups)
    + [创建工作负载组](ResourceGovernor.Using.md#ResourceGovernor.CreateWorkloadGroup)
    + [更改工作负载组](ResourceGovernor.Using.md#ResourceGovernor.AlterWorkloadGroup)
    + [删除工作负载组](ResourceGovernor.Using.md#ResourceGovernor.DropWorkloadGroup)
  + [创建并注册分类器函数](ResourceGovernor.Using.md#ResourceGovernor.ClassifierFunction)
  + [删除分类器函数](ResourceGovernor.Using.md#ResourceGovernor.DropClassifier)
  + [注销分类器函数](ResourceGovernor.Using.md#ResourceGovernor.DeregisterClassifier)
  + [重置统计数据](ResourceGovernor.Using.md#ResourceGovernor.ResetStats)
  + [资源调控器配置更改](ResourceGovernor.Using.md#ResourceGovernor.ConfigChanges)
  + [将 TempDB 绑定到资源池](ResourceGovernor.Using.md#ResourceGovernor.BindTempDB)
  + [解除 TempDB 与资源池的绑定](ResourceGovernor.Using.md#ResourceGovernor.UnbindTempDB)
  + [清理资源调控器](ResourceGovernor.Using.md#ResourceGovernor.Cleanup)
+ [多可用区部署的注意事项](#ResourceGovernor.Considerations)
+ [只读副本的注意事项](#ResourceGovernor.ReadReplica)
+ [使用适用于 RDS for SQL Server 实例的系统视图监控 Microsoft SQL Server 资源调控器](ResourceGovernor.Monitoring.md)
  + [资源池运行时统计数据](ResourceGovernor.Monitoring.md#ResourceGovernor.ResourcePoolStats)
+ [对 RDS for SQL Server 实例禁用 Microsoft SQL Server 资源调控器](ResourceGovernor.Disabling.md)
+ [在 RDS for SQL Server 上配置资源调控器的最佳实践](ResourceGovernor.BestPractices.md)

## 支持的版本和区域
<a name="ResourceGovernor.SupportedVersions"></a>

在所有提供 RDS for SQL Server 的 AWS 区域中，Amazon RDS 对于以下 SQL Server 版本支持资源调控器：
+ SQL Server 2022 开发人员版和企业版
+ SQL Server 2019 企业版
+ SQL Server 2017 企业版
+ SQL Server 2016 企业版

## 限制和建议
<a name="ResourceGovernor.Limitations"></a>

以下限制和建议适用于资源调控器：
+ 版本和服务限制：
  + 仅在 SQL Server 企业版中可用。
  + 资源管理仅限于 SQL Server 数据库引擎。不支持将资源调控器用于分析服务、集成服务和报告服务。
+ 配置限制：
  + 必须使用 Amazon RDS 存储过程来实施所有配置。
  + 不支持原生 DDL 语句和 SQL Server Management Studio GUI 配置。
+ 资源池参数：
  + 不支持以 `rds_` 开头的池名称。
  + 不允许修改内部资源池和默认资源池。
  + 对于用户定义的资源池，不支持以下资源池参数：
    + `MIN_MEMORY_PERCENT`
    + `MIN_CPU_PERCENT`
    + `MIN_IOPS_PER_VOLUME`
    + `AFFINITY`
+ 工作负载组参数：
  + 不支持以 `rds_` 开头的工作负载组名称。
  + 不允许修改内部工作负载组。
  + 对于默认工作负载组：
    + 只可修改 `REQUEST_MAX_MEMORY_GRANT_PERCENT` 参数。
    + 对于默认工作负载组，`REQUEST_MAX_MEMORY_GRANT_PERCENT` 必须介于 1 到 70 之间。
    + 所有其它参数均已锁定，无法更改。
  + 用户定义的工作负载组支持修改所有参数。
+ 分类器函数限制：
  + 分类器函数根据指定的标准（用户名、数据库、主机或应用程序名称）将连接路由到自定义工作负载组。
  + 支持多达两个用户定义的工作负载组及其各自的路由条件。
  + 将标准与每个组内的 `AND` 条件相结合。
  + 每个工作负载组需要至少一个路由标准。
  + 仅支持上面列出的分类方法。
  + 函数名称必须以 `rg_classifier_` 开头。
  + 如果没有条件匹配，则使用默认组分配。

# 对 RDS for SQL Server 实例启用 Microsoft SQL Server 资源调控器
<a name="ResourceGovernor.Enabling"></a>

通过向 RDS for SQL Server 数据库实例添加 `RESOURCE_GOVERNOR` 选项，启用资源调控器。使用以下过程：

1. 创建新的选项组或选择现有的选项组。

1. 将 `RESOURCE_GOVERNOR` 选项添加到该选项组。

1. 将选项组与数据库实例相关联。

**注意**  
通过选项组启用资源调控器不要求重启。

## 为 `RESOURCE_GOVERNOR` 创建选项组
<a name="ResourceGovernor.OptionGroup"></a>

要启用资源调控器，请创建或修改与您计划使用的 SQL Server 版本和数据库实例版本对应的选项组。要完成此过程，请使用 AWS 管理控制台或 AWS CLI。

### 控制台
<a name="ResourceGovernor.OptionGroup.Console"></a>

使用以下过程创建适用于 SQL Server 企业版 2022 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗口中，执行以下操作：

   1. 对于**名称**，输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **resource-governor-ee-2022**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **RESOURCE\$1GOVERNOR option group for SQL Server EE 2022**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-ee**。

   1. 对于**主引擎版本**，选择 **16.00**。

1. 选择**创建**。

### CLI
<a name="ResourceGovernor.OptionGroup.CLI"></a>

以下过程创建适用于 SQL Server 企业版 2022 的选项组。

**创建选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name resource-governor-ee-2022 \
      --engine-name sqlserver-ee \
      --major-engine-version 16.00 \
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

  对于：Windows

  ```
  aws rds create-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --engine-name sqlserver-ee ^
      --major-engine-version 16.00 ^
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

## 将 `RESOURCE_GOVERNOR` 选项添加到选项组
<a name="ResourceGovernor.Add"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `RESOURCE_GOVERNOR` 选项添加到您的选项组。

### 控制台
<a name="ResourceGovernor.Add.Console"></a>

**添加 RESOURCE\$1GOVERNOR 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择您刚创建的选项组（在此示例中为 **resource-governor-ee-2022**）。

1. 选择**添加选项**。

1. 在**选项详细信息**下，对于**选项名称**选择 **RESOURCE\$1GOVERNOR**。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

1. 选择**添加选项**。

### CLI
<a name="ResourceGovernor.Add.CLI"></a>

**添加 `RESOURCE_GOVERNOR` 选项。**
+ 将 `RESOURCE_GOVERNOR` 选项添加到该选项组。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options "OptionName=RESOURCE_GOVERNOR" \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds add-option-to-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options "OptionName=RESOURCE_GOVERNOR" ^
      --apply-immediately
  ```

## 将选项组与数据库实例关联
<a name="ResourceGovernor.Apply"></a>

要将 `RESOURCE_GOVERNOR` 选项组与数据库实例关联，请使用 AWS 管理控制台或 AWS CLI。

### 控制台
<a name="ResourceGovernor.Apply.Console"></a>

要完成激活资源调控器，请将 `RESOURCE_GOVERNOR` 选项组与新的或现有的数据库实例关联：
+ 对于新数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### CLI
<a name="ResourceGovernor.Apply.CLI"></a>

可以将 `RESOURCE_GOVERNOR` 选项组与新的或现有的数据库实例关联。

**使用 `RESOURCE_GOVERNOR` 选项组创建实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserverresourcegovernorinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-ee \
      --engine-version 16.00 \
      --license-model license-included \
      --allocated-storage 100 \
      --master-username admin \
      --master-user-password password \
      --storage-type gp2 \
      --option-group-name resource-governor-ee-2022
  ```

  对于：Windows

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserverresourcegovernorinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-ee ^
      --engine-version 16.00 ^
      --license-model license-included ^
      --allocated-storage 100 ^
      --master-username admin ^
      --master-user-password password ^
      --storage-type gp2 ^
      --option-group-name resource-governor-ee-2022
  ```

**修改实例并关联 `RESOURCE_GOVERNOR` 选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestinstance \
      --option-group-name resource-governor-ee-2022 \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestinstance ^
      --option-group-name resource-governor-ee-2022 ^
      --apply-immediately
  ```

# 对 RDS for SQL Server 实例使用 Microsoft SQL Server 资源调控器
<a name="ResourceGovernor.Using"></a>

在将资源调控器选项添加到选项组后，资源调控器尚未在数据库引擎级别处于活动状态。要完全启用资源调控器，必须使用 RDS for SQL Server 存储过程启用它，并创建所需的资源调控器对象。有关更多信息，请参阅 [连接到 Microsoft SQL Server 数据库实例](USER_ConnectToMicrosoftSQLServerInstance.md)。

首先，连接到 SQL Server 数据库，然后调用相应的 RDS for SQL Server 存储过程以完成配置。有关连接到数据库的说明，请参阅 [连接到 Microsoft SQL Server 数据库实例](USER_ConnectToMicrosoftSQLServerInstance.md)。

有关如何调用每个存储过程的说明，请参阅以下主题：

**Topics**
+ [管理资源池](#ResourceGovernor.ManageResourcePool)
+ [管理工作负载组](#ResourceGovernor.ManageWorkloadGroups)
+ [创建并注册分类器函数](#ResourceGovernor.ClassifierFunction)
+ [删除分类器函数](#ResourceGovernor.DropClassifier)
+ [注销分类器函数](#ResourceGovernor.DeregisterClassifier)
+ [重置统计数据](#ResourceGovernor.ResetStats)
+ [资源调控器配置更改](#ResourceGovernor.ConfigChanges)
+ [将 TempDB 绑定到资源池](#ResourceGovernor.BindTempDB)
+ [解除 TempDB 与资源池的绑定](#ResourceGovernor.UnbindTempDB)
+ [清理资源调控器](#ResourceGovernor.Cleanup)

## 管理资源池
<a name="ResourceGovernor.ManageResourcePool"></a>

### 创建资源池
<a name="ResourceGovernor.CreateResourcePool"></a>

一旦在选项组上启用了资源调控器，您就可以使用 `rds_create_resource_pool` 创建自定义资源池。这些池可让您将特定百分比的 CPU、内存和 IOPS 分配给不同的工作负载。

**用法**

```
USE [msdb]
EXEC dbo.rds_create_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value
```

以下参数为必需参数：
+ `@group_name`：是现有的用户定义工作负载组的名称。
+ `@pool_name`：是资源池的用户定义名称。*pool\$1name* 是字母数字，最多可包含 128 个字符，在数据库引擎实例中必须是唯一的，并且必须符合数据库标识符规则。

以下参数可选：
+ `@MAX_CPU_PERCENT`：指定在出现 CPU 争用时，资源池中的所有请求可获得的最大平均 CPU 带宽。*value* 是一个整数，默认设置为 100。支持的 *value* 范围介于 1 到 100 之间。
+ `@CAP_CPU_PERCENT`：指定资源池中的所有请求可获得的 CPU 带宽的硬上限。将最大 CPU 带宽级别限制为与指定的值相同。*value* 是一个整数，默认设置为 100。支持的 *value* 范围介于 1 到 100 之间。
+ `@MAX_MEMORY_PERCENT`：指定此资源池中的请求可以使用的最大查询工作区内存量。*value* 是一个整数，默认设置为 100。支持的 *value* 范围介于 1 到 100 之间。
+ `@MAX_IOPS_PER_VOLUME`：指定支持用于资源池的每个磁盘卷的最大每秒 I/O 操作数（IOPS）。支持的 *value* 范围介于 0 到 2^31-1（2147483647）之间。指定 0 可移除池的 IOPS 限制。默认值是 0。

**示例**

使用所有默认值创建资源池的示例：

```
--This creates resource pool 'SalesPool' with all default values
USE [msdb]
EXEC rds_create_resource_pool @pool_name = 'SalesPool';
     
--Apply changes
USE [msdb]
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
     
--Validate configuration
select * from sys.resource_governor_resource_pools
```

使用指定的不同参数创建资源池的示例：

```
--creates resource pool
USE [msdb]
EXEC dbo.rds_create_resource_pool    
@pool_name='analytics',
@MAX_CPU_PERCENT = 30,
@CAP_CPU_PERCENT = 40,
@MAX_MEMORY_PERCENT = 20;
            
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
    
--Validate configuration
select * from sys.resource_governor_resource_pools
```

### 更改资源池
<a name="ResourceGovernor.AlterResourcePool"></a>

**用法**

```
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value;
```

以下参数为必需参数：
+ `@pool_name`：是现有的用户定义资源池的名称。Amazon RDS SQL Server 不支持更改默认资源池。

至少必须指定其中一个可选参数：
+ `@MAX_CPU_PERCENT`：指定在出现 CPU 争用时，资源池中的所有请求可获得的最大平均 CPU 带宽。*value* 是一个整数，默认设置为 100。支持的 *value* 范围介于 1 到 100 之间。
+ `@CAP_CPU_PERCENT`：指定资源池中的所有请求可获得的 CPU 带宽的硬上限。将最大 CPU 带宽级别限制为与指定的值相同。*value* 是一个整数，默认设置为 100。支持的 *value* 范围介于 1 到 100 之间。
+ `@MAX_MEMORY_PERCENT`：指定此资源池中的请求可以使用的最大查询工作区内存量。*value* 是一个整数，默认设置为 100。支持的 *value* 范围介于 1 到 100 之间。
+ `@MAX_IOPS_PER_VOLUME`：指定支持用于资源池的每个磁盘卷的最大每秒 I/O 操作数（IOPS）。支持的 *value* 范围介于 0 到 2^31-1（2147483647）之间。指定 0 可移除池的 IOPS 限制。默认值是 0。

**示例**

```
--This alters resource pool
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name='analytics',
    @MAX_CPU_PERCENT = 10,
    @CAP_CPU_PERCENT = 20,
    @MAX_MEMORY_PERCENT = 50;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration.
select * from sys.resource_governor_resource_pools
```

### 删除资源池
<a name="ResourceGovernor.DropResourcePool"></a>

**用法**

```
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name=value;
```

以下参数是必需参数：
+ `@pool_name`：是现有的用户定义资源池的名称。

**注意**  
SQL Server 不支持删除内部资源池或默认资源池。

**示例**

```
--This drops resource pool
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name='analytics'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_resource_pools
```

## 管理工作负载组
<a name="ResourceGovernor.ManageWorkloadGroups"></a>

使用 `rds_create_workload_group` 和 `rds_alter_workload_group` 创建和管理的工作负载组支持您为查询组设置重要性级别、内存授予和其它参数。

### 创建工作负载组
<a name="ResourceGovernor.CreateWorkloadGroup"></a>

**用法**

```
USE [msdb]
EXEC dbo.rds_create_workload_group 
@group_name = value, 
@IMPORTANCE ={ LOW | MEDIUM | HIGH }, 
@REQUEST_MAX_MEMORY_GRANT_PERCENT =value, 
@REQUEST_MAX_CPU_TIME_SEC = value , 
@REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, 
@MAX_DOP = value, 
@GROUP_MAX_REQUESTS = value, 
@pool_name = value
```

以下参数为必需参数：
+ `@pool_name`：是现有的用户定义资源池的名称。
+ `@group_name`：是现有的用户定义工作负载组的名称。

以下参数可选：
+ `@IMPORTANCE`：指定请求在工作负载组中的相对重要性。默认值为 `MEDIUM`。
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT`：指定单个请求可以从池中占用的最大查询工作区内存量。*value* 是由 `MAX_MEMORY_PERCENT` 定义的资源池大小的百分比。默认值为 25。
+ `@REQUEST_MAX_CPU_TIME_SEC`：指定批处理请求可以使用的最大 CPU 时间量（秒）。*value* 必须为 0 或正整数。*value* 的默认设置为 0，这意味着无限制。
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC`：指定查询可以等待查询工作区内存中的内存授予变为可用的最长时间（秒）。*value* 必须为 0 或正整数。*value* 的默认设置为 0，此时使用基于查询成本的内部计算来确定最长时间。
+ `@MAX_DOP`：指定并行查询执行的最大并行度 (`MAXDOP`)。支持的 *value* 范围介于 0 到 64 之间。*value* 的默认设置为 0，此时使用全局设置。
+ `@GROUP_MAX_REQUESTS`：指定支持在工作负载组中同时执行的最大请求数。*value* 必须为 0 或正整数。*值*的默认设置为 0，支持无限制的请求。
+ `@pool_name` = 将工作负载组与由 *pool\$1name* 标识的用户定义资源池或 `default` 资源池相关联。如果未提供 *pool\$1name*，则工作负载组将与内置 `default` 池相关联。

**示例**

```
--This creates workload group named 'analytics'
USE msdb;
EXEC dbo.rds_create_workload_group 
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 25, 
    @REQUEST_MAX_CPU_TIME_SEC = 0, 
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 0, 
    @MAX_DOP = 0, 
    @GROUP_MAX_REQUESTS = 0, 
    @pool_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
  
--Validate configuration
select * from sys.resource_governor_workload_groups
```

### 更改工作负载组
<a name="ResourceGovernor.AlterWorkloadGroup"></a>

**用法**

```
EXEC msdb.dbo.rds_alter_workload_group
    @group_name = value,
    @IMPORTANCE = 'LOW|MEDIUM|HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = value,
    @REQUEST_MAX_CPU_TIME_SEC = value,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value,
    @MAX_DOP = value,
    @GROUP_MAX_REQUESTS = value,
    @pool_name = value
```

以下参数为必需参数：
+ `@group_name`：是默认工作负载组或现有的用户定义工作负载组的名称。

**注意**  
仅支持更改默认工作负载组上的 `REQUEST_MAX_MEMORY_GRANT_PERCENT` 参数。对于默认工作负载组，`REQUEST_MAX_MEMORY_GRANT_PERCENT` 必须介于 1 到 70 之间。在默认工作负载组中不能修改其它参数。可以在用户定义的工作负载组中修改所有参数。

以下参数可选：
+ `@IMPORTANCE`：指定请求在工作负载组中的相对重要性。默认值为 MEDIUM。
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT`：指定单个请求可以从池中占用的最大查询工作区内存量。*value* 是由 `MAX_MEMORY_PERCENT` 定义的资源池大小的百分比。默认值为 25。在 Amazon RDS 上，`REQUEST_MAX_MEMORY_GRANT_PERCENT` 必须介于 1 到 70 之间。
+ `@REQUEST_MAX_CPU_TIME_SEC`：指定批处理请求可以使用的最大 CPU 时间量（秒）。*value* 必须为 0 或正整数。*value* 的默认设置为 0，这意味着无限制。
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC`：指定查询可以等待查询工作区内存中的内存授予变为可用的最长时间（秒）。*value* 必须为 0 或正整数。*value* 的默认设置为 0，此时使用基于查询成本的内部计算来确定最长时间。
+ `@MAX_DOP`：指定并行查询执行的最大并行度（MAXDOP）。支持的 *value* 范围介于 0 到 64 之间。*value* 的默认设置为 0，此时使用全局设置。
+ `@GROUP_MAX_REQUESTS`：指定支持在工作负载组中同时执行的最大请求数。*value* 必须为 0 或正整数。*值*的默认设置为 0，支持无限制的请求。
+ `@pool_name`：将工作负载组与由 *pool\$1name* 标识的用户定义资源池相关联。

**示例**

修改默认工作负载组以更改 REQUEST\$1MAX\$1MEMORY\$1GRANT\$1PERCENT 的示例：

```
--Modify default workload group (set memory grant cap to 10%)
USE msdb
EXEC dbo.rds_alter_workload_group    
    @group_name = 'default',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT=10;
    
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
SELECT * FROM sys.resource_governor_workload_groups WHERE name='default';
```

修改非默认工作负载组的示例：

```
EXEC msdb.dbo.rds_alter_workload_group    
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 30,
    @REQUEST_MAX_CPU_TIME_SEC = 3600,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 60,
    @MAX_DOP = 4,
    @GROUP_MAX_REQUESTS = 100;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

将非默认工作负载组移到另一个资源池的示例：

```
EXEC msdb.dbo.rds_alter_workload_group    
@group_name = 'analytics',
@pool_name='abc'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

### 删除工作负载组
<a name="ResourceGovernor.DropWorkloadGroup"></a>

**用法**

```
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = value
```

以下参数为必需参数：
+ `@group_name`：是现有的用户定义工作负载组的名称。

**示例**

```
--Drops a Workload Group:
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

## 创建并注册分类器函数
<a name="ResourceGovernor.ClassifierFunction"></a>

此过程在主数据库中创建资源调控器分类器函数，该函数根据指定的标准（用户名、数据库、主机或应用程序名称）将连接路由到自定义工作负载组。如果启用了资源调控器并在资源调控器配置中指定了分类器函数，则函数输出将决定用于新会话的工作负载组。在没有分类器函数的情况下，所有会话都归类到 `default` 组。

**设施特点：**
+ 支持多达两个工作负载组及其各自的路由条件。
+ 将标准与每个组内的 `AND` 条件相结合。
+ 每个工作负载组需要至少一个路由标准。
+ 函数名称必须以 `rg_classifier_` 开头。
+ 如果没有条件匹配，则使用默认组分配。

分类器函数具有以下特征和行为：
+ 该函数在服务器作用域（在主数据库中）中定义。
+ 该函数是通过架构绑定定义的。
+ 即使启用了连接池，也会为每个新会话评估该函数。
+ 该函数返回会话的工作负载组上下文。会话分配给分类器在会话生命周期内返回的工作负载组。
+ 如果函数返回 NULL、默认值或不存在的工作负载组的名称，则会话将获得默认的工作负载组上下文。如果函数因任何原因失败，也会为会话提供默认上下文。
+ 可以创建多个分类器函数。但是，SQL Server 支持一次只注册一个分类器函数。
+ 除非使用将函数名称设置为 NULL 的注销过程 (`EXEC dbo.msdb.rds_alter_resource_governor_configuration @deregister_function = 1;`) 来移除分类器状态，或者使用 (`EXEC dbo.msdb.rds_alter_resource_governor_configuration @classifier_function = <function_name>;`) 注册另一个分类器函数，否则无法删除分类器函数
+ 在没有分类器函数的情况下，所有会话都归类到默认组。
+ 在资源调控器配置中引用分类器函数时，您无法修改该函数。不过，您可以修改配置以使用不同的分类器函数。如果要对分类器进行更改，可以考虑创建一对分类器函数。例如，您可以创建 `rg_classifier_a` 和 `rg_classifier_b`。

**用法**

```
EXEC msdb.dbo.rds_create_classifier_function 
@function_name = value,
@workload_group1 = value, 
@user_name1 = value,
@db_name1 = value,
@host_name1 = value, 
@app_name1 = value, 
@workload_group2 = value,
@user_name2 = value,
@db_name2 = value,
@host_name2 = value,
@app_name2 = value
```

以下参数为必需参数：
+ `@function_name`：分类器函数的名称。必须以 `rg_classifier_` 开头
+ `@workload_group1`：第一个工作负载组的名称

以下参数可选：

（必须为组 1 指定其中至少一个标准）
+ `@user_name1`：组 1 的登录名
+ `@db_name1`：组 1 的数据库名称
+ `@host_name1`：组 1 的主机名
+ `@app_name1`：组 1 的应用程序名称

（如果指定组 2，则必须至少提供一个标准）
+ `@workload_group2`：第二个工作负载组的名称
+ `@user_name2`：组 2 的登录名
+ `@db_name2`：组 2 的数据库名称
+ `@host_name2`：组 2 的主机名
+ `@app_name2`：组 2 的应用程序名称

**注意**  
系统账户、数据库、应用程序和主机受到限制。

**示例**

一个工作负载组的基本示例：

```
/*Create a classifier to route all requests from 'PowerBI' app to workload group 
'reporting_group'*/

EXEC msdb.dbo.rds_create_classifier_function
@function_name = 'rg_classifier_a',
@workload_group1 = 'reporting_group',
@app_name1 = 'PowerBI';

--Register the classifier
EXEC msdb.dbo.rds_alter_resource_governor_configuration
@classifier_function = 'rg_classifier_a';

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration

/*Query sys.resource_governor_configuration to validate that resource governor is enabled and is using the classifier function we created and registered*/

use master
go
SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name,
       OBJECT_NAME(classifier_function_id) AS classifier_object_name,
       is_enabled
FROM sys.resource_governor_configuration;
```

## 删除分类器函数
<a name="ResourceGovernor.DropClassifier"></a>

**用法**

```
USE [msdb]
EXEC dbo.rds_drop_classifier_function
@function_name = value;
```

以下参数是必需参数：
+ `@function_name`：是现有的用户定义分类器函数的名称

**示例**：

```
EXEC msdb.dbo.rds_drop_classifier_function
@function_name = 'rg_classifier_b';
```

## 注销分类器函数
<a name="ResourceGovernor.DeregisterClassifier"></a>

使用此过程可注销分类器函数。注销该函数后，新的会话将自动分配给默认工作负载组。

**用法**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration    
@deregister_function = 1;
```

要注销，需要使用以下参数：
+ `@deregister_function` 必须为 1

**示例**：

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration 
    @deregister_function = 1;
GO

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

## 重置统计数据
<a name="ResourceGovernor.ResetStats"></a>

资源调控器统计数据是自上次服务器重新启动以来的累积数据。如果您需要从特定时间开始收集统计数据，则可以使用以下 Amazon RDS 存储过程来重置统计数据。

**用法**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

要重置统计数据，需要使用以下参数：
+ `@reset_statistics` 必须为 1

## 资源调控器配置更改
<a name="ResourceGovernor.ConfigChanges"></a>

如果未启用资源调控器，则 `rds_alter_resource_governor_configuration` 启用资源调控器。启用资源调控器会产生以下结果：
+ 对新会话执行分类器函数（如果有），并将会话分配给工作负载组。
+ 在资源调控器配置中指定的资源限制将得到遵守和执行。
+ 在资源调控器配置中指定的资源限制将得到遵守和执行。
+ 在启用资源调控器之前存在的请求可能会受到启用资源调控器时所做的任何配置更改的影响。
+ 启用资源调控器之前的现有请求可能会受到启用资源调控器时所做的任何配置更改的影响。
+ 在 RDS for SQL Server 上，必须执行 `EXEC msdb.dbo.rds_alter_resource_governor_configuration` 才能使任何资源调控器配置更改生效。

**用法**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration
```

## 将 TempDB 绑定到资源池
<a name="ResourceGovernor.BindTempDB"></a>

在 Amazon RDS SQL Server 版本 2019 及更高版本中，您可以使用 `rds_bind_tempdb_metadata_to_resource_pool` 将 tempdb 内存优化型元数据绑定到特定的资源池。

**注意**  
在将 tempdb 元数据绑定到资源池之前，必须启用内存优化型 tempdb 元数据功能。要在 Amazon RDS 上启用此功能，需要使用静态参数 `tempdb metadata memory-optimized`。

在 Amazon RDS 上启用静态参数，并在不进行失效转移的情况下执行重启以使该参数生效：

```
aws rds modify-db-parameter-group \
    --db-parameter-group-name test-sqlserver-ee-2022 \
    --parameters "ParameterName='tempdb metadata memory-optimized',ParameterValue=True,ApplyMethod=pending-reboot"
```

**用法**

```
USE [msdb]
EXEC dbo.rds_bind_tempdb_metadata_to_resource_pool  
@pool_name=value;
```

以下参数是必需参数：
+ `@pool_name`：是现有的用户定义资源池的名称。

**注意**  
即使内存优化型 TempDB 元数据功能已启用，此更改也需要在不进行失效转移的情况下重启 sql 服务才能生效。

## 解除 TempDB 与资源池的绑定
<a name="ResourceGovernor.UnbindTempDB"></a>

从资源池中解除绑定 tempdb 内存优化型元数据。

**注意**  
此更改也要求在不进行失效转移的情况下重启 sql 服务才能生效

**用法**

```
USE [msdb]
EXEC dbo.rds_unbind_tempdb_metadata_from_resource_pool
```

## 清理资源调控器
<a name="ResourceGovernor.Cleanup"></a>

此过程将在您从选项组中移除资源调控器选项后，清理所有关联的对象。这将禁用资源调控器，将默认工作负载组恢复为默认设置，移除自定义工作负载组、资源池和分类器函数。

**主要特征**
+ 将默认工作负载组恢复为默认设置
+ 禁用资源调控器
+ 移除自定义工作负载组
+ 移除自定义资源池
+ 删除分类器函数
+ 如果启用，则移除 tempdb 资源池绑定

**重要**  
如果工作负载组上有活动的会话，则此清理可能会出错。要么等待活动的会话完成，要么根据您的业务要求终止活动的会话。建议在维护时段运行此操作。  
如果资源池已绑定到 tempdb，并且尚未在没有进行失效转移的情况下重启，则此清理可能会出错。如果您之前将资源池绑定到 tempdb 或解除了资源池与 tempdb 的绑定，请在不进行失效转移的情况下执行重启以使更改生效。建议在维护时段运行此操作。

**用法**

```
USE [msdb]
EXEC dbo.rds_cleanup_resource_governor
```

## 多可用区部署的注意事项
<a name="ResourceGovernor.Considerations"></a>

RDS for SQL Server 将资源调控器复制到多可用区部署中的辅助实例。您可以验证修改时间以及新的资源调控器上次与辅助实例同步的时间。

使用以下查询来检查复制的 `last_sync_time`：

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

在查询结果中，如果同步时间超过了资源调控器更新或创建时间，则资源调控器将与辅助实例同步。

要执行手动数据库失效转移以确认资源调控器复制，请先等待 `last_sync_time` 进行更新。然后，继续进行多可用区失效转移。

## 只读副本的注意事项
<a name="ResourceGovernor.ReadReplica"></a>
+ 对于与源数据库实例位于同一区域的 SQL Server 副本，请使用与源相同的选项组。对选项组的更改会立即传播到副本，而不考虑其维护时段。
+ 当您创建 SQL Server 跨区域副本时，RDS 会为其创建专用选项组。
+ 您无法从专用选项组中删除 SQL Server 跨区域副本。任何其他数据库实例都无法使用 SQL Server 跨区域副本的专用选项组。
+ 资源调控器选项为非复制的选项。您可以在专用选项组中添加或删除未复制的选项。
+ 提升 SQL Server 跨区域只读副本时，提升后的副本的行为与其他 SQL Server 数据库实例相同，包括其选项的管理。

**注意**  
当在只读副本上使用资源调控器时，在将选项添加到选项组后，您必须手动确保已使用 Amazon RDS 存储过程在只读副本上配置了资源调控器。资源调控器配置不会自动复制到只读副本。此外，只读副本上的工作负载通常与主实例不同。因此，建议根据您的工作负载和实例类型在副本上应用资源配置。您可以在只读副本上独立运行这些 Amazon RDS 存储过程，以便在只读副本上配置资源调控器。

# 使用适用于 RDS for SQL Server 实例的系统视图监控 Microsoft SQL Server 资源调控器
<a name="ResourceGovernor.Monitoring"></a>

资源调控器统计数据是自上次服务器重新启动以来的累积数据。如果您需要从特定时间开始收集统计数据，则可以使用以下 Amazon RDS 存储过程来重置统计数据：

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

## 资源池运行时统计数据
<a name="ResourceGovernor.ResourcePoolStats"></a>

对于每个资源池，资源调控器会跟踪 CPU 和内存利用率、内存不足事件、内存授予、I/O 以及其它统计数据。有关更多信息，请参阅 [ sys.dm\$1resource\$1governor\$1resource\$1pools](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-resource-governor-resource-pools-transact-sql?view=sql-server-ver17)。

以下查询返回所有资源池的可用统计数据的子集：

```
SELECT rp.pool_id,
       rp.name AS resource_pool_name,
       wg.workload_group_count,
       rp.statistics_start_time,
       rp.total_cpu_usage_ms,
       rp.target_memory_kb,
       rp.used_memory_kb,
       rp.out_of_memory_count,
       rp.active_memgrant_count,
       rp.total_memgrant_count,
       rp.total_memgrant_timeout_count,
       rp.read_io_completed_total,
       rp.write_io_completed_total,
       rp.read_bytes_total,
       rp.write_bytes_total,
       rp.read_io_stall_total_ms,
       rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
            SELECT COUNT(1) AS workload_group_count
            FROM sys.dm_resource_governor_workload_groups AS wg
            WHERE wg.pool_id = rp.pool_id
            ) AS wg;
```

# 对 RDS for SQL Server 实例禁用 Microsoft SQL Server 资源调控器
<a name="ResourceGovernor.Disabling"></a>

在 RDS for SQL Server 上禁用资源调控器后，该服务将停止管理工作负载资源。在禁用资源调控器之前，请查看这会如何影响您的数据库连接和配置。

禁用资源调控器会产生以下结果：
+ 打开新连接时不会执行分类器函数。
+ 新连接会自动分类到默认工作负载组。
+ 所有现有的工作负载组和资源池设置都将重置为其默认值。
+ 达到限制时不会触发任何事件。
+ 可以对资源调控器配置进行更改，但只有在启用资源调控器后，更改才会生效。

要禁用资源调控器，请从其选项组中移除 `RESOURCE_GOVERNOR` 选项。

## 控制台
<a name="ResourceGovernor.Disabling.Console"></a>

以下过程删除 `RESOURCE_GOVERNOR` 选项。

**从其选项组中删除 RESOURCE\$1GOVERNOR 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `RESOURCE_GOVERNOR` 选项的选项组（在前面的示例中为 `resource-governor-ee-2022`）。

1. 选择 **Delete option (删除选项)**。

1. 在**删除选项**下，为**待删除的选项**选择 **RESOURCE\$1GOVERNOR**。

1. 在 **Apply immediately**（立即应用）下，选择 **Yes**（是）可立即删除选项，选择 **No**（否）可在下一个维护时段删除它。

1. 选择**删除**。

## CLI
<a name="ResourceGovernor.Disabling.CLI"></a>

以下过程删除 `RESOURCE_GOVERNOR` 选项。

**从其选项组中删除 RESOURCE\$1GOVERNOR 选项**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options RESOURCE_GOVERNOR \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options RESOURCE_GOVERNOR ^
      --apply-immediately
  ```

# 在 RDS for SQL Server 上配置资源调控器的最佳实践
<a name="ResourceGovernor.BestPractices"></a>

为了控制资源消耗，RDS for SQL Server 支持 Microsoft SQL Server 资源调控器。以下最佳实践有助于您避免常见的配置问题并优化数据库性能。

1. 资源调控器配置存储在 `master` 数据库中。我们建议您始终单独保存资源调控器配置脚本的一个副本。

1. 分类器函数延长了登录处理时间，因此建议避免在分类器中使用复杂的逻辑。过于复杂的函数可能会导致登录延迟或连接超时，包括 Amazon RDS 自动化会话。这可能会影响 Amazon RDS 自动化功能监控实例运行状况的能力。因此，始终建议在生产环境中实现分类器函数之前，先在预生产环境中测试分类器函数。

1. 避免在工作负载组中为 `REQUEST_MAX_MEMORY_GRANT_PERCENT` 设置较高的值（大于 70），因为这会阻止数据库实例为其它并发查询分配足够的内存，从而可能导致内存授予超时错误（错误 8645）。相反，如果将此值设置为过低（小于 1）或设置为 0，则可能会阻止需要内存工作区的查询（例如涉及排序或哈希操作的查询）在用户定义的工作负载组中正常执行。RDS 通过在默认工作负载组上将值限制在 1 到 70 之间，来强制实施这些限制。

1. 要将 tempdb 绑定到资源池，在将内存优化型 tempdb 元数据绑定到池后，池可能会达到其最大设置，并且使用 `tempdb` 的任何查询都可能因内存不足错误而失败。在某些情况下，如果发生内存不足错误，SQL Server 可能会停止。要减少发生这种情况的机会，请将内存池的 `MAX_MEMORY_PERCENT` 设置为较高的值。