

# Microsoft SQL Server 데이터베이스 엔진의 옵션
<a name="Appendix.SQLServer.Options"></a>

이 단원에서는 Microsoft SQL Server DB 엔진을 실행하는 Amazon RDS 인스턴스에 사용할 수 있는 옵션에 대한 설명을 볼 수 있습니다. 이러한 옵션을 활성화하려면 먼저 옵션 그룹에 추가한 다음 옵션 그룹을 DB 인스턴스에 연결해야 합니다. 자세한 내용은 [옵션 그룹 작업](USER_WorkingWithOptionGroups.md) 섹션을 참조하세요.

SSL, Microsoft Windows 인증 및 Amazon S3 통합과 같은 RDS 옵션 그룹을 통해 추가되지 않은 선택적 기능을 찾으려면 [Amazon RDS의 Microsoft SQL Server 추가 기능](User.SQLServer.AdditionalFeatures.md) 단원을 참조하십시오.

Amazon RDS는 Microsoft SQL Server DB 인스턴스에 대해 다음 옵션을 지원합니다.


****  

| 옵션 | 옵션 ID | 엔진 버전 | 
| --- | --- | --- | 
|  [Oracle OLEDB 포함 연결된 서버](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)  |  `OLEDB_ORACLE`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [기본 백업 및 복원](Appendix.SQLServer.Options.BackupRestore.md)  |  `SQLSERVER_BACKUP_RESTORE`  |  SQL Server Enterprise Edition SQL Server Standard Edition 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 Enterprise Edition SQL Server 2022 Standard Edition | 
|  [SQL Server Audit](Appendix.SQLServer.Options.Audit.md)  |  `SQLSERVER_AUDIT`  |  SQL Server 2016부터는 RDS에서 모든 버전의 SQL Server가 서버 수준 감사를 지원하고 Enterprise Edition은 데이터베이스 수준 감사도 지원합니다. 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 Enterprise Edition SQL Server Standard Edition  | 
|  [SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)  |  `SSIS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [SQL Server Reporting Services](Appendix.SQLServer.Options.SSRS.md)  |  `SSRS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [Microsoft Distributed Transaction Coordinator](Appendix.SQLServer.Options.MSDTC.md)  |  `MSDTC`  |  RDS에서는 SQL Server 2016부터 모든 버전의 SQL Server가 분산 트랜잭션을 지원합니다.  | 
|  [SQL Server 리소스 거버너](Appendix.SQLServer.Options.ResourceGovernor.md)  |  `RESOURCE_GOVERNOR`  |  SQL Server Enterprise Edition SQL Server 2022 Developer 버전  | 

## SQL Server 버전 및 에디션에 사용할 수 있는 옵션 나열
<a name="Appendix.SQLServer.Options.Describe"></a>

`describe-option-group-options` AWS CLI명령을 사용하여 SQL Server 버전 및 에디션에 사용할 수 있는 옵션과 해당 옵션의 설정을 나열할 수 있습니다.

다음 예에서는 SQL Server 2019 Enterprise Edition에 대한 옵션 및 옵션 설정을 보여 줍니다. `--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의 OLEDB에 대한 Oracle Provider를 지원하는 연결된 서버를 사용하면 Oracle 데이터베이스의 외부 데이터 소스에 액세스할 수 있습니다. 원격 Oracle 데이터 소스의 데이터를 읽고 RDS for SQL Server DB 인스턴스 외부에 있는 원격 Oracle 데이터베이스 서버를 상대로 명령을 실행할 수 있습니다. Oracle OLEDB 포함 연결된 서버를 사용하면 다음을 수행할 수 있습니다.
+ SQL Server 이외의 데이터 소스에 바로 액세스
+ 데이터를 옮기지 않고도 동일한 쿼리를 이용해 다양한 Oracle 데이터 소스를 쿼리
+ 엔터프라이즈 에코시스템 전반의 데이터 소스에 대한 분산 쿼리, 업데이트, 명령 및 트랜잭션 실행
+ Microsoft 비즈니스 인텔리전스 제품군(SSIS, SSRS, SSAS) 내에서 Oracle 데이터베이스로의 연결 통합
+ Oracle 데이터베이스에서 RDS for SQL Server로의 마이그레이션

기존 또는 새 RDS for SQL Server DB 인스턴스에서 Oracle용 연결된 서버를 하나 이상 활성화할 수 있습니다. 그런 다음 외부 Oracle 데이터 소스를 DB 인스턴스와 통합할 수 있습니다.

**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)
  + [옵션 그룹을 DB 인스턴스와 연결](#LinkedServers_Oracle_OLEDB.Apply)
+ [OLEDB 제공자 속성 수정](#LinkedServers_Oracle_OLEDB.ModifyProviderProperties)
+ [OLEDB 드라이버 속성 수정](#LinkedServers_Oracle_OLEDB.ModifyDriverProperties)
+ [Oracl이 포함된 연결된 서버 비활성화](#LinkedServers_Oracle_OLEDB.Disable)

## 지원되는 버전 및 리전
<a name="LinkedServers_Oracle_OLEDB.VersionRegionSupport"></a>

RDS for SQL Server는 다음 버전의 SQL Server Standard 및 Enterprise Edition에 대해 모든 리전에서 Oracle OLEDB가 포함된 연결된 서버를 지원합니다.
+ SQL Server 2022, 모든 버전
+ SQL Server 2019, 모든 버전
+ SQL Server 2017, 모든 버전

Oracle OLEDB가 포함된 연결된 서버는 다음 Oracle Database 버전에서 지원됩니다.
+ Oracle Database 21c, 모든 버전
+ Oracle Database 19c, 모든 버전
+ Oracle Database 18c, 모든 버전

Oracle OLEDB가 포함된 연결된 서버는 다음 OLEDB Oracle 드라이버 버전에서 지원됩니다.
+ 21.7
+ 21.16

## 제한 및 권장 사항
<a name="LinkedServers_Oracle_OLEDB.Limitations"></a>

Oracle OLEDB가 포함된 연결된 서버에 적용되는 다음과 같은 제한 및 권장 사항을 염두에 두십시오.
+ 각 RDS for SQL Server DB인스턴스의 보안 그룹에 적절한 TCP 포트를 추가하여 네트워크 트래픽을 허용하십시오. 예를 들어 EC2 Oracle DB 인스턴스와 RDS for SQL Server DB 인스턴스 간에 연결된 서버를 구성하는 경우, EC2 Oracle DB 인스턴스의 IP 주소에서 오는 트래픽을 허용해야 합니다. 또한 SQL Server가 데이터베이스 통신을 수신하는 데 사용하는 포트에서 트래픽을 허용해야 합니다. 보안 그룹에 대한 자세한 정보는 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 단원을 참조하세요.
+ 옵션 그룹에서 `OLEDB_ORACLE` 옵션을 켜거나, 해제하거나, 수정한 후에는 RDS for SQL Server DB 인스턴스를 재부팅합니다. 옵션 그룹 상태에 이러한 이벤트의 `pending_reboot`와 필수 여부가 표시됩니다. AlwaysOn 또는 미러링 옵션이 활성화된 RDS for SQL Server 다중 AZ 인스턴스의 경우 새 인스턴스 생성 또는 복원 작업 후 인스턴스를 재부팅하면 장애 조치가 수행될 수 있습니다.
+ Oracle 데이터 소스의 사용자 이름과 암호를 사용한 단순 인증만 지원됩니다.
+ Open Database Connectivity(ODBC) 드라이버는 지원되지 않습니다. 위에 나열된 OLEDB 드라이버 버전만 지원됩니다.
+ 분산 트랜잭션(XA)은 지원됩니다. 분산 트랜잭션을 활성화하려면 DB 인스턴스의 Option Group(옵션 그룹)에서 `MSDTC` 옵션을 켜고 XA 트랜잭션이 켜져 있는지 확인합니다. 자세한 내용은 [RDS for SQL Server에서 Microsoft Distributed Transaction Coordinator 지원](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>

`OLEDB_ORACLE` 옵션을 RDS for SQL Server DB 인스턴스에 추가하여 Oracle이 포함된 연결된 서버를 활성화합니다. 다음 프로세스를 사용합니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 선택합니다.

1. [`OLEDB_ORACLE`] 옵션을 옵션 그룹에 추가합니다.

1. 사용할 OLEDB 드라이버 버전을 선택합니다.

1. 옵션 그룹을 DB 인스턴스에 연결합니다.

1. DB 인스턴스를 재부팅합니다.

### OLEDB\$1ORACLE용 옵션 그룹 생성
<a name="LinkedServers_Oracle_OLEDB.OptionGroup"></a>

Oracle이 포함된 연결된 서버를 사용하려면 사용할 DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 옵션 그룹을 생성하거나 수정합니다. 이 절차를 완료하려면 AWS Management Console 또는 AWS CLI를 사용합니다.

#### 콘솔
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.Console"></a>

다음 절차에서는 SQL Server Standard Edition 2019에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. **그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 창에서 다음과 같이 합니다.

   1. [**이름(Name)**]에 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. **생성(Create)**을 선택합니다.

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

다음 절차에서는 SQL Server Standard Edition 2019에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용하여 `OLEDB_ORACLE` 옵션을 옵션 그룹에 추가합니다.

#### 콘솔
<a name="LinkedServers_Oracle_OLEDB.Add.Console"></a>

**OLEDB\$1ORACLE 옵션을 추가하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 이 예제에서는 방금 생성한 옵션 그룹인 **oracle-oledb-se-2019**를 선택합니다.

1. **옵션 추가**를 선택합니다.

1. **Option details**(옵션 세부 정보)에서 **Option name**(옵션 이름)으로 **OLEDB\$1ORACL**를 선택합니다.

1. **버전**에서 설치할 OLEDB Oracle 드라이버의 버전을 선택합니다.

1. **예약**에서 옵션을 즉시 추가할지 또는 다음 유지 관리 기간에 추가할지를 선택합니다.

1. **옵션 추가**를 선택합니다.

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

**OLEDB\$1ORACLE 옵션을 추가하려면**
+ [`OLEDB_ORACLE`] 옵션을 옵션 그룹에 추가합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용합니다.

#### 콘솔
<a name="LinkedServers_Oracle_OLEDB.Modify.Console"></a>

**OLEDB\$1ORACLE 옵션을 수정하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. `OLEDB_ORACLE` 옵션이 있는 옵션 그룹을 선택합니다(이전 예시의 경우 **oledb-se-2019**).

1. **옵션 수정(Modify option)**을 선택합니다.

1. **Option details**(옵션 세부 정보)에서 **Option name**(옵션 이름)으로 **OLEDB\$1ORACL**를 선택합니다.

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**  

  대상 LinuxmacOS, 또는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
  ```

### 옵션 그룹을 DB 인스턴스와 연결
<a name="LinkedServers_Oracle_OLEDB.Apply"></a>

`OLEDB_ORACLE` 옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결하려면 AWS Management Console 또는 AWS CLI를 사용합니다.

#### 콘솔
<a name="LinkedServers_Oracle_OLEDB.Apply.Console"></a>

Oracle용 연결된 서버 활성화를 완료하려면 `OLEDB_ORACLE` 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결합니다.
+ 새 DB 인스턴스의 경우 인스턴스를 시작할 때 이러한 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 기존 DB 인스턴스의 경우 인스턴스를 수정하여 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

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

`OLEDB_ORACLE` 옵션 그룹 및 파라미터 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.

**`OLEDB_ORACLE` 옵션 그룹 및 파라미터 그룹을 사용하여 인스턴스를 생성하려면**
+ 옵션 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.  
**Example**  

  대상 LinuxmacOS, 또는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**  

  대상 LinuxmacOS, 또는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>

OLEDB 공급자의 속성을 보고 변경할 수 있습니다. 이 작업은 `master` 사용자만 수행할 수 있습니다. DB 인스턴스에서 생성한 모든 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는 공급자를 진행 중 서버로 인스턴스화할 수 있습니다. Oracle 연결된 서버를 사용하려면 이 속성을 1로 설정합니다. | 
| `Non transacted updates` | 0 | 0이 아닌 경우 SQL Server는 업데이트를 허용합니다. | 
| `Index as access path` | False | 0이 아닌 경우 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 드라이버가 데이터를 처리하는 방법을 정의합니다. 드라이버 속성은 DB 인스턴스에서 생성한 각 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
```

**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

## Oracl이 포함된 연결된 서버 비활성화
<a name="LinkedServers_Oracle_OLEDB.Disable"></a>

Oracle이 포함된 연결된 서버를 비활성화하려면 해당 옵션 그룹에서 `OLEDB_ORACLE` 옵션을 제거합니다.

**중요**  
옵션을 제거해도 DB 인스턴스의 기존 연결된 서버 구성은 삭제되지 않습니다. DB 인스턴스에서 제거하려면 수동으로 삭제해야 합니다.  
제거 후 `OLEDB_ORACLE` 옵션을 다시 활성화하여 DB 인스턴스에서 이전에 구성한 연결된 서버 구성을 재사용할 수 있습니다.

### 콘솔
<a name="LinkedServers_Oracle_OLEDB.Disable.Console"></a>

다음 절차에서는 `OLEDB_ORACLE` 옵션을 제거합니다.

**옵션 그룹에서 OLEDB\$1ORACLE 옵션을 제거하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. `OLEDB_ORACLE` 옵션이 있는 옵션 그룹을 선택합니다(이전 예제의 경우 `oracle-oledb-se-2019`).

1. **옵션 삭제**를 선택합니다.

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**  

  대상 LinuxmacOS, 또는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 DB 인스턴스에서 Teradata용 연결된 서버를 하나 이상 활성화할 수 있습니다. 그런 다음 외부 Teradata 데이터 소스를 DB 인스턴스와 통합할 수 있습니다.

**Topics**
+ [지원되는 버전 및 리전](#USER_SQLServerTeradata.VersionRegionSupport)
+ [제한 및 권장 사항](#USER_SQLServerTeradata.LimitsandRecommendations)
+ [다중 AZ 배포에 대한 고려 사항](#USER_SQLServerTeradata.MultiAZ)
+ [Teradata와 연결된 서버 활성화](USER_SQLServerTeradata.Activate.md)
+ [Teradata와 연결된 서버 만들기](USER_SQLServerTeradata.CreateLinkedServers.md)
+ [Teradata에 연결된 서버 비활성화](USER_SQLServerTeradata.Deactivate.md)

## 지원되는 버전 및 리전
<a name="USER_SQLServerTeradata.VersionRegionSupport"></a>

RDS for SQL Server는 다음 버전의 SQL Server Standard 및 Enterprise Edition에 대해 모든 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 확장 이벤트를 사용하여 OLEDB 이벤트를 추적하세요. 자세한 내용은 [RDS for SQL Server에서 확장 이벤트 설정](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/) 섹션을 참조하세요.
+ RDS for SQL Server는 SQL Server Management Studio(SSMS)를 사용하여 Teradata에 연결된 서버의 카탈로그 폴터에 액세스하는 작업을 지원하지 않습니다.

Teradata ODBC와 연결된 서버를 사용할 때는 다음 권장 사항을 고려하세요.
+ 각 RDS for SQL Server DB인스턴스의 보안 그룹에 적절한 TCP 포트를 추가하여 네트워크 트래픽을 허용하십시오. EC2 Teradata DB 인스턴스와 RDS for SQL Server DB 인스턴스 간에 연결된 서버를 구성하는 경우, EC2 Teradata DB 인스턴스의 IP 주소에서 오는 트래픽을 허용해야 합니다. 또한 RDS for SQL Server DB 인스턴스가 데이터베이스 통신을 수신하는 데 사용하는 포트에서 트래픽을 허용해야 합니다. 보안 그룹에 대한 자세한 정보는 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 단원을 참조하세요.
+ 분산 트랜잭션(XA)은 지원됩니다. 분산 트랜잭션을 활성화하려면 DB 인스턴스의 옵션 그룹에서 `MSDTC` 옵션을 켜고 XA 트랜잭션이 켜져 있는지 확인합니다. 자세한 내용은 [RDS for SQL Server에서 Microsoft Distributed Transaction Coordinator 지원](Appendix.SQLServer.Options.MSDTC.md) 섹션을 참조하세요.
+ 연결된 Teradata ODBC는 Teradata Server에서 구성된 경우 SSL/TLS를 지원합니다. 자세한 내용은 [Teradata Vantage에서 TLS 연결 활성화](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)를 참조하세요.

## 다중 AZ 배포에 대한 고려 사항
<a name="USER_SQLServerTeradata.MultiAZ"></a>

RDS for SQL Server는 현재 다중 AZ 배포에서 연결된 서버를 미러링된 데이터베이스 서버(또는 상시 작동 가용성 그룹 보조 서버)에 복제하지 않습니다. 미러링 또는 상시 작동을 추가하도록 구성을 변경하기 전에 연결된 서버를 추가하면 연결된 서버가 기존 연결된 서버에 대해 복사됩니다.

또는 기본 인스턴스에서 연결된 서버를 만들고 고가용성 서버 인스턴스로 장애 조치한 다음 연결된 서버를 다시 만들어 두 RDS for SQL Server 인스턴스 모두에 연결된 서버가 있도록 할 수 있습니다.

# Teradata와 연결된 서버 활성화
<a name="USER_SQLServerTeradata.Activate"></a>

`ODBC_TERADATA` 옵션을 RDS for SQL Server DB 인스턴스에 추가하여 Teradata와 연결된 서버를 활성화합니다. 다음 프로세스를 사용합니다.

**Topics**
+ [`ODBC_TERADATA`용 옵션 그룹 만들기](#USER_SQLServerTeradata.Activate.CreateOG)
+ [옵션 그룹에 `ODBC_TERADATA` 옵션 추가](#USER_SQLServerTeradata.Activate.AddOG)
+ [`ODBC_TERADATA` 옵션을 DB 인스턴스와 연결](#USER_SQLServerTeradata.Activate.AssociateOG)

## `ODBC_TERADATA`용 옵션 그룹 만들기
<a name="USER_SQLServerTeradata.Activate.CreateOG"></a>

Teradata와 연결된 서버를 사용하려면 사용할 DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 옵션 그룹을 만들거나 수정합니다. 이 절차를 완료하려면 AWS Management Console 또는 AWS CLI를 사용합니다.

### 콘솔
<a name="USER_SQLServerTeradata.Activate.CreateOG.Console"></a>

다음 절차를 사용하여 SQL Server Standard Edition 2019에 대한 옵션 그룹을 만듭니다.

**옵션 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. **그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 창에서 다음과 같이 합니다.

   1. **이름**에 AWS 계정 계정 내에서 쉽게 식별할 수 있는 옵션 그룹 이름을 입력합니다(예: `teradata-odbc-se-2019`). 이름은 글자, 숫자 및 하이픈만 사용 가능합니다.

   1. **설명**에 옵션 그룹에 대한 간단한 설명을 입력합니다.

   1. **엔진**에 대해 **sqlserver-se**를 선택합니다.

   1. **Major engine version**(메이저 엔진 버전)에 **15.00**을 선택합니다.

1. **생성(Create)**을 선택합니다.

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

다음 절차에서는 SQL Server Standard Edition 2019에 대한 옵션 그룹을 생성합니다.

**Example**  
대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용하여 `ODBC_Teradata` 옵션을 옵션 그룹에 추가합니다.

### 콘솔
<a name="USER_SQLServerTeradata.Activate.AddOG.Console"></a>

다음 절차를 사용하여 SQL Server Standard Edition 2019에 대한 옵션 그룹을 만듭니다.

**`ODBC_TERADATA` 옵션을 추가하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon 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**  
대상 LinuxmacOS, 또는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` 옵션을 DB 인스턴스와 연결
<a name="USER_SQLServerTeradata.Activate.AssociateOG"></a>

