

# Microsoft SQL Server DB 엔진 업그레이드
<a name="USER_UpgradeDBInstance.SQLServer"></a>

Amazon RDS에서 새 데이터베이스 엔진 버전을 지원하는 경우, DB 인스턴스를 새 버전으로 업그레이드할 수 있습니다. SQL Server DB 인스턴스의 업그레이드에는 메이저 버전 업그레이드와 마이너 버전 업그레이드라는 두 가지 업그레이드가 있습니다.

*메이저 버전 업그레이드*에는 기존 애플리케이션과 호환되지 않는 데이터베이스 변경 사항이 포함될 수 있습니다. 따라서 DB 인스턴스의 메이저 버전 업그레이드를 *수동으로* 수행해야 합니다. DB 인스턴스를 수정하여 메이저 버전 업그레이드를 시작할 수 있습니다. 그러나 메이저 버전 업그레이드를 수행하기 전에 [RDS for SQL Server 업그레이드 테스트](USER_UpgradeDBInstance.SQLServer.UpgradeTesting.md)에 설명된 단계에 따라 업그레이드를 테스트하는 것이 좋습니다.

*마이너 버전 업그레이드*에는 기존 애플리케이션과 호환되는 변경 사항만 포함됩니다. 다음 두 가지 방법으로 DB 인스턴스의 마이너 버전을 업그레이드할 수 있습니다.
+ *수동* - 업그레이드를 시작하도록 DB 인스턴스 수정
+ *자동* - DB 인스턴스에 대해 자동 마이너 버전 업그레이드 활성화

자동 마이너 버전 업그레이드를 활성화하면 RDS for SQL Server는 새로운 마이너 버전에서 중요한 보안 업데이트를 사용할 수 있을 때 예약된 유지 관리 기간 동안 데이터베이스 인스턴스를 자동으로 업그레이드합니다.

`16.00.4120.1`, `15.00.4365.2`, `14.00.3465.1`, `13.00.6435.1` 이후 마이너 엔진 버전의 경우 다음 보안 프로토콜이 기본적으로 비활성화됩니다.
+ `rds.tls10`(TLS 1.0 프로토콜)
+ `rds.tls11`(TLS 1.1 프로토콜)
+ `rds.rc4`(RC4 암호)
+ `rds.curve25519`(Curve25519 암호화)
+ `rds.3des168`(트리플 DES 암호화)

이전 엔진 버전의 경우 Amazon RDS는 기본적으로 이러한 보안 프로토콜을 활성화합니다.

```
...

"ValidUpgradeTarget": [
    {
        "Engine": "sqlserver-se",
        "EngineVersion": "14.00.3281.6.v1",
        "Description": "SQL Server 2017 14.00.3281.6.v1",
        "AutoUpgrade": false,
        "IsMajorVersionUpgrade": false
    }
...
```