AWS Management Console 또는 AWS CLI를 사용하여 `ODBC_TERADATA` 옵션 그룹을 DB 인스턴스와 연결할 수 있습니다.

### 콘솔
<a name="USER_SQLServerTeradata.Activate.AssociateOG.Console"></a>

Teradata용 연결된 서버 활성화를 완료하려면 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결합니다.
+ 새 DB 인스턴스의 경우 인스턴스를 시작할 때 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 기존 DB 인스턴스의 경우 인스턴스를 수정하여 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

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

옵션 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.

대상 LinuxmacOS, 또는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
```

인스턴스를 수정하여 새로운 옵션 그룹을 연결하려면:

대상 LinuxmacOS, 또는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` 옵션을 제거합니다.

**중요**  
옵션을 제거해도 DB 인스턴스의 연결된 서버 구성은 삭제되지 않습니다. DB 인스턴스에서 제거하려면 수동으로 삭제해야 합니다.  
제거 후 `ODBC_TERADATA`를 재활성화하여 DB 인스턴스에서 이전에 구성한 연결된 서버 구성을 재사용할 수 있습니다.

## 콘솔
<a name="USER_SQLServerTeradata.Deactivate.Console"></a>

옵션 그룹에서 `ODBC_TERADATA` 옵션을 제거합니다.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon 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` 옵션을 제거합니다.

대상 LinuxmacOS, 또는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 DB 인스턴스로 복원할 수 있습니다. RDS for SQL Server 데이터베이스를 백업하고 Amazon S3에 저장하고 다른 위치에 복원할 수도 있습니다. 또한 온프레미스 서버 또는 SQL Server를 실행 중인 다른 Amazon RDS DB 인스턴스로 백업을 복원할 수 있습니다. 자세한 내용은 [기본 백업 및 복원 기능을 사용하여 SQL Server 데이터베이스 가져오기 및 내보내기](SQLServer.Procedural.Importing.md) 섹션을 참조하세요.

Amazon RDS는 차등 및 전체 백업 파일(.bak 파일)을 사용하여 Microsoft SQL Server 데이터베이스에 기본 백업 및 복원을 할 수 있도록 지원합니다.

## 기본 백업 및 복원 옵션 추가
<a name="Appendix.SQLServer.Options.BackupRestore.Add"></a>

기본 백업 및 복원 옵션을 DB 인스턴스에 추가하는 일반적인 프로세스는 다음과 같습니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 복사 또는 수정합니다.

1. [`SQLSERVER_BACKUP_RESTORE`] 옵션을 옵션 그룹에 추가합니다.

1. AWS Identity and Access Management(IAM) 역할을 옵션과 연결합니다. 데이터베이스 백업을 저장하려면 IAM 역할에 S3 버킷에 대한 액세스 권한이 있어야 합니다.

   즉, `arn:aws:iam::account-id:role/role-name` 형식으로 유효한 Amazon 리소스 이름(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. 옵션 그룹을 DB 인스턴스에 연동시킵니다.

기본 백업 및 복원 옵션을 추가한 후 DB 인스턴스를 다시 시작할 필요가 없습니다. 옵션 그룹이 활성화되는 즉시 백업 및 복원을 시작할 수 있습니다.

### 콘솔
<a name="Add.Native.Backup.Restore.Console"></a>

**기본 백업 및 복원 옵션을 추가하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 사용합니다. 사용자 지정 DB 옵션 그룹을 생성하는 방법에 대한 자세한 내용은 [옵션 그룹 생성](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 역할**에서 **새 역할 생성**을 선택합니다.

     1. **S3 버킷(S3 bucket)**에서 목록의 S3 버킷을 선택합니다.

     1. **S3 접두사(선택 사항)(S3 prefix (optional))**에서 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. 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스에 적용합니다:
   + 새 DB 인스턴스의 경우, 인스턴스를 시작할 때 옵션 그룹을 적용하십시오. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
   + 기존 DB 인스턴스의 경우, 해당 인스턴스를 수정하고 새 옵션 그룹을 연결하여 옵션 그룹을 적용하십시오. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하세요.

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

이 절차에서는 다음과 같이 가정합니다.
+ SQLSERVER\$1BACKUP\$1RESTORE 옵션을 이미 존재하는 옵션 그룹에 추가하려고 합니다. 옵션 추가에 대한 자세한 내용은 [옵션 그룹에 옵션 추가](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption) 섹션을 참조하세요.
+ 이 옵션을 이미 존재하고 백업 저장을 위해 S3 버킷에 액세스할 수 있는 IAM 역할과 연결합니다.
+ 이미 존재하는 DB 인스턴스에 옵션 그룹을 적용하려고 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

**기본 백업 및 복원 옵션을 추가하려면**

1. [`SQLSERVER_BACKUP_RESTORE`] 옵션을 옵션 그룹에 추가합니다.  
**Example**  

   대상 LinuxmacOS, 또는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 명령 프롬프트를 사용하는 경우 백슬래시(\$1)를 접두사로 추가하여 JSON 코드에서 큰 따옴표(")를 이스케이프해야 합니다.

1. 옵션 그룹을 DB 인스턴스에 적용합니다.  
**Example**  

   대상 LinuxmacOS, 또는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>

DB 인스턴스에서 옵션을 제거하여 기본 백업 및 복원 기능을 끌 수 있습니다. 기본 백업 및 복원 옵션을 제거한 후 DB 인스턴스를 다시 시작할 필요가 없습니다.

DB 인스턴스에서 기본 백업 및 복원 옵션을 제거하려면 다음 중 하나를 수행합니다.
+ 소속 옵션 그룹에서 옵션을 제거합니다. 이 변경은 해당 옵션 그룹을 사용하는 모든 DB 인스턴스에 영향을 미칩니다. 자세한 내용은 [옵션 그룹에서 옵션 제거](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption) 섹션을 참조하세요.
+ DB 인스턴스를 수정하고, 기본 백업 및 복원 옵션이 포함되지 않은 다른 옵션 그룹을 지정합니다. 이 변경은 단일 DB 인스턴스에 영향을 미칩니다. 기본(빈) 옵션 그룹을 지정하거나 다른 사용자 지정 옵션 그룹을 지정할 수 있습니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

# SQL Server에서 TDE(투명한 데이터 암호화) 지원
<a name="Appendix.SQLServer.Options.TDE"></a>

Amazon RDS는 Microsoft SQL Server를 실행하는 DB 인스턴스에 저장된 데이터를 암호화하기 위하여 Transparent Data Encryption(TDE) 이용을 지원합니다. TDE는 스토리지에 데이터를 쓰기 전에 자동으로 데이터를 암호화한 뒤에 데이터를 스토리지에서 읽을 때 다시 자동으로 복호화합니다.

Amazon RDS는 다음 SQL Server 버전에 TDE를 지원합니다.
+ SQL Server 2022 Standard Edition 및 Enterprise Edition
+ SQL Server 2019 Standard Edition 및 Enterprise Edition
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

**참고**  
RDS for SQL Server는 읽기 전용 데이터베이스에 대한 TDE를 지원하지 않습니다.

SQL Server의 TDE는 2계층 키 아키텍처를 사용하여 암호화 키 관리 기능을 지원합니다. 데이터베이스 마스터 키에서 생성된 인증서는 데이터 암호화 키를 보호하는 데 사용됩니다. 데이터베이스 암호화 키는 사용자 데이터베이스의 데이터를 실제로 암호화 및 복호화합니다. Amazon RDS는 데이터베이스 마스터 키와 TDE 인증서를 백업하고 관리합니다.

Transparent Data Encryption은 중요한 데이터를 암호화해야 하는 경우에 사용됩니다. 예를 들어 타사에 데이터 파일과 백업을 제공하거나 보안 관련 규정 준수 문제를 해결하고 싶을 수 있습니다. `model` 또는 `master` 데이터베이스와 같은 SQL Server의 시스템 데이터베이스를 암호화할 수 없습니다.

투명한 데이터 암호화에 대한 자세한 설명은 본 문서의 범위에서 벗어나지만, 보안과 관련하여 각 암호화 알고리즘과 키의 장단점은 잘 알고 있어야 합니다. SQL Server의 투명한 데이터 암호화(TDE)에 대한 자세한 내용은 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 DB 인스턴스에서 투명한 데이터 암호화를 활성화하려면 해당 DB 인스턴스와 연동되어 있는 RDS 옵션 그룹에서 TDE 옵션을 지정해야 합니다.

1. 혹시 DB 인스턴스가 TDE 옵션이 추가된 옵션 그룹과 이미 연동되어 있는지 먼저 확인합니다. DB 인스턴스와 연동되어 있는 옵션 그룹은 RDS 콘솔, [describe-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI 명령 또는 API 작업 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html)를 사용하여 확인할 수 있습니다.

1.  DB 인스턴스가 TDE가 활성화된 옵션 그룹과 연결되어 있지 않으면 2가지 옵션을 사용할 수 있습니다. 옵션 그룹을 생성하고 TDE 옵션을 추가하거나, 연결된 옵션 그룹을 수정하여 추가할 수 있습니다.
**참고**  
RDS 콘솔에서는 옵션의 이름이 `TRANSPARENT_DATA_ENCRYPTION`입니다. AWS CLI 및 RDS API에서는 이 이름이 `TDE`입니다.

   옵션 그룹의 생성 및 변경에 대한 자세한 내용은 [옵션 그룹 작업](USER_WorkingWithOptionGroups.md) 섹션을 참조하십시오. 옵션 그룹에 옵션을 추가하는 방법에 대한 자세한 내용은 [옵션 그룹에 옵션 추가](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption) 섹션을 참조하십시오.

1.  DB 인스턴스를 TDE 옵션이 있는 옵션 그룹과 연결합니다. DB 인스턴스와 옵션 그룹의 연동에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하십시오.

### 옵션 그룹 고려 사항
<a name="TDE.Options"></a>

TDE 옵션은 영구 옵션입니다. 모든 DB 인스턴스 및 백업이 옵션 그룹과 연결되어 있지 않은 경우를 제외하고 옵션 그룹에서 DB 인스턴스 및 백업을 제거할 수 없습니다. TDE 옵션을 옵션 그룹에 추가하면 이 옵션 그룹은 TDE를 사용하는 DB 인스턴스에 한해 연동이 가능합니다. 옵션 그룹의 영구 옵션에 대한 자세한 내용은 [옵션 그룹 개요](USER_WorkingWithOptionGroups.md#Overview.OptionGroups) 섹션을 참조하십시오.

TDE 옵션은 영구 옵션이기 때문에 옵션 그룹과 연결된 DB 인스턴스 사이에 충돌이 일어날 수 있습니다. 다음 상황에서 충돌이 발생할 수 있습니다.
+ 현재 TDE 옵션을 설정한 옵션 그룹을 TDE 옵션을 사용하지 않는 옵션 그룹으로 변경하는 경우
+ DB 스냅샷에서 TDE 옵션을 포함하는 옵션 그룹이 연결되지 않은 새 DB 인스턴스로 복원하는 경우 이 시나리오에 대한 자세한 내용은 [옵션 그룹에 대한 고려 사항](USER_CopySnapshot.md#USER_CopySnapshot.Options)를 참조하십시오.

### SQL Server 성능 고려 사항
<a name="TDE.Perf"></a>

투명한 데이터 암호화를 사용하면 SQL Server DB 인스턴스의 성능에 영향을 미칠 수 있습니다.

DB 인스턴스의 데이터베이스 중 암호화된 데이터베이스가 하나 이상만 있어도 마찬가지로 암호화되지 않은 데이터베이스의 성능이 떨어질 수 있습니다. 따라서 암호화되지 않은 데이터베이스와 암호화된 데이터베이스는 별도의 DB 인스턴스에서 관리하는 것이 좋습니다.

# RDS for SQL Server의 데이터 암호화
<a name="TDE.Encrypting"></a>

TDE 옵션을 옵션 그룹에 추가하면 Amazon RDS가 암호화 프로세스에 사용할 인증서를 생성합니다. 그러면 이 인증서를 사용하여 DB 인스턴스의 데이터베이스에 저장된 데이터를 암호화하는 SQL 문을 실행할 수 있습니다.

다음은 `RDSTDECertificateName`이라고 하는 RDS 생성 인증서를 사용하여 `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 데이터베이스를 암호화하는 데 걸리는 시간은 몇 가지 요인에 따라 다릅니다. 여기에는 DB 인스턴스의 크기, 인스턴스가 프로비저닝된 IOPS 스토리지를 사용하는지 여부, 데이터 양 및 기타 요소가 포함됩니다.

# RDS for SQL Server에서 TDE 인증서 백업 및 복원
<a name="TDE.BackupRestoreRDS"></a>

RDS for SQL Server는 TDE 인증서를 백업, 복원 및 삭제하기 위한 저장 프로시저를 제공합니다. RDS for SQL Server는 복원된 사용자 TDE 인증서를 보는 기능도 제공합니다.

사용자 TDE 인증서는 온프레미스에 있고 TDE가 설정된 RDS for SQL Server로 데이터베이스를 복원하는 데 사용됩니다. 이러한 인증서에는 접두사 `UserTDECertificate_`가 붙습니다. RDS는 데이터베이스를 복원한 후 사용할 수 있게 하기 전에 TDE가 활성화된 데이터베이스를 수정하여 RDS 생성 TDE 인증서를 사용합니다. 이러한 인증서에는 접두사 `RDSTDECertificate`가 붙습니다.

사용자 TDE 인증서는 `rds_drop_tde_certificate` 저장 프로시저를 사용하여 삭제하지 않는 한 RDS for SQL Server DB 인스턴스에 남아 있습니다. 자세한 내용은 [복원된 TDE 인증서 삭제](#TDE.BackupRestoreRDS.Drop) 섹션을 참조하세요.

사용자 TDE 인증서를 사용하여 소스 DB 인스턴스에서 다른 데이터베이스를 복원할 수 있습니다. 복원할 데이터베이스는 동일한 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 인증서를 백업하거나 복원하려면 먼저 다음 태스크를 수행해야 합니다. 처음 3개는 [기본 백업 및 복원 설정](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 역할은 [기본 백업 및 복원을 위한 IAM 역할 수동으로 만들기](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)에 필요한 권한 외에도 다음 권한이 필요합니다.
   + S3 버킷 리소스의 `s3:GetBucketAcl`, `s3:GetBucketLocation`, `s3:ListBucket` 

1. DB 인스턴스의 옵션 그룹에 `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 통합을 활성화하여 DB 인스턴스와 Amazon S3 간에 파일을 전송합니다.

   Amazon S3 통합에 대한 자세한 내용은 [Amazon RDS for SQL Server DB 인스턴스와 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`) 옵션을 모두 DB 인스턴스에 연결된 옵션 그룹에 추가해야 합니다.
+ 다중 AZ DB 인스턴스에는 TDE의 인증서 백업 및 복원이 지원되지 않습니다.
+ TDE 인증서 백업 및 복원 태스크는 취소할 수 없습니다.
+ RDS for SQL Server DB 인스턴스에 있는 다른 데이터베이스의 TDE 암호화에 사용자 TDE 인증서를 사용할 수 없습니다. 이를 사용하여 TDE가 활성화되어 있고 동일한 TDE 인증서를 사용하는 소스 DB 인스턴스에서 다른 데이터베이스만 복원할 수 있습니다.
+ 사용자 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 인증서를 온프레미스 DB 인스턴스로 복원할 수도 있습니다.

**참고**  
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 인증서를 온프레미스 DB 인스턴스에 복원합니다. 인증서 백업, 해당 프라이빗 키 파일 및 데이터 키를 사용하여 대상 DB 인스턴스에서 TDE 인증서를 복사하고 복원합니다. 복원된 인증서는 새 서버의 데이터베이스 마스터 키로 암호화됩니다.

**TDE 인증서를 복원하려면**

1. Amazon S3에서 대상 인스턴스로 TDE 인증서 백업 파일과 프라이빗 키 파일을 복사합니다. 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. TDE 인증서를 복원하려면 다음 SQL 명령을 사용합니다.

   ```
   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 인증서가 대상 DB 인스턴스에 복원된 후 해당 인증서를 사용하여 암호화된 데이터베이스를 복원할 수 있습니다.

**참고**  
동일한 TDE 인증서를 사용하여 소스 DB 인스턴스의 여러 SQL Server 데이터베이스를 암호화할 수 있습니다. 여러 데이터베이스를 대상 인스턴스로 마이그레이션하려면 연결된 TDE 인증서를 대상 인스턴스에 한 번만 복사합니다.

# RDS for SQL Server에 대한 TDE 비활성화
<a name="TDE.Disabling"></a>

RDS for SQL Server DB 인스턴스에서 TDE를 비활성화하려면 먼저 DB 인스턴스에 암호화된 객체가 하나도 없어야 합니다. 이렇게 하려면 객체의 암호를 해독하거나 삭제하면 됩니다. DB 인스턴스에 암호화된 객체가 남아 있을 경우에는 DB 인스턴스에서 TDE를 비활성할 수 없습니다. 암호화를 위한 사용자 TDE 인증서가 복원된(가져오기된) 경우 삭제해야 합니다. 콘솔을 사용하여 옵션 그룹에서 TDE 옵션을 제거하면 콘솔에 처리 중으로 표시됩니다. 또한 옵션 그룹이 암호화된 DB 인스턴스 또는 DB 스냅샷과 연결되어 있으면 오류 이벤트가 생성됩니다.

다음은 `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
```

모든 객체의 암호를 해독할 때는 2가지 옵션을 사용할 수 있습니다.

1. TDE 옵션 없이 옵션 그룹과 연결되도록 DB 인스턴스를 수정할 수 있습니다.

1. 옵션 그룹에서 TDE 옵션을 제거할 수 있습니다.

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

Amazon RDS에서는 기본 제공 SQL Server Audit 메커니즘을 사용하여 Microsoft SQL Server 데이터베이스를 감사할 수 있습니다. 온프레미스 데이터베이스 서버용으로 생성하는 경우와 같은 방식으로 감사 및 감사 사양을 생성할 수 있습니다.

RDS는 사용자가 제공한 IAM 역할을 사용하여 완료된 감사 로그를 S3 버킷에 업로드합니다. 보존을 활성화하면 RDS는 구성된 기간 동안 DB 인스턴스에 대한 감사 로그를 유지합니다.

자세한 내용은 Microsoft SQL Server 설명서의 [SQL Server Audit(데이터베이스 엔진)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)를 참조하십시오.

## SQL Server Audit와 데이터베이스 활동 스트림 함께 사용
<a name="Appendix.SQLServer.DAS.Audit"></a>

RDS용 데이터베이스 활동 스트림을 사용하여 SQL Server Audit 이벤트를 Imperva, McAfee 및 IBM의 데이터베이스 활동 모니터링 도구와 통합할 수 있습니다. RDS SQL Server에 대해 데이터베이스 활동 스트림을 사용하여 감사를 수행하는 방법에 대한 자세한 내용은 [Microsoft SQL Server에서의 감사](DBActivityStreams.md#DBActivityStreams.Overview.SQLServer-auditing) 섹션을 참조하세요.

**Topics**
+ [SQL Server Audit와 데이터베이스 활동 스트림 함께 사용](#Appendix.SQLServer.DAS.Audit)
+ [SQL Server Audit 지원](#Appendix.SQLServer.Options.Audit.Support)
+ [DB 인스턴스 옵션에 SQL Server Audit 추가](Appendix.SQLServer.Options.Audit.Adding.md)
+ [SQL Server Audit의 사용](Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications.md)
+ [감사 로그 보기](Appendix.SQLServer.Options.Audit.AuditRecords.md)
+ [다중 AZ 인스턴스에서 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>

SQL Server 2016부터는 Amazon RDS에서 모든 버전의 SQL Server가 서버 수준 감사를 지원하고 Enterprise Edition은 데이터베이스 수준 감사도 지원합니다. 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 형식의 유효한 ARN(Amazon 리소스 이름). | 감사 로그를 저장할 S3 버킷에 액세스 권한을 부여하는 IAM 역할의 ARN입니다. 자세한 내용은 AWS 일반 참조의 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)을 참조하세요. | 
| S3\$1BUCKET\$1ARN | arn:aws:s3:::amzn-s3-demo-bucket 또는 arn:aws:s3:::amzn-s3-demo-bucket/key-prefix 형식의 유효한 ARN | 감사 로그를 저장할 S3 버킷의 ARN입니다. | 
| ENABLE\$1COMPRESSION | true 또는 false | 감사 로그 압축을 제어합니다. 기본적으로 압축은 활성화됩니다(true로 설정). | 
| RETENTION\$1TIME | 0\$1840 | SQL Server Audit 레코드가 RDS 인스턴스에 유지되는 보존 기간(시간 단위)입니다. 기본적으로 보존은 비활성화됩니다. | 

# DB 인스턴스 옵션에 SQL Server Audit 추가
<a name="Appendix.SQLServer.Options.Audit.Adding"></a>

SQL Server Audit를 활성화하려면 DB 인스턴스에 옵션을 활성화하고 SQL Server 내에서 이 기능을 활성화하는 두 단계가 필요합니다. SQL Server Audit 옵션을 DB 인스턴스에 추가하는 프로세스는 다음과 같습니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 복사 또는 수정합니다.

1. 필요한 모든 옵션을 추가하고 구성하십시오.

1. 옵션 그룹을 DB 인스턴스에 연동시킵니다.

SQL Server Audit 옵션을 추가한 후 DB 인스턴스를 다시 시작할 필요가 없습니다. 옵션 그룹이 활성화되면 S3 버킷에 감사를 생성하고 감사 로그를 저장할 수 있습니다.

**DB 인스턴스의 옵션 그룹에 SQL Server Audit을 추가하고 구성하려면**

1. 다음 중 하나를 선택합니다.
   + 기존 옵션 그룹을 사용합니다.
   + 사용자 지정 DB 옵션 그룹을 생성하고 해당 옵션 그룹을 사용합니다. 자세한 내용은 [옵션 그룹 생성](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 버킷을 생성하려면 **S3 버킷 새로 만들기**를 선택하십시오.
   + **압축 활성화**의 경우 감사 파일을 압축하려면 이 옵션을 선택한 상태로 둡니다. 압축은 기본적으로 활성화되어 있습니다. 압축을 비활성화하려면 **Enable Compression(압축 활성화)** 선택을 취소하십시오.
   + **감사 로그 보존**의 경우 DB 인스턴스에 감사 레코드를 보존하려면 이 옵션을 선택합니다. 보존 시간을 시간 단위로 지정하십시오. 최대 보존 기간은 35일입니다.

1. 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스에 적용합니다. 다음 중 하나를 선택합니다.
   + 새 DB 인스턴스를 생성하는 경우, 인스턴스를 시작할 때 옵션 그룹을 적용하십시오.
   + 기존 DB 인스턴스의 경우, 해당 인스턴스를 수정한 후 새 옵션 그룹을 연결하여 옵션 그룹을 적용하십시오. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

## SQL Server Audit 옵션 수정
<a name="Appendix.SQLServer.Options.Audit.Modifying"></a>

SQL Server Audit 옵션을 활성화하면 설정을 수정할 수 있습니다. 옵션 설정을 변경하는 방법에 대한 자세한 내용은 [옵션 설정 수정](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption) 단원을 참조하십시오.

## DB 인스턴스 옵션에서 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. DB 인스턴스에서 SQL Server Audit 옵션을 삭제하십시오. 다음 중 하나를 선택합니다.
   + DB 인스턴스가 사용하는 옵션 그룹에서 SQL Server Audit 옵션을 삭제하십시오. 이 변경은 동일한 옵션 그룹을 사용하는 모든 DB 인스턴스에 영향을 미칩니다. 자세한 내용은 [옵션 그룹에서 옵션 제거](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption) 섹션을 참조하세요.
   + DB 인스턴스를 수정한 다음 SQL Server Audit 옵션이 없는 옵션 그룹을 선택합니다. 이 변경은 수정하는 DB 인스턴스에만 영향을 줍니다. 기본(빈) 옵션 그룹을 지정하거나 다른 사용자 지정 옵션 그룹을 지정할 수 있습니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

1. DB 인스턴스에서 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`에 2MB \$1 50MB 사이의 크기를 지정하십시오.
+ `MAX_ROLLOVER_FILES` 또는 `MAX_FILES`를 구성하지 마십시오.
+ SQL Server가 감사 레코드를 쓰지 못할 경우 DB 인스턴스를 종료하도록 구성하지 마십시오.

## 감사 사양 생성
<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`로 옮깁니다.

보존 구성에 대한 자세한 내용은 [DB 인스턴스 옵션에 SQL Server Audit 추가](Appendix.SQLServer.Options.Audit.Adding.md) 단원을 참조하십시오.

감사 레코드는 감사 로그 파일이 업로드될 때까지 DB 인스턴스에 보관됩니다. 다음 명령을 실행하여 감사 레코드를 볼 수 있습니다.

```
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 )
```

## 다중 AZ 인스턴스에서 SQL Server Audit 사용
<a name="Appendix.SQLServer.Options.Audit.Multi-AZ"></a>

다중 AZ 인스턴스의 경우 감사 로그 파일을 Amazon S3으로 보내는 프로세스는 단일 AZ 인스턴스의 프로세스와 유사합니다. 그러나 몇 가지 중요한 차이점이 있습니다.
+ 데이터베이스 감사 사양 객체는 모든 노드에 복제됩니다.
+ 서버 감사 및 서버 감사 사양은 보조 노드에 복제되지 않습니다. 대신, 수동으로 생성하거나 수정해야 합니다.

두 노드에서 서버 감사 사양 또는 서버 감사를 캡처하려면

1. 기본 노드에서 서버 감사 또는 서버 감사 사양을 생성하십시오.

1. 보조 노드로 장애 조치하고 보조 노드에서 동일한 이름과 GUID로 서버 감사 또는 서버 감사 사양을 생성합니다. `AUDIT_GUID` 파라미터를 사용하여 GUID를 지정합니다.

# S3 버킷 구성
<a name="Appendix.SQLServer.Options.Audit.S3bucket"></a>

감사 로그 파일은 DB 인스턴스에서 S3 버킷으로 자동 업로드됩니다. 감사 파일의 대상으로 사용하는 S3 버킷에는 다음 제한이 적용됩니다.
+ DB 인스턴스와 동일한 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`). 단일 AZ 인스턴스에는 하나의 노드가 있고 다중 AZ 인스턴스에는 두 개의 복제 노드가 있습니다. 기본 노드와 보조 노드의 역할은 시간이 지남에 따라 변하기 때문에 이들은 기본 노드와 보조 노드가 아닙니다. 대신, 노드 식별자는 단순한 레이블입니다.
  + **`node1`** – 첫 번째 복제 노드(단일 AZ에는 하나의 노드만 있음).
  + **`node2`** – 두 번째 복제 노드(다중 AZ에는 두 개의 노드가 있음).
+ **`file-name`** – 대상 파일 이름. 파일 이름은 SQL Server에서 그대로 가져옵니다.
+ **`ext`** – 파일 확장자(`zip` 또는 `sqlaudit`):
  + **`zip`** – 압축이 활성화된 경우(기본값).
  + **`sqlaudit`** – 압축이 비활성화된 경우.

# 수동으로 SQL Server Audit에 대한 IAM 역할 생성
<a name="Appendix.SQLServer.Options.Audit.IAM"></a>