업그레이드 수행에 대한 자세한 내용은 [SQL Server DB 인스턴스 업그레이드](#USER_UpgradeDBInstance.SQLServer.Upgrading) 섹션을 참조하세요. Amazon RDS에서 사용할 수 있는 SQL Server 버전에 대한 자세한 내용은 [Amazon RDS for Microsoft SQL Server](CHAP_SQLServer.md) 섹션을 참조하세요.

또한 Amazon RDS는 업그레이드 롤아웃 정책을 지원하여 여러 데이터베이스 리소스 및 AWS 계정에서 자동 마이너 버전 업그레이드를 관리합니다. 자세한 내용은 [자동 마이너 버전 AWS Organizations 업그레이드에 업그레이드 롤아웃 정책 사용](RDS.Maintenance.AMVU.UpgradeRollout.md) 섹션을 참조하세요.

**Topics**
+ [RDS for SQL Server의 메이저 버전 업그레이드](USER_UpgradeDBInstance.SQLServer.Major.md)
+ [SQL Server 업그레이드 고려 사항](USER_UpgradeDBInstance.SQLServer.Considerations.md)
+ [RDS for SQL Server 업그레이드 테스트](USER_UpgradeDBInstance.SQLServer.UpgradeTesting.md)
+ [SQL Server DB 인스턴스 업그레이드](#USER_UpgradeDBInstance.SQLServer.Upgrading)
+ [지원 종료 전에 사용되지 않는 DB 인스턴스 업그레이드](#USER_UpgradeDBInstance.SQLServer.DeprecatedVersions)

# RDS for SQL Server의 메이저 버전 업그레이드
<a name="USER_UpgradeDBInstance.SQLServer.Major"></a>

Amazon RDS는 현재 Microsoft SQL Server DB 인스턴스에 대해 다음 메이저 버전의 업그레이드를 지원합니다.

SQL Server 2008을 제외한 어떤 버전에서든 SQL Server 2017 또는 2019로 기존 DB 인스턴스를 업그레이드할 수 있습니다. SQL Server 2008에서 업그레이드하려면 다음 버전 중 하나로 업그레이드하십시오.


****  

| 현재 버전 | 지원하는 업그레이드 버전 | 
| --- | --- | 
|  SQL Server 2019  |  SQL Server 2022  | 
|  SQL Server 2017  |  SQL Server 2022 SQL Server 2019  | 
|  SQL Server 2016  |  SQL Server 2022 SQL Server 2019 SQL Server 2017  | 

다음 예와 같은 AWS CLI 쿼리를 사용하여 특정 데이터베이스 엔진 버전에 사용 가능한 업그레이드를 찾을 수 있습니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
aws rds describe-db-engine-versions \
    --engine sqlserver-se \
    --engine-version 14.00.3281.6.v1 \
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" \
    --output table
```
Windows의 경우:  

```
aws rds describe-db-engine-versions ^
    --engine sqlserver-se ^
    --engine-version 14.00.3281.6.v1 ^
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" ^
    --output table
```
출력은 버전 14.00.3281.6을 사용 가능한 최신 SQL Server 2017 또는 2019 버전으로 업그레이드할 수 있음을 보여줍니다.  

```
--------------------------
|DescribeDBEngineVersions|
+------------------------+
|      EngineVersion     |
+------------------------+
|  14.00.3294.2.v1       |
|  14.00.3356.20.v1      |
|  14.00.3381.3.v1       |
|  14.00.3401.7.v1       | 
|  14.00.3421.10.v1      |
|  14.00.3451.2.v1       |
|  15.00.4043.16.v1      |
|  15.00.4073.23.v1      |
|  15.00.4153.1.v1       |
|  15.00.4198.2.v1       |
|  15.00.4236.7.v1       |
+------------------------+
```

## 데이터베이스 호환성 수준
<a name="USER_UpgradeDBInstance.SQLServer.Major.Compatibility"></a>

Microsoft SQL Server 데이터베이스 호환성 수준을 이용해 일부 데이터베이스 동작이 이전 버전의 SQL Server를 모방하도록 조정할 수 있습니다. 자세한 내용은 Microsoft 설명서의 [호환성 수준](https://msdn.microsoft.com/en-us/library/bb510680.aspx)을 참조하십시오. DB 인스턴스를 업그레이드할 때 기존의 모든 데이터베이스는 원래 호환성 수준으로 유지됩니다.

ALTER DATABASE 명령을 사용하여 데이터베이스의 호환성 수준을 변경할 수 있습니다. 예를 들어, `customeracct`라는 이름의 데이터베이스를 SQL Server 2016과 호환되도록 변경하려면 다음 명령을 실행합니다.

```
1. ALTER DATABASE customeracct SET COMPATIBILITY_LEVEL = 130
```

# SQL Server 업그레이드 고려 사항
<a name="USER_UpgradeDBInstance.SQLServer.Considerations"></a>

Amazon RDS는 업그레이드 프로세스 중에 DB 스냅샷을 2개 캡처합니다. 첫 번째 DB 스냅샷은 업그레이드 변경 이전 DB 인스턴스의 스냅샷입니다. 두 번째 DB 스냅샷은 업그레이드 완료 이후에 캡처됩니다.

**참고**  
DB 인스턴스에 대한 백업 보존 기간을 0보다 큰 수로 설정하면 Amazon RDS는 DB 스냅샷만 캡처합니다. 백업 보존 기간을 변경하려면 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

업그레이드가 완료되고 나면 이전 버전의 데이터베이스 엔진으로 되돌릴 수 없습니다. 이때 이전 버전으로 되돌리려면 업그레이드 전에 캡처한 DB 스냅샷으로 복구하여 새로운 DB 인스턴스를 생성해야 합니다.

SQL Server의 마이너 버전 또는 메이저 버전 업그레이드 중에는 **여유 스토리지 공간** 및 **디스크 대기열 깊이** 측정치가 `-1`로 표시됩니다. 이후 업그레이드가 완료되면 두 측정치 모두 정상적으로 돌아옵니다.

SQL Server 인스턴스를 업그레이드하기 전에 다음 정보를 검토합니다.

**Topics**
+ [업그레이드를 시작하기 전 모범 사례](#USER_UpgradeDBInstance.SQLServer.BestPractices)
+ [다중 AZ 고려 사항](#USER_UpgradeDBInstance.SQLServer.MAZ)
+ [읽기 전용 복제본 고려 사항](#USER_UpgradeDBInstance.SQLServer.readreplica)
+ [옵션 그룹 고려 사항](#USER_UpgradeDBInstance.SQLServer.OGPG.OG)
+ [파라미터 그룹 고려 사항](#USER_UpgradeDBInstance.SQLServer.OGPG.PG)

## 업그레이드를 시작하기 전 모범 사례
<a name="USER_UpgradeDBInstance.SQLServer.BestPractices"></a>

업그레이드 프로세스를 시작하기 전에 다음과 같은 준비 단계를 구현하여 최적의 업그레이드 성능을 허용하고 잠재적 문제를 최소화합니다.

타이밍 및 워크로드 관리  
+ 트랜잭션 볼륨이 적은 기간 동안 업그레이드를 예약합니다.
+ 업그레이드 기간 동안 쓰기 작업을 최소화합니다.
이렇게 하면 Amazon RDS가 보조-기본 페어링 중에 RDS가 복원해야 하는 트랜잭션 로그 백업 파일의 수를 줄임으로써 업그레이드를 더 빠르게 완료할 수 있습니다.

트랜잭션 관리  
+ 장기 실행 트랜잭션 식별 및 모니터링
+ 업그레이드를 시작하기 전에 모든 중요한 트랜잭션이 커밋되었는지 확인합니다.
+ 업그레이드 기간 동안 장기 실행 트랜잭션을 방지합니다.

로그 파일 최적화  
다음과 같이 트랜잭션 로그 파일을 검토하고 최적화합니다.  
+ 과대 로그 파일을 줄입니다.
+ 높은 로그 소비 패턴을 줄입니다.
+ 가상 로그 파일(VLF)을 관리합니다.
+ 정상적인 작업을 위해 충분한 여유 공간을 유지합니다.

## 다중 AZ 고려 사항
<a name="USER_UpgradeDBInstance.SQLServer.MAZ"></a>

Amazon RDS는 SQL Server 데이터베이스 미러링(DBM) 또는 상시 가동 가용성 그룹(AG)을 사용하여 Microsoft SQL Server 기반 DB 인스턴스의 다중 AZ 배포를 지원합니다. 자세한 내용은 [Amazon RDS for Microsoft SQL Server의 다중 AZ 배포](USER_SQLServerMultiAZ.md) 섹션을 참조하세요.

다중 AZ 배포(미러링/AlwaysOn)에서 업그레이드가 요청되면 RDS는 기본 및 보조 인스턴스에 대한 롤링 업그레이드 전략을 따릅니다. 롤링 업그레이드를 사용하면 보조 인스턴스가 업그레이드되는 동안 트랜잭션에 최소 하나의 인스턴스를 사용할 수 있습니다. 중단은 장애 조치 기간 동안만 지속될 것으로 예상됩니다.

업그레이드 중에 RDS는 다중 AZ 구성에서 보조 인스턴스를 제거하고, 보조 인스턴스의 업그레이드를 수행하고, 연결이 해제된 시간 동안 가져온 기본 인스턴스에서 트랜잭션 로그 백업을 복원합니다. 모든 로그 백업이 복원되면 RDS는 업그레이드된 보조 인스턴스를 기본 인스턴스에 조인합니다. 모든 데이터베이스가 동기화된 상태이면 RDS는 업그레이드된 보조 인스턴스로의 장애 조치를 수행합니다. 장애 조치가 완료되면 RDS는 이전 기본 인스턴스 업그레이드를 진행하고 트랜잭션 로그 백업을 복원한 다음, 새 기본 인스턴스와 페어링합니다.

이 장애 조치 기간을 최소화하려면 연결 문자열에서 `MultiSubnetFailover` 연결 옵션을 지원하는 클라이언트 라이브러리를 사용할 때 AlwaysOn AGs 가용성 그룹 리스너 엔드포인트를 사용하는 것이 좋습니다. 가용성 그룹 리스너 엔드포인트를 사용할 때 장애 조치 시간은 일반적으로 10초 미만이지만, 이 기간에는 추가 충돌 복구 시간이 포함되지 않습니다.

## 읽기 전용 복제본 고려 사항
<a name="USER_UpgradeDBInstance.SQLServer.readreplica"></a>

데이터베이스 버전 업그레이드 중에 Amazon RDS는 기본 DB 인스턴스와 함께 읽기 전용 복제본도 모두 업그레이드합니다. Amazon RDS는 읽기 전용 복제본에 대한 데이터베이스 버전 업그레이드를 별도로 지원하지 않습니다. 읽기 전용 복제본에 대한 자세한 내용은 [Amazon RDS에서 Microsoft SQL Server용 읽기 전용 복제본 작업](SQLServer.ReadReplicas.md) 섹션을 참조하세요.

기본 DB 인스턴스의 데이터베이스 버전 업그레이드를 수행하면 읽기 전용 복제본도 모두 자동으로 업그레이드됩니다. Amazon RDS는 기본 DB 인스턴스를 업그레이드하기 전에 읽기 전용 복제본을 모두 동시에 업그레이드합니다. 기본 DB 인스턴스의 데이터베이스 버전 업그레이드가 완료되기 전까지는 읽기 전용 복제본을 사용하지 못할 수 있습니다.

## 옵션 그룹 고려 사항
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.OG"></a>

DB 인스턴스에서 사용자 지정 DB 옵션 그룹을 사용할 경우 Amazon RDS에서 DB 인스턴스에 새 옵션 그룹을 할당할 수 없는 경우도 있습니다. 예를 들어 새로운 메이저 버전으로 업그레이드할 경우 새로운 옵션 그룹을 지정해야 합니다. 새 옵션 그룹을 생성하고 동일한 옵션을 기존 사용자 지정 옵션 그룹에 추가하는 것이 좋습니다.

자세한 내용은 [옵션 그룹 생성](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create) 또는 [옵션 그룹 생성](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Copy) 섹션을 참조하세요.

## 파라미터 그룹 고려 사항
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.PG"></a>

DB 인스턴스에서 사용자 지정 DB 파라미터 그룹을 사용하는 경우:
+ 업그레이드 후 Amazon RDS가 DB 인스턴스를 자동으로 재부팅합니다.
+ 경우에 따라 RDS가 DB 인스턴스에 새 파라미터 그룹을 자동으로 할당하지 못할 수 있습니다.

  예를 들어 새로운 메이저 버전으로 업그레이드할 경우 새로운 파라미터 그룹을 지정해야 합니다. 새 파라미터 그룹을 생성하고 기존 사용자 지정 파라미터 그룹에서와 같은 방법으로 파라미터를 구성하는 것이 좋습니다.

자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹 생성](USER_WorkingWithParamGroups.Creating.md) 또는 [Amazon RDS에서 DB 파라미터 그룹 복사](USER_WorkingWithParamGroups.Copying.md) 섹션을 참조하세요.

# RDS for SQL Server 업그레이드 테스트
<a name="USER_UpgradeDBInstance.SQLServer.UpgradeTesting"></a>

DB 인스턴스에 대한 메이저 버전 업그레이드를 수행하기 전에 데이터베이스 및 해당 데이터베이스에 액세스하는 모든 애플리케이션이 새 버전과 호환되는지 여부를 철저하게 테스트해야 합니다. 다음 절차를 참조하는 것이 좋습니다.

**메이저 버전 업그레이드를 테스트하려면**

1. 새 버전의 데이터베이스 엔진에 대한 Microsoft 설명서에서 [SQL Server 업그레이드](https://docs.microsoft.com/en-us/sql/database-engine/install-windows/upgrade-sql-server)를 검토하여 데이터베이스나 애플리케이션에 영향을 끼칠 수도 있는 호환성 문제가 있는지 살펴봅니다.

1. DB 인스턴스에서 사용자 지정 옵션 그룹을 사용할 경우 업그레이드하려는 새 버전과 호환되는 새 옵션 그룹을 생성합니다. 자세한 내용은 [옵션 그룹 고려 사항](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.OG) 섹션을 참조하세요.

1. DB 인스턴스에서 사용자 지정 파라미터 그룹을 사용할 경우 업그레이드하려는 새 버전과 호환되는 새 파라미터 그룹을 생성합니다. 자세한 내용은 [파라미터 그룹 고려 사항](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.PG) 섹션을 참조하세요.

1. 업그레이드할 DB 인스턴스의 DB 스냅샷을 생성합니다. 자세한 내용은 [Amazon RDS의 단일 AZ DB 인스턴스에 대한 DB 스냅샷 생성](USER_CreateSnapshot.md) 섹션을 참조하세요.

1. DB 스냅샷을 복구하여 새로운 테스트 DB 인스턴스를 생성합니다. 자세한 내용은 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 섹션을 참조하세요.

1. 다음 방법 중 한 가지를 사용하여 이 새로운 테스트 DB 인스턴스를 변경하고 새로운 버전으로 업그레이드합니다.
   + [콘솔](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.Console)
   + [AWS CLI](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.CLI)
   + [RDS API](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.API)

1. 업그레이드한 인스턴스에서 사용할 스토리지를 평가하여 업그레이드 시 추가 스토리지의 필요 여부를 결정합니다.

1. 업그레이드한 DB 인스턴스와 관련하여 데이터베이스 및 애플리케이션과 새로운 버전의 호환성을 보장하는 데 필요하다면 최대한 많은 수의 품질 보증 테스트를 실행합니다. 또한 1단계에서 발견된 호환성 문제의 영향을 평가하는 데 필요한 새로운 테스트도 모두 실행합니다. 저장된 프로시저와 함수를 모두 테스트합니다. 업그레이드한 DB 인스턴스에 대해 애플리케이션의 테스트 버전을 실행합니다.

1. 모든 테스트가 통과되면 프로덕션 환경의 DB 인스턴스에도 업그레이드를 실행합니다. 단, 모든 기능이 정상 작동하는 것을 확인할 때까지 쓰기 연산은 DB 인스턴스에 실행하지 않는 것이 좋습니다.

## SQL Server DB 인스턴스 업그레이드
<a name="USER_UpgradeDBInstance.SQLServer.Upgrading"></a>

SQL Server DB 인스턴스의 수동 또는 자동 업그레이드에 대한 자세한 내용은 다음을 참조하십시오.
+ [DB 인스턴스 엔진 버전 업그레이드](USER_UpgradeDBInstance.Upgrading.md)
+ [Amazon RDS for SQL Server의 SQL Server 2008 R2를 SQL Server 2016으로 업그레이드하는 모범 사례](https://aws.amazon.com/blogs/database/best-practices-for-upgrading-sql-server-2008-r2-to-sql-server-2016-on-amazon-rds-for-sql-server/)

**중요**  
AWS KMS를 사용하여 암호화한 스냅샷이 있는 경우, 지원이 끝나기 전에 업그레이드를 시작하는 것이 좋습니다.

## 지원 종료 전에 사용되지 않는 DB 인스턴스 업그레이드
<a name="USER_UpgradeDBInstance.SQLServer.DeprecatedVersions"></a>

메이저 버전이 사용되지 않으면 새 DB 인스턴스에 설치할 수 없습니다. RDS는 기존의 모든 DB 인스턴스를 자동으로 업그레이드하려고 시도합니다. 

사용되지 않는 DB 인스턴스를 복원해야 하는 경우 특정 시점으로 복구(PITR)하거나 스냅샷을 복원할 수 있습니다. 이렇게 하면 사용되지 않는 버전을 사용하는 DB 인스턴스에 임시 액세스할 수 있습니다. 그러나 메이저 버전이 완전히 사용되지 않게 되면 이 DB 인스턴스도 지원되는 버전으로 자동 업그레이드됩니다.