일반적으로 새 옵션을 만들면 AWS Management Console은 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 정책 요소: 보안 주체](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`를 사용하세요.

신뢰 정책에서는 역할에 액세스하는 리소스의 전체 Amazon 리소스 이름(ARN)이 포함된 `aws:SourceArn` 전역 조건 컨텍스트 키를 사용해야 합니다. SQL Server Audit의 경우 다음 예와 같이 DB 옵션 그룹과 DB 인스턴스를 모두 포함해야 합니다.

**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 리소스 이름(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` 작업은 동일한 AWS 계정이 S3 버킷과 SQL Server DB 인스턴스를 모두 소유하고 있는지 확인하는 데 필요합니다. 이 작업은 계정에 있는 버킷의 이름을 나열합니다.  
S3 버킷 네임스페이스는 글로벌입니다. 실수로 버킷을 삭제한 경우 다른 사용자가 동일한 이름의 버킷을 다른 계정에서 만들 수 있습니다. 그런 다음 SQL Server 감사 데이터가 새 버킷에 기록됩니다.

# 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는 SQL Server 내에 설치된 온라인 분석 처리(OLAP) 및 데이터 마이닝 도구입니다. SSAS를 사용해 데이터를 분석하여 비즈니스 의사 결정을 내릴 수 있습니다. SSAS는 비즈니스 인텔리전스 환경에서 일반적인 쿼리 및 계산에 최적화되어 있기 때문에 SQL Server 관계형 데이터베이스와 다릅니다.

 기존 DB 인스턴스 또는 새 DB 인스턴스에 대해 SSAS를 설정할 수 있습니다. 이 인스턴스는 데이터베이스 엔진과 동일한 DB 인스턴스에 설치됩니다. SSAS에 대한 자세한 내용은 Microsoft [Analysis Services 설명서](https://docs.microsoft.com/en-us/analysis-services)를 참조하십시오.

Amazon RDS는 다음 버전에서 SQL Server Standard 및 Enterprise Edition용 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)
  + [옵션 그룹을 DB 인스턴스와 연결](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 에이전트를 사용하여 SSAS 데이터베이스 처리 예약](SSAS.Use.md#SSAS.Use.Schedule)
  + [프록시에서 SSAS 액세스 취소](SSAS.Use.md#SSAS.Use.Revoke)
+ [SSAS 데이터베이스 백업](SSAS.Backup.md)
+ [SSAS 데이터베이스 복원](SSAS.Restore.md)
  + [DB 인스턴스를 지정된 시간으로 복원](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) 단원을 참조하십시오.
+ 다중 AZ 인스턴스는 지원되지 않습니다.
+ 인스턴스는 SSAS 인증을 위해 자체 관리형 Active Directory 또는 AWS Directory Service for Microsoft Active Directory를 사용해야 합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 Active Directory 작업](User.SQLServer.ActiveDirectoryWindowsAuth.md) 단원을 참조하십시오.
+ 사용자에게는 SSAS 서버 관리자 액세스 권한이 부여되지 않지만 데이터베이스 수준 관리자 액세스 권한을 부여받을 수 있습니다.
+ SSAS에 액세스하기 위해 지원되는 유일한 포트는 2383입니다.
+ 프로젝트를 직접 배포할 수 없습니다. 이를 수행할 RDS 저장 프로시저를 제공합니다. 자세한 내용은 [Amazon RDS에 SSAS 프로젝트 배포](SSAS.Deploy.md) 섹션을 참조하세요.
+ 배포 중 처리는 지원되지 않습니다.
+ .xmla 파일을 배포에 사용하는 것은 지원되지 않습니다.
+ SSAS 프로젝트 입력 파일 및 데이터베이스 백업 출력 파일은 DB 인스턴스의 `D:\S3` 폴더에만 있을 수 있습니다.

# SSAS 설정
<a name="SSAS.Enabling"></a>

다음 프로세스를 사용하여 DB 인스턴스에 SSAS를 설정합니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 선택합니다.

1. [`SSAS`] 옵션을 옵션 그룹에 추가합니다.

1. 옵션 그룹을 DB 인스턴스에 연결합니다.

1. SSAS 리스너 포트의 Virtual Private Cloud(VPC) 보안 그룹에 대한 인바운드 액세스를 허용합니다.

1. Amazon S3 통합을 설정합니다.

## SSAS용 옵션 그룹 생성
<a name="SSAS.OptionGroup"></a>

AWS Management Console 또는 AWS CLI를 사용하여 SQL Server 엔진과 사용하려는 DB 인스턴스 버전에 해당하는 옵션 그룹을 생성합니다.

**참고**  
올바른 SQL Server 엔진 및 버전인 경우 기존 옵션 그룹을 사용할 수도 있습니다.

### 콘솔
<a name="SSAS.OptionGroup.Console"></a>

다음 콘솔 프로시저는 SQL Server Standard 에디션 2017에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. **그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 창에서 다음을 수행합니다.

   1. [**이름(Name)**]에 AWS 계정 내에서 쉽게 식별할 수 있는 옵션 그룹 이름을 입력합니다(예: **ssas-se-2017**). 이름은 글자, 숫자 및 하이픈만 사용 가능합니다.

   1. **설명**에 옵션 그룹에 대한 간단한 설명을 입력합니다(예: **SSAS option group for SQL Server SE 2017**). 이 설명은 표시 용도로만 사용됩니다.

   1. **엔진**에 대해 **sqlserver-se**를 선택합니다.

   1. **메이저 엔진 버전**에 대해 **14.00**을 선택합니다.

1. **생성(Create)**을 선택합니다.

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

다음 CLI 예제는 SQL Server Standard 에디션 2017에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용하여 `SSAS` 옵션을 옵션 그룹에 추가합니다.

### 콘솔
<a name="SSAS.Add.Console"></a>

**SSAS 옵션을 추가하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 방금 생성한 옵션 그룹을 선택합니다.

1. **옵션 추가**를 선택합니다.

1. **옵션 세부 정보**에서 **옵션 이름**으로 **SSAS**를 선택합니다.

1. **옵션 설정**에서 다음을 수행합니다.

   1. **최대 메모리(Max memory)**에 10\$180 범위의 값을 입력합니다.

      **최대 메모리**는 SSAS가 실행 중인 요청과 우선 순위가 높은 새 요청에 대한 공간을 확보하기 위해 메모리를 보다 적극적으로 해제하기 시작하는 상한 임계값을 지정합니다. 숫자는 DB 인스턴스에 대한 총 메모리 비율입니다. 허용 값은 10–80이고, 기본값은 45입니다.

   1. **모드(Mode)**에서 SSAS 서버 모드인 **테이블 형식(Tabular)** 또는 **다차원(Multidimensional)**을 선택합니다.

      **모드(Mode)** 옵션 설정이 표시되지 않으면 해당 AWS 리전에서 다차원 모드가 지원되지 않는 것입니다. 자세한 내용은 [제한 사항](Appendix.SQLServer.Options.SSAS.md#SSAS.Limitations) 단원을 참조하십시오.

      **테이블 형식(Tabular)**이 기본값입니다.

   1. **보안 그룹**의 경우 옵션과 연결할 VPC 보안 그룹을 선택합니다.
**참고**  
SSAS, 2383에 액세스하기 위한 포트가 미리 채워져 있습니다.

1. **예약**에서 옵션을 즉시 추가할지 또는 다음 유지 관리 기간에 추가할지를 선택합니다.

1. **옵션 추가**를 선택합니다.

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

**SSAS 옵션을 추가하려면**

1. 다음 파라미터를 사용하여 JSON 파일(예: `ssas-option.json`)을 생성합니다.
   + `OptionGroupName` – 이전에 생성했거나 선택한 옵션 그룹의 이름입니다(다음 예의 경우 `ssas-se-2017`).
   + `Port` – SSAS에 액세스하는 데 사용하는 포트입니다. 지원되는 유일한 포트는 2383입니다.
   + `VpcSecurityGroupMemberships` – RDS DB 인스턴스에 대한 VPC 보안 그룹의 멤버십입니다.
   + `MAX_MEMORY` – SSAS가 실행 중인 요청과 우선 순위가 높은 새 요청에 대한 공간을 확보하기 위해 메모리를 보다 적극적으로 해제하기 시작해야 하는 상한 임계값입니다. 숫자는 DB 인스턴스에 대한 총 메모리 비율입니다. 허용 값은 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**  

   대상 LinuxmacOS, 또는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
   ```

## 옵션 그룹을 DB 인스턴스와 연결
<a name="SSAS.Apply"></a>

콘솔 또는 CLI를 사용하여 옵션 그룹을 DB 인스턴스와 연결할 수 있습니다.

### 콘솔
<a name="SSAS.Apply.Console"></a>

옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결합니다.
+ 새 DB 인스턴스의 경우 인스턴스를 시작할 때 옵션 그룹을 DB 인스턴스와 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 기존 DB 인스턴스의 경우 인스턴스를 수정하고 새 옵션 그룹을 인스턴스와 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.
**참고**  
기존 인스턴스를 사용하는 경우 이미 Active Directory 도메인과 AWS Identity and Access Management(IAM) 역할이 연결되어 있어야 합니다. 새 인스턴스를 생성하는 경우 기존 Active Directory 도메인 및 IAM 역할을 지정합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 Active Directory 작업](User.SQLServer.ActiveDirectoryWindowsAuth.md) 단원을 참조하십시오.

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

옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.

**참고**  
기존 인스턴스를 사용하는 경우 이미 Active Directory 도메인과 IAM 역할이 연결되어 있어야 합니다. 새 인스턴스를 생성하는 경우 기존 Active Directory 도메인 및 IAM 역할을 지정합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 Active Directory 작업](User.SQLServer.ActiveDirectoryWindowsAuth.md) 단원을 참조하십시오.

**옵션 그룹을 사용하는 DB 인스턴스를 생성하려면**
+ 옵션 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.  
**Example**  

  대상 LinuxmacOS, 또는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
  ```

**DB 인스턴스를 수정하여 옵션 그룹을 연결하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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>

DB 인스턴스와 연결된 VPC 보안 그룹에서 지정된 SSAS 리스너 포트에 대한 인바운드 규칙을 생성합니다. 보안 그룹 설정에 대한 자세한 내용은 [보안 그룹을 생성하여 VPC 내부의 DB 인스턴스에 대한 액세스를 제공](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup) 단원을 참조하십시오.

## Amazon S3 통합 사용 설정
<a name="SSAS.EnableS3"></a>

배포를 위해 호스트에 모델 구성 파일을 다운로드하려면 Amazon S3 통합을 사용합니다. 자세한 내용은 [Amazon RDS for SQL Server DB 인스턴스와 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 DB 인스턴스와 Amazon S3 통합](User.SQLServer.Options.S3-integration.md) 단원을 참조하십시오.
+ `Processing Option` 구성 설정이 `Do Not Process`로 설정됩니다. 이 설정은 배포 후 처리가 진행되지 않음을 의미합니다.
+ `myssasproject.asdatabase` 파일과 `myssasproject.deploymentoptions` 파일이 모두 있습니다. SSAS 프로젝트를 빌드할 때 자동으로 생성됩니다.

**RDS에 SSAS 프로젝트를 배포하려면**

1. 다음 예제와 같이 S3 버킷에서 DB 인스턴스로 `.asdatabase`(SSAS 모델) 파일을 다운로드합니다. 다운로드 파라미터에 대한 자세한 내용은 [Amazon S3 버킷의 파일을 SQL Server DB 인스턴스로 다운로드](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. S3 버킷에서 DB 인스턴스로 `.deploymentoptions` 파일을 다운로드합니다.

   ```
   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` 함수를 호출합니다. 두 가지 파라미터가 필요합니다. 첫 번째 파라미터는 SSAS에 적용되지 않기 때문에 항상 `NULL`이어야 합니다. 두 번째 파라미터는 작업 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/ko_kr/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/ko_kr/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. **데이터베이스**를 확장합니다. 새로 배포된 SSAS 데이터베이스가 나타납니다.

1. 연결 문자열을 찾고 사용자 이름과 암호를 업데이트하여 원본 SQL 데이터베이스에 대한 액세스 권한을 부여합니다. 이 작업은 SSAS 객체를 처리하는 데 필요합니다.

   1. 테이블형 모드의 경우 다음을 수행합니다.

      1. **연결(Connections)** 탭을 확장합니다.

      1. 연결 객체의 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 연 다음 **속성(Properties)**을 선택합니다.

      1. 연결 문자열에서 사용자 이름과 암호를 업데이트합니다.

   1. 다차원 모드의 경우 다음을 수행합니다.

      1. **데이터 원본(Data Sources)** 탭을 확장합니다.

      1. 데이터 원본 객체의 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 연 다음 **속성(Properties)**을 선택합니다.

      1. 연결 문자열에서 사용자 이름과 암호를 업데이트합니다.

1. 생성한 SSAS 데이터베이스에 대한 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 열고 **데이터베이스 처리**를 선택합니다.

   입력 데이터의 크기에 따라 처리 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

**Topics**
+ [SSAS용 Windows 인증 사용자 설정](#SSAS.Use.Auth)
+ [도메인 사용자를 데이터베이스 관리자로 추가](#SSAS.Admin)
+ [SSAS 프록시 생성](#SSAS.Use.Proxy)
+ [SQL Server 에이전트를 사용하여 SSAS 데이터베이스 처리 예약](#SSAS.Use.Schedule)
+ [프록시에서 SSAS 액세스 취소](#SSAS.Use.Revoke)

## SSAS용 Windows 인증 사용자 설정
<a name="SSAS.Use.Auth"></a>

기본 관리자 사용자(마스터 사용자라고도 함)는 다음 코드 예제를 사용하여 Windows 인증 로그인을 설정하고 필요한 절차 권한을 부여할 수 있습니다. 이렇게 하면 도메인 사용자에게 SSAS 고객 태스크를 실행하고, S3 파일 전송 절차를 사용하고, 자격 증명을 만들고, SQL Server 에이전트 프록시로 작업할 수 있는 권한이 부여됩니다. 자세한 내용은 Microsoft 설명서의 [자격 증명(데이터베이스 엔진)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15) 및 [SQL Server 에이전트 프록시 생성](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>

SQL Server 에이전트를 사용하여 SSAS 데이터베이스 처리를 예약하려면 SSAS 자격 증명과 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 에이전트를 사용하여 SSAS 데이터베이스 처리 예약
<a name="SSAS.Use.Schedule"></a>

자격 증명 및 프록시를 생성하고 SSAS에 프록시에 대한 액세스 권한을 부여한 후 SSAS 데이터베이스 처리를 예약하는 SQL Server 에이전트 작업을 생성할 수 있습니다.

**SSAS 데이터베이스 처리 예약**
+ SSMS 또는 T-SQL을 사용하여 SQL Server 에이전트 작업을 생성합니다. 다음 예제에서는 T-SQL을 사용합니다. SSMS 또는 T-SQL을 통해 작업 일정을 추가로 구성할 수 있습니다.
  + `@command` 파라미터는 SQL Server 에이전트 작업에서 실행할 XMLA(XML for Analysis) 명령을 간략하게 설명합니다. 이 예에서는 SSAS 다차원 데이터베이스 처리를 구성합니다.
  + `@server` 파라미터는 SQL Server 에이전트 작업의 대상 SSAS 서버 이름을 간략하게 설명합니다.

    SQL Server 에이전트 작업이 있는 동일한 RDS DB 인스턴스 내에서 SSAS 서비스를 호출하려면 `localhost:2383`을 호출합니다.

    RDS DB 인스턴스 외부에서 SSAS 서비스를 호출하려면 RDS 엔드포인트를 사용합니다. RDS DB 인스턴스가 동일한 도메인에 가입되어 있는 경우 Kerberos Active Directory(AD) 엔드포인트(`your-DB-instance-name.your-AD-domain-name`)를 사용할 수도 있습니다. 외부 DB 인스턴스의 경우 보안 연결을 위해 RDS DB 인스턴스와 연결된 VPC 보안 그룹을 올바르게 구성해야 합니다.

  다양한 XMLA 작업을 지원하도록 쿼리를 추가로 편집할 수 있습니다. T-SQL 쿼리를 직접 수정하거나 SQL Server 에이전트 작업 생성 후 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>

SSAS 데이터베이스 백업 파일은 DB 인스턴스의 `D:\S3` 폴더에만 생성할 수 있습니다. 백업 파일을 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 백업 파일의 경로입니다.

## DB 인스턴스를 지정된 시간으로 복원
<a name="SSAS.PITR"></a>

PITR(특정 시점으로 복구)은 SSAS 데이터베이스에 적용되지 않습니다. PITR을 수행하는 경우 요청된 시간 이전의 마지막 스냅샷에 있는 SSAS 데이터만 복원된 인스턴스에서 사용할 수 있습니다.

**복원된 DB 인스턴스에서 SSAS 데이터베이스를 최신 상태로 유지하려면**

1. SSAS 데이터베이스를 원본 인스턴스의 `D:\S3` 폴더에 백업합니다.

1. 백업 파일을 S3 버킷으로 전송합니다.

1. S3 버킷에서 복원된 인스턴스의 `D:\S3` 폴더로 백업 파일을 전송합니다.

1. 저장 프로시저를 실행하여 SSAS 데이터베이스를 복원된 인스턴스로 복원합니다.

   SSAS 프로젝트를 다시 처리하여 데이터베이스를 복원할 수도 있습니다.

# SSAS 모드 변경
<a name="SSAS.ChangeMode"></a>

SSAS가 실행되는 모드를 테이블 형식 또는 다차원으로 변경할 수 있습니다. 모드를 변경하려면 AWS Management Console 또는 AWS CLI를 사용하여 SSAS 옵션의 옵션 설정을 수정합니다.

**중요**  
한 번에 하나의 SSAS 모드만 사용할 수 있습니다. 모드를 변경하기 전에 모든 SSAS 데이터베이스를 삭제해야 합니다. 그렇지 않으면 오류가 발생합니다.

## 콘솔
<a name="SSAS.ChangeMode.CON"></a>

다음 Amazon RDS 콘솔 절차는 SSAS 모드를 테이블 형식으로 변경하고 `MAX_MEMORY` 파라미터를 70%로 설정합니다.

**SSAS 옵션 수정**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon 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**  

  대상 LinuxmacOS, 또는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` 옵션을 제거하기 전에 SSAS 데이터베이스를 백업하는 것이 좋습니다.

## 콘솔
<a name="SSAS.Disable.Console"></a>

**옵션 그룹에서 SSAS 옵션을 제거하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 제거하려는 `SSAS` 옵션이 있는 옵션 그룹을 선택합니다(이전 예의 `ssas-se-2017`).

1. **옵션 삭제**를 선택합니다.

1. **옵션 삭제**에서 **SSAS** 또는 **삭제할 옵션**을 선택합니다.

1. **즉시 적용**에서 옵션을 즉시 삭제하려면 **예**를 선택하고 다음 유지 관리 기간에 삭제하려면 **아니오**를 선택합니다.

1. **Delete**(삭제)를 선택합니다.

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

**옵션 그룹에서 SSAS 옵션을 제거하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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지만 현재 DB 인스턴스에는 number개의 current\$1mode 데이터베이스가 있습니다. new\$1mode 모드로 전환하기 전에 기존 데이터베이스를 삭제하세요. 데이터베이스 삭제를 위해 current\$1mode 모드에 다시 액세스하려면 현재 DB 옵션 그룹을 업데이트하거나 SSAS 옵션에 대한 MODE 옵션 설정 값으로 %s를 사용하여 새 옵션 그룹을 연결합니다. | RDS 이벤트 | 현재 모드를 사용하는 SSAS 데이터베이스가 여전히 있는 경우 SSAS 모드를 변경할 수 없습니다. SSAS 데이터베이스를 삭제한 다음 다시 시도하세요. | 
| number개의 기존 mode 데이터베이스가 있어 SSAS 옵션을 제거할 수 없습니다. 모든 SSAS 데이터베이스가 삭제될 때까지 SSAS 옵션을 제거할 수 없습니다. SSAS 옵션을 다시 추가하고 모든 SSAS 데이터베이스를 삭제한 다음 다시 시도하세요. | RDS 이벤트 | 아직 SSAS 데이터베이스가 있는 경우 SSAS를 해제할 수 없습니다. SSAS 데이터베이스를 삭제한 다음 다시 시도하세요. | 
| SSSAS 옵션이 사용 설정되지 않았거나 사용 설정되는 중입니다. 나중에 다시 시도해 주세요. | 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/ko_kr/AmazonRDS/latest/UserGuide/SSAS.Trouble.html) RDS는 한 번에 하나의 SSAS 모드만 허용하고 SSAS 데이터베이스가 있는 SSAS 옵션 제거를 지원하지 않으므로 SSAS 옵션을 다시 구성합니다. RDS 이벤트 로그에서 SSAS 인스턴스의 구성 오류를 확인하고 그에 따라 문제를 해결하세요.  | 
| 배포에 실패했습니다. 변경 사항은 deployment\$1file\$1mode 모드에서 실행 중인 서버에만 배포할 수 있습니다. 현재 서버 모드는 current\$1mode입니다. | RDS 저장 프로시저 |  다차원 서버에 테이블 형식 데이터베이스를 배포하거나 테이블 형식 서버에 다차원 데이터베이스를 배포할 수 없습니다. 올바른 모드의 파일을 사용하고 있는지 확인하고 `MODE` 옵션 설정이 적절한 값으로 설정되어 있는지 확인합니다.  | 
| 복원에 실패했습니다. 백업 파일은 restore\$1file\$1mode 모드로 실행 중인 서버에서만 복원할 수 있습니다. 현재 서버 모드는 current\$1mode입니다. | RDS 저장 프로시저 |  테이블 형식 데이터베이스를 다차원 서버로 복원하거나 다차원 데이터베이스를 테이블 형식 서버로 복원할 수 없습니다. 올바른 모드의 파일을 사용하고 있는지 확인하고 `MODE` 옵션 설정이 적절한 값으로 설정되어 있는지 확인합니다.  | 
| 복원에 실패했습니다. 백업 파일과 RDS DB 인스턴스 버전이 호환되지 않습니다. | 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 작업을 나타냅니다. 배포 후 패키지는 SSISDB 데이터베이스의 SQL Server에 저장됩니다. SSISDB는 전체 복구 모드의 OLTP(온라인 트랜잭션 처리) 데이터베이스입니다.

Amazon RDS for SQL Server는 RDS DB 인스턴스에서 SSRS를 직접 실행할 수 있도록 지원합니다. 기존 DB 인스턴스 또는 새 DB 인스턴스에서 SSRS를 활성화할 수 있습니다. SSIS는 데이터베이스 엔진과 동일한 DB 인스턴스에 설치됩니다.

RDS는 다음 버전에서 SQL Server Standard 및 Enterprise Edition용 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)
  + [옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결](#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 에이전트를 사용하여 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에서 SSRS를 실행하는 경우 다음과 같은 제한 및 권장 사항이 적용됩니다.
+ DB 인스턴스에는 `clr enabled` 파라미터가 1로 설정된 연결된 파라미터 그룹이 있어야 합니다. 자세한 내용은 [SSIS용 파라미터 수정](#SSIS.ModifyParam) 섹션을 참조하세요.
**참고**  
SQL Server 2017 또는 2019에서 `clr enabled` 파라미터를 활성화하면 DB 인스턴스에서 CLR(공통 언어 런타임)을 사용할 수 없습니다. 자세한 내용은 [지원되지 않는 기능과 지원이 제한된 기능](SQLServer.Concepts.General.FeatureNonSupport.md) 섹션을 참조하세요.
+ 다음 제어 흐름 작업이 지원됩니다.
  + 분석 서비스 DDL 실행 작업
  + 분석 서비스 처리 작업
  + 대량 삽입 작업
  + 데이터베이스 무결성 검사 작업
  + 데이터 흐름 작업
  + 데이터 마이닝 쿼리 작업
  + 데이터 프로파일링 작업
  + 패키지 실행 작업
  + SQL Server 에이전트 작업 실행 작업
  + SQL 실행 작업
  + T-SQL 문 실행 작업
  + 운영자에게 알림 작업
  + 인덱스 재구축 작업
  + 인덱스 재구성 작업
  + 데이터베이스 축소 작업
  + 데이터베이스 전송 작업
  + 작업 전송 작업
  + 로그인 전송 작업
  + SQL Server 개체 전송 작업
  + 통계 업데이트 작업
+ 프로젝트 배포만 지원됩니다.
+ SQL Server 에이전트를 사용하여 SSIS 패키지를 실행할 수 있습니다.
+ SSIS 로그 레코드는 사용자가 만든 데이터베이스에만 삽입할 수 있습니다.
+ 파일 작업에는 `D:\S3` 폴더만 사용합니다. 다른 디렉터리에 있는 파일은 삭제됩니다. 다른 파일 위치 세부 정보를 숙지하십시오.
  + SSIS 프로젝트 입력 및 출력 파일을 `D:\S3` 폴더에 배치합니다.
  + 데이터 흐름 작업의 경우 `BLOBTempStoragePath` 및 `BufferTempStoragePath`의 위치를 `D:\S3` 폴더 내의 파일로 변경합니다. 파일 경로는 `D:\S3\`로 시작되어야 합니다.
  + 파일 연결에 사용되는 모든 파라미터, 변수 및 표현식이 `D:\S3` 폴더를 가리키는지 확인합니다.
  + 다중 AZ 인스턴스에서 장애 조치 후 `D:\S3` 폴더에 SSIS에서 생성한 파일이 삭제됩니다. 자세한 내용은 [S3 통합에 대한 다중 AZ 제한 사항](User.SQLServer.Options.S3-integration.md#S3-MAZ) 섹션을 참조하세요.
  + `D:\S3` 폴더에 SSIS에서 생성한 파일을 Amazon S3 버킷에 업로드하여 내구성을 높입니다.
+ 열 가져오기 및 열 내보내기 변환과 데이터 흐름 작업의 스크립트 구성 요소는 지원되지 않습니다.
+ SSIS 패키지 실행 시 덤프를 활성화할 수 없으며 SSIS 패키지에 데이터 탭을 추가할 수 없습니다.
+ SSIS 확장 기능은 지원되지 않습니다.
+ 프로젝트를 직접 배포할 수 없습니다. 이를 수행할 RDS 저장 프로시저를 제공합니다. 자세한 내용은 [SSIS 프로젝트 배포](SSIS.Deploy.md) 섹션을 참조하세요.
+ RDS에 배포하기 위한 `DoNotSavePasswords` 보호 모드를 사용하여 SSIS 프로젝트(.ispac) 파일을 빌드합니다.
+ 읽기 전용 복제본이 있는 Always On 인스턴스에서는 SSIS가 지원되지 않습니다.
+ `SSIS` 옵션과 연결된 SSISDB 데이터베이스는 백업할 수 없습니다.
+ SSIS의 다른 인스턴스에서 SSISDB 데이터베이스를 가져오고 복원하는 것은 지원되지 않습니다.
+ 다른 SQL Server DB 인스턴스나 Oracle 데이터 소스에 연결할 수 있습니다. MySQL이나 PostgreSQL 같은 다른 데이터베이스 엔진에 연결하는 것은 RDS for SQL Server의 SSIS에서 지원되지 않습니다. Oracle 데이터 소스 연결에 대한 자세한 내용은 [Oracle OLEDB 포함 연결된 서버](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md) 단원을 참조하세요.
+ SSIS는 온프레미스 도메인에 대한 발신 신뢰가 있는 도메인 조인 인스턴스를 지원하지 않습니다. 발신 신뢰를 사용하는 경우 로컬 AWS 도메인의 계정에서 SSIS 작업을 실행합니다.
+ 파일 시스템 기반 패키지 실행은 지원되지 않습니다.

## SSIS 활성화
<a name="SSIS.Enabling"></a>

SSIS 옵션을 DB 인스턴스에 추가하여 SSIS를 활성화합니다. 다음 프로세스를 사용합니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 선택합니다.

1. [`SSIS`] 옵션을 옵션 그룹에 추가합니다.

1. 새 파라미터 그룹을 생성하거나 기존 파라미터 그룹을 선택합니다.

1. 파라미터 그룹을 수정하여 `clr enabled` 파라미터를 1로 설정합니다.

1. 옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결합니다.

1. Amazon S3 통합을 활성화합니다.

**참고**  
이름이 SSISDB이거나 예약된 SSIS 로그인이 있는 데이터베이스가 DB 인스턴스에 이미 있는 경우 인스턴스에서 SSIS를 활성화할 수 없습니다.

### SSIS용 옵션 그룹 생성
<a name="SSIS.OptionGroup"></a>

SSIS를 사용하려면 사용할 DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 옵션 그룹을 생성하거나 수정합니다. 이렇게 하려면 AWS Management Console 또는 AWS CLI를 사용합니다.

#### 콘솔
<a name="SSIS.OptionGroup.Console"></a>

다음 절차에서는 SQL Server Standard Edition 2016에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. **그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 창에서 다음과 같이 합니다.

   1. [**이름(Name)**]에 AWS 계정 내에서 쉽게 식별할 수 있는 옵션 그룹 이름을 입력합니다(예: **ssis-se-2016**). 이름은 글자, 숫자 및 하이픈만 사용 가능합니다.

   1. **설명**에 옵션 그룹에 대한 간단한 설명을 입력합니다(예: **SSIS option group for SQL Server SE 2016**). 이 설명은 표시 용도로만 사용됩니다.

   1. **엔진**에 대해 **sqlserver-se**를 선택합니다.

   1. **메이저 엔진 버전**에 **13.00**을 선택합니다.

1. **생성(Create)**을 선택합니다.

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

다음 절차에서는 SQL Server Standard Edition 2016에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용하여 `SSIS` 옵션을 옵션 그룹에 추가합니다.

#### 콘솔
<a name="SSIS.Add.Console"></a>

**SSIS 옵션을 추가하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 이 예제에서는 방금 생성한 옵션 그룹인 **ssis-se-2016**을 선택합니다.

1. **옵션 추가**를 선택합니다.

1. **옵션 세부 정보**에서 **옵션 이름**으로 **SSIS**를 선택합니다.

1. **예약**에서 옵션을 즉시 추가할지 또는 다음 유지 관리 기간에 추가할지를 선택합니다.

1. **옵션 추가**를 선택합니다.

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

**SSIS 옵션을 추가하려면**
+ [`SSIS`] 옵션을 옵션 그룹에 추가합니다.  
**Example**  

  대상 LinuxmacOS, 또는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를 사용할 DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 `clr enabled` 파라미터의 파라미터 그룹을 생성하거나 수정합니다.

#### 콘솔
<a name="SSIS.CreateParamGroup.Console"></a>

다음 절차에서는 SQL Server Standard Edition 2016에 대한 파라미터 그룹을 생성합니다.

**파라미터 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **파라미터 그룹**을 선택합니다.

1. [**Create parameter group**]을 선택합니다.

1. **서브넷 그룹 생성** 창에서 다음을 수행합니다.

   1. **파라미터 그룹 패밀리**에서 **sqlserver-se-13.0**을 선택합니다.

   1. **그룹 이름**에 파라미터 그룹의 식별자(예: **ssis-sqlserver-se-13**)를 입력합니다.

   1. **설명**에 **clr enabled parameter group**를 입력합니다.

1. **생성(Create)**을 선택합니다.

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

다음 절차에서는 SQL Server Standard Edition 2016에 대한 파라미터 그룹을 생성합니다.

**파라미터 그룹을 생성하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 에디션 및 DB 인스턴스의 버전에 해당하는 파라미터 그룹의 `clr enabled` 파라미터를 수정합니다. SSIS의 경우 `clr enabled` 파라미터를 1로 설정합니다.

#### 콘솔
<a name="SSIS.ModifyParam.Console"></a>

다음 절차에서는 SQL Server Standard Edition 2016에 대해 생성한 파라미터 그룹을 수정합니다.

**파라미터 그룹을 수정하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **파라미터 그룹**을 선택합니다.

1. 파라미터 그룹(예: **ssis-sqlserver-se-13**)을 선택합니다.

1. **파라미터**에서 파라미터 목록을 **clr**로 필터링합니다.

1. **clr 활성**을 선택합니다.

1. **파라미터 편집**을 선택합니다.

1. **값**에서 **1**을 선택합니다.

1. **변경 사항 저장**을 선택합니다.

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

다음 절차에서는 SQL Server Standard Edition 2016에 대해 생성한 파라미터 그룹을 수정합니다.

**파라미터 그룹을 수정하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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"
  ```

### 옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결
<a name="SSIS.Apply"></a>

SSIS 옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결하려면 AWS Management Console 또는 AWS CLI를 사용합니다.

**참고**  
기존 인스턴스를 사용하는 경우 이미 Active Directory 도메인과 AWS Identity and Access Management(IAM) 역할이 연결되어 있어야 합니다. 새 인스턴스를 생성하는 경우 기존 Active Directory 도메인 및 IAM 역할을 지정합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 Active Directory 작업](User.SQLServer.ActiveDirectoryWindowsAuth.md) 섹션을 참조하세요.

#### 콘솔
<a name="SSIS.Apply.Console"></a>

SSIS 활성화를 완료하려면 SSIS 옵션 그룹 및 파라미터 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결합니다.
+ 새 DB 인스턴스의 경우 인스턴스를 시작할 때 이러한 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 기존 DB 인스턴스의 경우 인스턴스를 수정하여 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

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

SSIS 옵션 그룹 및 파라미터 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.

**SSIS 옵션 그룹 및 파라미터 그룹을 사용하여 인스턴스를 생성하려면**
+ 옵션 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.  
**Example**  

  대상 LinuxmacOS, 또는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**  

  대상 LinuxmacOS, 또는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 DB 인스턴스와 Amazon S3 통합](User.SQLServer.Options.S3-integration.md) 섹션을 참조하세요.

# SSISDB에 대한 관리 권한
<a name="SSIS.Permissions"></a>

SSIS 옵션을 사용하여 인스턴스를 생성하거나 수정하면 마스터 사용자에게 ssis\$1admin 및 ssis\$1logreader 역할이 부여된 SSISDB 데이터베이스가 생성됩니다. 마스터 사용자는 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 에이전트 프록시를 사용할 수 있는 권한이 부여됩니다. 자세한 내용은 Microsoft 설명서의 [자격 증명(데이터베이스 엔진)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15) 및 [SQL Server 에이전트 프록시 생성](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` 함수를 호출합니다. 두 가지 파라미터가 필요합니다. 첫 번째 파라미터는 SSIS에 적용되지 않기 때문에 항상 `NULL`이어야 합니다. 두 번째 파라미터는 작업 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/ko_kr/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 에이전트를 사용하여 예약할 수 있습니다. SSIS 패키지를 실행하려면 Windows 인증 로그인을 사용해야 합니다. 자세한 내용은 [SSIS용 Windows 인증 사용자 설정](SSIS.Permissions.md#SSIS.Use.Auth) 섹션을 참조하세요.

**Topics**
+ [SSIS 프로젝트에 대한 데이터베이스 연결 관리자 설정](#SSIS.Use.ConnMgrs)
+ [SSIS 프록시 생성](#SSIS.Use.Proxy)
+ [SQL Server 에이전트를 사용하여 SSIS 패키지 예약](#SSIS.Use.Schedule)
+ [프록시에서 SSIS 액세스 취소](#SSIS.Use.Revoke)

## SSIS 프로젝트에 대한 데이터베이스 연결 관리자 설정
<a name="SSIS.Use.ConnMgrs"></a>

연결 관리자를 사용하는 경우 다음과 같은 유형의 인증을 사용할 수 있습니다.
+ AWS 관리형 Active Directory를 사용하는 로컬 데이터베이스 연결의 경우 SQL 인증 또는 Windows 인증을 사용할 수 있습니다. Windows 인증의 경우 연결 문자열의 서버 이름으로 `DB_instance_name.fully_qualified_domain_name`을 사용합니다.

  예를 들어 `myssisinstance.corp-ad.example.com`입니다. 여기서 `myssisinstance`는 DB 인스턴스 이름이고 `corp-ad.example.com`은 정규화된 도메인 이름입니다.
+ 원격 연결의 경우 항상 SQL 인증을 사용합니다.
+ 자체 관리형 Active Directory를 사용하는 로컬 데이터베이스 연결의 경우 SQL 인증 또는 Windows 인증을 사용할 수 있습니다. Windows 인증의 경우 연결 문자열의 서버 이름으로 `.` 또는 `LocalHost`를 사용합니다.

## SSIS 프록시 생성
<a name="SSIS.Use.Proxy"></a>

SQL Server 에이전트를 사용하여 SSIS 패키지를 예약하려면 SSIS 자격 증명과 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 에이전트를 사용하여 SSIS 패키지 예약
<a name="SSIS.Use.Schedule"></a>

자격 증명 및 프록시를 생성하고 SSIS에 프록시에 대한 액세스 권한을 부여한 후 SSIS 패키지를 예약하는 SQL Server 에이전트 작업을 생성할 수 있습니다.

**SSIS 패키지를 예약하려면**
+ SSMS 또는 T-SQL을 사용하여 SQL Server 에이전트 작업을 생성할 수 있습니다. 다음 예제에서는 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 Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. `SSIS` 옵션이 있는 옵션 그룹을 선택합니다(이전 예제의 경우 `ssis-se-2016`).

1. **옵션 삭제**를 선택합니다.

1. **옵션 삭제**에서 **삭제할 옵션**에 **SSIS**를 선택합니다.

1. **즉시 적용**에서 옵션을 즉시 삭제하려면 **예**를 선택하고 다음 유지 관리 기간에 삭제하려면 **아니오**를 선택합니다.

1. **Delete**(삭제)를 선택합니다.

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

다음 절차에서는 `SSIS` 옵션을 제거합니다.

**옵션 그룹에서 SSIS 옵션을 제거하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Analysis Services(SSAS) 및 SQL Server Integration Services(SSIS)를 포함하는 SQL Server 서비스 제품군의 일부입니다. SQL Server를 기반으로 하는 서비스인 SSRS를 사용하여 다양한 데이터 원본에서 데이터를 수집하고 쉽게 이해 및 분석 가능한 방식으로 제공할 수 있습니다.

Amazon RDS for SQL Server는 RDS DB 인스턴스에서 SSRS를 직접 실행할 수 있도록 지원합니다. 기존 DB 인스턴스 또는 새 DB 인스턴스에서 SSRS를 사용할 수 있습니다.

RDS는 다음 버전에서 SQL Server Standard 및 Enterprise Edition용 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)
  + [옵션 그룹을 DB 인스턴스와 연결](SSRS.Enabling.md#SSRS.Apply)
  + [VPC 보안 그룹에 대한 인바운드 액세스 허용](SSRS.Enabling.md#SSRS.Inbound)
+ [보고서 서버 데이터베이스](#SSRS.DBs)
+ [SSRS 로그 파일](#SSRS.Logs)
+ [SSRS 웹 포털 액세스](SSRS.Access.md)
  + [RDS에서 SSL 사용](SSRS.Access.md#SSRS.Access.SSL)
  + [도메인 사용자에게 액세스 권한 부여](SSRS.Access.md#SSRS.Access.Grant)
  + [웹 포털 액세스](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를 실행하는 경우 다음과 같은 제한 및 권장 사항이 적용됩니다.
+ 읽기 전용 복제본이 있는 DB 인스턴스에서는 SSRS를 사용할 수 없습니다.
+ 인스턴스에서 자체 관리형 Active Directory 또는 SSRS용 AWS Directory Service for Microsoft Active Directory 웹 포털 및 웹 서버 인증을 사용해야 합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 Active Directory 작업](User.SQLServer.ActiveDirectoryWindowsAuth.md) 단원을 참조하십시오.
+ SSRS 옵션으로 만든 보고 서버 데이터베이스는 백업할 수 없습니다.
+ 다른 SSRS 인스턴스에서 보고서 서버 데이터베이스를 가져오고 복원하는 것은 지원되지 않습니다. 자세한 내용은 [보고서 서버 데이터베이스](#SSRS.DBs) 단원을 참조하십시오.
+ 기본 SSL 포트(443)에서 수신하도록 SSRS를 구성할 수 없습니다. 허용되는 값은 1150–49511(1234, 1434, 3260, 3343, 3389, 47001 제외)입니다.
+ Windows 파일 공유를 통한 구독은 지원되지 않습니다.
+ 보고 서비스 구성 관리자를 사용하는 것은 지원되지 않습니다.
+ 역할을 생성 및 수정하는 것은 지원되지 않습니다.
+ 보고서 서버 속성을 수정하는 것은 지원되지 않습니다.
+ 시스템 관리자 및 시스템 사용자 역할은 부여되지 않습니다.
+ 웹 포털을 통해 시스템 수준의 역할 할당을 편집할 수 없습니다.

# SSRS 설정
<a name="SSRS.Enabling"></a>

다음 프로세스를 사용하여 DB 인스턴스에 대해 SSRS를 켭니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 선택합니다.

1. [`SSRS`] 옵션을 옵션 그룹에 추가합니다.

1. 옵션 그룹을 DB 인스턴스에 연동시킵니다.

1. SSRS 리스너 포트의 Virtual Private Cloud(VPC) 보안 그룹에 대한 인바운드 액세스를 허용합니다.

## SSRS용 옵션 그룹 생성
<a name="SSRS.OptionGroup"></a>

SSRS를 사용하려면 SQL Server 엔진과 사용할 DB 인스턴스 버전에 해당하는 옵션 그룹을 생성합니다. 이렇게 하려면 AWS Management Console 또는 AWS CLI를 사용합니다.

**참고**  
올바른 SQL Server 엔진 및 버전인 경우 기존 옵션 그룹을 사용할 수도 있습니다.

### 콘솔
<a name="SSRS.OptionGroup.Console"></a>

다음 절차에서는 SQL Server Standard Edition 2017에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. **그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 창에서 다음을 수행합니다.

   1. **이름**에 AWS 계정 계정 내에서 쉽게 식별할 수 있는 옵션 그룹 이름을 입력합니다(예: **ssrs-se-2017**). 이름은 글자, 숫자 및 하이픈만 사용 가능합니다.

   1. **설명**에 옵션 그룹에 대한 간단한 설명을 입력합니다(예: **SSRS option group for SQL Server SE 2017**). 이 설명은 표시 용도로만 사용됩니다.

   1. **엔진**에 대해 **sqlserver-se**를 선택합니다.

   1. **메이저 엔진 버전**에 대해 **14.00**을 선택합니다.

1. **생성(Create)**을 선택합니다.

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

다음 절차에서는 SQL Server Standard Edition 2017에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**
+ 다음 명령 중 하나를 실행합니다.

**Example**  
대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용하여 `SSRS` 옵션을 옵션 그룹에 추가합니다.

### 콘솔
<a name="SSRS.Add.CON"></a>

**SSRS 옵션을 추가하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 방금 생성한 옵션 그룹을 선택한 다음 **옵션 추가**를 선택합니다.

1. **옵션 세부 정보**에서 **옵션 이름**으로 **SSRS**를 선택합니다.

1. **옵션 설정**에서 다음을 수행합니다.

   1. SSRS 서비스가 수신할 포트를 입력합니다. 기본값은 8443입니다. 허용되는 값 목록은 [제한 및 권장 사항](Appendix.SQLServer.Options.SSRS.md#SSRS.Limitations) 단원을 참조하십시오.

   1. **최대 메모리**에 값을 입력합니다.

      **최대 메모리**는 상한 임계값을 지정합니다. 이 임계값을 넘으면 보고서 서버 애플리케이션에 새 메모리 할당 요청이 수락되지 않습니다. 숫자는 DB 인스턴스에 대한 총 메모리 비율입니다. 허용되는 값은 10–80입니다.

   1. **보안 그룹**의 경우 옵션과 연결할 VPC 보안 그룹을 선택합니다. DB 인스턴스와 연결된 보안 그룹을 사용합니다.

1. SSRS 이메일을 사용하여 보고서를 보내려면 **보고 서비스의 이메일 배달** 아래에서 **이메일 배달 옵션 구성** 확인란을 선택한 후 다음을 수행합니다.

   1. **발신자 이메일 주소**에 대해 SSRS 이메일에서 보낸 메시지의 **보낸 사람** 필드에 사용할 이메일 주소를 입력합니다.

      SMTP 서버에서 메일을 보낼 수 있는 권한이 있는 사용자 계정을 지정합니다.

   1. 에 대한**SMTP 서버**, 사용할 SMTP 서버 또는 게이트웨이를 지정합니다.

      IP 주소, 회사 인트라넷에 있는 컴퓨터의 NetBIOS 이름 또는 정규화된 도메인 이름이 될 수 있습니다.

   1. **SMTP 포트**에 메일 서버에 연결할 때 사용할 포트를 입력합니다. 기본값은 25입니다.

   1. 인증을 사용하려면:

      1. **인증 사용**확인란을 선택합니다.

      1. **Secret Amazon 리소스 이름(ARN**)에 사용자 자격 증명에 대한 AWS Secrets Manager ARN을 입력합니다.

         다음 형식을 사용합니다.

         **arn:aws:secretsmanager:*Region*:*AccountId*:secret:*SecretName*-*6RandomCharacters***

         예:

         **arn:aws:secretsmanager:*us-west-2*:*123456789012*:secret:*MySecret-a1b2c3***

         새 SFTP 비밀 생성에 대한 자세한 정보는 [SSRS 이메일을 사용하여 보고서 보내기](SSRS.Email.md) 단원을 참조하십시오.

   1. SSL을 사용하여 이메일 메시지를 암호화하려면 **SSL(Secure Sockets Layer) 사용** 확인란을 선택합니다.

1. **예약**에서 옵션을 즉시 추가할지 또는 다음 유지 관리 기간에 추가할지를 선택합니다.

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 DB 인스턴스에 대한 VPC 보안 그룹 멤버십입니다.
      + `MAX_MEMORY` – 상한 임계값을 지정합니다. 이 임계값을 넘으면 보고서 서버 애플리케이션에 새 메모리 할당 요청이 수락되지 않습니다. 숫자는 DB 인스턴스에 대한 총 메모리 비율입니다. 허용되는 값은 10–80입니다.

   1. (선택 사항) SSRS 이메일을 사용하려면 다음 파라미터를 설정합니다.
      + `SMTP_ENABLE_EMAIL` — `true`로 설정하여 SSRS 이메일을 사용합니다. 기본값은 `false`입니다.
      + `SMTP_SENDER_EMAIL_ADDRESS` — SSRS 이메일에서 보낸 메시지의 **보낸 사람** 필드에 사용할 전자 메일 주소입니다. 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**  

   대상 LinuxmacOS, 또는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
   ```

## 옵션 그룹을 DB 인스턴스와 연결
<a name="SSRS.Apply"></a>

AWS Management Console 또는 AWS CLI를 사용하여 옵션 그룹을 DB 인스턴스와 연결할 수 있습니다.

기존 DB 인스턴스를 사용하는 경우 이미 Active Directory 도메인과 AWS Identity and Access Management(IAM) 역할이 연결되어 있어야 합니다. 새 인스턴스를 생성하는 경우 기존 Active Directory 도메인 및 IAM 역할을 지정합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 Active Directory 작업](User.SQLServer.ActiveDirectoryWindowsAuth.md) 섹션을 참조하세요.

### 콘솔
<a name="SSRS.Apply.Console"></a>

옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.
+ 새 DB 인스턴스의 경우, 인스턴스를 시작할 때 옵션 그룹을 연결하십시오. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 기존 DB 인스턴스의 경우 인스턴스를 수정하고 새 옵션 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md)을 참조하세요.

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

옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.

**옵션 그룹을 사용하는 DB 인스턴스를 생성하려면**
+ 옵션 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.  
**Example**  

  대상 LinuxmacOS, 또는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
  ```

**옵션 그룹을 사용하도록 DB 인스턴스를 수정하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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>

DB 인스턴스와 연결된 VPC 보안 그룹에 대한 인바운드 액세스를 허용하려면 지정된 SSRS 리스너 포트에 대한 인바운드 규칙을 생성합니다. 보안 그룹 설정에 대한 자세한 내용은 [보안 그룹을 생성하여 VPC 내부의 DB 인스턴스에 대한 액세스를 제공](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup) 단원을 참조하십시오.

## 보고서 서버 데이터베이스
<a name="SSRS.DBs"></a>

DB 인스턴스가 SSRS 옵션과 연결되면 DB 인스턴스에 두 개의 새 데이터베이스가 생성됩니다.
+ `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 웹 포털 액세스
<a name="SSRS.Access"></a>

SSRS 웹 포털에 액세스하려면 다음 프로세스를 사용합니다.

1. Secure Sockets Layer(SSL) 설정

1. 도메인 사용자에게 액세스 권한을 부여합니다.

1. 브라우저 및 도메인 사용자 자격 증명을 사용하여 웹 포털에 액세스합니다.

## RDS에서 SSL 사용
<a name="SSRS.Access.SSL"></a>

SSRS는 연결에 HTTPS SSL 프로토콜을 사용합니다. 이 프로토콜을 사용할 수 있도록 클라이언트 컴퓨터의 Microsoft Windows 운영 체제로 SSL 인증서를 가져옵니다.

SSL 인증서에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하십시오. SQL Server에서 SSL을 사용하는 방법에 대한 자세한 내용은 [Microsoft SQL Server DB 인스턴스와 함께 SSL 사용](SQLServer.Concepts.General.SSL.Using.md) 단원을 참조하십시오.

## 도메인 사용자에게 액세스 권한 부여
<a name="SSRS.Access.Grant"></a>

새 SSRS 활성화 시 SSRS에 역할이 할당되어 있지 않습니다. 도메인 사용자 또는 사용자 그룹에 웹 포털에 대한 액세스 권한을 부여하기 위해 RDS는 저장 프로시저를 제공합니다.

**웹 포털에서 도메인 사용자에게 액세스 권한을 부여하려면**
+ 다음 저장 프로시저를 사용합니다.

  ```
  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` 역할도 부여됩니다.

## 웹 포털 액세스
<a name="SSRS.Access"></a>

`SSRS_GRANT_PORTAL_PERMISSION` 작업이 성공적으로 완료되면 웹 브라우저를 사용하여 포털에 액세스할 수 있습니다. 웹 포털 URL의 형식은 다음과 같습니다.

```
https://rds_endpoint:port/Reports
```

위의 형식에서 각 요소는 다음과 같습니다.
+ *`rds_endpoint`* – SSRS와 함께 사용 중인 RDS DB 인스턴스의 엔드포인트입니다.

  이 엔드포인트는 DB 인스턴스의 **연결 및 보안** 탭에서 찾을 수 있습니다. 자세한 내용은 [Microsoft SQL Server DB 인스턴스에 연결](USER_ConnectToMicrosoftSQLServerInstance.md) 섹션을 참조하세요.
+ `port` – `SSRS` 옵션에서 설정한 SSRS의 리스너 포트입니다.

**웹 포털에 액세스하려면**

1. 브라우저에 웹 포털 URL을 입력합니다.

   ```
   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>

웹 포털에 대한 액세스 권한이 있으면 웹 포털에 보고서를 배포할 수 있습니다. 웹 포털의 업로드 도구를 사용하여 보고서를 업로드하거나 [SQL Server 데이터 도구(SSDT)](https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt)에서 직접 배포할 수 있습니다. SSDT에서 배포하는 경우 다음을 확인하세요.
+ SSDT를 시작한 사용자가 SSRS 웹 포털에 액세스할 수 있습니다.
+ SSRS 프로젝트 속성의 `TargetServerURL` 값이 다음과 같이 `ReportServer` 접미사가 붙은 RDS DB 인스턴스의 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 DB 인스턴스의 경우 정규화된 도메인 이름(FQDN)을 연결 문자열의 데이터 소스 이름으로 사용합니다. 예를 들어 `myssrsinstance.corp-ad.example.com`입니다. 여기서 `myssrsinstance`는 DB 인스턴스 이름이고 `corp-ad.example.com`은 정규화된 도메인 이름입니다.
+ 자체 관리형 Active Directory에 연결된 RDS for SQL Server DB 인스턴스의 경우 `.` 또는 `LocalHost`를 연결 문자열의 데이터 소스 이름으로 사용합니다.

# SSRS 이메일을 사용하여 보고서 보내기
<a name="SSRS.Email"></a>

SSRS에는 사용자에게 보고서를 보내는 데 사용할 수 있는 SSRS 전자 메일 확장이 포함되어 있습니다.

SSRS 이메일을 구성하려면 `SSRS` 옵션 설정을 사용합니다. 자세한 내용은 [옵션 그룹에 SSRS 옵션 추가](SSRS.Enabling.md#SSRS.Add)을 참조하세요.

SSRS 이메일을 구성한 후 보고서 서버에서 보고서를 구독할 수 있습니다. 자세한 내용은 [보고 서비스를 통한 이메일 전달](https://docs.microsoft.com/en-us/sql/reporting-services/subscriptions/e-mail-delivery-in-reporting-services)을 알아보려면 다음 섹션을 참조하세요.마이크로소프트 설명서에서

SSRS 이메일이 RDS에서 작동하려면 AWS Secrets Manager와의 통합이 필요합니다. Secrets Manager와 통합하려면 보안 암호를 생성합니다.

**참고**  
나중에 암호를 변경하는 경우 옵션 그룹의 `SSRS` 옵션도 업데이트해야 합니다.

**SSRS 이메일에 보안 암호를 만들려면**

1. *AWS Secrets Manager 사용 설명서*의 [암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) 단계를 따릅니다.

   1. **암호 유형 선택**에서 **다른 유형의 암호**를 선택합니다.

   1. **키/값 쌍**의 경우 다음을 입력합니다.
      + **SMTP\$1USERNAME** - SMTP 서버에서 메일을 보낼 권한이 있는 사용자를 입력합니다.
      + **SMTP\$1PASSWORD** - SMTP 사용자의 암호를 입력합니다.

   1. **암호화 키**의 경우 기본 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)의 단계를 따르세요. 권한 정책은 `rds.amazonaws.com` 서비스 주체에게 `secretsmanager:GetSecretValue` 작업을 제공합니다.

   *혼란스러운 대리인* 문제를 피하기 위해 정책의 `aws:sourceAccount` 및 `aws:sourceArn` 조건을 사용하는 것이 좋습니다. `aws:sourceAccount`에 대해 AWS 계정 및 `aws:sourceArn`의 옵션 그룹 ARN을 사용합니다. 자세한 내용은 [교차 서비스 혼동된 대리자 문제 방지](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` 작업 유형을 사용합니다.

**웹 포털에 대한 도메인 사용자의 액세스 권한을 취소하려면**
+ 다음 저장 프로시저를 사용합니다.

  ```
  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` 함수를 호출합니다. 두 가지 파라미터가 필요합니다. 첫 번째 파라미터는 SSRS에 적용되지 않기 때문에 항상 `NULL`이어야 합니다. 두 번째 파라미터는 작업 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/ko_kr/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/ko_kr/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 데이터베이스도 삭제한 경우 동일한 DB 인스턴스에서 옵션을 읽으면 새 보고서 서버 데이터베이스가 생성됩니다.

### 콘솔
<a name="SSRS.Disable.Console"></a>

**옵션 그룹에서 SSRS 옵션을 제거하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. `SSRS` 옵션이 있는 옵션 그룹을 선택합니다(이전 예제의 경우 `ssrs-se-2017`).

1. **옵션 삭제**를 선택합니다.

1. **옵션 삭제**에서 **SSRS** 또는 **삭제할 옵션**을 선택합니다.

1. **즉시 적용**에서 옵션을 즉시 삭제하려면 **예**를 선택하고 다음 유지 관리 기간에 삭제하려면 **아니오**를 선택합니다.

1. **Delete**(삭제)를 선택합니다.

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

**옵션 그룹에서 SSRS 옵션을 제거하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Distributed Transaction Coordinator 지원
<a name="Appendix.SQLServer.Options.MSDTC"></a>

*분산 트랜잭션*은 두 개 이상의 네트워크 호스트가 관련된 데이터베이스 트랜잭션입니다. RDS for SQL Server는 호스트 간의 분산 트랜잭션을 지원하며 여기서 단일 호스트는 다음 중 하나일 수 있습니다.
+ RDS for SQL Server DB 인스턴스
+ 온프레미스 SQL Server 호스트
+ SQL Server가 설치된 Amazon EC2 호스트
+ 분산 트랜잭션을 지원하는 데이터베이스 엔진이 있는 기타 EC2 호스트 또는 RDS DB 인스턴스

RDS에서는 SQL Server 2012(버전 11.00.5058.0.v1 이상)부터 모든 에디션의 RDS for SQL Server에서 분산 트랜잭션을 지원합니다. Microsoft Distributed Transaction Coordinator(MSDTC)를 사용하여 지원이 제공됩니다. MSDTC에 대한 자세한 내용은 Microsoft 설명서에서 [Distributed Transaction Coordinator](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)
  + [옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결](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 서버를 수동으로 구성해야 합니다.
+ Java Database Connectivity(JDBC) XA 트랜잭션은 SQL Server 2017 버전 14.00.3223.3 이상 및 SQL Server 2019에서 지원됩니다.
+ RDS 인스턴스의 클라이언트 동적 연결 라이브러리(DLL)를 사용하는 분산 트랜잭션은 지원되지 않습니다.
+ 사용자 지정 XA 동적 연결 라이브러리 사용은 지원되지 않습니다.

# MSDTC 활성화
<a name="Appendix.SQLServer.Options.MSDTC.Enabling"></a>

DB 인스턴스에 MSDTC를 활성화하려면 다음 프로세스를 사용합니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 선택합니다.

1. [`MSDTC`] 옵션을 옵션 그룹에 추가합니다.

1. 새 파라미터 그룹을 생성하거나 기존 파라미터 그룹을 선택합니다.

1. 파라미터 그룹을 수정하여 `in-doubt xact resolution` 파라미터를 1 또는 2로 설정합니다.

1. 옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결합니다.

## MSDTC용 옵션 그룹 생성
<a name="Appendix.SQLServer.Options.MSDTC.OptionGroup"></a>

AWS Management Console 또는 AWS CLI를 사용하여 SQL Server 엔진과 DB 인스턴스 버전에 해당하는 옵션 그룹을 생성합니다.

**참고**  
올바른 SQL Server 엔진 및 버전인 경우 기존 옵션 그룹을 사용할 수도 있습니다.

### 콘솔
<a name="OptionGroup.MSDTC.Console"></a>

다음 절차에서는 SQL Server Standard Edition 2016에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. **그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 창에서 다음을 수행합니다.

   1. [**이름(Name)**]에 AWS 계정 내에서 쉽게 식별할 수 있는 옵션 그룹 이름을 입력합니다(예: **msdtc-se-2016**). 이름은 글자, 숫자 및 하이픈만 사용 가능합니다.

   1. **설명**에 옵션 그룹에 대한 간단한 설명을 입력합니다(예: **MSDTC option group for SQL Server SE 2016**). 이 설명은 표시 용도로만 사용됩니다.

   1. **엔진**에 대해 **sqlserver-se**를 선택합니다.

   1. **메이저 엔진 버전**에 **13.00**을 선택합니다.

1. **생성(Create)**을 선택합니다.

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

다음 예에서는 SQL Server Standard Edition 2016에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용하여 `MSDTC` 옵션을 옵션 그룹에 추가합니다.

다음 옵션 설정이 필요합니다.
+ **포트** – MSDTC에 액세스하는 데 사용하는 포트입니다. 허용되는 값은 1150–49151(1234, 1434, 3260, 3343, 3389, 47001 제외)입니다. 기본값은 5000입니다.

  사용하려는 포트가 방화벽 규칙에서 활성화되어 있는지 확인합니다. 또한 필요에 따라 DB 인스턴스와 연결된 보안 그룹의 인바운드 및 아웃바운드 규칙에서 이 포트를 활성화해야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 단원을 참조하세요.
+ **보안 그룹** – RDS DB 인스턴스에 대한 VPC 보안 그룹 멤버십입니다.
+ **인증 유형** – 호스트 간의 인증 모드입니다. 지원되는 인증 유형은 다음과 같습니다.
  + 상호 – RDS 인스턴스가 통합 인증을 사용하여 상호 인증됩니다. 이 옵션을 선택하는 경우 이 옵션 그룹과 연결된 모든 인스턴스가 도메인에 가입되어 있어야 합니다.
  + 없음 – 호스트 간에 인증이 수행되지 않습니다. 프로덕션 환경에서는 이 모드를 사용하지 않는 것이 좋습니다.
+ **트랜잭션 로그 크기** – MSDTC 트랜잭션 로그의 크기입니다. 허용되는 값은 4–1024MB입니다. 기본 크기는 4MB입니다.

다음 옵션 설정은 선택 사항입니다.
+ **인바운드 연결 활성화** – 이 옵션 그룹과 연결된 인스턴스로의 인바운드 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 Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 방금 생성한 옵션 그룹을 선택합니다.

1. **옵션 추가**를 선택합니다.

1. **옵션 세부 정보**에서 **옵션 이름**으로 **MSDTC**를 선택합니다.

1. **옵션 설정**에서 다음을 수행합니다.

   1. **포트**에 MSDTC에 액세스하는 데 사용할 포트 번호를 입력합니다. 기본값은 **5000**입니다.

   1. **보안 그룹**의 경우 옵션과 연결할 VPC 보안 그룹을 선택합니다.

   1. **인증 유형**에서 **상호** 또는 **없음**을 선택합니다.

   1. **트랜잭션 로그 크기**에 4–1024 사이의 값을 입력합니다. 기본값은 **4**입니다.

1. **추가 구성**에서 다음을 수행합니다.

   1. **연결**에서 필요에 따라 **인바운드 연결 활성화** 및 **아웃바운드 연결 활성화**를 선택합니다.

   1. **허용된 프로토콜**에서 필요에 따라 **XA 활성화** 및 **SNA LU 활성화**를 선택합니다.

1. **예약**에서 옵션을 즉시 추가할지 또는 다음 유지 관리 기간에 추가할지를 선택합니다.

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**  

   대상 LinuxmacOS, 또는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>

DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 `in-doubt xact resolution` 파라미터의 파라미터 그룹을 생성하거나 수정합니다.

### 콘솔
<a name="CreateParamGroup.MSDTC.Console"></a>

다음 예에서는 SQL Server Standard Edition 2016에 대한 파라미터 그룹을 생성합니다.

**파라미터 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **파라미터 그룹**을 선택합니다.

1. [**Create parameter group**]을 선택합니다.

1. **서브넷 그룹 생성** 창에서 다음을 수행합니다.

   1. **파라미터 그룹 패밀리**에서 **sqlserver-se-13.0**을 선택합니다.

   1. **그룹 이름**에 파라미터 그룹의 식별자(예: **msdtc-sqlserver-se-13**)를 입력합니다.

   1. **설명**에 **in-doubt xact resolution**를 입력합니다.

1. **생성(Create)**을 선택합니다.

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

다음 예에서는 SQL Server Standard Edition 2016에 대한 파라미터 그룹을 생성합니다.

**파라미터 그룹을 생성하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 에디션 및 DB 인스턴스의 버전에 해당하는 파라미터 그룹의 `in-doubt xact resolution` 파라미터를 수정합니다.

MSDTC에 대해 `in-doubt xact resolution` 파라미터를 다음 중 하나로 설정합니다.
+ `1` - `Presume commit` 모든 MSDTC 미결 트랜잭션을 커밋된 것으로 가정합니다.
+ `2` - `Presume abort` 모든 MSDTC 미결 트랜잭션을 중지된 것으로 가정합니다.

자세한 내용은 Microsoft 설명서의 [in-doubt xact resolution 서버 구성 옵션](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 Standard Edition 2016에 대해 생성한 파라미터 그룹을 수정합니다.

**파라미터 그룹을 수정하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **파라미터 그룹**을 선택합니다.

1. 파라미터 그룹(예: **msdtc-sqlserver-se-13**)을 선택합니다.

1. **파라미터**에서 파라미터 목록을 **xact**로 필터링합니다.

1. **in-doubt xact resolution**을 선택합니다.

1. **파라미터 편집**을 선택합니다.

1. **1** 또는 **2**를 입력합니다.

1. **Save changes**(변경 사항 저장)를 선택합니다.

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

다음 예에서는 SQL Server Standard Edition 2016에 대해 생성한 파라미터 그룹을 수정합니다.

**파라미터 그룹을 수정하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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"
  ```

## 옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결
<a name="MSDTC.Apply"></a>

AWS Management Console 또는 AWS CLI를 사용하여 MSDTC 옵션 그룹 및 파라미터 그룹을 DB 인스턴스와 연결할 수 있습니다.

### 콘솔
<a name="MSDTC.Apply.Console"></a>

MSDTC 옵션 그룹 및 파라미터 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.
+ 새 DB 인스턴스의 경우 인스턴스를 시작할 때 이러한 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 기존 DB 인스턴스의 경우 인스턴스를 수정하여 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.
**참고**  
도메인에 가입된 기존 DB 인스턴스를 사용하는 경우 이미 Active Directory 도메인과 AWS Identity and Access Management(IAM) 역할이 연결되어 있어야 합니다. 도메인에 가입된 새 인스턴스를 생성하는 경우 기존 Active Directory 도메인 및 IAM 역할을 지정합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 AWS 관리형 Active Directory 작업](USER_SQLServerWinAuth.md) 단원을 참조하세요.

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

MSDTC 옵션 그룹 및 파라미터 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.

**참고**  
도메인에 가입된 기존 DB 인스턴스를 사용하는 경우 이미 Active Directory 도메인과 IAM 역할이 연결되어 있어야 합니다. 도메인에 가입된 새 인스턴스를 생성하는 경우 기존 Active Directory 도메인 및 IAM 역할을 지정합니다. 자세한 내용은 [RDS for SQL Server를 사용하여 AWS 관리형 Active Directory 작업](USER_SQLServerWinAuth.md) 섹션을 참조하세요.

**MSDTC 옵션 그룹 및 파라미터 그룹과 함께 DB 인스턴스를 생성하려면**
+ 옵션 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.  
**Example**  

  대상 LinuxmacOS, 또는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
  ```

**DB 인스턴스를 수정하고 MSDTC 옵션 그룹 및 파라미터 그룹을 연결하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Framework `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 설명서에서 [SQL Server와의 System.Transactions 통합](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server)을 참조하십시오.
  + ODP.NET은 `System.Transactions`를 지원합니다. Oracle Database 11g 릴리스 1(버전 11.1) 이상에서 `TransactionsScope` 범위에서 열린 첫 번째 연결에 대해 로컬 트랜잭션이 생성됩니다. 두 번째 연결이 열리면 이 트랜잭션이 분산 트랜잭션으로 자동 승격됩니다. ODP.NET에서 분산 트랜잭션 지원에 대한 자세한 내용은 Microsoft 설명서의 [Microsoft Distributed Transaction Coordinator 통합](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를 사용하여 분산 트랜잭션을 제어할 수 있습니다. `Enable XA` 옵션 설정을 `true` 옵션의 `MSDTC`(으)로 설정하면 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 DB 인스턴스에서 해당 추적을 다운로드할 수 있도록 지원합니다. 다음 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 START 추적 작업**  
새 트랜잭션 추적 세션을 시작하려면 다음 예에 나온 문을 실행합니다.  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'START',
@traceall='0',
@traceaborted='1',
@tracelong='1';
```
한 번에 하나의 트랜잭션 추적 세션만 활성화할 수 있습니다. 추적 세션이 활성 상태일 때 새 추적 세션 `START` 명령이 실행되면 오류가 반환되고 활성 추적 세션이 변경되지 않습니다.

**Example STOP 추적 작업**  
트랜잭션 추적 세션을 중지하려면 다음 문을 실행합니다.  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
```
이 문은 활성 트랜잭션 추적 세션을 중지하고 트랜잭션 추적 데이터를 RDS DB 인스턴스의 로그 디렉터리에 저장합니다. 출력의 첫 번째 행에는 전체 결과가 포함되며 다음 줄은 작업의 세부 정보를 나타냅니다.  
다음은 성공적인 추적 세션 중지의 예입니다.  

```
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 DB 인스턴스에서 로그 파일을 다운로드하는 방법에 대한 자세한 내용은 [Amazon RDS 로그 파일 모니터링](USER_LogAccess.md) 단원을 참조하십시오.  
추적 세션 로그는 35일 동안 인스턴스에 남아 있습니다. 이전 추적 세션 로그는 자동으로 삭제됩니다.

**Example STATUS 추적 작업**  
트랜잭션 추적 세션의 상태를 추적하려면 다음 문을 실행합니다.  

```
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 Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. `MSDTC` 옵션이 있는 옵션 그룹을 선택합니다(이전 예제의 경우 `msdtc-se-2016`).

1. **옵션 삭제**를 선택합니다.

1. **옵션 삭제**에서 **MSDTC** 또는 **삭제할 옵션**을 선택합니다.

1. **즉시 적용**에서 옵션을 즉시 삭제하려면 **예**를 선택하고 다음 유지 관리 기간에 삭제하려면 **아니오**를 선택합니다.

1. **Delete**(삭제)를 선택합니다.

## CLI
<a name="Options.MSDTC.Disable.CLI"></a>

**옵션 그룹에서 MSDTC 옵션을 제거하려면**
+ 다음 명령 중 하나를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 DB 인스턴스에서 실행되는 MSDTC 서비스 간에 연결을 설정하는 데 문제가 있을 수 있습니다. 그 경우 다음을 확인하십시오.
+ DB 인스턴스와 연결된 보안 그룹의 인바운드 규칙이 올바르게 구성되어 있는지. 자세한 내용은 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 섹션을 참조하세요.
+ 클라이언트 컴퓨터가 올바르게 구성되어 있는지.
+ 클라이언트 컴퓨터에서 MSDTC 방화벽 규칙이 활성화되어 있는지.

**클라이언트 컴퓨터를 구성하려면**

1. **구성 요소 서비스**를 엽니다.

   또는 **서버 관리자**에서 **도구**를 선택한 다음 **구성 요소 서비스**를 선택합니다.

1. **구성 요소 서비스**, **컴퓨터**, **내 컴퓨터**, **Distributed Transaction Coordinator**를 차례로 확장합니다.

1. **로컬 DTC**에 대한 컨텍스트 메뉴를 열고(마우스 오른쪽 버튼 클릭) **속성**을 선택합니다.

1. **보안** 탭을 선택합니다.

1. 다음을 모두 선택합니다.
   + **네트워크 DTC 액세스**
   + **인바운드 허용**
   + **아웃바운드 허용**

1. 올바른 인증 모드가 선택되어 있는지 확인합니다.
   + **상호 인증 필요** – 클라이언트 시스템이 분산 트랜잭션에 참여하는 다른 노드와 동일한 도메인에 가입되었거나 도메인 간에 신뢰 관계가 구성되어 있습니다.
   + **인증 필요 없음** – 다른 모든 경우.

1. **확인**을 선택하여 변경 사항을 저장합니다.

1. 서비스를 다시 시작하라는 메시지가 표시되면 **예**를 선택합니다.

**MSDTC 방화벽 규칙을 활성화하려면**

1. Windows 방화벽을 연 다음 **고급 설정**을 선택합니다.

   **서버 관리자**를 열고 **도구**, **Windows Firewall with Advanced Security**를 차례로 선택합니다.
**참고**  
운영 체제에 따라 Windows 방화벽을 Windows Defender 방화벽이라고 할 수도 있습니다.

1. 왼쪽 창에서 **인바운드 규칙**을 선택합니다.

1. 다음 방화벽 규칙을 활성화합니다(아직 활성화되지 않은 경우).
   + **DTC(Distributed Transaction Coordinator)(RPC)**
   + **DTC(Distributed Transaction Coordinator)(RPC)-EPMAP**
   + **DTC(Distributed Transaction Coordinator)(TCP-In)**

1. Windows 방화벽을 닫습니다.

# RDS for SQL Server를 사용한 Microsoft SQL Server 리소스 관리
<a name="Appendix.SQLServer.Options.ResourceGovernor"></a>

리소스 거버너는 인스턴스 리소스를 정확하게 제어할 수 있는 SQL Server Enterprise Edition 기능입니다. 이를 통해 워크로드가 CPU, 메모리 및 물리적 I/O 리소스를 사용하는 방식에 대한 특정 제한을 설정할 수 있습니다. 리소스 거버너를 사용하면 다음을 수행할 수 있습니다.
+ 다양한 워크로드가 인스턴스 리소스를 공유하는 방식을 관리하여 다중 테넌트 환경에서 리소스 독점 방지
+ 다양한 사용자 및 애플리케이션에 대한 특정 리소스 제한 및 우선 순위를 설정하여 예측 가능한 성능 제공

기존 또는 새 RDS for SQL Server DB 인스턴스에서 리소스 거버너를 활성화할 수 있습니다.

리소스 거버너는 세 가지 기본 개념을 사용합니다.
+ **리소스 풀** - 인스턴스 물리적 리소스(CPU, 메모리 및 I/O)를 관리하는 컨테이너입니다. 두 개의 기본 제공 풀(내부 및 기본)을 가져오고 추가 사용자 지정 풀을 생성할 수 있습니다.
+ **워크로드 그룹** - 특성이 유사한 데이터베이스 세션용 컨테이너입니다. 모든 워크로드 그룹은 리소스 풀에 속합니다. 두 개의 기본 제공 워크로드 그룹(내부 및 기본)을 가져오고 추가 사용자 지정 워크로드 그룹을 생성할 수 있습니다.
+ **분류** - 사용자 이름, 애플리케이션 이름, 데이터베이스 이름 또는 호스트 이름을 기반으로 수신 세션을 처리하는 워크로드 그룹을 결정하는 프로세스입니다.

SQL Server의 리소스 거버너에 대한 자세한 내용은 Microsoft 설명서의 [리소스 거버너](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)
  + [옵션 그룹을 DB 인스턴스와 연결](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)
+ [다중 AZ 배포에 대한 고려 사항](#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>

Amazon RDS는 RDS for SQL Server를 사용할 수 있는 모든 AWS 리전에서 다음 SQL Server 버전 및 에디션에 대한 리소스 조절을 지원합니다.
+ SQL Server 2022 Developer Edition 및 Enterprise Edition
+ SQL Server 2019 Enterprise Edition
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

## 제한 및 권장 사항
<a name="ResourceGovernor.Limitations"></a>

리소스 거버너에는 다음과 같은 제한 사항 및 권장 사항이 적용됩니다.
+ 에디션 및 서비스 제한:
  + SQL Server Enterprise Edition에서만 사용할 수 있습니다.
  + 리소스 관리는 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 사이여야 합니다.
    + 다른 모든 파라미터는 잠겨 있으며 변경할 수 없습니다.
  + 사용자 정의 워크로드 그룹을 사용하면 모든 파라미터를 수정할 수 있습니다.
+ 분류자 함수 제한 사항:
  + 분류자 함수는 지정된 기준(사용자 이름, 데이터베이스, 호스트 또는 애플리케이션 이름)에 따라 사용자 지정 워크로드 그룹에 연결을 라우팅합니다.
  + 각 라우팅 조건에서 최대 2개의 사용자 정의 워크로드 그룹을 지원합니다.
  + 기준을 각 그룹 내의 `AND` 조건과 결합합니다.
  + 워크로드 그룹당 하나 이상의 라우팅 기준이 필요합니다.
  + 위에 나열된 분류 방법만 지원됩니다.
  + 함수 이름은 `rg_classifier_`로 시작해야 합니다.
  + 일치하는 조건이 없는 경우 기본 그룹 할당입니다.

# RDS for SQL Server 인스턴스에 대한 Microsoft SQL Server 리소스 거버너 활성화
<a name="ResourceGovernor.Enabling"></a>

RDS for SQL Server DB 인스턴스에 `RESOURCE_GOVERNOR` 옵션을 추가하여 리소스 거버너를 활성화합니다. 다음 프로세스를 사용합니다.

1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 선택합니다.

1. [`RESOURCE_GOVERNOR`] 옵션을 옵션 그룹에 추가합니다.

1. 옵션 그룹을 DB 인스턴스에 연결합니다.

**참고**  
옵션 그룹을 통해 리소스 거버너를 활성화하면 재부팅할 필요가 없습니다.

## `RESOURCE_GOVERNOR`용 옵션 그룹 만들기
<a name="ResourceGovernor.OptionGroup"></a>

리소스 거버너를 활성화하려면 사용할 DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 옵션 그룹을 생성하거나 수정합니다. 이 절차를 완료하려면 AWS Management Console 또는 AWS CLI를 사용합니다.

### 콘솔
<a name="ResourceGovernor.OptionGroup.Console"></a>

다음 절차를 사용하여 SQL Server Enterprise Edition 2022에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. **그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 창에서 다음과 같이 합니다.

   1. [**이름(Name)**]에 AWS 계정 내에서 쉽게 식별할 수 있는 옵션 그룹 이름을 입력합니다(예: **resource-governor-ee-2022**). 이름은 글자, 숫자 및 하이픈만 사용 가능합니다.

   1. **설명**에 옵션 그룹에 대한 간단한 설명을 입력합니다(예: **RESOURCE\$1GOVERNOR option group for SQL Server EE 2022**). 이 설명은 표시 용도로만 사용됩니다.

   1. **엔진**에 대해 **sqlserver-ee**를 선택합니다.

   1. **메이저 엔진 버전**에 대해 **16.00**을 선택합니다.

1. **생성(Create)**을 선택합니다.

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

다음 절차에서는 SQL Server Enterprise Edition 2022에 대한 옵션 그룹을 생성합니다.

**옵션 그룹을 생성하려면**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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 Management Console 또는 AWS CLI를 사용하여 `RESOURCE_GOVERNOR` 옵션을 옵션 그룹에 추가합니다.

### 콘솔
<a name="ResourceGovernor.Add.Console"></a>

**RESOURCE\$1GOVERNOR 옵션 추가**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. 이 예제에서는 방금 생성한 옵션 그룹인 **resource-governor-ee-2022**를 선택합니다.

1. **옵션 추가**를 선택합니다.

1. **옵션 세부 정보**에서 **옵션 이름**으로 **RESOURCE\$1GOVERNOR**를 선택합니다.

1. **예약**에서 옵션을 즉시 추가할지 또는 다음 유지 관리 기간에 추가할지를 선택합니다.

1. **옵션 추가**를 선택합니다.

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

**`RESOURCE_GOVERNOR` 옵션을 추가하려면**
+ [`RESOURCE_GOVERNOR`] 옵션을 옵션 그룹에 추가합니다.  
**Example**  

  대상 LinuxmacOS, 또는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
  ```

## 옵션 그룹을 DB 인스턴스와 연결
<a name="ResourceGovernor.Apply"></a>

AWS Management Console 또는 AWS CLI를 사용하여 `RESOURCE_GOVERNOR` 옵션 그룹을 DB 인스턴스와 연결할 수 있습니다.

### 콘솔
<a name="ResourceGovernor.Apply.Console"></a>

리소스 거버너 활성화를 완료하려면 `RESOURCE_GOVERNOR` 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결합니다.
+ 새 DB 인스턴스의 경우 인스턴스를 시작할 때 이러한 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 기존 DB 인스턴스의 경우 인스턴스를 수정하여 그룹을 연결합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

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

`RESOURCE_GOVERNOR` 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스와 연결할 수 있습니다.

**`RESOURCE_GOVERNOR` 옵션 그룹을 사용하여 인스턴스 생성**
+ 옵션 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.  
**Example**  

  대상 LinuxmacOS, 또는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**  

  대상 LinuxmacOS, 또는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 DB 인스턴스에 연결](USER_ConnectToMicrosoftSQLServerInstance.md) 섹션을 참조하세요.

먼저 SQL Server 데이터베이스에 연결한 다음 적절한 RDS for SQL Server 저장 프로시저를 직접적으로 호출하여 구성을 완료합니다. 데이터베이스 연결 방법에 대한 자세한 내용은 [Microsoft SQL Server DB 인스턴스에 연결](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 대역폭을 지정합니다. *값*은 기본 설정이 100인 정수입니다. *값*에 허용되는 범위는 1\$1100입니다.
+ `@CAP_CPU_PERCENT` - 리소스 풀의 모든 요청이 수신하는 CPU 대역폭에 대한 하드 캡을 지정합니다. 최대 CPU 대역폭 수준을 지정된 값과 동일하게 제한합니다. *값*은 기본 설정이 100인 정수입니다. *값*에 허용되는 범위는 1\$1100입니다.
+ `@MAX_MEMORY_PERCENT` - 이 리소스 풀의 요청이 사용할 수 있는 쿼리 워크스페이스 메모리의 최대 양을 지정합니다. *값*은 기본 설정이 100인 정수입니다. *값*에 허용되는 범위는 1\$1100입니다.
+ `@MAX_IOPS_PER_VOLUME` - 리소스 풀을 허용할 디스크 볼륨당 최대 초당 I/O 작업 수(IOPS)를 지정합니다. *값*에 허용되는 범위는 0\$12^31-1(2,147,483,647)입니다. 풀에 대한 IOPS 제한을 제거하려면 0을 지정합니다. 기본값은 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 대역폭을 지정합니다. *값*은 기본 설정이 100인 정수입니다. *값*에 허용되는 범위는 1\$1100입니다.
+ `@CAP_CPU_PERCENT` - 리소스 풀의 모든 요청이 수신하는 CPU 대역폭에 대한 하드 캡을 지정합니다. 최대 CPU 대역폭 수준을 지정된 값과 동일하게 제한합니다. *값*은 기본 설정이 100인 정수입니다. *값*에 허용되는 범위는 1\$1100입니다.
+ `@MAX_MEMORY_PERCENT` - 이 리소스 풀의 요청이 사용할 수 있는 쿼리 워크스페이스 메모리의 최대 양을 지정합니다. *값*은 기본 설정이 100인 정수입니다. *값*에 허용되는 범위는 1\$1100입니다.
+ `@MAX_IOPS_PER_VOLUME` - 리소스 풀을 허용할 디스크 볼륨당 최대 초당 I/O 작업 수(IOPS)를 지정합니다. *값*에 허용되는 범위는 0\$12^31-1(2,147,483,647)입니다. 풀에 대한 IOPS 제한을 제거하려면 0을 지정합니다. 기본값은 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` - 단일 요청이 풀에서 가져올 수 있는 쿼리 워크스페이스 메모리의 최대 양을 지정합니다. *값*은 `MAX_MEMORY_PERCENT`에서 정의한 리소스 풀 크기의 백분율입니다. 기본값은 25입니다.
+ `@REQUEST_MAX_CPU_TIME_SEC` - 배치 요청이 사용할 수 있는 최대 CPU 시간을 초 단위로 지정합니다. *값*은 0 또는 양의 정수여야 합니다. *값*의 기본 설정은 0이며 이는 무제한을 의미합니다.
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC` - 쿼리가 쿼리 작업 영역 메모리의 메모리 부여를 사용할 수 있을 때까지 기다릴 수 있는 최대 시간을 초 단위로 지정합니다. *값*은 0 또는 양의 정수여야 합니다. *값*의 기본 설정인 0은 쿼리 비용을 기반으로 한 내부 계산을 사용하여 최대 시간을 결정합니다.
+ `@MAX_DOP` - 병렬 쿼리 실행을 위한 최대 병렬 처리 정도(`MAXDOP`)를 지정합니다. *값*에 허용되는 범위는 0\$164입니다. *값*의 기본 설정인 0은 전역 설정을 사용합니다.
+ `@GROUP_MAX_REQUESTS` = 워크로드 그룹에서 실행할 수 있는 최대 동시 요청 수를 지정합니다. *값*은 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` - 단일 요청이 풀에서 가져올 수 있는 쿼리 워크스페이스 메모리의 최대 양을 지정합니다. *값*은 `MAX_MEMORY_PERCENT`에서 정의한 리소스 풀 크기의 백분율입니다. 기본값은 25입니다. Amazon RDS에서 `REQUEST_MAX_MEMORY_GRANT_PERCENT`는 1에서 70 사이여야 합니다.
+ `@REQUEST_MAX_CPU_TIME_SEC` - 배치 요청이 사용할 수 있는 최대 CPU 시간을 초 단위로 지정합니다. *값*은 0 또는 양의 정수여야 합니다. *값*의 기본 설정은 0이며 이는 무제한을 의미합니다.
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC` - 쿼리가 쿼리 작업 영역 메모리의 메모리 부여를 사용할 수 있을 때까지 기다릴 수 있는 최대 시간을 초 단위로 지정합니다. *값*은 0 또는 양의 정수여야 합니다. *값*의 기본 설정인 0은 쿼리 비용을 기반으로 한 내부 계산을 사용하여 최대 시간을 결정합니다.
+ `@MAX_DOP` - 병렬 쿼리 실행을 위한 최대 병렬 처리 정도(MAXDOP)를 지정합니다. *값*에 허용되는 범위는 0\$164입니다. *값*의 기본 설정인 0은 전역 설정을 사용합니다.
+ `@GROUP_MAX_REQUESTS` - 워크로드 그룹에서 실행할 수 있는 최대 동시 요청 수를 지정합니다. *값*은 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` 그룹으로 분류됩니다.

**기능:**
+ 각 라우팅 조건에서 최대 2개의 워크로드 그룹을 지원합니다.
+ 기준을 각 그룹 내의 `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
```

## 다중 AZ 배포에 대한 고려 사항
<a name="ResourceGovernor.Considerations"></a>

RDS for SQL Server는 다중 AZ 배포에서 리소스 거버너를 보조 인스턴스에 복제합니다. 수정된 시기와 보조 인스턴스와 마지막으로 동기화된 새 리소스 거버너를 확인할 수 있습니다.

다음 쿼리를 사용하여 복제의 `last_sync_time`을 확인합니다.

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

쿼리 결과에서 동기화 시간이 리소스 조정자 업데이트 또는 생성 시간을 초과하면 리소스 조정자는 보조와 동기화됩니다.

수동 DB 장애 조치를 수행하여 리소스 준수 복제를 확인하려면 `last_sync_time`이 먼저 업데이트될 때까지 기다립니다. 그런 다음 다중 AZ 장애 조치를 진행합니다.

## 읽기 전용 복제본에 대한 고려 사항
<a name="ResourceGovernor.ReadReplica"></a>
+ 소스 DB 인스턴스와 동일한 리전에 있는 SQL Server 복제본의 경우 소스와 동일한 옵션 그룹을 사용합니다. 옵션 그룹에 대한 변경 사항은 유지 관리 기간에 관계없이 즉시 복제본으로 전파됩니다.
+ SQL Server 리전 간 복제본을 생성하면 RDS가 전용 옵션 그룹을 생성합니다.
+ 전용 옵션 그룹에서 SQL Server 리전 간 복제본을 제거할 수 없습니다. 다른 DB 인스턴스는 SQL Server 리전 간 복제본에 전용 옵션 그룹을 사용할 수 없습니다.
+ 리소스 거버너 옵션은 복제되지 않은 옵션입니다. 전용 옵션 그룹에 복제되지 않은 옵션을 추가하거나 제거할 수 있습니다.
+ SQL Server 리전 간 읽기 전용 복제본을 승격하면 승격된 복제본은 옵션 관리를 포함해 다른 SQL Server DB 인스턴스와 동일하게 작동합니다.

**참고**  
읽기 전용 복제본에서 리소스 거버너를 사용하는 경우 옵션을 옵션 그룹에 추가한 후 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 Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. `RESOURCE_GOVERNOR` 옵션이 있는 옵션 그룹을 선택합니다(이전 예제의 경우 `resource-governor-ee-2022`).

1. **옵션 삭제**를 선택합니다.

1. **삭제 옵션**에서 **삭제할 옵션**으로 **RESOURCE\$1GOVERNOR**를 선택합니다.

1. **Apply immediately**(즉시 적용)에서 **Yes**(예)를 선택하여 옵션을 즉시 삭제하거나 **No**(아니오)를 선택하여 다음 유지 관리 기간에 삭제합니다.

1. **삭제**를 선택합니다.

## CLI
<a name="ResourceGovernor.Disabling.CLI"></a>

다음 절차에서는 `RESOURCE_GOVERNOR` 옵션을 제거합니다.

**옵션 그룹에서 RESOURCE\$1GOVERNOR 옵션 제거**
+ 다음 명령 중 하나를 실행합니다.  
**Example**  

  대상 LinuxmacOS, 또는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\$170으로 제한하여 이러한 제한을 적용합니다.

1. tempdb를 리소스 풀에 바인딩하는 경우 메모리 최적화 tempdb 메타데이터를 풀에 바인딩한 후 풀이 최대 설정에 도달할 수 있으며 `tempdb`를 사용하는 쿼리는 out-of-memory 오류로 인해 실패할 수 있습니다. 경우에 따라 메모리 부족 오류가 발생할 경우 SQL Server가 중지될 수 있습니다. 이러한 일이 발생할 가능성을 줄이려면 메모리 풀의 `MAX_MEMORY_PERCENT`를 높은 값으로 설정합니다.