

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 데이터 마이그레이션용 소스
<a name="CHAP_Source"></a>

AWS Database Migration Service (AWS DMS)는 가장 인기 있는 많은 데이터 엔진을 데이터 복제의 소스로 사용할 수 있습니다. 데이터베이스 소스는 Amazon EC2 인스턴스 또는 온프레미스 데이터베이스에서 실행되는 자체 관리형 엔진이 될 수 있습니다. 또는 Amazon RDS 또는 Amazon S3와 같은 AWS 서비스의 데이터 소스일 수 있습니다.

유효한 소스의 전체 목록은 [AWS DMS용 소스](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.title) 섹션을 참조하세요.

**Topics**
+ [Oracle 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.Oracle.md)
+ [Microsoft SQL Server 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.SQLServer.md)
+ [Microsoft Azure SQL 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.AzureSQL.md)
+ [Microsoft Azure SQL 관리형 인스턴스를의 소스로 사용 AWS DMS](CHAP_Source.AzureMgd.md)
+ [Microsoft Azure Database for PostgreSQL 유연한 서버를의 소스로 사용 AWS DMS](CHAP_Source.AzureDBPostgreSQL.md)
+ [Microsoft Azure Database for MySQL 유연한 서버를의 소스로 사용 AWS DMS](CHAP_Source.AzureDBMySQL.md)
+ [OCI MySQL Heatwave를의 소스로 사용 AWS DMS](CHAP_Source.heatwave.md)
+ [MySQL용 Google Cloud를의 소스로 사용 AWS DMS](CHAP_Source.GC.md)
+ [Google Cloud for PostgreSQL을의 소스로 사용 AWS DMS](CHAP_Source.GCPostgres.md)
+ [PostgreSQL 데이터베이스를 AWS DMS 소스로 사용](CHAP_Source.PostgreSQL.md)
+ [MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.MySQL.md)
+ [SAP ASE 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.SAP.md)
+ [MongoDB를의 소스로 사용 AWS DMS](CHAP_Source.MongoDB.md)
+ [Amazon DocumentDB(MongoDB 호환)를 소스로 사용 AWS DMS](CHAP_Source.DocumentDB.md)
+ [Amazon S3를의 소스로 사용 AWS DMS](CHAP_Source.S3.md)
+ [Linux, Unix, Windows 및 Amazon RDS 데이터베이스(Db2 LUW)용 IBM Db2를의 소스로 사용 AWS DMS](CHAP_Source.DB2.md)
+ [IBM Db2 for z/OS 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.DB2zOS.md)

# Oracle 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.Oracle"></a>

를 사용하여 하나 이상의 Oracle 데이터베이스에서 데이터를 마이그레이션할 수 있습니다 AWS DMS. Oracle 데이터베이스를 소스로 사용하여 AWS DMS가 지원하는 대상으로 데이터를 마이그레이션할 수 있습니다.

AWS DMS 는 다음 Oracle 데이터베이스 에디션을 지원합니다.
+ Oracle Enterprise Edition
+ Oracle Standard Edition
+ Oracle Express Edition
+ Oracle Personal Edition

가 소스로 AWS DMS 지원하는 Oracle 데이터베이스 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

Secure Sockets Layer(SSL)를 사용하여 Oracle 엔드포인트와 복제 인스턴스 간의 연결을 암호화할 수 있습니다. Oracle 엔드포인트에서 SSL을 사용하는 방법에 대한 자세한 내용은 [Oracle 엔드포인트용 SSL 지원](#CHAP_Security.SSL.Oracle) 섹션을 참조하세요.

AWS DMS 는 Oracle 투명 데이터 암호화(TDE)를 사용하여 소스 데이터베이스의 저장 데이터를 암호화할 수 있도록 지원합니다. Oracle 소스 엔드포인트에서 Oracle TDE를 사용하는 방법에 대한 자세한 내용은 [Oracle을의 소스로 사용하기 위해 지원되는 암호화 방법 AWS DMS](#CHAP_Source.Oracle.Encryption) 섹션을 참조하세요.

AWS 는 Oracle 엔드포인트(및 기타 모든 엔드포인트 유형)에서 TLS 버전 1.2 이상의 사용을 지원하며 TLS 버전 1.3 이상을 사용할 것을 권장합니다.

다음 단계에 따라 Oracle 데이터베이스를 AWS DMS 소스 엔드포인트로 구성합니다.

1. 가 Oracle 소스 데이터베이스에 액세스할 수 AWS DMS 있는 적절한 권한을 가진 Oracle 사용자를 생성합니다.

1. 선택한 Oracle 데이터베이스 구성을 준수하는 Oracle 소스 엔드포인트를 생성합니다. 전체 로드 전용 작업을 생성하기 위한 추가 구성이 필요하지 않습니다.

1. 변경 데이터 캡처를 처리하는 작업(CDC 전용 또는 전체 로드 및 CDC 작업)을 생성하려면 Oracle LogMiner 또는 AWS DMS Binary Reader를 선택하여 데이터 변경 사항을 캡처합니다. LogMiner 또는 Binary Reader 중 어느 것을 선택하는지에 따라 이후 권한 및 구성 옵션의 일부가 결정됩니다. LogMiner와 Binary Reader를 비교하려면 다음 섹션을 참조하세요.

**참고**  
전체 로드 작업, CDC 전용 작업, 전체 로드 및 CDC 작업에 대한 자세한 내용은 [작업 생성](CHAP_Tasks.Creating.md)을 참조하세요.

Oracle 소스 데이터베이스 및 작업에 대한 자세한 내용은 다음 섹션을 AWS DMS참조하세요.

**Topics**
+ [CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용](#CHAP_Source.Oracle.CDC)
+ [에 대한 자체 관리형 또는 AWS관리형 Oracle 소스 데이터베이스를 구성하기 위한 워크플로 AWS DMSOracle 소스 데이터베이스 구성](#CHAP_Source.Oracle.Workflows)
+ [의 소스로 자체 관리형 Oracle 데이터베이스 작업 AWS DMS](#CHAP_Source.Oracle.Self-Managed)
+ [AWS의 소스로 관리형 Oracle 데이터베이스 작업 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed)
+ [Oracle을의 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.Oracle.Limitations)
+ [Oracle 엔드포인트용 SSL 지원](#CHAP_Security.SSL.Oracle)
+ [Oracle을의 소스로 사용하기 위해 지원되는 암호화 방법 AWS DMS](#CHAP_Source.Oracle.Encryption)
+ [Oracle을의 소스로 사용하는 데 지원되는 압축 방법 AWS DMS](#CHAP_Source.Oracle.Compression)
+ [Oracle을의 소스로 사용하여 중첩 테이블 복제 AWS DMS](#CHAP_Source.Oracle.NestedTables)
+ [Oracle을의 소스로 사용할 때 Oracle ASM에 REDO 저장 AWS DMS](#CHAP_Source.Oracle.REDOonASM)
+ [Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)
+ [Oracle용 소스 데이터 형식](#CHAP_Source.Oracle.DataTypes)

## CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용
<a name="CHAP_Source.Oracle.CDC"></a>

에는 Oracle에 대한 변경 데이터 캡처(CDC)를 소스로 수행할 때 다시 실행 로그를 읽는 두 AWS DMS가지 방법이 있습니다. Oracle LogMiner와 AWS DMS Binary Reader입니다. LogMiner는 온라인 다시 실행 로그와 보관된 다시 실행 로그 파일을 읽는 Oracle API입니다. Binary Reader는 원시 다시 실행 로그 파일을 직접 읽고 구문 분석하는 AWS DMS 방법입니다. 이 메서드의 특징은 다음과 같습니다.


| 기능 | LogMiner | Binary Reader | 
| --- | --- | --- | 
| 간편한 구성 | 예 | 아니요 | 
| 소스 시스템 I/O 및 CPU에 미치는 영향 감소 | 아니요 | 예 | 
| 향상된 CDC 성능 | 아니요 | 예 | 
| Oracle 테이블 클러스터 지원 | 예 | 아니요 | 
| 모든 유형의 Oracle HCC(Hybrid Columnar Compression) 지원 | 예 |  부분적으로 Binary Reader는 CDC 작업에서 QUERY LOW를 지원하지 않습니다. 다른 모든 HCC 유형은 완벽하게 지원됩니다.  | 
| Oracle 12c에서만 LOB 열 지원 | 아니요(Oracle 12c에서는 LogMiner에 LOB 지원을 사용할 수 없습니다.) | 예 | 
| LOB 열에만 영향을 미치는 UPDATE 문 지원 | 아니요 | 예 | 
| Oracle 투명한 데이터 암호화(TDE) 지원 |  부분적으로 Oracle LogMiner를 사용하는 경우 Amazon RDS for Oracle의 열 수준에서 TDE 암호화를 지원하지 AWS DMS 않습니다.  |  부분적으로 Binary Reader는 자체 관리형 Oracle 데이터베이스에서만 TDE를 지원합니다.  | 
| 모든 Oracle 압축 방법 지원 | 예 | 아니요 | 
| XA 트랜잭션 지원 | 아니요 | 예 | 
| RAC |  예 성능상의 이유와 일부 내부 DMS 제한으로 인해 권장되지 않습니다.  |  예 적극적으로 권장됨  | 

**참고**  
기본적으로는 (CDC)용 Oracle LogMiner를 AWS DMS 사용합니다.  
AWS DMS 는 Oracle 소스 데이터베이스로 작업할 때 투명한 데이터 암호화(TDE) 방법을 지원합니다. 지정한 TDE 자격 증명이 올바르지 않아도 AWS DMS 마이그레이션 작업이 실패하지 않으므로 암호화된 테이블의 지속적 복제에 영향을 미칠 수 있습니다. TDE 자격 증명에 대한 자세한 내용은 [Oracle을의 소스로 사용하기 위해 지원되는 암호화 방법 AWS DMS](#CHAP_Source.Oracle.Encryption)을 참조하세요.

LogMiner를와 함께 사용할 때의 주요 이점은 다음과 AWS DMS 같습니다.
+ LogMiner는 암호화 옵션과 압축 옵션과 같은 대다수 Oracle 옵션을 지원합니다. Binary Reader는 모든 Oracle 옵션을 지원하지 않고, 특히 압축과 대부분의 암호화 옵션을 지원합니다.
+ LogMiner는 특히 Binary Reader 직접 액세스 설정과 비교할 때 또는 Oracle ASM(Automatic Storage Management)을 사용하여 다시 실행 로그를 관리하는 경우 구성이 더 단순합니다.
+ LogMiner는에서 사용할 테이블 클러스터를 지원합니다 AWS DMS. Binary Reader는 테이블 클러스터를 지원하지 않습니다.

에서 Binary Reader를 사용할 때의 주요 이점은 다음과 AWS DMS 같습니다.
+ 대용량 변경 사항으로 마이그레이션할 때 LogMiner의 일부 I/O 또는 CPU가 Oracle 원본 데이터베이스를 호스팅하는 컴퓨터에 영향을 줄 수도 있습니다. Binary Reader는 여러 데이터베이스 쿼리를 수행하는 대신 로그를 직접 마이닝하기 때문에 I/O 또는 CPU에 영향을 미칠 가능성이 적습니다.
+ 대용량 변경 사항으로 마이그레이션할 때 Binary Reader를 사용하면 Oracle LogMiner를 사용하는 경우에 비해 CDC 성능이 대개 훨씬 더 우수합니다.
+ Binary Reader는 Oracle 버전 12c에서 LOB용 CDC를 지원합니다. 하지만 LogMiner는 그렇지 않습니다.

일반적으로 다음 상황에 있는 경우 Oracle 데이터베이스를 마이그레이션할 때 Oracle LogMiner를 사용합니다.
+ 원본 Oracle 데이터베이스에서 여러 마이그레이션 작업을 실행해야 합니다.
+ 소스 Oracle 데이터베이스의 변경 사항 볼륨 또는 다시 실행 로그 볼륨이 크거나 변경 사항이 있고 Oracle ASM도 사용 중입니다.

**참고**  
Oracle LogMiner와 AWS DMS Binary Reader 사용 간에 변경하는 경우 CDC 작업을 다시 시작해야 합니다.

### Oracle 소스 데이터베이스에서의 CDC 구성
<a name="CHAP_Source.Oracle.CDC.Configuration"></a>

Oracle 소스 엔드포인트가 변경 데이터 캡처(CDC) 작업을 위해 데이터베이스에 연결하려면 추가 연결 속성을 지정해야 할 수 있습니다. 이는 전체 로드 및 CDC 작업이나 CDC 전용 작업에도 해당될 수 있습니다. 지정하는 추가 연결 속성은 다시 실행 로그에 액세스하는 데 사용하는 방법인 Oracle LogMiner 또는 AWS DMS Binary Reader에 따라 다릅니다.

소스 엔드포인트를 생성할 때 추가 연결 속성을 지정합니다. 연결 속성 설정이 여러 개인 경우, 추가 공백 없이 세미콜론으로 구분하세요(예: `oneSetting;thenAnother`).

AWS DMS 는 기본적으로 LogMiner를 사용합니다. LogMiner를 사용하기 위해 추가 연결 속성을 지정할 필요는 없습니다.

Binary Reader를 사용하여 다시 실행 로그에 액세스하려면 다음 추가 연결 속성을 추가합니다.

```
useLogMinerReader=N;useBfile=Y;
```

다음 형식을 추가 연결 속성에 사용하여 Binary Reader와 함께 ASM을 사용하는 서버에 액세스합니다.

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
```

소스 엔드포인트 `Password` 요청 파라미터를 다음과 같이 쉼표로 구분된 Oracle 사용자 암호 및 ASM 암호로 설정합니다.

```
oracle_user_password,asm_user_password
```

Oracle 소스가 ASM을 사용하는 경우, 대규모 트랜잭션 처리를 위해 Binary Reader의 고성능 옵션을 사용할 수 있습니다. 이러한 옵션에는 병렬 스레드 수(`parallelASMReadThreads`) 와 미리 읽기 버퍼 수(`readAheadBlocks`) 를 지정하는 추가 연결 속성이 포함됩니다. 이러한 속성을 함께 설정하면 CDC 작업의 성능을 크게 개선할 수 있습니다. 다음 설정은 대부분의 ASM 구성에서 양호한 결과를 제공합니다.

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
    parallelASMReadThreads=6;readAheadBlocks=150000;
```

추가 연결 속성이 지원하는 값에 대한 자세한 내용은 [Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib) 섹션을 참조하세요.

또한 ASM을 사용하는 Oracle 소스가 있는 CDC 작업의 성능은 선택하는 다른 설정에 따라 달라집니다. 이러한 설정에는 AWS DMS 추가 연결 속성 및 Oracle 소스를 구성하기 위한 SQL 설정이 포함됩니다. ASM을 사용하는 Oracle 소스의 추가 연결 속성에 대한 자세한 내용은 [Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)을 참조하세요.

또한 적절한 CDC 시작점을 선택해야 합니다. 일반적으로 이 경우, CDC를 시작할 가장 이른 열린 트랜잭션을 캡처하는 트랜잭션 처리 지점을 식별해야 합니다. 그렇지 않으면 CDC 작업에서 이전의 열린 트랜잭션이 누락될 수 있습니다. Oracle 소스 데이터베이스의 경우, Oracle SCN(시스템 변경 번호)을 기준으로 CDC 네이티브 시작점을 선택하면 가장 이른 열린 트랜잭션을 식별할 수 있습니다. 자세한 내용은 [CDC 시작 지점에서 복제를 시작](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint) 단원을 참조하십시오.

소스로 사용되는 자체 관리형 Oracle 데이터베이스에서 CDC를 구성하는 방법에 대한 자세한 내용은 [Oracle LogMiner를 사용하여 다시 실행 로그에 액세스할 때 필요한 계정 권한](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges), [AWS DMS Binary Reader를 사용하여 다시 실행 로그에 액세스할 때 필요한 계정 권한](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges), [Oracle ASM과 함께 Binary Reader를 사용할 때 필요한 추가 계정 권한](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges) 섹션을 참조하세요.

 AWS관리형 Oracle 데이터베이스에 대한 CDC를 소스로 구성하는 방법에 대한 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 및 섹션을 참조하세요[에서 CDC용 Binary Reader와 함께 Amazon RDS Oracle Standby(읽기 전용 복제본)를 소스로 사용 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy).

## 에 대한 자체 관리형 또는 AWS관리형 Oracle 소스 데이터베이스를 구성하기 위한 워크플로 AWS DMS


## Oracle 소스 데이터베이스 구성
<a name="CHAP_Source.Oracle.Workflows"></a>

자체 관리형 소스 데이터베이스 인스턴스를 구성하려면 CDC 수행 방식에 따라 다음 워크플로 단계를 사용하세요.


| 이 워크플로 단계의 경우 | LogMiner를 사용하여 CDC를 수행하는 경우 다음을 수행 | Binary Reader를 사용하여 CDC를 수행하는 경우 다음을 수행 | 
| --- | --- | --- | 
| Oracle 계정 권한을 부여합니다. | [용 자체 관리형 Oracle 소스에 필요한 사용자 계정 권한 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges)를 참조하세요. | [용 자체 관리형 Oracle 소스에 필요한 사용자 계정 권한 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges)을 참조하세요. | 
| CDC를 사용하여 복제할 소스 데이터베이스를 준비합니다. | [를 사용하여 CDC용 Oracle 자체 관리형 소스 데이터베이스 준비 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration)을 참조하세요. | [를 사용하여 CDC용 Oracle 자체 관리형 소스 데이터베이스 준비 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration)을 참조하세요. | 
| CDC에 필요한 추가 Oracle 사용자 권한을 부여합니다. | [Oracle LogMiner를 사용하여 다시 실행 로그에 액세스할 때 필요한 계정 권한](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges)을 참조하세요. | [AWS DMS Binary Reader를 사용하여 다시 실행 로그에 액세스할 때 필요한 계정 권한](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)를 참조하세요. | 
| ASM을 사용하는 Oracle 인스턴스의 경우, CDC를 위해 ASM에 액세스하는 데 필요한 추가 사용자 계정 권한을 부여합니다. | 추가 작업 없음.는 추가 계정 권한 없이 Oracle ASM을 AWS DMS 지원합니다. | [Oracle ASM과 함께 Binary Reader를 사용할 때 필요한 추가 계정 권한](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)을(를) 참조하세요. | 
| 아직 구성하지 않았다면 CDC에 LogMiner 또는 Binary Reader를 사용하도록 작업을 구성합니다. | [CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용](#CHAP_Source.Oracle.CDC)를 참조하세요. | [CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용](#CHAP_Source.Oracle.CDC)를 참조하세요. | 
| Oracle Standby를 CDC의 소스로 구성합니다. | AWS DMS 는 Oracle Standby를 소스로 지원하지 않습니다. | [에서 CDC용 Binary Reader를 사용하여 자체 관리형 Oracle Standby를 소스로 사용 AWS DMS](#CHAP_Source.Oracle.Self-Managed.BinaryStandby)을(를) 참조하세요. | 

다음 워크플로 단계를 사용하여 AWS관리형 Oracle 소스 데이터베이스 인스턴스를 구성합니다.


| 이 워크플로 단계의 경우 | LogMiner를 사용하여 CDC를 수행하는 경우 다음을 수행 | Binary Reader를 사용하여 CDC를 수행하는 경우 다음을 수행 | 
| --- | --- | --- | 
| Oracle 계정 권한을 부여합니다. | 자세한 내용은 [용 AWS관리형 Oracle 소스에 필요한 사용자 계정 권한 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges) 단원을 참조하십시오. | 자세한 내용은 [용 AWS관리형 Oracle 소스에 필요한 사용자 계정 권한 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges) 단원을 참조하십시오. | 
| CDC를 사용하여 복제할 소스 데이터베이스를 준비합니다. | 자세한 내용은 [AWS에 대한 관리형 Oracle 소스 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration) 단원을 참조하십시오. | 자세한 내용은 [AWS에 대한 관리형 Oracle 소스 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration) 단원을 참조하십시오. | 
| CDC에 필요한 추가 Oracle 사용자 권한을 부여합니다. | 추가 계정 권한은 필요하지 않습니다. | 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오. | 
| 아직 구성하지 않았다면 CDC에 LogMiner 또는 Binary Reader를 사용하도록 작업을 구성합니다. | 자세한 내용은 [CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용](#CHAP_Source.Oracle.CDC) 단원을 참조하십시오. | 자세한 내용은 [CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용](#CHAP_Source.Oracle.CDC) 단원을 참조하십시오. | 
| Oracle Standby를 CDC의 소스로 구성합니다. | AWS DMS 는 Oracle Standby를 소스로 지원하지 않습니다. | 자세한 내용은 [에서 CDC용 Binary Reader와 함께 Amazon RDS Oracle Standby(읽기 전용 복제본)를 소스로 사용 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy) 단원을 참조하십시오. | 

## 의 소스로 자체 관리형 Oracle 데이터베이스 작업 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed"></a>

*자체 관리형 데이터베이스*는 사용자가 구성 및 제어하는 데이터베이스로, 로컬 온프레미스 데이터베이스 인스턴스이거나 Amazon EC2의 데이터베이스입니다. 아래에서 자체 관리형 Oracle 데이터베이스를 함께 사용할 때 필요한 권한 및 구성에 대해 알아볼 수 있습니다 AWS DMS.

### 용 자체 관리형 Oracle 소스에 필요한 사용자 계정 권한 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Privileges"></a>

에서 Oracle 데이터베이스를 소스로 사용하려면 Oracle 엔드포인트 연결 설정에 지정된 Oracle 사용자에게 다음 권한을 AWS DMS부여합니다.

**참고**  
권한을 부여할 때는 각 객체의 동의어가 아닌 객체의 실제 이름을 사용하세요. 예를 들어 밑줄이 없는 `V_$OBJECT`가 아니라 밑줄을 포함하여 `V$OBJECT`를 사용하세요.

```
GRANT CREATE SESSION TO dms_user;
GRANT SELECT ANY TRANSACTION TO dms_user;
GRANT SELECT ON V_$ARCHIVED_LOG TO dms_user;
GRANT SELECT ON V_$LOG TO dms_user;
GRANT SELECT ON V_$LOGFILE TO dms_user;
GRANT SELECT ON V_$LOGMNR_LOGS TO dms_user;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO dms_user;
GRANT SELECT ON V_$DATABASE TO dms_user;
GRANT SELECT ON V_$THREAD TO dms_user;
GRANT SELECT ON V_$PARAMETER TO dms_user;
GRANT SELECT ON V_$NLS_PARAMETERS TO dms_user;
GRANT SELECT ON V_$TIMEZONE_NAMES TO dms_user;
GRANT SELECT ON V_$TRANSACTION TO dms_user;
GRANT SELECT ON V_$CONTAINERS TO dms_user;                   
GRANT SELECT ON ALL_INDEXES TO dms_user;
GRANT SELECT ON ALL_OBJECTS TO dms_user;
GRANT SELECT ON ALL_TABLES TO dms_user;
GRANT SELECT ON ALL_USERS TO dms_user;
GRANT SELECT ON ALL_CATALOG TO dms_user;
GRANT SELECT ON ALL_CONSTRAINTS TO dms_user;
GRANT SELECT ON ALL_CONS_COLUMNS TO dms_user;
GRANT SELECT ON ALL_TAB_COLS TO dms_user;
GRANT SELECT ON ALL_IND_COLUMNS TO dms_user;
GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO dms_user;
GRANT SELECT ON ALL_LOG_GROUPS TO dms_user;
GRANT SELECT ON ALL_TAB_PARTITIONS TO dms_user;
GRANT SELECT ON SYS.DBA_REGISTRY TO dms_user;
GRANT SELECT ON SYS.OBJ$ TO dms_user;
GRANT SELECT ON DBA_TABLESPACES TO dms_user;
GRANT SELECT ON DBA_OBJECTS TO dms_user; -– Required if the Oracle version is earlier than 11.2.0.3.
GRANT SELECT ON SYS.ENC$ TO dms_user; -– Required if transparent data encryption (TDE) is enabled. For more information on using Oracle TDE with AWS DMS, see Oracle을의 소스로 사용하기 위해 지원되는 암호화 방법 AWS DMS.
GRANT SELECT ON GV_$TRANSACTION TO dms_user; -– Required if the source database is Oracle RAC in AWS DMS versions 3.4.6 and higher.
GRANT SELECT ON V_$DATAGUARD_STATS TO dms_user; -- Required if the source database is Oracle Data Guard and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.
GRANT SELECT ON V_$DATABASE_INCARNATION TO dms_user;
```

특정 테이블 목록을 사용하는 경우, 복제된 각 테이블에 대해 다음 추가 권한을 부여합니다.

```
GRANT SELECT on any-replicated-table to dms_user;
```

검증 기능을 사용할 수 있는 다음 추가 권한을 부여합니다.

```
GRANT EXECUTE ON SYS.DBMS_CRYPTO TO dms_user;
```

LogMiner 대신 Binary Reader를 사용하는 경우, 다음 추가 권한을 부여합니다.

```
GRANT SELECT ON SYS.DBA_DIRECTORIES TO dms_user;
```

뷰를 노출할 수 있는 다음 추가 권한을 부여합니다.

```
GRANT SELECT on ALL_VIEWS to dms_user;
```

뷰를 노출하려면 소스 엔드포인트에 `exposeViews=true` 추가 연결 속성도 추가해야 합니다.

서버리스 복제를 사용할 경우, 다음 추가 권한을 부여합니다.

```
GRANT SELECT on dba_segments to dms_user;
GRANT SELECT on v_$tablespace to dms_user;
GRANT SELECT on dba_tab_subpartitions to dms_user;
GRANT SELECT on dba_extents to dms_user;
```

서버리스 복제에 대해서는 [AWS DMS 서버리스 작업](CHAP_Serverless.md)을 참조하세요.

Oracle 관련 마이그레이션 전 평가를 사용할 경우, 다음 추가 권한을 부여합니다.

```
GRANT SELECT on gv_$parameter  to dms_user;
GRANT SELECT on v_$instance to dms_user;
GRANT SELECT on v_$version to dms_user;
GRANT SELECT on gv_$ASM_DISKGROUP to dms_user;
GRANT SELECT on gv_$database to dms_user;
GRANT SELECT on dba_db_links to dms_user;
GRANT SELECT on gv_$log_History to dms_user;
GRANT SELECT on gv_$log to dms_user;
GRANT SELECT ON DBA_TYPES TO dms_user;
GRANT SELECT ON DBA_USERS to dms_user;
GRANT SELECT ON DBA_DIRECTORIES to dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

Oracle 관련 마이그레이션 전 평가에 대해서는 [Oracle 평가](CHAP_Tasks.AssessmentReport.Oracle.md)를 참조하세요.

#### Oracle Standby 열린 트랜잭션 처리를 위한 사전 요구 사항
<a name="CHAP_Source.Oracle.Self-Managed.Privileges.Standby"></a>

 AWS DMS 버전 3.4.6 이상을 사용하는 경우 다음 단계를 수행하여 Oracle Standby에 대한 열린 트랜잭션을 처리합니다.

1. 기본 데이터베이스에 `AWSDMS_DBLINK`라는 데이터베이스 링크를 생성합니다. `DMS_USER`는 이 데이터베이스 링크를 사용하여 기본 데이터베이스에 연결합니다. 이 데이터베이스 링크는 대기 인스턴스에서 실행되어 기본 데이터베이스에서 실행 중인 열린 트랜잭션을 쿼리합니다. 다음 예제를 참조하세요.

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. 다음 예제와 같이 `DMS_USER`를 사용하여 데이터베이스 링크에 연결되었는지 확인합니다.

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### 를 사용하여 CDC용 Oracle 자체 관리형 소스 데이터베이스 준비 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Configuration"></a>

다음을 수행하여 자체 관리형 Oracle 데이터베이스를 CDC 작업을 실행할 소스로 준비합니다.
+ [가 소스 데이터베이스 버전을 AWS DMS 지원하는지 확인](#CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion).
+ [ARCHIVELOG 모드가 켜져 있는지 확인](#CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode).
+ [보충 로깅 설정](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging).

#### 가 소스 데이터베이스 버전을 AWS DMS 지원하는지 확인
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion"></a>

다음과 같은 쿼리를 실행하여 AWS DMS가 현재 버전의 Oracle 데이터베이스를 지원하는지 확인합니다.

```
SELECT name, value, description FROM v$parameter WHERE name = 'compatible';
```

여기서 `name`, `value` 및 `description`는 `name`의 값을 기준으로 쿼리되는 데이터베이스의 어딘가에 있는 열입니다. 이 쿼리가 오류 없이 실행되는 경우는 데이터베이스의 현재 버전을 AWS DMS 지원하며 마이그레이션을 계속할 수 있습니다. 쿼리에서 오류가 발생하면 AWS DMS 는 데이터베이스의 현재 버전을 지원하지 않습니다. 마이그레이션을 계속하려면 먼저 Oracle 데이터베이스를에서 지원하는 버전으로 변환합니다 AWS DMS.

#### ARCHIVELOG 모드가 켜져 있는지 확인
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode"></a>

Oracle은 `ARCHIVELOG` 모드와 `NOARCHIVELOG` 모드 두 가지 모드로 실행할 수 있습니다. CDC 작업을 실행하려면 데이터베이스를 `ARCHIVELOG` 모드에서 실행합니다. 데이터베이스가 `ARCHIVELOG` 모드 상태인지 확인하려면 다음 쿼리를 실행합니다.

```
SQL> SELECT log_mode FROM v$database;
```

`NOARCHIVELOG` 모드가 반환되면 Oracle 지침에 따라 데이터베이스를 `ARCHIVELOG`로 설정합니다.

#### 보충 로깅 설정
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging"></a>

진행 중인 변경 사항을 캡처하려면 Oracle 소스 데이터베이스에서 최소 보충 로깅을 활성화 AWS DMS 해야 합니다. 또한 데이터베이스의 복제된 각 테이블에서 보충 로깅을 활성화해야 합니다.

기본적으로는 복제된 모든 테이블에 `PRIMARY KEY` 보충 로깅을 AWS DMS 추가합니다. AWS DMS 가 `PRIMARY KEY` 보충 로깅을 추가하도록 허용하려면 복제된 각 테이블에 대해 다음 권한을 부여합니다.

```
ALTER on any-replicated-table;
```

추가 연결 속성를 AWS DMS 사용하여 추가된 기본 `PRIMARY KEY` 보충 로깅을 비활성화할 수 있습니다`addSupplementalLogging`. 자세한 내용은 [Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib) 단원을 참조하십시오.

복제 작업에서 `WHERE` 절을 사용하여 프라이머리 키 열을 참조하지 않는 테이블을 업데이트하는 경우, 보충 로깅을 켜야 합니다.

**수동으로 보충 로깅을 설정하려면**

1. 다음 쿼리를 실행하여 데이터베이스에 보충 로깅이 이미 활성화되어 있는지 확인합니다.

   ```
   SELECT supplemental_log_data_min FROM v$database;
   ```

   반환된 결과가 `YES` 또는 `IMPLICIT`인 경우, 데이터베이스에 보충 로깅이 활성화되어 있습니다.

   활성화되어 있지 않다면 다음 명령을 실행하여 데이터베이스에 보충 로깅을 활성화합니다.

   ```
   ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
   ```

1. 복제된 각 테이블에 필요한 보충 로깅이 추가되었는지 확인합니다.

   다음을 고려하세요.
   + 테이블에 `ALL COLUMNS` 보충 로깅이 추가되면 로깅을 더 추가할 필요가 없습니다.
   + 프라이머리 키가 있는 경우 프라이머리 키에 대한 보충 로깅을 추가합니다. 형식을 사용하여 프라이머리 키 자체에 보충 로깅을 추가하거나 데이터베이스에서 프라이머리 키 열에 보충 로깅을 추가하여 이 작업을 수행할 수 있습니다.

     ```
     ALTER TABLE Tablename ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ```
   + 프라이머리 키가 없고 테이블에 고유 인덱스가 하나만 있는 경우, 고유 인덱스의 모든 열을 보충 로그에 추가합니다.

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG GROUP LogGroupName (UniqueIndexColumn1[, UniqueIndexColumn2] ...) ALWAYS;
     ```

     `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS`를 사용해도 고유 인덱스 열이 로그에 추가되지 않습니다.
   + 프라이머리 키가 없고 테이블에 여러 고유 인덱스가 있는 경우는 알파벳순으로 정렬된 오름차순 목록에서 첫 번째 고유 인덱스를 AWS DMS 선택합니다. 이전 항목에서처럼 선택한 인덱스의 열에 보충 로깅을 추가해야 합니다.

     `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS`를 사용해도 고유 인덱스 열이 로그에 추가되지 않습니다.
   + 프라이머리 키가 없고 고유 인덱스가 없는 경우 모든 열에 보충 로깅을 추가합니다.

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
     ```

     일부의 경우, 대상 테이블 프라이머리 키 또는 고유 색인이 원본 테이블 프라이머리 키 또는 고유 색인과 다릅니다. 이러한 경우, 대상 테이블 프라이머리 키 또는 고유 인덱스를 구성하는 소스 테이블 열에 보충 로깅을 수동으로 추가합니다.

     또한 대상 테이블 프라이머리 키를 변경하는 경우, 원래 프라이머리 키 또는 고유 인덱스 대신 대상 고유 인덱스에 보충 로깅을 추가해야 합니다.

테이블에 대해 필터 또는 변환이 정의된 경우 추가 로깅을 활성화해야 할 수 있습니다.

다음을 고려하세요.
+ 테이블에 `ALL COLUMNS` 보충 로깅이 추가되면 로깅을 더 추가할 필요가 없습니다.
+ 테이블에 고유 인덱스 또는 프라이머리 키가 있다면 필터 또는 변환에 포함된 각 열에 보충 로깅을 추가합니다. 하지만 해당 열이 프라이머리 키 또는 고유 인덱스 열과 다른 경우에만 그렇게 하세요.
+ 변환에 하나의 열만 포함되는 경우, 이 열을 보충 로깅 그룹에 추가하지 마세요. 예를 들어 `A+B` 변환의 경우 열 `A` 및 `B` 모두에 보충 로깅을 추가합니다. 그러나 `substring(A,10)` 변환의 경우 열 `A`에 보충 로깅을 추가하지 마세요.
+ 프라이머리 키 또는 고유 인덱스 열과 필터링되거나 변환되는 그 밖의 열에 보충 로깅을 설정하려면 `USER_LOG_GROUP` 보충 로깅을 설정하면 됩니다. 프라이머리 키 또는 고유 인덱스 열과 필터링되거나 변환되는 그 밖의 특정 열 모두에 이 보충 로깅을 추가합니다.

  예를 들어, 프라이머리 키 `ID`와 열 `NAME` 기준 필터를 사용하여 `TEST.LOGGING`이라는 테이블을 복제하려면 다음과 비슷한 명령을 실행하여 로그 그룹 보충 로깅을 만들 수 있습니다.

  ```
  ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;
  ```

### Oracle LogMiner를 사용하여 다시 실행 로그에 액세스할 때 필요한 계정 권한
<a name="CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges"></a>

Oracle LogMiner를 사용하여 다시 실행 로그에 액세스하려면 Oracle 엔드포인트 연결 설정에 지정된 Oracle 사용자에게 다음 권한을 부여합니다.

```
GRANT EXECUTE on DBMS_LOGMNR to dms_user;
GRANT SELECT on V_$LOGMNR_LOGS to dms_user;
GRANT SELECT on V_$LOGMNR_CONTENTS to dms_user;
GRANT LOGMINING to dms_user; -– Required only if the Oracle version is 12c or higher.
```

### AWS DMS Binary Reader를 사용하여 다시 실행 로그에 액세스할 때 필요한 계정 권한
<a name="CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges"></a>

 AWS DMS Binary Reader를 사용하여 다시 실행 로그에 액세스하려면 Oracle 엔드포인트 연결 설정에 지정된 Oracle 사용자에게 다음 권한을 부여합니다.

```
GRANT SELECT on v_$transportable_platform to dms_user;   -– Grant this privilege if the redo logs are stored in Oracle Automatic Storage Management (ASM) and AWS DMS accesses them from ASM.
GRANT CREATE ANY DIRECTORY to dms_user;                  -– Grant this privilege to allow AWS DMS to use Oracle BFILE read file access in certain cases. This access is required when the replication instance does not have file-level access to the redo logs and the redo logs are on non-ASM storage.
GRANT EXECUTE on DBMS_FILE_TRANSFER to dms_user;         -– Grant this privilege to copy the redo log files to a temporary folder using the CopyToTempFolder method.
GRANT EXECUTE on DBMS_FILE_GROUP to dms_user;
```

Binary Reader는 Oracle 디렉터리를 포함하는 Oracle 파일 기능과 함께 작동합니다. 각 Oracle 디렉터리 객체에는 처리할 다시 실행 로그 파일이 들어 있는 폴더의 이름이 포함됩니다. 이러한 Oracle 디렉터리는 파일 시스템 수준에서 표시되지 않습니다. 대신, Oracle 데이터베이스 수준에서 생성되는 논리적 디렉터리입니다. Oracle `ALL_DIRECTORIES` 뷰에서 볼 수 있습니다.

이러한 Oracle 디렉터리 AWS DMS 를 생성하려면 앞에서 지정한 권한을 부여합니다. `CREATE ANY DIRECTORY`는 `DMS_` 접두사가 있는 디렉터리 이름을 AWS DMS 생성합니다. `CREATE ANY DIRECTORY` 권한을 부여하지 않는 경우 수동으로 해당 디렉터리를 생성해야 합니다. 수동으로 Oracle 디렉터리를 만들 때 Oracle 소스 엔드포인트에 지정된 Oracle 사용자가 이러한 디렉터리를 만든 사용자가 아닌 경우도 있습니다. 이런 경우에도 `READ on DIRECTORY` 권한을 부여하세요.

**참고**  
AWS DMS CDC는 자동 다시 실행 전송 서비스를 사용하도록 구성되지 않은 Active Dataguard Standby를 지원하지 않습니다.

경우에 따라 Oracle Managed Files(OMF)를 사용하여 로그를 저장할 수 있습니다. 또는 소스 엔드포인트가 ADG에 있고 따라서 CREATE ANY DIRECTORY 권한을 부여할 수 없습니다. 이러한 경우 AWS DMS 복제 작업을 시작하기 전에 가능한 모든 로그 위치를 사용하여 디렉터리를 수동으로 생성합니다. AWS DMS 가 예상한 미리 생성된 디렉터리를 찾지 못하면 작업이 중지됩니다. 또한 AWS DMS 는 `ALL_DIRECTORIES` 뷰에서 생성한 항목을 삭제하지 않으므로 수동으로 삭제합니다.

### Oracle ASM과 함께 Binary Reader를 사용할 때 필요한 추가 계정 권한
<a name="CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges"></a>

Binary Reader를 사용하여 ASM(Automatic Storage Management)의 다시 실행 로그에 액세스하려면 Oracle 엔드포인트 연결 설정에 지정된 Oracle 사용자에게 다음 권한을 부여합니다.

```
SELECT ON v_$transportable_platform
SYSASM -– To access the ASM account with Oracle 11g Release 2 (version 11.2.0.2) and higher, grant the Oracle endpoint user the SYSASM privilege. For older supported Oracle versions, it's typically sufficient to grant the Oracle endpoint user the SYSDBA privilege.
```

명령 프롬프트를 열고 앞서 지정한 Oracle 버전에 따라 다음 명령문 중 하나를 간접적으로 호출하여 ASM 계정 액세스를 검증할 수 있습니다.

`SYSDBA` 권한이 필요한 경우 다음을 사용하세요.

```
sqlplus asmuser/asmpassword@+asmserver as sysdba
```

`SYSASM` 권한이 필요한 경우 다음을 사용하세요.

```
sqlplus asmuser/asmpassword@+asmserver as sysasm
```

### 에서 CDC용 Binary Reader를 사용하여 자체 관리형 Oracle Standby를 소스로 사용 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.BinaryStandby"></a>

CDC용 Binary Reader를 사용할 때 Oracle Standby 인스턴스를 소스로 구성하려면 다음 사전 요구 사항부터 시작합니다.
+ AWS DMS 는 현재 Oracle Active Data Guard Standby만 지원합니다.
+ Oracle Data Guard 구성에서 다음을 사용하는지 확인하세요.
  + 다시 실행 데이터의 자동 전송을 위한 다시 실행 전송 서비스.
  + 대기 데이터베이스에 다시 실행을 자동으로 적용하는 서비스 적용.

이러한 요구 사항이 충족되는지 확인하려면 다음 쿼리를 실행합니다.

```
SQL> select open_mode, database_role from v$database;
```

해당 쿼리의 출력에서 대기 데이터베이스가 읽기 전용 모드로 열리고 다시 실행이 자동으로 적용되는지 확인합니다. 예제:

```
OPEN_MODE             DATABASE_ROLE
--------------------  ----------------
READ ONLY WITH APPLY  PHYSICAL STANDBY
```

**CDC용 Binary Reader를 사용할 때 Oracle Standby 인스턴스를 소스로 구성하려면**

1. 대기 로그 파일에 액세스하는 데 필요한 추가 권한을 부여합니다.

   ```
   GRANT SELECT ON v_$standby_log TO dms_user;
   ```

1.  AWS Management Console 또는 AWS CLI를 사용하여 Oracle Standby의 소스 엔드포인트를 생성합니다. 엔드포인트를 생성할 때 다음과 같은 추가 연결 속성을 지정합니다.

   ```
   useLogminerReader=N;useBfile=Y;
   ```
**참고**  
에서 추가 연결 속성을 사용하여 다시 실행 로그 대신 아카이브 로그에서 마이그레이션할지 여부를 지정할 AWS DMS수 있습니다. 자세한 내용은 [Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib) 단원을 참조하십시오.

1. 아카이브된 로그 대상을 구성합니다.

   ASM이 없는 Oracle 소스용 DMS Binary Reader는 Oracle 디렉토리를 사용하여 아카이빙된 다시 실행 로그에 액세스합니다. 데이터베이스가 FRA(Fast Recovery Area)를 아카이브 로그 대상으로 사용하도록 구성된 경우, 아카이브 다시 실행 파일의 위치는 일정하지 않습니다. 아카이빙된 다시 실행 로그가 생성되는 날마다 FRA에 디렉터리 이름 형식 YYYY\$1MM\$1DD를 사용하여 새 디렉터리가 생성됩니다. 예제: 

   ```
   DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD
   ```

   DMS가 새로 생성된 FRA 디렉터리의 아카이빙된 다시 실행 파일에 액세스해야 하고 기본 읽기-쓰기 데이터베이스를 소스로 사용하는 경우, DMS는 다음과 같이 새 Oracle 디렉터리를 생성하거나 기존 Oracle 디렉터리를 대체합니다.

   ```
   CREATE OR REPLACE DIRECTORY dmsrep_taskid AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD’;
   ```

   대기 데이터베이스를 소스로 사용하는 경우, 데이터베이스가 읽기 전용 모드이기 때문에 DMS는 Oracle 디렉터리를 생성하거나 바꿀 수 없습니다. 하지만 다음 추가 단계 중 하나를 수행할 수 있습니다.

   1. Oracle이 일일 하위 디렉터리를 생성하지 않는 구성에서는 FRA 대신 실제 경로를 사용하도록 `log_archive_dest_id_1`을 수정합니다.

      ```
      ALTER SYSTEM SET log_archive_dest_1=’LOCATION=full directory path’
      ```

      그런 다음 DMS가 사용할 Oracle 디렉터리 객체를 생성합니다.

      ```
      CREATE OR REPLACE DIRECTORY dms_archived_logs AS ‘full directory path’;
      ```

   1. 추가 아카이브 로그 대상과 해당 대상을 가리키는 Oracle 디렉터리 객체를 생성합니다. 예제:

      ```
      ALTER SYSTEM SET log_archive_dest_3=’LOCATION=full directory path’; 
      CREATE DIRECTORY dms_archived_log AS ‘full directory path’;
      ```

      그런 다음 작업 소스 엔드포인트에 추가 연결 속성을 추가합니다.

      ```
      archivedLogDestId=3
      ```

   1. DMS가 사용할 Oracle 디렉터리 객체를 수동으로 사전 생성합니다.

      ```
      CREATE DIRECTORY dms_archived_log_20210301 AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/2021_03_01’;
      CREATE DIRECTORY dms_archived_log_20210302 AS ‘DB_RECOVERY_FILE_DEST>/SID>/archivelog/2021_03_02’; 
      ...
      ```

   1. 매일 실행되고 필요한 디렉터리를 생성하는 Oracle 스케줄러 작업을 생성합니다.

1. 온라인 로그 대상을 구성합니다.

   대기 재실행 로그를 사용하여 OS 디렉터리를 가리키는 Oracle 디렉터리를 생성합니다.

   ```
   CREATE OR REPLACE DIRECTORY STANDBY_REDO_DIR AS '<full directory path>';
   GRANT READ ON DIRECTORY STANDBY_REDO_DIR TO <dms_user>;
   ```

### Oracle 클라우드 인프라(OCI)의 사용자 관리형 데이터베이스를의 CDC 소스로 사용 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.OCI"></a>

사용자 관리형 데이터베이스는 가상 머신(VM), 베어 메탈 또는 Exadata 서버에서 만든 Oracle 데이터베이스와 같이 사용자가 구성하고 제어하는 데이터베이스입니다. 또는 OCI(Oracle Cloud Infrastructure)와 같은 전용 인프라에서 실행되고 사용자가 구성하고 제어하는 데이터베이스인 경우도 있습니다. 다음 정보는 AWS DMS에서 OCI의 Oracle 사용자 관리형 데이터베이스를 변경 데이터 캡처(CDC) 소스로 사용할 때 필요한 권한과 구성을 설명합니다.

**OCI에서 호스팅하는 사용자 관리형 Oracle 데이터베이스를 변경 데이터 캡처의 소스로 구성하려면**

1. OCI의 사용자 관리형 Oracle 소스 데이터베이스에 필요한 사용자 계정 권한을 부여합니다. 자세한 내용은 [자체 관리형 Oracle 소스 엔드포인트에 대한 계정 권한](#CHAP_Source.Oracle.Self-Managed.Privileges)을 참조하세요.

1. Binary Reader를 사용하여 다시 실행 로그에 액세스할 때 필요한 계정 권한을 부여합니다. 자세한 내용은 [Binary Reader를 사용할 때 필요한 계정 권한](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)을 참조하세요.

1. Oracle ASM(Automatic Storage Management)에서 Binary Reader를 사용할 때 필요한 계정 권한을 추가합니다. 자세한 내용은 [Binary Reader를 Oracle ASM과 함께 사용할 때 필요한 추가 계정 권한](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)을 참조하세요.

1. 보충 로깅을 설정합니다. 자세한 내용은 [보충 로깅 설정](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)을 참조하세요.

1. TDE 암호화를 설정합니다. 자세한 내용은 [Oracle 데이터베이스를 소스 엔드포인트로 사용할 때 암호화 방법](#CHAP_Source.Oracle.Encryption)을 참조하세요.

OCI(Oracle Cloud Infrastructure)의 Oracle 소스 데이터베이스에서 데이터를 복제할 때는 다음과 같은 제한 사항이 적용됩니다.

**제한 사항**
+ DMS는 Oracle LogMiner를 사용한 다시 실행 로그 액세스를 지원하지 않습니다.
+ DMS는 자율 DB를 지원하지 않습니다.

## AWS의 소스로 관리형 Oracle 데이터베이스 작업 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed"></a>

 AWS관리형 데이터베이스는 Amazon RDS, Amazon Aurora 또는 Amazon S3와 같은 Amazon 서비스에 있는 데이터베이스입니다. 아래에서 AWS관리형 Oracle 데이터베이스를 사용할 때 설정해야 하는 권한과 구성을 찾을 수 있습니다 AWS DMS.

### 용 AWS관리형 Oracle 소스에 필요한 사용자 계정 권한 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges"></a>

Oracle 소스 엔드포인트 정의에 지정된 Oracle 사용자 계정에 다음 권한을 부여합니다.

**중요**  
`dms_user`와 `any-replicated-table` 같은 모든 파라미터 값에서 대소문자를 구분하는 식별자로 값을 지정하지 않는 한 Oracle은 값이 모두 대문자인 것으로 가정합니다. 예를 들어 `CREATE USER myuser` 또는 `CREATE USER MYUSER`에서처럼 따옴표를 사용하지 않고 `dms_user` 값을 생성한다고 가정해 보겠습니다. 이 경우 Oracle은 값을 모두 대문자(`MYUSER`)로 식별하고 저장합니다. `CREATE USER "MyUser"` 또는 `CREATE USER 'MyUser'`에서처럼 따옴표를 사용하면 Oracle은 사용자가 지정한 대소문자를 구별하는 값(`MyUser`)을 식별하고 저장합니다.

```
GRANT CREATE SESSION to dms_user;
GRANT SELECT ANY TRANSACTION to dms_user;
GRANT SELECT on DBA_TABLESPACES to dms_user;
GRANT SELECT ON any-replicated-table to dms_user;
GRANT EXECUTE on rdsadmin.rdsadmin_util to dms_user;
 -- For Oracle 12c or higher:
GRANT LOGMINING to dms_user; – Required only if the Oracle version is 12c or higher.
```

또한 아래 나온 것처럼 Amazon RDS 절차 `rdsadmin.rdsadmin_util.grant_sys_object`를 사용하여 `SYS` 객체에 대한 `SELECT` 및 `EXECUTE` 권한을 부여합니다. 자세한 내용은 [SYS 객체에 SELECT 또는 EXECUTE 권한 부여](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.html#Appendix.Oracle.CommonDBATasks.TransferPrivileges)를 참조하세요.

```
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_VIEWS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_PARTITIONS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_LOG_GROUPS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','dms_user','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'dms_user', 'EXECUTE');

-- (as of Oracle versions 12.1 and higher)
exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', 'dms_user', 'SELECT');

-- (for Amazon RDS Active Dataguard Standby (ADG))
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', 'dms_user', 'SELECT'); 

-- (for transparent data encryption (TDE))

exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$', 'dms_user', 'SELECT'); 
               
-- (for validation with LOB columns)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'dms_user', 'EXECUTE');
                    
-- (for binary reader)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES','dms_user','SELECT'); 
                    
-- Required when the source database is Oracle Data guard, and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.

exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATAGUARD_STATS', 'dms_user', 'SELECT');
```

 AWS DMS 에서 Amazon RDS Active Dataguard Standby(ADG)를 사용하는 방법에 대한 자세한 내용은 [에서 CDC용 Binary Reader와 함께 Amazon RDS Oracle Standby(읽기 전용 복제본)를 소스로 사용 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy) 섹션을 참조하세요.

에서 Oracle TDE를 사용하는 방법에 대한 자세한 내용은 섹션을 AWS DMS참조하세요[Oracle을의 소스로 사용하기 위해 지원되는 암호화 방법 AWS DMS](#CHAP_Source.Oracle.Encryption).

#### Oracle Standby 열린 트랜잭션 처리를 위한 사전 요구 사항
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges.Standby"></a>

 AWS DMS 버전 3.4.6 이상을 사용하는 경우 다음 단계를 수행하여 Oracle Standby에 대한 열린 트랜잭션을 처리합니다.

1. 기본 데이터베이스에 `AWSDMS_DBLINK`라는 데이터베이스 링크를 생성합니다. `DMS_USER`는 이 데이터베이스 링크를 사용하여 기본 데이터베이스에 연결합니다. 이 데이터베이스 링크는 대기 인스턴스에서 실행되어 기본 데이터베이스에서 실행 중인 열린 트랜잭션을 쿼리합니다. 다음 예제를 참조하세요.

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. 다음 예제와 같이 `DMS_USER`를 사용하여 데이터베이스 링크에 연결되었는지 확인합니다.

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### AWS에 대한 관리형 Oracle 소스 구성 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Configuration"></a>

 AWS관리형 Oracle 데이터베이스를 소스로 사용하기 전에 Oracle 데이터베이스에 대해 다음 작업을 AWS DMS수행합니다.
+ 자동 백업을 활성화합니다. 자동 백업 활성화에 대한 자세한 내용은 *Amazon RDS 사용 설명서*의 [자동 백업 활성화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.Enabling) 섹션을 참조하세요.
+ 보충 로깅을 설정합니다.
+ 보관을 설정합니다. Amazon RDS for Oracle DB 인스턴스에 대한 다시 실행 로그를 보관하면 AWS DMS 가 Oracle LogMiner 또는 Binary Reader를 사용하여 로그 정보를 검색할 수 있습니다.

**보관을 설정하려면**

1. `rdsadmin.rdsadmin_util.set_configuration` 명령을 실행하여 보관을 설정합니다.

   예를 들어 보관된 다시 실행 로그를 24시간 동안 유지하려면 다음 명령을 실행합니다.

   ```
   exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
   commit;
   ```
**참고**  
변경 사항을 적용하려면 커밋해야 합니다.

1. 지정된 보존 기간 동안 보관된 다시 실행 로그를 위한 스토리지 공간이 충분한지 확인해야 합니다. 예를 들어 보존 기간이 24시간인 경우, 일반적인 트랜잭션 처리 시간 동안 보관된 다시 실행 로그의 누적된 총 크기를 계산하고 그 합계에 24를 곱합니다. 계산된 이 24시간 합계를 사용 가능한 스토리지 공간과 비교하여 전체 24시간 트랜잭션 처리를 처리할 수 있는 충분한 스토리지 공간이 있는지 결정합니다.

**보충 로깅을 설정하려면**

1. 데이터베이스 수준에서 보충 로깅을 활성화하려면 다음 명령을 실행합니다.

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
   ```

1. 다음 명령을 실행하여 프라이머리 키 보충 로깅을 활성화합니다.

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
   ```

1. (선택 사항) 테이블 수준에서 키 수준 보충 로깅을 활성화합니다.

   키 수준 보충 로깅을 활성화하면 소스 데이터베이스에 약간의 오버헤드가 발생합니다. 따라서 테이블 하위 집합만을 마이그레이션할 경우, 테이블 수준에서 키 수준 보충 로깅을 활성화하는 것이 좋습니다. 테이블 수준에서 키 수준 보충 로깅을 활성화하려면 다음 명령을 실행합니다.

   ```
   alter table table_name add supplemental log data (PRIMARY KEY) columns;
   ```

### 용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.CDC"></a>

CDC용 Binary Reader를 사용하여 소스 Amazon RDS for Oracle 인스턴스 다시 실행 로그에 액세스 AWS DMS 하도록를 구성할 수 있습니다.

**참고**  
Oracle LogMiner를 사용하려면 최소 필수 사용자 계정 권한으로 충분합니다. 자세한 내용은 [용 AWS관리형 Oracle 소스에 필요한 사용자 계정 권한 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges) 단원을 참조하십시오.

 AWS DMS Binary Reader를 사용하려면 버전에 AWS DMS 따라 Oracle 소스 엔드포인트에 대한 추가 설정 및 추가 연결 속성을 지정합니다.

Binary Reader는 다음 버전의 Amazon RDS for Oracle에서 지원됩니다.
+ Oracle 11.2 – 버전 11.2.0.4V11 이상
+ Oracle 12.1 – 버전 12.1.0.2.V7 이상
+ Oracle 12.2 – 모든 버전
+ Oracle 18.0 – 모든 버전
+ Oracle 19.0 – 모든 버전

**Binary Reader를 사용하여 CDC를 구성하려면**

1. Amazon RDS for Oracle 소스 데이터베이스에 마스터 사용자로 로그인하고 다음 저장 프로시저를 실행하여 서버 수준 디렉터리를 생성합니다.

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. Oracle 소스 엔드포인트에 액세스하는 데 사용되는 Oracle 사용자 계정에 다음 권한을 부여합니다.

   ```
   GRANT READ ON DIRECTORY ONLINELOG_DIR TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO dms_user;
   ```

1. Amazon RDS Oracle 소스 엔드포인트에서 다음 추가 연결 속성을 설정합니다.
   + RDS Oracle 버전 11.2 및 12.1의 경우, 다음을 설정합니다.

     ```
     useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false;useAlternateFolderForOnline=true;
     oraclePathPrefix=/rdsdbdata/db/{$DATABASE_NAME}_A/;usePathPrefix=/rdsdbdata/log/;replacePathPrefix=true;
     ```
   + RDS Oracle 버전 12.2, 18.0, 19.0의 경우, 다음을 설정합니다.

     ```
     useLogminerReader=N;useBfile=Y;
     ```

**참고**  
여러 속성 설정의 경우, 세미콜론 구분자(;) 뒤에 공백이 오면 안 됩니다(예: `oneSetting;thenAnother`).

CDC 작업 구성에 대한 자세한 내용은 [Oracle 소스 데이터베이스에서의 CDC 구성](#CHAP_Source.Oracle.CDC.Configuration) 섹션을 참조하세요.

### 에서 CDC용 Binary Reader와 함께 Amazon RDS Oracle Standby(읽기 전용 복제본)를 소스로 사용 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.StandBy"></a>

 AWS DMS에서 CDC용 Binary Reader를 사용할 때 Amazon RDS for Oracle Standby를 소스로 사용하려면 다음 사전 요구 사항을 확인하세요.
+ Oracle 마스터 사용자를 사용하여 Binary Reader를 설정합니다.
+ 가 AWS DMS 현재 Oracle Active Data Guard Standby만 사용하도록 지원하는지 확인합니다.

그런 다음 CDC용 Binary Reader를 사용할 때 다음 절차를 사용하여 RDS for Oracle Standby를 소스로 사용합니다.

**CDC용 Binary Reader를 사용할 때 RDS for Oracle Standby를 소스로 구성하려면**

1. RDS for Oracle 기본 인스턴스에 마스터 사용자로 로그인합니다.

1. Amazon RDS 사용 설명서에 설명된 대로 다음 저장 프로시저를 실행하여 서버 수준 디렉터리를 생성합니다.

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. 2단계에서 생성한 디렉터리를 식별합니다.

   ```
   SELECT directory_name, directory_path FROM all_directories
   WHERE directory_name LIKE ( 'ARCHIVELOG_DIR_%' )
           OR directory_name LIKE ( 'ONLINELOG_DIR_%' )
   ```

   예를 들어 위 코드는 다음과 같은 디렉터리 목록을 표시합니다.  
![\[Table showing directory names and their corresponding paths for archive and online logs.\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/images/datarep-rds-server-level-directories.png)

1. Oracle Standby에 액세스하는 데 사용되는 Oracle 사용자 계정에 이전 디렉터리에 대한 `Read` 권한을 부여합니다.

   ```
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_B TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_B TO dms_user;
   ```

1. 기본 인스턴스에서 아카이브 로그 스위치를 수행합니다. 이렇게 하면 `ALL_DIRECTORIES`에 대한 변경 사항이 Oracle Standby에도 포팅되도록 할 수 있습니다.

1. Oracle Standby에서 `ALL_DIRECTORIES` 쿼리를 실행하여 변경 사항이 적용되었는지 확인합니다.

1. Management Console 또는 AWS Command Line Interface ()를 사용하여 Oracle Standby에 대한 소스 엔드포인트를 AWS DMS 생성합니다AWS CLI. 엔드포인트를 생성할 때 다음과 같은 추가 연결 속성을 지정합니다.

   ```
   useLogminerReader=N;useBfile=Y;archivedLogDestId=1;additionalArchivedLogDestId=2
   ```

1. 엔드포인트를 생성한 후 콘솔의 엔드포인트 **생성 페이지에서 엔드포인트** **연결 테스트** 또는 AWS CLI `test-connection` 명령을 사용하여 연결이 설정되었는지 확인합니다.

## Oracle을의 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.Oracle.Limitations"></a>

 AWS DMS용 소스로 Oracle 데이터베이스 사용 시 다음 제한 사항이 적용됩니다.
+ AWS DMS 는 AWS DMS 버전 3.5.0 이상의 Oracle 확장 데이터 형식을 지원합니다.
+ AWS DMS 는 긴 객체 이름(30바이트 이상)을 지원하지 않습니다.
+ AWS DMS 는 함수 기반 인덱스를 지원하지 않습니다.
+ 보충 로깅을 관리하고 임의의 열에서 변환을 수행하는 경우, 모든 필드 및 열에 대해 보충 로깅이 활성화되어 있어야 합니다. 보충 로깅 설정에 대한 자세한 내용은 다음 주제를 참조하세요.
  + 자체 관리형 Oracle 소스 데이터베이스는 [보충 로깅 설정](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging) 섹션을 참조하세요.
  +  AWS관리형 Oracle 소스 데이터베이스는 섹션을 참조하세요[AWS에 대한 관리형 Oracle 소스 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration).
+ AWS DMS 는 다중 테넌트 컨테이너 루트 데이터베이스(CDB\$1ROOT)를 지원하지 않습니다. DMS는 Binary Reader를 사용하여 PDB를 지원합니다.
+ AWS DMS 는 연기된 제약 조건을 지원하지 않습니다.
+ AWS DMS 버전 3.5.3 이상은 보안 LOBs 완전히 지원합니다.
+ AWS DMS 는 지원되는 모든 Oracle 버전 `rename table table-name to new-table-name` 11 이상에 대한 구문을 지원합니다. 이 구문은 Oracle 버전 10 소스 데이터베이스에서는 지원되지 않습니다.
+ AWS DMS 는 DDL 문의 결과를 복제하지 않습니다`ALTER TABLE ADD column data_type DEFAULT default_value`. `default_value`를 대상에 복제하는 대신 새 열을 `NULL`로 설정합니다.
+  AWS DMS 버전 3.4.7 이상을 사용하는 경우 파티션 또는 하위 파티션 작업으로 인한 변경 사항을 복제하려면 DMS 작업을 시작하기 전에 다음을 수행합니다.
  + 파티셔닝된 테이블 구조(DDL)를 수동으로 생성합니다.
  + Oracle 소스와 Oracle 대상 모두에서 DDL이 동일해야 합니다.
  + 추가 연결 속성 `enableHomogenousPartitionOps=true`를 설정합니다.

  `enableHomogenousPartitionOps`에 대한 자세한 내용은 [Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib) 섹션을 참조하세요. 또한 FULL\$1CDC 작업에서 DMS는 캐시된 변경 사항의 일부로 캡처된 데이터 변경 사항을 복제하지 않는다는 점에 유의하세요. 이 사용 사례에서는 Oracle 대상에서 테이블 구조를 다시 만들고 해당 테이블을 다시 로드하세요.

   AWS DMS 버전 3.4.7 이전:

  DMS는 파티션 또는 하위 파티션 작업(`ADD`, `DROP`, `EXCHANGE`, `TRUNCATE`)으로 인해 발생하는 데이터 변경 사항을 복제하지 않습니다. 이러한 업데이트로 인해 복제 중에 다음과 같은 오류가 발생할 수 있습니다.
  + `ADD` 작업의 경우 추가된 데이터에 대한 업데이트 및 삭제로 인해 “적용된 행 없음” 경고가 발생할 수 있습니다.
  + `DROP` 및 `TRUNCATE` 작업의 경우 새 삽입은 “중복” 오류를 발생시킬 수 있습니다.
  + `EXCHANGE` 작업을 수행하면 “적용된 행 없음” 경고와 “중복” 오류가 발생할 수 있습니다.

  파티션 또는 하위 파티션 작업으로 인해 발생하는 변경 사항을 복제하려면 해당 테이블을 다시 로드합니다. 빈 파티션을 새로 추가한 후 새로 추가된 파티션에 대한 작업이 정상적으로 대상에 복제됩니다.
+ AWS DMS 3.4 이전 버전은 소스에서 `CREATE TABLE AS` 문을 실행하여 발생하는 대상의 데이터 변경을 지원하지 않습니다. 하지만, 새 테이블이 대상에서 생성됩니다.
+ AWS DMS 는 테이블 메타데이터 및 `OBJECT_ID` 필드와 같은 Oracle `DBMS_REDEFINITION` 패키지의 변경 사항을 캡처하지 않습니다.
+ 제한적인 크기의 LOB 모드가 활성화되면 Oracle 소스의 빈 BLOB/CLOB 열이 NULL 값으로 복제됩니다. 전체 LOB 모드가 활성화되면 빈 문자열(' ')로 복제됩니다.
+ Oracle 11 LogMiner를 사용하여 변경 사항을 캡처할 경우 문자열 길이가 1982보다 큰 CLOB 열에 대한 업데이트가 손실되고 대상이 업데이트되지 않습니다.
+ 변경 데이터 캡처(CDC) 중에는 AWS DMS 가 기본 키로 정의된 숫자 열에 대한 배치 업데이트를 지원하지 않습니다.
+ AWS DMS 는 특정 `UPDATE` 명령을 지원하지 않습니다. 다음은 지원되지 않는 `UPDATE` 명령의 예입니다.

  ```
  UPDATE TEST_TABLE SET KEY=KEY+1;
  ```

  여기서, `TEST_TABLE`은 테이블 이름이고 `KEY`는 프라이머리 키로 정의 된 숫자 열입이다.
+ AWS DMS 는 LONG 및 LONG RAW 열을 로드하기 위한 전체 LOB 모드를 지원하지 않습니다. 대신 제한된 LOB 모드를 사용하여 이러한 데이터 형식을 Oracle 대상으로 마이그레이션할 수 있습니다. 제한된 LOB 모드에서는 64KB보다 긴 LONG 또는 LONG RAW 열로 설정한 모든 데이터를 64KB로 AWS DMS 잘라냅니다.
+ AWS DMS 는 XMLTYPE 열을 로드하기 위한 전체 LOB 모드를 지원하지 않습니다. 대신 제한된 LOB 모드를 사용하여 XMLTYPE 열을 Oracle 대상으로 마이그레이션할 수 있습니다. 제한된 LOB 모드에서 DMS는 사용자가 정의한 '최대 LOB 크기' 변수보다 큰 데이터를 모두 잘라냅니다. '최대 LOB 크기'의 최대 권장 값은 100MB입니다.
+ AWS DMS 는 이름에 아포스트로피가 포함된 테이블을 복제하지 않습니다.
+ AWS DMS 는 구체화된 뷰에서 CDC를 지원합니다. 하지만 DMS는 그 밖의 뷰에서는 CDC를 지원하지 않습니다.
+ AWS DMS 는 오버플로 세그먼트가 있는 인덱스 구성 테이블에 대해 CDC를 지원하지 않습니다.
+ AWS DMS 는가 로 `enableHomogenousPartitionOps` 설정된 참조로 분할된 테이블에 대한 `Drop Partition` 작업을 지원하지 않습니다`true`.
+ Oracle LogMiner를 사용하여 다시 실행 로그에 액세스하는 경우 다음과 같은 제한 AWS DMS 사항이 있습니다.
  + Oracle 12의 경우에만는 LOB 열에 변경 사항을 복제하지 AWS DMS 않습니다.
  + AWS DMS 는 Oracle LogMiner를 사용하는 동안 복제 중인 XA 트랜잭션을 지원하지 않습니다.
  + Oracle LogMiner는 플러그형 데이터베이스(PDB)에 대한 연결을 지원하지 않습니다. PDB에 연결하려면 Binary Reader를 사용하여 다시 실행 로그에 액세스합니다.
  + SHRINK SPACE 작업은 지원되지 않습니다.
+ Binary Reader를 사용하는 경우 AWS DMS 에는 다음과 같은 제한 사항이 있습니다.
  + 테이블 클러스터를 지원하지 않습니다.
  + 테이블 수준 `SHRINK SPACE` 작업만 지원합니다. 이 수준에는 전체 테이블, 파티션, 하위 파티션이 포함됩니다.
  + 키 압축을 사용하는 인덱스 구성 테이블에 대한 변경 사항은 지원하지 않습니다.
  + 원시 디바이스에서 온라인 다시 실행 로그 구현은 지원하지 않습니다.
  + RDS for Oracle이 TDE 암호화 키를 위한 지갑 암호 검색을 지원하지 않으므로 Binary Reader는 자체 관리형 Oracle 데이터베이스에서만 TDE를 지원합니다.
+ AWS DMS 는 Oracle Automatic Storage Management(ASM) 프록시를 사용하여 Amazon RDS Oracle 소스에 대한 연결을 지원하지 않습니다.
+ AWS DMS 는 가상 열을 지원하지 않습니다.
+ AWS DMS 는 ROWID 열을 기반으로 하는 `ROWID` 데이터 유형 또는 구체화된 뷰를 지원하지 않습니다.

  AWS DMS 는 Oracle 구체화된 뷰를 부분적으로 지원합니다. 전체 로드의 경우, DMS는 Oracle 구체화된 뷰의 전체 로드 복사를 수행할 수 있습니다. DMS는 구체화된 뷰를 대상 시스템에 기본 테이블로 복사하고 구체화된 뷰의 모든 ROWID 열을 무시합니다. 지속적 복제(CDC) 의 경우 DMS는 구체화된 뷰 데이터에 대한 변경 사항을 복제하려고 시도하지만 결과는 이상적이지 않을 수 있습니다. 특히, 구체화된 뷰가 완전히 새로 고쳐지면 DMS는 모든 행에 개별 삭제를 복제한 후 모든 행에 개별 삽입을 복제합니다. 이는 리소스를 매우 많이 사용하는 작업이며, 행 수가 많은 구체화된 뷰에서는 성능이 떨어질 수 있습니다. 구체화된 뷰가 빠른 새로 고침을 수행하는 지속적인 복제의 경우, DMS는 빠른 새로 고침 데이터 변경을 처리하고 복제하려고 합니다. 어느 경우든 DMS는 구체화된 뷰의 ROWID 열을 모두 건너뜁니다.
+ AWS DMS 는 글로벌 임시 테이블을 로드하거나 캡처하지 않습니다.
+ 복제를 사용하는 S3 대상의 경우, 소스 행 업데이트가 모든 열 값을 캡처할 수 있도록 모든 열에서 보충 로깅을 활성화하세요. 예제는 다음과 같습니다. `alter table yourtablename add supplemental log data (all) columns;`.
+ `null`을 포함하는 복합 고유 키가 있는 행에 대한 업데이트는 대상에서 복제될 수 없습니다.
+ AWS DMS 는 동일한 소스 엔드포인트에서 여러 Oracle TDE 암호화 키 사용을 지원하지 않습니다. 각 엔드포인트는 TDE 암호화 키 이름 “`securityDbEncryptionName`“에 대한 속성 하나와 이 키에 대한 하나의 TDE 암호만 가질 수 있습니다.
+ Amazon RDS for Oracle에서 복제하는 경우, TDE는 암호화된 테이블스페이스와 Oracle LogMiner를 사용하는 경우에만 지원됩니다.
+ AWS DMS 는 여러 테이블 이름 바꾸기 작업을 빠르게 연속해서 지원하지 않습니다.
+ Oracle 19.0을 소스로 사용하는 경우 AWS DMS 는 다음 기능을 지원하지 않습니다.
  + 데이터가드 DML 리디렉션
  + 파티셔닝된 하이브리드 테이블
  + 스키마 전용 Oracle 계정
+ AWS DMS 는 `BIN$` 또는 유형의 테이블 또는 뷰 마이그레이션을 지원하지 않습니다`DR$`.
+ Oracle 18.x부터 AWS DMS 는 Oracle Express Edition(Oracle Database XE)의 변경 데이터 캡처(CDC)를 지원하지 않습니다.
+ CHAR 열에서 데이터를 마이그레이션할 때 DMS는 모든 후행 공백을 잘라냅니다.
+ AWS DMS 는 애플리케이션 컨테이너에서의 복제를 지원하지 않습니다.
+ AWS DMS 는 Oracle Flashback 데이터베이스 및 복원 지점 수행을 지원하지 않습니다. 이러한 작업은 Oracle Redo Log 파일의 일관성에 영향을 미치기 때문입니다.
+  AWS DMS 버전 3.5.3 이전에는 다음과 같은 경우 병렬 실행 옵션이 있는 직접 로드 `INSERT` 절차가 지원되지 않습니다.
  + 열이 255개를 넘는 압축되지 않은 테이블
  + 행 크기가 8K를 초과
  + Exadata HCC 테이블
  + Big Endian 플랫폼에서 실행되는 데이터베이스
+ 프라이머리 키도 고유 키도 없는 소스 테이블에는 ALL COLUMN 보충 로깅을 활성화해야 합니다. 이로 인해 더 많은 다시 실행 로그 활동이 생성되고 DMS CDC 대기 시간이 늘어날 수 있습니다.
+ AWS DMS 는 소스 데이터베이스의 보이지 않는 열에서 데이터를 마이그레이션하지 않습니다. 이러한 열을 마이그레이션 범위에 포함하려면 `ALTER TABLE` 문을 사용하여 이러한 열을 표시하세요.
+ 모든 Oracle 버전에서는 `XMLTYPE` 및 LOB 열에 대한 `UPDATE` 작업 결과를 복제하지 AWS DMS 않습니다.
+ AWS DMS 는 시간 유효성 제약 조건이 있는 테이블에서의 복제를 지원하지 않습니다.
+ 전체 로드 작업 중에 Oracle 소스를 사용할 수 없게 되면 데이터 마이그레이션이 불완전하게 유지되더라도 여러 번의 재연결 시도 후 작업을 완료된 것으로 표시할 수 AWS DMS 있습니다. 이 시나리오에서 대상 테이블에는 연결 손실 전에 마이그레이션된 레코드만 포함되어 소스와 대상 시스템 간에 데이터 불일치가 발생할 수 있습니다. 데이터 완전성을 보장하려면 전체 로드 작업을 완전히 다시 시작하거나 연결 중단의 영향을 받는 특정 테이블을 다시 로드해야 합니다.

## Oracle 엔드포인트용 SSL 지원
<a name="CHAP_Security.SSL.Oracle"></a>

AWS DMS Oracle 엔드포인트는 `none` 및 SSL 모드에 대해 `verify-ca` SSL V3를 지원합니다. Oracle 엔드포인트에서 SSL을 사용하려면, .pem 인증서 파일이 아닌 엔드포인트용 Oracle Wallet을 업로드합니다.

**Topics**
+ [Oracle SSL용 기존 인증서 사용](#CHAP_Security.SSL.Oracle.Existing)
+ [Oracle SSL용 자체 서명 인증서 사용](#CHAP_Security.SSL.Oracle.SelfSigned)

### Oracle SSL용 기존 인증서 사용
<a name="CHAP_Security.SSL.Oracle.Existing"></a>

기존 Oracle 클라이언트 설치를 사용하여 CA 인증서 파일에서 Oracle wallet 파일을 생성하려면, 다음 단계를 진행합니다.

**에서 Oracle SSL에 기존 Oracle 클라이언트 설치를 사용하려면 AWS DMS**

1. 다음 명령을 실행하여 `ORACLE_HOME` 시스템 변수를 `dbhome_1` 디렉터리 위치로 설정합니다.

   ```
   prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1                        
   ```

1. `LD_LIBRARY_PATH` 시스템 변수에 `$ORACLE_HOME/lib`을 추가합니다.

   ```
   prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib                        
   ```

1. `$ORACLE_HOME/ssl_wallet`에 Oracle Wallet을 위한 디렉터리를 만듭니다.

   ```
   prompt>mkdir $ORACLE_HOME/ssl_wallet
   ```

1. CA 인증서 `.pem` 파일을 `ssl_wallet` 디렉터리에 배치합니다. Amazon RDS를 사용하는 경우, Amazon RDS에서 호스팅되는 `rds-ca-2015-root.pem` 루트 CA 인증서 파일을 다운로드할 수 있습니다. 이 파일 다운로드에 자세한 내용은 *Amazon RDS 사용 설명서*에서 [SSL/TLS를 사용하여 DB 인스턴스에 대한 연결 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)를 참조하세요.

1. CA 인증서에 둘 이상의 PEM 파일(예: Amazon RDS 글로벌 또는 리전 번들)이 포함된 경우 다음 bash 스크립트를 사용하여 별도의 파일로 분할하고 Oracle Wallet에 추가해야 합니다. 이 스크립트에는 CA 인증서 경로와 이전에 생성한 Oracle Wallet의 폴더 경로라는 두 가지 파라미터 입력이 필요합니다.

   ```
   #!/usr/bin/env bash
   
   certnum=$(grep -c BEGIN <(cat $1))
   
   cnt=0
   temp_cert=""
   while read line
   do
   if [ -n "$temp_cert" -a "$line" == "-----BEGIN CERTIFICATE-----" ]
   then
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   temp_cert=""
   fi
   temp_cert+="$line"$'\n'
   done < <(cat $1)
   
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   echo ""
   ```

이전 단계를 완료했으면, certificate-wallet 매개변수를 지정하여 `ImportCertificate` API 직접 호출을 사용하여 wallet 파일을 가져올 수 있습니다. 그런 다음 Oracle 엔드포인트를 생성하거나 수정할 때 SSL 모드로서 `verify-ca`를 선택하면 가져온 wallet 인증서를 사용할 수 있습니다.

**참고**  
 Oracle Wallet은 바이너리 파일입니다. AWS DMS는 이러한 파일을 있는 그대로 허용합니다.

### Oracle SSL용 자체 서명 인증서 사용
<a name="CHAP_Security.SSL.Oracle.SelfSigned"></a>

Oracle SSL용 자체 서명 인증서를 사용하려면 Oracle wallet 암호가 `oracle123`이라고 가정하고 다음 단계를 수행하세요.

**에서 Oracle SSL에 자체 서명된 인증서를 사용하려면 AWS DMS**

1. 자체 서명 인증서를 사용할 디렉터리를 생성합니다.

   ```
   mkdir -p /u01/app/oracle/self_signed_cert
   ```

1. 이전 단계에서 생성한 디렉터리로 변경합니다.

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1. 루트 키를 생성합니다.

   ```
   openssl genrsa -out self-rootCA.key 2048
   ```

1. 이전 단계에서 생성한 루트 키를 루트 인증서를 자체 서명합니다.

   ```
   openssl req -x509 -new -nodes -key self-rootCA.key 
           -sha256 -days 3650 -out self-rootCA.pem
   ```

   다음과 같은 입력 파라미터를 사용하세요.
   + `Country Name (2 letter code) [XX]`, 예: `AU`
   + `State or Province Name (full name) []`, 예: `NSW`
   + `Locality Name (e.g., city) [Default City]`, 예: `Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`, 예: `AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`, 예: `DBeng`
   + `Common Name (e.g., your name or your server's hostname) []`, 예: `aws`
   + `Email Address []`, 예: abcd.efgh@amazonwebservice.com

1. Oracle 데이터베이스용 Oracle wallet 디렉터리를 만듭니다.

   ```
   mkdir -p /u01/app/oracle/wallet
   ```

1. 새 Oracle wallet을 만듭니다.

   ```
   orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd oracle123 -auto_login_local
   ```

1. 루트 인증서를 Oracle wallet에 추가합니다.

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -trusted_cert 
   -cert /u01/app/oracle/self_signed_cert/self-rootCA.pem
   ```

1. Oracle wallet의 콘텐츠를 나열합니다. 이 목록에는 루트 인증서가 포함되어야 합니다.

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

   예를 들어 다음과 비슷하게 표시될 수 있습니다.

   ```
   Requested Certificates:
   User Certificates:
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O= AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. ORAPKI 유틸리티를 사용한 인증서 서명 요청(CSR)을 생성합니다.

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 
   -dn "CN=aws" -keysize 2048 -sign_alg sha256
   ```

1. 다음 명령을 실행합니다.

   ```
   openssl pkcs12 -in /u01/app/oracle/wallet/ewallet.p12 -nodes -out /u01/app/oracle/wallet/nonoracle_wallet.pem
   ```

   이 명령의 출력은 다음과 같습니다.

   ```
   Enter Import Password:
   MAC verified OK
   Warning unsupported bag type: secretBag
   ```

1. 'dms'를 일반 이름으로 둡니다.

   ```
   openssl req -new -key /u01/app/oracle/wallet/nonoracle_wallet.pem -out certdms.csr
   ```

   다음과 같은 입력 파라미터를 사용하세요.
   + `Country Name (2 letter code) [XX]`, 예: `AU`
   + `State or Province Name (full name) []`, 예: `NSW`
   + `Locality Name (e.g., city) [Default City]`, 예: `Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`, 예: `AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`, 예: `aws`
   + `Common Name (e.g., your name or your server's hostname) []`, 예: `aws`
   + `Email Address []`, 예: abcd.efgh@amazonwebservice.com

   이 단계는 4단계와 달라야 합니다. 예를 들어 다음과 같이 조직 단위 이름을 다른 이름으로 변경하면 됩니다.

   인증서 요청과 함께 전송될 다음 추가 속성을 입력합니다.
   + `A challenge password []`, 예: `oracle123`
   + `An optional company name []`, 예: `aws`

1. 인증서 서명을 가져옵니다.

   ```
   openssl req -noout -text -in certdms.csr | grep -i signature
   ```

   이 게시물의 서명 키는 `sha256WithRSAEncryption`입니다.

1. 다음 명령을 실행하여 인증서(`.crt`) 파일을 생성합니다.

   ```
   openssl x509 -req -in certdms.csr -CA self-rootCA.pem -CAkey self-rootCA.key 
   -CAcreateserial -out certdms.crt -days 365 -sha256
   ```

   그러면 다음과 같은 출력이 표시됩니다.

   ```
   Signature ok
   subject=/C=AU/ST=NSW/L=Sydney/O=awsweb/OU=DBeng/CN=aws
   Getting CA Private Key
   ```

1. 인증서를 wallet에 추가합니다.

   ```
   orapki wallet add -wallet /u01/app/oracle/wallet -pwd oracle123 -user_cert -cert certdms.crt
   ```

1. wallet을 봅니다. 두 항목이 있어야 합니다. 다음 코드를 확인합니다.

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

1. `sqlnet.ora` 파일(`$ORACLE_HOME/network/admin/sqlnet.ora`)을 구성합니다.

   ```
   WALLET_LOCATION =
      (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
          (DIRECTORY = /u01/app/oracle/wallet/)
        )
      ) 
   
   SQLNET.AUTHENTICATION_SERVICES = (NONE)
   SSL_VERSION = 1.0
   SSL_CLIENT_AUTHENTICATION = FALSE
   SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
   ```

1. Oracle 리스너를 중지합니다.

   ```
   lsnrctl stop
   ```

1. `listener.ora` 파일(`$ORACLE_HOME/network/admin/listener.ora`)에 SSL에 대한 항목을 추가합니다.

   ```
   SSL_CLIENT_AUTHENTICATION = FALSE
   WALLET_LOCATION =
     (SOURCE =
       (METHOD = FILE)
       (METHOD_DATA =
         (DIRECTORY = /u01/app/oracle/wallet/)
       )
     )
   
   SID_LIST_LISTENER =
    (SID_LIST =
     (SID_DESC =
      (GLOBAL_DBNAME = SID)
      (ORACLE_HOME = ORACLE_HOME)
      (SID_NAME = SID)
     )
    )
   
   LISTENER =
     (DESCRIPTION_LIST =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
         (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
       )
     )
   ```

1. `tnsnames.ora` 파일(`$ORACLE_HOME/network/admin/tnsnames.ora`)을 구성합니다.

   ```
   <SID>=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   
   <SID>_ssl=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   ```

1. Oracle 리스너를 다시 시작합니다.

   ```
   lsnrctl start
   ```

1. Oracle 리스너 상태를 표시합니다.

   ```
   lsnrctl status
   ```

1. sqlplus 및 SSL tnsnames 항목을 사용하여 로컬 호스트에서 데이터베이스와의 SSL 연결을 테스트합니다.

   ```
   sqlplus -L ORACLE_USER@SID_ssl
   ```

1. SSL을 사용하여 잘 연결되었는지 확인합니다.

   ```
   SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL;
   
   SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
   --------------------------------------------------------------------------------
   tcps
   ```

1. 자체 서명 인증서를 사용하여 디렉터리를 이 디렉터리로 변경합니다.

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1. 에서 사용할 새 클라이언트 Oracle Wallet AWS DMS 을 생성합니다.

   ```
   orapki wallet create -wallet ./ -auto_login_only
   ```

1. Oracle wallet에 자체 서명 루트 인증서를 추가합니다.

   ```
   orapki wallet add -wallet ./ -trusted_cert -cert self-rootCA.pem -auto_login_only
   ```

1. 에서 사용할 Oracle Wallet의 내용을 나열 AWS DMS 합니다. 이 목록에는 자체 서명 루트 인증서가 포함되어야 합니다.

   ```
   orapki wallet display -wallet ./
   ```

   이 명령의 출력은 다음과 같습니다.

   ```
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O=AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. 방금 생성한 Oracle Wallet을 업로드합니다 AWS DMS.

## Oracle을의 소스로 사용하기 위해 지원되는 암호화 방법 AWS DMS
<a name="CHAP_Source.Oracle.Encryption"></a>

다음 표에서는가 Oracle 소스 데이터베이스로 작업할 때 AWS DMS 지원하는 투명한 데이터 암호화(TDE) 방법을 확인할 수 있습니다.


| 다시 실행 로그 액세스 방법 | TDE 테이블스페이스 | TDE 열 | 
| --- | --- | --- | 
| Oracle LogMiner | 예 | 예 | 
| Binary Reader | 예 | 예 | 

AWS DMS 는 열 수준과 테이블스페이스 수준 모두에서 Binary Reader를 사용할 때 Oracle TDE를 지원합니다. 에서 TDE 암호화를 사용하려면 AWS DMS먼저 TDE 암호화 키와 TDE 암호가 저장되는 Oracle Wallet 위치를 식별합니다. 그런 다음 Oracle 소스 엔드포인트의 올바른 TDE 암호화 키와 암호를 식별합니다.

**TDE 암호화를 위한 암호화 키와 암호를 식별하고 지정하려면**

1. 다음 쿼리를 실행하여 Oracle 데이터베이스 호스트에서 Oracle 암호화 wallet을 찾습니다.

   ```
   SQL> SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET;
   
   WRL_PARAMETER
   --------------------------------------------------------------------------------
   /u01/oracle/product/12.2.0/dbhome_1/data/wallet/
   ```

   여기서는 `/u01/oracle/product/12.2.0/dbhome_1/data/wallet/`이 wallet 위치입니다.

1. 다음과 같이 비CDB 또는 CDB 소스의 마스터 키 ID를 가져옵니다.

   1. 비 CDB 소스의 경우 다음 쿼리를 실행하여 마스터 암호화 키 ID를 검색합니다.

      ```
      SQL>  select rownum, key_id, activation_time from v$encryption_keys;
      
      ROWNUM KEY_ID                                                 ACTIVATION_TIME
      ------ ------------------------------------------------------ ---------------
           1 AeKask0XZU+NvysflCYBEVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   04-SEP-24 10.20.56.605200 PM +00:00
           2 AV7WU9uhoU8rv8daE/HNnSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   10-AUG-21 07.52.03.966362 PM +00:00
           3 AckpoJ/f+k8xvzJ+gSuoVH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA   14-SEP-20 09.26.29.048870 PM +00:00
      ```

      활성화 시간은 과거 어느 시점에서 CDC를 시작하려는 경우에 유용합니다. 예를 들어 위의 결과를 사용하면 ROWNUM 10-08-21일 오후 7.52.03부터 2014-09-20 오후 09.26.29까지 CDC를 시작할 수 있습니다. 작업이 09.26.29년 14-09-20 오후 또는 그 이후에 생성된 재실행에 도달하면 실패하므로 소스 엔드포인트를 수정하고 ROWNUM 3에 마스터 키 ID를 입력한 다음 작업을 재개해야 합니다.

   1. CDB 소스 DMS의 경우 CDB\$1ROOT 마스터 암호화 키가 필요합니다. CDB\$1ROOT에 연결하고 다음 쿼리를 실행합니다.

      ```
      SQL> select rownum, key_id, activation_time from v$encryption_keys where con_id = 1;
      
      ROWNUM KEY_ID                                               ACTIVATION_TIME
      ------ ---------------------------------------------------- -----------------------------------
           1 Aa2E/Vwb5U+zv5hCncS5ErMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 29-AUG-24 12.51.19.699060 AM +00:00
      ```

1. 명령줄을 사용하여 소스 Oracle 데이터베이스 호스트에서 암호화 wallet 항목을 나열합니다.

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -list
   Oracle Secret Store entries:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY
   ORACLE.SECURITY.ID.ENCRYPTION.
   ORACLE.SECURITY.KB.ENCRYPTION.
   ORACLE.SECURITY.KM.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

   2단계에서 찾은 마스터 키 ID(`AWGDC9glSk8Xv+3bVveiVSg`)가 포함된 항목을 찾습니다. 이 항목이 TDE 암호화 키 이름입니다.

1. 이전 단계에서 찾은 항목의 세부 정보를 확인합니다.

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   Oracle Secret Store Tool : Version 12.2.0.1.0
   Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
   Enter wallet password:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   결과를 보려면 wallet 암호를 입력합니다.

   여기서는 `'='`의 오른쪽에 있는 값이 TDE 암호입니다.

1. `securityDbEncryptionName` 추가 연결 속성을 설정하여 Oracle 소스 엔드포인트의 TDE 암호화 키 이름을 지정합니다.

   ```
   securityDbEncryptionName=ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

1. 콘솔에서 이 키에 연결된 TDE 암호를 Oracle 소스 **암호** 값의 일부로 제공합니다. TDE 암호 값으로 끝나는 쉼표로 구분된 암호 값의 형식을 지정하려면 다음 순서를 사용합니다.

   ```
   Oracle_db_password,ASM_Password,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   Oracle 데이터베이스 구성에 관계없이 이 순서로 암호 값을 지정합니다. 예를 들어 TDE를 사용하고 있지만 Oracle 데이터베이스가 ASM을 사용하지 않는 경우, 암호 값을 다음과 같은 쉼표로 구분된 순서로 지정합니다.

   ```
   Oracle_db_password,,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

지정한 TDE 자격 증명이 올바르지 않으면 AWS DMS 마이그레이션 작업이 실패하지 않습니다. 하지만 이 작업은 진행 중인 대상 데이터베이스에 대한 복제 변경 사항을 읽거나 적용하지도 않습니다. 작업을 시작한 후에 콘솔 마이그레이션 작업 페이지에서 **테이블 통계**를 모니터링하여 변경 사항이 복제되었는지 확인하세요.

작업이 실행되는 동안 DBA가 Oracle 데이터베이스의 TDE 자격 증명 정보 값을 변경하면 작업이 실패합니다. 오류 메시지에는 새 TDE 암호화 키 이름이 포함됩니다. 새 값을 지정하고 작업을 다시 시작하려면 이전 절차를 사용하세요.

**중요**  
`cp`, `mv`, `orapki`, `mkstore` 같은 OS 수준 명령으로 인해 ASM 위치에 저장된 wallet 파일이 손상되므로 Oracle ASM(Automatic Storage Management) 위치에 생성된 TDE wallet을 조작할 수 없습니다. 이 제한은 ASM 위치에 저장된 TDE wallet 파일에만 적용되며, 로컬 OS 디렉터리에 저장된 TDE wallet 파일에는 적용되지 않습니다.  
OS 수준 명령으로 ASM에 저장된 TDE wallet을 조작하려면 다음과 같이 로컬 키스토어를 생성하고 ASM 키스토어를 로컬 키스토어에 병합하세요.  
로컬 키스토어를 생성합니다.  

   ```
   ADMINISTER KEY MANAGEMENT create keystore file system wallet location identified by wallet password;
   ```
ASM 키스토어를 로컬 키스토어에 병합합니다.  

   ```
   ADMINISTER KEY MANAGEMENT merge keystore ASM wallet location identified by wallet password into existing keystore file system wallet location identified by wallet password with backup;
   ```
그런 다음 암호화 wallet 항목과 TDE 암호를 나열하려면 로컬 키스토어에 대해 3단계와 4단계를 실행합니다.

## Oracle을의 소스로 사용하는 데 지원되는 압축 방법 AWS DMS
<a name="CHAP_Source.Oracle.Compression"></a>

다음 표에서는 Oracle 소스 데이터베이스로 작업할 때에서 AWS DMS 지원하는 압축 방법을 확인할 수 있습니다. 표에서 볼 수 있듯이 압축 지원은 Oracle 데이터베이스 버전과 DMS가 Oracle LogMiner를 사용하여 다시 실행 로그에 액세스하도록 구성되어 있는지 여부에 따라 달라집니다.


| 버전 | 기본 | OLTP |  HCC(Oracle 11g R2 이상부터)  | 기타 | 
| --- | --- | --- | --- | --- | 
| Oracle 10 | 아니요 | 해당 사항 없음 | 해당 사항 없음 | 아니요 | 
| Oracle 11 이상 – Oracle LogMiner | 예 | 예 | 예  | 예 - Oracle LogMiner가 지원하는 모든 압축 방법. | 
| Oracle 11 이상 – Binary Reader | 예 | 예 | 예 - 자세한 내용은 다음 참고 사항을 참조하세요. | 예 | 

**참고**  
Oracle 소스 엔드포인트가 Binary Reader를 사용하도록 구성된 경우 HCC 압축 방법의 Query Low 수준은 전체 로드 작업에 대해서만 지원됩니다.

## Oracle을의 소스로 사용하여 중첩 테이블 복제 AWS DMS
<a name="CHAP_Source.Oracle.NestedTables"></a>

AWS DMS 는 중첩 테이블 또는 정의된 유형인 열이 포함된 Oracle 테이블의 복제를 지원합니다. 이 기능을 활성화하려면 Oracle 소스 엔드포인트에 다음 추가 연결 속성 설정을 추가합니다.

```
allowSelectNestedTables=true;
```

AWS DMS 는 Oracle 중첩 테이블의 대상 테이블을 고유한 제약 조건 없이 대상의 일반 상위 및 하위 테이블로 생성합니다. 대상에서 올바른 데이터에 액세스하려면 상위 및 하위 테이블을 조인합니다. 이렇게 하려면 먼저 대상 하위 테이블의 `NESTED_TABLE_ID` 열에 고유하지 않은 인덱스를 수동으로 만듭니다. 그런 다음 조인 `ON` 절의 `NESTED_TABLE_ID` 열을 자식 테이블 이름에 해당하는 상위 열과 함께 사용할 수 있습니다. 또한 이러한 인덱스를 생성하면 대상 하위 테이블 데이터가 업데이트되거나 삭제될 때 성능이 향상됩니다 AWS DMS. 예제는 [대상의 상위 및 하위 테이블에 대한 조인 예](#CHAP_Source.Oracle.NestedTables.JoinExample) 섹션을 참조하세요.

전체 로드가 완료되면 작업을 중지하도록 구성하는 것이 좋습니다. 그런 다음 대상의 복제된 모든 하위 테이블에 대해 고유하지 않은 인덱스를 만들고 작업을 재개합니다.

캡처된 중첩 테이블이 기존 상위 테이블(캡처됨 또는 캡처되지 않음)에 추가되면가 이를 올바르게 AWS DMS 처리합니다. 그러나 해당 대상 테이블에 대한 고유하지 않은 인덱스는 생성되지 않습니다. 이 경우 대상 하위 테이블이 매우 커지면 성능이 영향을 받을 수 있습니다. 이런 경우에는 작업을 중지하고 인덱스를 만든 다음 작업을 재개하는 것이 좋습니다.

중첩 테이블이 대상에 복제된 후 DBA가 상위 및 해당 하위 테이블에 대한 조인을 실행하여 데이터를 병합하도록 합니다.

### Oracle 중첩 테이블을 소스로 복제하기 위한 사전 요구 사항
<a name="CHAP_Source.Oracle.NestedTables.Prerequisites"></a>

복제된 모든 중첩 테이블의 상위 테이블을 복제해야 합니다. 테이블 매핑에 상위 테이블(중첩된 테이블 열을 포함하는 테이블)과 하위 AWS DMS 테이블(즉, 중첩된 테이블)을 모두 포함합니다.

### 소스로 지원되는 Oracle 중첩 테이블 유형
<a name="CHAP_Source.Oracle.NestedTables.Types"></a>

AWS DMS 는 다음과 같은 Oracle 중첩 테이블 유형을 소스로 지원합니다.
+ 데이터 유형
+ 사용자 정의 객체

### 소스로서 Oracle 중첩 테이블에 대한 AWS DMS 지원 제한 사항
<a name="CHAP_Source.Oracle.NestedTables.Limitations"></a>

AWS DMS 에는 Oracle 중첩 테이블을 소스로 지원하는 데 다음과 같은 제한 사항이 있습니다.
+ AWS DMS 는 한 수준의 테이블 중첩만 지원합니다.
+ AWS DMS 테이블 매핑은 복제를 위해 상위 테이블과 하위 테이블이 모두 선택되었는지 확인하지 않습니다. 즉, 하위 테이블이 없는 상위 테이블 또는 상위 테이블이 없는 하위 테이블을 선택할 수 있습니다.

### 가 Oracle 중첩 테이블을 소스로 AWS DMS 복제하는 방법
<a name="CHAP_Source.Oracle.NestedTables.HowReplicated"></a>

AWS DMS 는 다음과 같이 상위 및 중첩 테이블을 대상에 복제합니다.
+ AWS DMS 는 원본과 동일한 상위 테이블을 생성합니다. 그런 다음 상위 테이블의 중첩 열을 `RAW(16)`로 정의하고 상위 테이블의 중첩 테이블에 대한 참조를 해당 `NESTED_TABLE_ID` 열에 포함합니다.
+ AWS DMS 는 중첩 소스와 동일하지만 라는 추가 열을 사용하여 하위 테이블을 생성합니다`NESTED_TABLE_ID`. 이 열은 해당 상위 중첩 열과 동일한 유형 및 값을 가지며 동일한 의미를 갖습니다.

### 대상의 상위 및 하위 테이블에 대한 조인 예
<a name="CHAP_Source.Oracle.NestedTables.JoinExample"></a>

상위 테이블을 병합하려면 다음 예제와 같이 상위 테이블과 하위 테이블 간에 조인을 실행합니다.

1. `Type` 테이블을 만듭니다.

   ```
   CREATE OR REPLACE TYPE NESTED_TEST_T AS TABLE OF VARCHAR(50);
   ```

1. 앞서 정의한 유형 `NESTED_TEST_T`의 열을 사용하여 상위 테이블을 만듭니다.

   ```
   CREATE TABLE NESTED_PARENT_TEST (ID NUMBER(10,0) PRIMARY KEY, NAME NESTED_TEST_T) NESTED TABLE NAME STORE AS NAME_KEY;
   ```

1. `CHILD.NESTED_TABLE_ID`가 `PARENT.NAME`과 일치하는 `NAME_KEY` 하위 테이블과의 조인을 사용하여 테이블 `NESTED_PARENT_TEST`를 병합합니다.

   ```
   SELECT … FROM NESTED_PARENT_TEST PARENT, NAME_KEY CHILD WHERE CHILD.NESTED_
   TABLE_ID = PARENT.NAME;
   ```

## Oracle을의 소스로 사용할 때 Oracle ASM에 REDO 저장 AWS DMS
<a name="CHAP_Source.Oracle.REDOonASM"></a>

REDO가 많이 생성되는 Oracle 소스의 경우, Oracle ASM에 REDO를 저장하면 특히 RAC 구성에서 성능이 향상될 수 있습니다. ASM REDO 읽기를 모든 ASM 노드에 분산하도록 DMS를 구성할 수 있기 때문입니다.

이 구성을 활용하려면 `asmServer` 연결 속성을 사용하세요. 예를 들어 다음 연결 문자열은 DMS REDO 읽기를 ASM 노드 3개에 분산합니다.

```
asmServer=(DESCRIPTION=(CONNECT_TIMEOUT=8)(ENABLE=BROKEN)(LOAD_BALANCE=ON)(FAILOVER=ON)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node1_ip_address)(PORT=asm_node1_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node2_ip_address)(PORT=asm_node2_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node3_ip_address)(PORT=asm_node3_port_number)))
(CONNECT_DATA=(SERVICE_NAME=+ASM)))
```

NFS를 사용하여 Oracle REDO를 저장하는 경우, 해당 DNFS(Direct NFS) 클라이언트 패치, 특히 Oracle 버그 25224242를 해결하는 모든 패치를 적용해야 합니다. 자세한 내용은 Direct NFS 클라이언트 관련 패치에 관한 다음 Oracle 간행물, [Recommended Patches for Direct NFS Client](https://support.oracle.com/knowledge/Oracle Cloud/1495104_1.html)를 참조하세요.

또한 NFS 읽기 성능을 향상시키려면 다음 예와 같이 NFS 볼륨의 `fstab`에서 `rsize` 및 `wsize`의 값을 늘리는 것이 좋습니다.

```
NAS_name_here:/ora_DATA1_archive /u09/oradata/DATA1 nfs rw,bg,hard,nointr,tcp,nfsvers=3,_netdev,
timeo=600,rsize=262144,wsize=262144
```

또한 다음과 같이 `tcp-max-xfer-size` 값을 조정합니다.

```
vserver nfs modify -vserver vserver -tcp-max-xfer-size 262144
```

## Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS
<a name="CHAP_Source.Oracle.ConnectionAttrib"></a>

추가 연결 속성을 사용하는 것과 비슷하게 엔드포인트 설정을 사용하여 Oracle 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나의 `create-endpoint` 명령을 `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON 구문과 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)함께 사용하여 소스 엔드포인트를 생성할 때 설정을 지정합니다.

Oracle을 소스로 하여 사용할 수 있는 엔드포인트 설정이 다음 테이블에 나와 있습니다.


| 이름 | 설명 | 
| --- | --- | 
| AccessAlternateDirectly |  Amazon RDS for Oracle을 소스로 하여 변경 데이터 캡처에 Binary Reader를 사용하기 위해서는 이 속성을 false로 설정합니다. 그러면 DMS 인스턴스가 직접 파일 액세스를 사용하여 지정된 경로 접두사 교체를 통해 다시 실행 로그에 액세스하지 않습니다. 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오. 기본값: true  유효값: true/false 예시: `--oracle-settings '{"AccessAlternateDirectly": false}'`  | 
|  `AdditionalArchivedLogDestId`  |  프라이머리-스탠바이 설정에서 `ArchivedLogDestId`로 이 속성을 설정합니다. 이 설정은 Oracle Data Guard 데이터베이스가 소스로 사용될 때 전환에 유용합니다. 이 경우 AWS DMS 는 변경 사항을 읽기 위해 아카이브 다시 실행 로그를 가져올 대상을 알아야 합니다. 이것은 전환 후에 이전 프라이머리가 이제는 대기 인스턴스이기 때문입니다. 는 Oracle `RESETLOGS` 옵션을 사용하여 데이터베이스를 열 수 있도록 AWS DMS 지원하지만 필요한 `RESETLOGS` 경우가 아니면를 사용하지 마십시오. `RESETLOGS`에 대한 자세한 내용을 알아보려면 *Oracle® Database Backup and Recovery User's Guide*의 [RMAN Data Repair Concepts](https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/rman-data-repair-concepts.html#GUID-1805CCF7-4AF2-482D-B65A-998192F89C2B)를 참조하세요. 유효한 값: 아카이브 대상 ID 예시: `--oracle-settings '{"AdditionalArchivedLogDestId": 2}'`  | 
|  `AddSupplementalLogging`  |  이 속성을 설정하면 Oracle 데이터베이스의 테이블 수준 보충 로깅을 설정할 수 있습니다. 이 속성은 테이블 메타데이터에 따라 마이그레이션 작업을 위해 선택한 모든 테이블에서 다음 중 하나를 활성화합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.Oracle.html) 기본값: false  유효값: true/false  예시: `--oracle-settings '{"AddSupplementalLogging": false}'`  이 옵션을 사용할 경우, 앞에서 설명한 대로 데이터베이스 수준 보충 로깅을 계속 활성화해야 합니다.   | 
|  `AllowSelectNestedTables`  |  이 속성을 true로 설정하면 중첩 테이블 또는 정의된 유형인 열을 포함하는 Oracle 테이블의 복제를 활성화합니다. 자세한 내용은 [Oracle을의 소스로 사용하여 중첩 테이블 복제 AWS DMS](#CHAP_Source.Oracle.NestedTables) 단원을 참조하십시오. 기본값: false  유효값: true/false 예시: `--oracle-settings '{"AllowSelectNestedTables": true}'`  | 
|  `ArchivedLogDestId`  |  보관된 다시 실행 로그의 대상 ID를 지정합니다. 이 값은 v\$1archived\$1log 보기의 dest\$1id 열의 숫자와 같아야 합니다. 추가 다시 실행 로그 대상으로 작업하는 경우, `AdditionalArchivedLogDestId` 속성을 사용하여 추가 대상 ID를 지정하는 것이 좋습니다. 그러면 시작 단계부터 올바른 로그에 액세스하도록 보장하여 성능이 개선됩니다. 기본값: 1 유효한 값: 숫자  예시: `--oracle-settings '{"ArchivedLogDestId": 1}'`  | 
|  `ArchivedLogsOnly`  |  이 필드를 Y로 설정하면는 보관된 다시 실행 로그 AWS DMS 에만 액세스합니다. 보관된 다시 실행 로그가 Oracle ASM에만 저장되는 경우 AWS DMS 사용자 계정에 ASM 권한을 부여해야 합니다. 기본값: N  유효한 값: Y/N  예시: `--oracle-settings '{"ArchivedLogsOnly": Y}'`  | 
|  `asmUsePLSQLArray`(ECA만 해당)  |  BinaryReader로 소스 변경 내용을 캡처할 때는 이 추가 연결 속성(ECA)을 사용하세요. 이 설정을 통해 DMS는 `parallelASMReadThreads` 속성을 사용하여 스레드 수를 제어하면서 단일 읽기 스레드당 ASM 수준에서 50개의 읽기를 버퍼링할 수 있습니다. 이 속성을 설정하면이 AWS DMS 진 리더는 익명 PL/SQL 블록을 사용하여 다시 실행 데이터를 캡처하고 복제 인스턴스로 큰 버퍼로 다시 보냅니다. 이렇게 하면 소스로의 왕복 횟수가 줄어듭니다. 이렇게 하면 소스 캡처 성능이 크게 향상될 수 있지만 ASM 인스턴스의 PGA 메모리 사용량이 증가합니다. 메모리 대상이 충분하지 않을 경우, 안정성 문제가 발생할 수 있습니다. 다음 수식을 사용하여 단일 DMS 작업의 총 ASM 인스턴스 PGA 메모리 사용량을 추정할 수 있습니다. `number_of_redo_threads * parallelASMReadThreads * 7 MB`  기본값: false 유효값: true/false ECA 예제: `asmUsePLSQLArray=true;`  | 
|  `ConvertTimestampWithZoneToUTC`  |  'TIMESTAMP WITH TIME ZONE' 및 'TIMESTAMP WITH LOCAL TIME ZONE' 열의 타임스탬프 값을 UTC로 변환하려면 이 속성을 `true`로 설정합니다. 기본적으로 이 속성의 값은 'false'이며, 데이터는 소스 데이터베이스 시간대를 사용하여 복제됩니다. 기본값: false 유효값: true/false 예시: `--oracle-settings '{"ConvertTimestampWithZoneToUTC": true}'`  | 
|  `EnableHomogenousPartitionOps`  |  Oracle *동종* 마이그레이션을 위한 Oracle 파티션 및 하위 파티션 DDL 작업의 복제를 활성화하려면 이 속성을 `true`로 설정합니다. 이 기능과 개선 사항은 AWS DMS 버전 3.4.7에 도입되었습니다. 기본값: false 유효값: true/false 예시: `--oracle-settings '{"EnableHomogenousPartitionOps": true}'`  | 
|  `EnableHomogenousTablespace`  |  동종 테이블스페이스 복제를 활성화하고 대상의 동일한 테이블스페이스 아래에 기존 테이블이나 인덱스를 생성하려면 이 속성을 설정합니다. 기본값: false 유효값: true/false 예시: `--oracle-settings '{"EnableHomogenousTablespace": true}'`  | 
|  `EscapeCharacter`  |  이 속성을 이스케이프 문자로 설정합니다. 이 이스케이프 문자를 사용하면 단일 와일드카드 문자가 테이블 매핑 표현식에서 일반 문자처럼 동작하게 할 수 있습니다. 자세한 내용은 [테이블 매핑의 와일드카드](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Wildcards.md) 단원을 참조하십시오. 기본값: Null  유효한 값: 와일드카드 문자를 제외한 모든 문자 예시: `--oracle-settings '{"EscapeCharacter": "#"}'` `escapeCharacter`는 테이블 이름에만 사용할 수 있습니다. 스키마 이름이나 열 이름에서 문자를 이스케이프 처리하지 않습니다.  | 
|  `ExposeViews`  |  이 속성은 뷰에서 데이터를 한 번 끌어오는 데 사용하세요. 지속적 복제에는 사용할 수 없습니다. 보기에서 데이터를 추출하면 보기가 대상 스키마에서 테이블로 표시됩니다. 기본값: false 유효값: true/false 예시: `--oracle-settings '{"ExposeViews": true}'`  | 
|  `ExtraArchivedLogDestIds`  |  하나 이상의 아카이브된 다시 실행 로그에 대한 하나 이상의 대상 ID를 지정합니다. 이 ID는 v\$1archived\$1log 뷰에서 dest\$1id 열의 값입니다. 프라이머리 대 단일 설정 또는 프라이머리 대 다중 대기 설정에서 ArchivedLogDestId 추가 연결 속성과 함께 이 설정을 사용합니다. 이 설정은 Oracle Data Guard 데이터베이스를 소스로 사용할 때 전환에 유용합니다. 이 경우는 변경 사항을 읽기 위해 아카이브 다시 실행 로그를 가져올 대상에 대한 정보가 AWS DMS 필요합니다.는 이전 기본 인스턴스를 전환한 후 대기 인스턴스이기 때문에이 AWS DMS 정보가 필요합니다. 유효한 값: 아카이브 대상 ID 예시: `--oracle-settings '{"ExtraArchivedLogDestIds": 1}'`  | 
|  `FailTasksOnLobTruncation`  |  `true`로 설정할 경우 LOB 열의 실제 크기가 지정된 `LobMaxSize`보다 큰 경우 작업이 실패합니다. 작업이 제한된 LOB 모드로 설정되어 있고 이 옵션이 `true`로 설정된 경우, LOB 데이터가 잘리지 않는 대신에 작업이 실패합니다. 기본값: false  유효 값: 부울  예시: `--oracle-settings '{"FailTasksOnLobTruncation": true}'`  | 
|  `filterTransactionsOfUser`(ECA만 해당)  |  이 추가 연결 속성(ECA)을 사용하면 LogMiner를 사용하여 Oracle에서 데이터를 복제할 때 DMS가 지정된 사용자의 트랜잭션을 무시할 수 있습니다. 쉼표로 구분된 사용자 이름 값을 전달할 수 있지만 값은 모두 대문자여야 합니다. ECA 예제: `filterTransactionsOfUser=USERNAME;`  | 
|  `NumberDataTypeScale`  |  숫자 크기를 지정합니다. 스케일을 최대 38로 선택하거나 FLOAT의 경우 -1, VARCHAR의 경우 -2를 선택할 수 있습니다. 기본적으로 NUMBER 데이터 형식은 정밀도 38, 크기 10으로 변환됩니다. 기본값: 10  유효한 값: -2\$138(VARCHAR의 경우 -2, FLOAT의 경우 -1) 예시: `--oracle-settings '{"NumberDataTypeScale": 12}'`  정밀도-스케일 조합, -1(FLOAT) 또는 -2(VARCHAR)를 선택합니다. DMS는 Oracle에서 지원하는 모든 정밀도-스케일 조합을 지원합니다. 정밀도가 39 이상인 경우, -2(VARCHAR)를 선택합니다. Oracle 데이터베이스의 NumberDataTypeScale 설정은 NUMBER 데이터 형식에만 사용됩니다(명시적인 정밀도 및 스케일 정의 없이). 이 설정이 잘못 구성된 경우 정밀도 손실이 발생할 수 있다는 점에 유의해야 합니다.   | 
|  `OpenTransactionWindow`  |   CDC 전용 작업을 위해 진행 중인 트랜잭션이 있는지 확인할 수 있는 분 단위 기간을 제공합니다. `OpenTransactionWindow`를 1 이상으로 설정하면 DMS는 `SCN_TO_TIMESTAMP`를 사용하여 SCN 값을 타임스탬프 값으로 변환합니다. Oracle Database 제한으로 인해 CDC 시작점으로 너무 오래된 SCN을 지정하면 SCN\$1TO\$1TIMESTAMP가 `ORA-08181` 오류와 함께 실패하며 CDC 전용 태스크를 시작할 수 없습니다. 기본값: 0  유효한 값: 0\$1240 사이의 정수 예시: `openTransactionWindow=15;`  | 
| OraclePathPrefix | Amazon RDS for Oracle을 소스로 하여 변경 데이터 캡처에 Binary Reader를 사용하려면 이 문자열 속성을 필수 값으로 설정하세요. 이 값은 다시 실행 로그에 액세스하는 데 사용되는 기본 Oracle 루트를 지정합니다. 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오.기본값: none 유효한 값: /rdsdbdata/db/ORCL\$1A/ 예시: `--oracle-settings '{"OraclePathPrefix": "/rdsdbdata/db/ORCL_A/"}'`  | 
| ParallelASMReadThreads |  Oracle ASM(Automatic Storage Management)을 사용하여 변경 데이터 캡처(CDC)를 수행하기 위해 DMS가 구성하는 스레드 수를 변경하려면 이 속성을 설정합니다. 2(기본값) \$1 8(최대값) 사이의 정수 값을 지정할 수 있습니다. 이 속성을 `ReadAheadBlocks` 속성과 함께 사용합니다. 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오. 기본값: 2  유효한 값: 2\$18 사이의 정수 예시: `--oracle-settings '{"ParallelASMReadThreads": 6;}'`  | 
| ReadAheadBlocks |  Oracle ASM(Automatic Storage Management) 및 ASM이 아닌 NAS 스토리지를 사용하여 CDC를 수행하기 위해 DMS가 구성하는 미리 읽기 블록 수를 변경하려면 이 속성을 설정합니다. 1000(기본값)에서 2,000,000(최대값) 사이의 정수 값을 지정할 수 있습니다. 이 속성을 `ParallelASMReadThreads` 속성과 함께 사용합니다. 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오. 기본값: 1000  유효한 값: 1000\$12,000,000 사이의 정수 예시: `--oracle-settings '{"ReadAheadBlocks": 150000}'`  | 
|  `ReadTableSpaceName`  |  `true`로 설정할 경우, 이 속성에서 테이블스페이스 복제를 지원합니다. 기본값: false  유효 값: 부울  예시: `--oracle-settings '{"ReadTableSpaceName": true}'`  | 
| ReplacePathPrefix | Amazon RDS for Oracle을 소스로 하여 변경 데이터 캡처에 Binary Reader를 사용하기 위해서는 이 속성을 true로 설정합니다. 이렇게 설정하면 DMS 인스턴스가 다시 실행 로그에 액세스하기 위해 지정된 UsePathPrefix 설정을 기본 Oracle 루트로 대체합니다. 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오.기본값: false 유효값: true/false 예시: `--oracle-settings '{"ReplacePathPrefix": true}'`  | 
|  `RetryInterval`  |  시스템이 쿼리를 다시 전송하기까지 대기하는 시간(초)을 지정합니다. 기본값: 5  유효한 값: 1부터 시작하는 숫자  예시: `--oracle-settings '{"RetryInterval": 6}'`  | 
|  `SecurityDbEncryptionName`  |  Oracle 원본 데이터베이스의 열 및 테이블스페이스의 TDE(Transparent Data Encryption)에 사용되는 키의 이름을 지정합니다. Oracle 소스 엔드포인트에서 이 속성 및 연결된 암호를 설정하는 방법에 대한 자세한 내용은 [Oracle을의 소스로 사용하기 위해 지원되는 암호화 방법 AWS DMS](#CHAP_Source.Oracle.Encryption) 섹션을 참조하세요. 기본값: "" 유효값: 문자열  예시: `--oracle-settings '{"SecurityDbEncryptionName": "ORACLE.SECURITY.DB.ENCRYPTION.Adg8m2dhkU/0v/m5QUaaNJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}'`  | 
|  `SpatialSdo2GeoJsonFunctionName`  |  PostgreSQL 대상으로 마이그레이션하는 Oracle 버전 12.1 이전 소스의 경우 이 속성을 사용하여 SDO\$1GEOMETRY를 GEOJSON 형식으로 변환합니다. 기본적으로는 AWS DMS 사용자가 존재하고 액세스할 수 있어야 하는 `SDO2GEOJSON` 사용자 지정 함수를 AWS DMS 호출합니다. 또는 `SDOGEOJSON`의 작업을 모방하는 자체 사용자 정의 함수를 생성하여 `SpatialSdo2GeoJsonFunctionName`이 대신 호출하도록 설정할 수 있습니다. 기본값: SDO2GEOJSON 유효값: 문자열  예시: `--oracle-settings '{"SpatialSdo2GeoJsonFunctionName": "myCustomSDO2GEOJSONFunction"}'`  | 
|  `StandbyDelayTime`  |  사용 이 속성을 사용하여 스탠바이 동기화에 대한 시간(분)을 지정합니다. 소스가 Active Data Guard 대기 데이터베이스인 경우, 이 속성을 사용하여 프라이머리 데이터베이스와 대기 데이터베이스 간의 시간 지연을 지정합니다. 에서 진행 중인 변경 사항을 복제하기 위한 소스로 Active Data Guard 대기 인스턴스를 사용하는 Oracle CDC 작업을 생성할 AWS DMS수 있습니다. 이렇게 하면 프로덕션 단계에 있을 수 있는 활성 데이터베이스에 연결할 필요가 없습니다. 기본값: 0  유효한 값: 숫자  예시: `--oracle-settings '{"StandbyDelayTime": 1}'` **참고:** DMS 3.4.6, 3.4.7 및 그 이상을 사용하는 경우 이 연결 설정의 사용은 선택 사항입니다. DMS 3.4.6 최신 버전과 버전 3.4.7에서 `dms_user`이 `V_$DATAGUARD_STATS`에 `select` 권한이 있어야 DMS가 대기 지연 시간을 계산할 수 있습니다.  | 
| UseAlternateFolderForOnline | Amazon RDS for Oracle을 소스로 하여 변경 데이터 캡처에 Binary Reader를 사용하기 위해서는 이 속성을 true로 설정합니다. 그러면 DMS 인스턴스가 지정된 접두사 교체를 사용해 모든 온라인 다시 실행 로그에 액세스합니다. 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오.기본값: false 유효값: true/false 예시: `--oracle-settings '{"UseAlternateFolderForOnline": true}'`  | 
| UseBfile |  Binary Reader 유틸리티를 사용하여 변경 데이터를 캡처하려면 이 속성을 Y로 설정합니다. 이 속성을 Y로 설정하려면 `UseLogminerReader`를 N으로 설정합니다. Amazon RDS for Oracle을 소스로 하여 Binary Reader를 사용하려면 추가 속성을 설정합니다. 이 설정 및 Oracle Automatic Storage Management(ASM) 사용에 대한 자세한 내용은 [CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용](#CHAP_Source.Oracle.CDC) 섹션을 참조하세요. 참고: 이 값을 추가 연결 속성(ECA)으로 설정할 때 유효한 값은 'Y'와 'N'입니다. 이 값을 엔드포인트 설정으로 설정할 때 유효한 값은 `true`와 `false`입니다. 기본값: N  유효한 값: Y/N(이 값을 ECA로 설정하는 경우), true/false(이 값을 엔드포인트 설정으로 설정하는 경우). 예시: `--oracle-settings '{"UseBfile": Y}'`  | 
|  `UseLogminerReader`  |  이 속성을 Y로 설정하면 LogMiner 유틸리티를 사용하여 변경 데이터를 캡처합니다(기본값). AWS DMS 가 이진 파일에서 다시 실행 로그에 액세스하도록 하려면 이 옵션을 N으로 설정합니다. 이 옵션을 N으로 설정하는 경우, useBfile=Y 설정도 추가하세요. 이 설정 및 Oracle ASM(Automatic Storage Management) 사용에 대한 자세한 내용은 [CDC용 Oracle LogMiner 또는 AWS DMS Binary Reader 사용](#CHAP_Source.Oracle.CDC) 섹션을 참조하세요. 참고: 이 값을 추가 연결 속성(ECA)으로 설정할 때 유효한 값은 'Y'와 'N'입니다. 이 값을 엔드포인트 설정으로 설정할 때 유효한 값은 `true`와 `false`입니다. 기본값: Y  유효한 값: Y/N(이 값을 ECA로 설정하는 경우), true/false(이 값을 엔드포인트 설정으로 설정하는 경우). 예시: `--oracle-settings '{"UseLogminerReader": Y}'`  | 
| UsePathPrefix | Amazon RDS for Oracle을 소스로 하여 변경 데이터 캡처에 Binary Reader를 사용하려면 이 문자열 속성을 필수 값으로 설정하세요. 이 값은 다시 실행 로그에 액세스하기 위해 기본 Oracle 루트를 대체하는 데 사용되는 경로 접두사를 지정합니다. 자세한 내용은 [용 RDS for Oracle 소스와 함께 Binary Reader를 사용하도록 CDC 작업 구성 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) 단원을 참조하십시오.기본값: none 유효한 값: /rdsdbdata/log/ 예시: `--oracle-settings '{"UsePathPrefix": "/rdsdbdata/log/"}'`  | 

## Oracle용 소스 데이터 형식
<a name="CHAP_Source.Oracle.DataTypes"></a>

용 Oracle 엔드포인트는 대부분의 Oracle 데이터 유형을 AWS DMS 지원합니다. 다음 표에는를 사용할 때 지원되는 Oracle 소스 데이터 형식 AWS DMS 과 AWS DMS 데이터 형식에 대한 기본 매핑이 나와 있습니다.

**참고**  
LONG 및 LONG RAW 데이터 형식을 제외하고 Oracle 소스에서 Oracle 대상으로 복제(*동종 복제*)하는 경우, 모든 소스 및 대상 데이터 형식이 동일합니다. 하지만 LONG 데이터 형식은 CLOB에 매핑되고 LONG RAW 데이터 형식은 BLOB에 매핑됩니다.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  Oracle 데이터 형식  |  AWS DMS 데이터 유형  | 
| --- | --- | 
|  BINARY\$1FLOAT  |  REAL4  | 
|  BINARY\$1DOUBLE  |  REAL8  | 
|  BINARY  |  BYTES  | 
|  FLOAT (P)  |  정밀도가 24 이하인 경우, REAL4를 사용합니다. 정밀도가 24보다 큰 경우, REAL8을 사용합니다.  | 
|  NUMBER (P,S)  |  스케일이 0보다 크면 NUMERIC을 사용합니다. 크기가 0인 경우: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.Oracle.html) 스케일이 0 미만인 경우, REAL8을 사용합니다. | 
|  DATE  |  DATETIME  | 
|  INTERVAL\$1YEAR TO MONTH  |  STRING(간격 year\$1to\$1month 표시 포함)  | 
|  INTERVAL\$1DAY TO SECOND  |  STRING(간격 day\$1to\$1second 표시 포함)  | 
|  TIMESTAMP  |  DATETIME  | 
|  TIMESTAMP(시간대 사용)  |  STRING(timestamp\$1with\$1timezone 표시 포함)  | 
|  TIMESTAMP WITH LOCAL TIME ZONE  |  STRING(timestamp\$1with\$1local\$1 timezone 표시 포함)  | 
|  CHAR  |  STRING  | 
|  VARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  RAW  |  BYTES  | 
|  REAL  |  REAL8  | 
|  BLOB  |  BLOB 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 BLOB 데이터 형식 사용을 활성화 AWS DMS해야 합니다.는 기본 키가 포함된 테이블에서만 BLOB 데이터 형식을 AWS DMS 지원합니다.  | 
|  CLOB  |  CLOB 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 CLOB 데이터 형식 사용을 활성화 AWS DMS해야 합니다. CDC 중에는 기본 키가 포함된 테이블에서만 CLOB 데이터 형식을 AWS DMS 지원합니다.  | 
|  NCLOB  |  NCLOB 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 NCLOB 데이터 형식 사용을 활성화 AWS DMS해야 합니다. CDC 중에는 기본 키가 포함된 테이블에서만 NCLOB 데이터 형식을 AWS DMS 지원합니다.  | 
|  LONG  |  CLOB LONG 데이터 형식은 배치 최적화된 적용 모드(TurboStream CDC 모드)에서 지원되지 않습니다. 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 LOBs 사용을 AWS DMS활성화합니다. CDC 또는 전체 로드 중에는 기본 키가 있는 테이블에서만 LOB 데이터 유형을 AWS DMS 지원합니다. 또한 AWS DMS 는 LONG 열을 로드하기 위한 전체 LOB 모드를 지원하지 않습니다. 대신 제한된 LOB 모드를 사용하여 LONG 열을 Oracle 대상으로 마이그레이션할 수 있습니다. 제한된 LOB 모드에서는 64KB보다 긴 LONG 열로 설정한 모든 데이터를 64KB로 AWS DMS 잘라냅니다. 의 LOB 지원에 대한 자세한 내용은 섹션을 AWS DMS참조하세요. [AWS DMS 작업의 소스 데이터베이스에 대한 LOB 지원 설정](CHAP_Tasks.LOBSupport.md)   | 
|  LONG RAW  |  BLOB LONG RAW 데이터 형식은 배치 최적화된 적용 모드(TurboStream CDC 모드)에서 지원되지 않습니다. 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 LOBs 사용을 AWS DMS활성화합니다. CDC 또는 전체 로드 중에는 기본 키가 있는 테이블에서만 LOB 데이터 유형을 AWS DMS 지원합니다. 또한는 LONG RAW 열을 로드하기 위한 전체 LOB 모드를 지원하지 AWS DMS 않습니다. 대신 제한된 LOB 모드를 사용하여 LONG RAW열을 Oracle 대상으로 마이그레이션할 수 있습니다. 제한된 LOB 모드에서 AWS DMS 는 LONG RAW 열로 설정한 64KB보다 긴 모든 데이터를 64KB로 잘라냅니다. 의 LOB 지원에 대한 자세한 내용은 섹션을 AWS DMS참조하세요. [AWS DMS 작업의 소스 데이터베이스에 대한 LOB 지원 설정](CHAP_Tasks.LOBSupport.md)   | 
|  XMLTYPE  |  CLOB  | 
| SDO\$1GEOMETRY | BLOB(Oracle에서 Oracle로 마이그레이션하는 경우)CLOB(Oracle에서 PostgreSQL로 마이그레이션하는 경우) | 

다음 데이터 형식의 열과 함께 소스로 사용되는 Oracle 테이블은 지원되지 않으며 복제될 수도 없습니다. 이 데이터 형식을 사용하는 열을 복제하면 null 열이 됩니다.
+ BFILE
+ ROWID
+ REF
+ UROWID
+ 사용자 정의 데이터 형식
+ ANYDATA
+ VARRAY

**참고**  
가상 열은 지원되지 않습니다.

### Oracle 공간 데이터 형식 마이그레이션
<a name="CHAP_Source.Oracle.DataTypes.Spatial"></a>

*공간 데이터*는 공간에서 객체 또는 위치의 지오메트리 정보를 식별합니다. Oracle 데이터베이스에서 공간 객체의 기하학적 설명은 SDO\$1GEOMETRY 형식 객체에 저장됩니다. 이 객체 내에서 기하학적 설명은 사용자 정의 테이블의 단일 열에 있는 단일 행에 저장됩니다.

AWS DMS 는 Oracle 소스에서 Oracle 또는 PostgreSQL 대상으로 Oracle 유형 SDO\$1GEOMETRY 마이그레이션을 지원합니다.

를 사용하여 Oracle 공간 데이터 형식을 마이그레이션할 때는 다음 고려 사항에 유의 AWS DMS하세요.
+ Oracle 대상으로 마이그레이션하는 경우 형식 정보를 포함하는 USER\$1SDO\$1GEOM\$1METADATA 항목을 수동으로 전송해야 합니다.
+ Oracle 소스 엔드포인트에서 PostgreSQL 대상 엔드포인트로 마이그레이션할 때는 대상 열을 AWS DMS 생성합니다. 이러한 열에는 2D 차원과 SRID(공간 참조 식별자)가 0인 기본 geometry 및 geography 형식 정보가 있습니다. 예를 들면, `GEOMETRY, 2, 0`입니다.
+ PostgreSQL 대상으로 마이그레이션하는 Oracle 버전 12.1 이전 소스의 경우 `SDO2GEOJSON` 함수 또는 `spatialSdo2GeoJsonFunctionName` 추가 연결 속성을 사용하여 `SDO_GEOMETRY` 객체를 `GEOJSON` 형식으로 변환합니다. 자세한 내용은 [Oracle을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib) 단원을 참조하십시오.
+ AWS DMS 는 전체 LOB 모드에서만 Oracle 공간 열 마이그레이션을 지원합니다. AWS DMS 는 제한된 LOB 또는 인라인 LOB 모드를 지원하지 않습니다. LOB 모드에 대한 자세한 내용은 [AWS DMS 작업의 소스 데이터베이스에 대한 LOB 지원 설정](CHAP_Tasks.LOBSupport.md) 섹션을 참조하세요.
+ 는 Oracle 공간 열을 마이그레이션하기 위한 전체 LOB 모드 AWS DMS 만 지원하므로 열의 테이블에는 기본 키와 고유 키가 필요합니다. 테이블에 프라이머리 키와 고유 키가 없는 경우 마이그레이션에서 테이블을 건너뜁니다.

# Microsoft SQL Server 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.SQLServer"></a>

를 사용하여 하나 이상의 Microsoft SQL Server 데이터베이스에서 데이터를 마이그레이션합니다 AWS DMS. SQL Server 데이터베이스를 소스로 사용하면 데이터를 다른 SQL Server 데이터베이스 또는 AWS DMS 지원되는 다른 데이터베이스 중 하나로 마이그레이션할 수 있습니다.

가 소스로 AWS DMS 지원하는 SQL Server 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

원본 SQL Server 데이터베이스는 네트워크 상의 어느 컴퓨터에나 설치할 수 있습니다. AWS DMS에서 사용하려면 사용자가 선택한 작업 유형에 적절한 원본 데이터베이스 액세스 권한이 있는 SQL Server 계정이 필요합니다. 자세한 내용은 [SQL Server 태스크에 대한 권한](#CHAP_Source.SQLServer.Permissions) 단원을 참조하십시오.

AWS DMS 는 SQL Server의 명명된 인스턴스에서 데이터 마이그레이션을 지원합니다. 원본 엔드포인트를 생성하는 경우 서버 이름에 다음 표기법을 사용할 수 있습니다.

```
IPAddress\InstanceName
```

예를 들어 올바른 원본 엔드포인트 서버 이름은 다음과 같습니다. 여기서, 이름의 첫 번째 부분은 서버의 IP 주소이며, 두 번째 부분은 SQL Server 인스턴스 이름(이 예에서는 SQLTest)입니다.

```
10.0.0.25\SQLTest
```

또한 SQL Server의 명명된 인스턴스가 수신 대기하는 포트 번호를 가져와 소스 AWS DMS 엔드포인트를 구성하는 데 사용합니다.

**참고**  
포트 1433은 Microsoft SQL Server의 기본값입니다. 그러나 SQL Server가 시작될 때마다 변경되는 동적 포트와 방화벽을 통해 SQL Server에 연결하는 데 사용되는 특정 정적 포트 번호도 자주 사용됩니다. 따라서 AWS DMS 소스 엔드포인트를 생성할 때 SQL Server의 명명된 인스턴스의 실제 포트 번호를 알고 싶습니다.

SSL을 사용하여 SQL Server 엔드포인트와 복제 인스턴스 사이의 연결을 암호화할 수 있습니다. SQL Server 엔드포인트에서 SSL을 사용하는 방법에 대한 자세한 내용은 [에서 SSL 사용 AWS Database Migration Service](CHAP_Security.SSL.md) 섹션을 참조하세요.

CDC를 사용하여 SQL Server 데이터베이스에서 지속적으로 마이그레이션할 수 있습니다. CDC용 소스 SQL Server 데이터베이스 구성에 대한 자세한 내용은 [SQL Server에서 지속적인 복제를 위한 데이터 변경 사항 캡처](CHAP_Source.SQLServer.CDC.md) 섹션을 참조하세요.

SQL Server 소스 데이터베이스 작업에 대한 자세한 내용은 다음을 AWS DMS참조하세요.

**Topics**
+ [SQL Server를 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.SQLServer.Limitations)
+ [SQL Server 태스크에 대한 권한](#CHAP_Source.SQLServer.Permissions)
+ [SQL Server 소스에서 지속적 복제(CDC) 사용을 위한 사전 요구 사항](#CHAP_Source.SQLServer.Prerequisites)
+ [SQL Server에 지원되는 압축 방법](#CHAP_Source.SQLServer.Compression)
+ [자체 관리형 SQL Server AlwaysOn 가용성 그룹 사용](#CHAP_Source.SQLServer.AlwaysOn)
+ [SQL Server를의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)
+ [SQL Server용 소스 데이터 형식](#CHAP_Source.SQLServer.DataTypes)
+ [SQL Server에서 지속적인 복제를 위한 데이터 변경 사항 캡처](CHAP_Source.SQLServer.CDC.md)

## SQL Server를 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.SQLServer.Limitations"></a>

다음 제한 사항은 SQL Server 데이터베이스를 AWS DMS용 소스로 사용 시 적용됩니다.
+ 열의 자격 증명 속성은 대상 데이터베이스 열로 마이그레이션되지 않습니다.
+ SQL Server 엔드포인트는 희소 열을 가진 테이블 사용을 지원하지 않습니다.
+ Windows 인증은 지원되지 않습니다.
+ SQL Server에서 컴퓨팅된 필드의 변경 사항은 복제되지 않습니다.
+ 임시 테이블은 지원되지 않습니다.
+ SQL Server 파티션 전환은 지원되지 않습니다.
+ WRITETEXT 및 UPDATETEXT 유틸리티를 사용하는 경우 소스 데이터베이스에 적용된 이벤트를 캡처하지 AWS DMS 않습니다.
+ 다음 데이터 조작 언어(DML) 패턴은 지원되지 않습니다.

  ```
  SELECT * INTO new_table FROM existing_table
  ```
+ SQL Server를 소스로 사용할 경우, 열 수준 암호화는 지원되지 않습니다.
+ AWS DMS 는 SQL Server 2008 또는 SQL Server 2008 R2에 대한 서버 수준 감사를 소스로 지원하지 않습니다. 이는 SQL Server 2008 및 2008 R2의 알려진 문제 때문입니다. 예를 들어 다음 명령을 실행하면가 실패 AWS DMS 합니다.

  ```
  USE [master]
  GO 
  ALTER SERVER AUDIT [my_audit_test-20140710] WITH (STATE=on)
  GO
  ```
+ SQL Server를 소스로 사용하는 경우 Geometry 및 Geography 열은 전체 LOB 모드에서 지원되지 않습니다. 대신, 제한적 LOB 모드를 사용하거나 인라인 LOB 모드를 사용하도록 `InlineLobMaxSize` 작업 설정을 설정하세요.
+ 복제 작업에서 Microsoft SQL Server 소스 데이터베이스를 사용하는 경우, 작업을 제거하면 SQL Server Replication Publisher 정의가 제거되지 않습니다. Microsoft SQL Server 시스템 관리자는 Microsoft SQL Server에서 해당 정의를 삭제해야 합니다.
+ 전체 로드 전용 작업의 경우, 스키마 바운딩된 뷰와 스키마 바인딩되지 않은 뷰에서 데이터를 마이그레이션할 수 있습니다.
+ sp\$1rename을 사용하여 테이블 이름을 바꾸는 것은 지원되지 않습니다(예: `sp_rename 'Sales.SalesRegion', 'SalesReg;)`).
+ sp\$1rename을 사용하여 열 이름을 바꾸는 것은 지원되지 않습니다(예: `sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';`).
+ AWS DMS 는 열 기본값을 설정 및 설정 해제하기 위한 변경 처리를 지원하지 않습니다(`ALTER TABLE`문과 함께 `ALTER COLUMN SET DEFAULT` 절 사용).
+ AWS DMS 는 열 null성을 설정하기 위한 변경 처리를 지원하지 않습니다(`ALTER TABLE`문과 함께 `ALTER COLUMN [SET|DROP] NOT NULL` 절 사용).
+ SQL Server 2012 및 SQL Server 2014에서는 가용성 그룹과 함께 DMS 복제를 사용하는 경우, 배포 데이터베이스를 가용성 그룹에 배치할 수 없습니다. SQL 2016은 병합, 양방향 또는 P2P 복제 토폴로지에 사용되는 배포 데이터베이스를 제외하고 배포 데이터베이스를 가용성 그룹에 배치하는 것을 지원합니다.
+ 분할된 테이블의 경우 AWS DMS 는 각 파티션에 대해 서로 다른 데이터 압축 설정을 지원하지 않습니다.
+ SQL Server 공간 데이터 유형(GEOGRAPHY 및 GEOMETRY)에 값을 삽입할 때 공간 참조 시스템 식별자(SRID) 속성을 무시하거나 다른 숫자를 지정할 수 있습니다. 공간 데이터 형식으로 테이블을 복제할 때는 SRID를 기본 SRID(GEOMETRY의 경우 0, GEOGRAPHY의 경우 4326)로 바 AWS DMS 꿉니다.
+ 데이터베이스가 MS-REPLICATION 또는 MS-CDC에 대해 구성되지 않은 경우에도 프라이머리 키가 없는 테이블을 캡처할 수 있지만 INSERT/DELETE DML 이벤트만 캡처됩니다. UPDATE 및 TRUNCATE TABLE 이벤트는 무시됩니다.
+ Columnstore 인덱스는 지원되지 않습니다.
+ 메모리 최적화 테이블(인 메모리 OLTP 사용)은 지원되지 않습니다.
+ 여러 열로 구성된 프라이머리 키가 있는 테이블을 복제할 때 전체 로드 중에 프라이머리 키 열을 업데이트하는 것은 지원되지 않습니다.
+ 지연된 지속성은 지원되지 않습니다.
+ `readBackupOnly=true` 엔드포인트 설정(추가 연결 속성)은 RDS의 백업 수행 방식 때문에 RDS for SQL Server 소스 인스턴스에서 작동하지 않습니다.
+ RDS 사용자에게는 SQL Server 저장 프로시저 `sp_repldone`을 실행할 수 있는 액세스 권한이 없기 때문에 `EXCLUSIVE_AUTOMATIC_TRUNCATION`는 Amazon RDS SQL Server 소스 인스턴스에서는 작동하지 않습니다.
+ AWS DMS 는 잘라내기 명령을 캡처하지 않습니다.
+ AWS DMS 는 가속 데이터베이스 복구(ADR)가 켜져 있는 데이터베이스에서의 복제를 지원하지 않습니다.
+ AWS DMS 는 단일 트랜잭션 내에서 데이터 정의 언어(DDL) 및 데이터 조작 언어(DML) 문 캡처를 지원하지 않습니다.
+ AWS DMS 는 데이터 계층 애플리케이션 패키지(DACPAC)의 복제를 지원하지 않습니다.
+ 프라이머리 키나 고유 인덱스를 포함하고 여러 데이터 행을 업데이트하는 UPDATE 문은 대상 데이터베이스에 변경 내용을 적용할 때 충돌을 일으킬 수 있습니다. 예를 들어 대상 데이터베이스가 업데이트를 단일 UPDATE 문 대신 INSERT 문과 DELETE 문으로 적용하는 경우, 이런 일이 발생할 수 있습니다. 일괄 최적화 적용 모드에서는 테이블이 무시될 수 있습니다. 트랜잭션 적용 모드에서는 UPDATE 작업 시 제약 조건 위반이 발생할 수 있습니다. 이 문제를 방지하려면 관련 테이블을 다시 로드하세요. 또는 Apply Exceptions 제어 테이블(`dmslogs.awsdms_apply_exceptions`)에서 문제가 되는 레코드를 찾아 대상 데이터베이스에서 수동으로 편집합니다. 자세한 내용은 [변경 처리 튜닝 설정](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md) 단원을 참조하십시오.
+ AWS DMS 는 테이블 및 스키마 복제를 지원하지 않습니다. 여기서 이름에는 다음 세트의 특수 문자가 포함됩니다.

  `\\ -- \n \" \b \r ' \t ;` 
+ 데이터 마스킹은 지원되지 않습니다. 마스킹 없이 마스킹된 데이터를 AWS DMS 마이그레이션합니다.
+ AWS DMS 는 기본 키가 있는 최대 32,767개의 테이블과 각 테이블에 대해 최대 1,000개의 열을 복제합니다. 이는가 복제된 각 테이블에 대해 SQL Server 복제 문서를 AWS DMS 생성하고 SQL Server 복제 문서에 이러한 제한이 있기 때문입니다.
+ CDC(변경 데이터 캡처)를 사용할 때는 고유 인덱스를 구성하는 모든 열을 `NOT NULL`로 정의해야 합니다. 이 요구 사항이 충족되지 않으면 SQL Server 시스템 오류 22838이 발생합니다.
+ SQL Server가 활성 트랜잭션 로그에서 백업 로그로 아카이브하거나 활성 트랜잭션 로그에서 잘라내면 이벤트가 손실될 수 있습니다.

백업 트랜잭션 로그에 액세스할 때는 다음 제한 사항이 적용됩니다.
+ 암호화된 백업은 지원되지 않습니다.
+ URL 또는 Windows Azure에 저장된 백업은 지원되지 않습니다.
+ AWS DMS doe snot는 대체 공유 폴더의 파일 수준에서 트랜잭션 로그 백업의 직접 처리를 지원하지 않습니다.
+ Amazon RDS for Microsoft SQL Server 이외의 클라우드 SQL Server 소스의 경우는 활성 트랜잭션 로그로만 지속적 복제(CDC)를 AWS DMS 지원합니다. CDC에서는 백업 로그를 사용할 수 없습니다. SQL Server가 활성 트랜잭션 로그에서 백업 로그로 아카이브하거나 DMS가 읽기 전에 활성 트랜잭션 로그에서 잘라내면 이벤트가 손실될 수 있습니다.
+ Amazon RDS for Microsoft SQL Server 소스의 경우 AWS DMS 3.5.2 이하에서는 DMS가 CDC를 통해 백업 로그에 액세스할 수 없으므로 활성 트랜잭션 로그로만 지속적 복제(CDC)를 지원합니다. RDS for SQL Server가 활성 트랜잭션 로그에서 백업 로그로 아카이브하거나 DMS가 읽기 전에 활성 트랜잭션 로그에서 잘라내면 이벤트가 손실될 수 있습니다. 이 제한은 AWS DMS 버전 3.5.3 이상에는 적용되지 않습니다.
+ AWS DMS 는 Amazon RDS Proxy for SQL Server에 대한 CDC를 소스로 지원하지 않습니다.
+ 전체 로드 작업 중에 SQL Server 소스를 사용할 수 없게 되면 AWS DMS 는 데이터 마이그레이션이 불완전하게 유지되더라도 여러 번의 재연결 시도 후 작업을 완료된 것으로 표시할 수 있습니다. 이 시나리오에서 대상 테이블에는 연결 손실 전에 마이그레이션된 레코드만 포함되어 소스와 대상 시스템 간에 데이터 불일치가 발생할 수 있습니다. 데이터 완전성을 보장하려면 전체 로드 작업을 완전히 다시 시작하거나 연결 중단의 영향을 받는 특정 테이블을 다시 로드해야 합니다.

## SQL Server 태스크에 대한 권한
<a name="CHAP_Source.SQLServer.Permissions"></a>

**Topics**
+ [전체 로드 전용 작업에 대한 권한](#CHAP_Source.SQLServer.Permissions.FullLoad)
+ [복제가 진행 중인 태스크에 대한 권한](#CHAP_Source.SQLServer.Permissions.Ongoing)

### 전체 로드 전용 작업에 대한 권한
<a name="CHAP_Source.SQLServer.Permissions.FullLoad"></a>

전체 로드 전용 작업을 수행하려면 다음 권한이 필요합니다. AWS DMS 는 `dms_user` 로그인을 생성하지 않습니다. SQL Server 로그인 생성에 대한 자세한 내용은 *Microsoft 설명서*의 [데이터베이스 사용자 생성](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16) 주제를 참조하세요.

```
USE db_name;
                
                CREATE USER dms_user FOR LOGIN dms_user; 
                ALTER ROLE [db_datareader] ADD MEMBER dms_user; 
                GRANT VIEW DATABASE STATE to dms_user;
                GRANT VIEW DEFINITION to dms_user;
                
                USE master;
                
                GRANT VIEW SERVER STATE TO dms_user;
```

### 복제가 진행 중인 태스크에 대한 권한
<a name="CHAP_Source.SQLServer.Permissions.Ongoing"></a>

자체 관리형 SQL Server 인스턴스는 `sysadmin` 역할을 사용하거나 사용하지 않고도 DMS를 사용하여 계속 복제하도록 구성할 수 있습니다. `sysadmin` 역할을 부여할 수 없는 SQL Server 인스턴스의 경우 DMS 사용자에게 다음과 같은 권한이 있는지 확인합니다.

**자체 관리형 SQL Server 데이터베이스에서 지속적인 복제를 위한 권한 설정**

1. SQL Server Management Studio(SSMS)를 사용하여 또는 [전체 로드 전용 작업에 대한 권한](#CHAP_Source.SQLServer.Permissions.FullLoad)에서 이전에 설명한 대로 암호 인증이 있는 새 SQL Server 계정을 생성합니다(예: `self_managed_user`).

1. 다음 `GRANT` 명령을 실행합니다.

   ```
   GRANT VIEW SERVER STATE TO self_managed_user;
   
   USE msdb;
       GRANT SELECT ON msdb.dbo.backupset TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupmediafamily TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupfile TO self_managed_user;
       
   USE db_name;
       CREATE USER self_managed_user FOR LOGIN self_managed_user;
       ALTER ROLE [db_owner] ADD MEMBER self_managed_user;
       GRANT VIEW DEFINITION to self_managed_user;
   ```

1. 이전 권한 외에도 사용자는 다음 중 하나가 필요합니다.
   + 사용자는 `sysadmin` 고정된 서버 역할의 구성원이어야 합니다.
   + 소스 구성에 따라 [가용성 그룹 환경의 SQL Server에서 지속적 복제 설정: sysadmin 역할 없음](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.ag) 또는 [독립 실행형 SQL Server에서 지속적 복제 설정: sysadmin 역할 없음](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.standalone)에 설명된 구성 및 권한.

#### 클라우드 SQL Server 데이터베이스에서 지속적인 복제를 위한 권한 설정
<a name="CHAP_Source.SQLServer.Permissions.Cloud"></a>

클라우드에 호스팅된 SQL Server 인스턴스는 Amazon RDS for Microsoft SQL Server, Azure SQL Managed Instance 또는 DMS에서 지원하는 기타 관리형 클라우드 SQL Server 인스턴스에서 실행되는 인스턴스입니다.

SQL Server Management Studio(SSMS)를 사용하여 또는 [전체 로드 전용 작업에 대한 권한](#CHAP_Source.SQLServer.Permissions.FullLoad)에서 이전에 설명한 대로 암호 인증이 있는 새 SQL Server 계정을 생성합니다(예: `rds_user`).

다음 GRANT 명령을 실행합니다.

```
GRANT VIEW SERVER STATE TO rds_user;
```

Amazon RDS for Microsoft SQL Server 소스의 경우 DMS 버전 3.5.3 이상은 트랜잭션 로그 백업에서 읽기를 지원합니다. DMS가 로그 백업에 액세스할 수 있도록 하려면 위의 항목 외에도 RDS SQL Server 소스에 대한 `master` 사용자 권한 또는 다음 권한을 부여합니다.

```
USE msdb;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_download TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_read TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_list_current_lsn TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_task_status TO rds_user;
    
USE db_name;
    CREATE USER rds_user FOR LOGIN rds_user;
    ALTER ROLE [db_owner] ADD MEMBER rds_user;
    GRANT VIEW DEFINITION to rds_user;
```

Amazon Azure SQL 관리형 인스턴스의 경우 다음 권한을 부여합니다.

```
GRANT SELECT ON msdb.dbo.backupset TO rds_user;
GRANT SELECT ON msdb.dbo.backupmediafamily TO rds_user;
GRANT SELECT ON msdb.dbo.backupfile TO rds_user;
```

## SQL Server 소스에서 지속적 복제(CDC) 사용을 위한 사전 요구 사항
<a name="CHAP_Source.SQLServer.Prerequisites"></a>

온프레미스 또는 Amazon EC2의 자체 관리형 SQL Server 데이터베이스 또는 Amazon RDS나 Microsoft Azure SQL 관리형 인스턴스 같은 클라우드 데이터베이스에 지속적 복제(변경 데이터 캡처, 즉 CDC)를 사용할 수 있습니다.

특히 SQL Server 데이터베이스를 AWS DMS의 소스로 이용하는 지속적 복제를 사용할 때 다음 요구 사항이 적용됩니다.
+ SQL Server는 전체 백업에 맞게 구성되어야 하며, 사용자는 데이터 복제를 시작하기 전에 백업을 수행해야 합니다.
+ 복구 모델은 **대량 로그** 또는 **전체**로 설정되어야 합니다.
+ 여러 디스크로의 SQL Server 백업은 지원되지 않습니다. 백업이 서로 다른 디스크의 여러 파일에 데이터베이스 백업을 쓰도록 정의된 경우는 데이터를 읽을 AWS DMS 수 없으며 AWS DMS 작업이 실패합니다.
+ 자체 관리형 SQL Server 소스의 경우, 작업을 제거할 때 DMS CDC 작업에 사용되는 소스의 SQL Server Replication Publisher 정의는 제거되지 않습니다. SQL Server 시스템 관리자는 자체 관리형 원본을 위해 SQL Server에서 이 정의를 삭제해야 합니다.
+ CDC 중에는 변경 사항을 읽기 위해 SQL Server 트랜잭션 로그 백업을 조회 AWS DMS 해야 합니다. AWS DMS 는 네이티브 형식이 아닌 타사 백업 소프트웨어를 사용하여 생성된 SQL Server 트랜잭션 로그 백업을* 지원하지 않습니다*. 네이티브 형식*이고* 타사 백업 소프트웨어를 사용하여 생성된 트랜잭션 로그 백업을 지원하려면 소스 엔드포인트에 `use3rdPartyBackupDevice=Y` 연결 속성을 추가하세요.
+ 자체 관리형 SQL Server 원본의 경우, SQL Server는 변경 사항이 게시될 때까지 새로 생성된 테이블에서 변경 사항을 캡처하지 않음에 유의하세요. 테이블이 SQL Server 소스에 추가되면가 게시 생성을 AWS DMS 관리합니다. 그렇지만, 이 프로세스에는 몇 분이 걸릴 수 있습니다. 이 지연 시간 동안 새로 생성된 테이블에 적용된 작업은 대상에 캡처되거나 복제되지 않습니다.
+ AWS DMS 변경 데이터 캡처를 사용하려면 SQL Server에서 전체 트랜잭션 로깅을 활성화해야 합니다. SQL Server에서 전체 트랜잭션 로깅을 켜려면 MS-REPLICATION 또는 CHANGE DATA CAPTURE(CDC)를 활성화하세요.
+ SQL Server *tlog* 항목은 MS CDC 캡처 작업이 해당 변경 내용을 처리할 때까지는 재사용으로 표시되지 않습니다.
+ CDC 작업은 메모리 최적화된 테이블에서 지원되지 않습니다. 이 제한 사항은 이 기능이 처음 도입된 SQL Server 2014 이상에 적용됩니다.
+ AWS DMS 변경 데이터 캡처에는 기본적으로 Amazon EC2 또는 온프레미스 SQL 서버에서 소스로 배포 데이터베이스가 필요합니다. 따라서 프라이머리 키가 있는 테이블의 MS 복제를 구성하는 동안 배포자를 활성화했는지 확인하세요.

## SQL Server에 지원되는 압축 방법
<a name="CHAP_Source.SQLServer.Compression"></a>

 AWS DMS에서의 SQL Server 압축 방법 지원에 대해서는 다음을 참고하세요.
+ AWS DMS 는 SQL Server 버전 2008 이상에서 행/페이지 압축을 지원합니다.
+ AWS DMS 는 Vardecimal 스토리지 형식을 지원하지 않습니다.
+ AWS DMS 는 희소 열 및 열 구조 압축을 지원하지 않습니다.

## 자체 관리형 SQL Server AlwaysOn 가용성 그룹 사용
<a name="CHAP_Source.SQLServer.AlwaysOn"></a>

SQL Server AlwaysOn 가용성 그룹은 데이터베이스 미러링의 엔터프라이즈 수준 대안으로서 고가용성과 재해 복구를 제공합니다.

에서는 단일 기본 또는 보조 가용성 그룹 복제본에서 변경 사항을 마이그레이션 AWS DMS할 수 있습니다.

### 기본 가용성 그룹 복제본 사용
<a name="CHAP_Source.SQLServer.AlwaysOn.Primary"></a>

 

**에서 기본 가용성 그룹을 소스로 사용하려면 다음을 AWS DMS수행합니다.**

1. 가용성 복제본의 모든 SQL Server 인스턴스에서 배포 옵션을 켭니다. 자세한 내용은 [자체 관리형 SQL Server에서 지속적 복제 설정](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC) 단원을 참조하십시오.

1.  AWS DMS 콘솔에서 SQL Server 소스 데이터베이스 설정을 엽니다. **서버 이름**에서 가용성 그룹 리스너에 맞게 구성된 DNS(Domain Name Service) 이름이나 IP 주소를 지정합니다.

 AWS DMS 작업을 처음 시작하면 평소보다 시작하는 데 시간이 오래 걸릴 수 있습니다. 이렇게 느려지는 이유는 가용성 그룹 서버가 테이블 항목 생성을 복제하고 있기 때문입니다.

### 보조 가용성 그룹 복제본 사용
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary"></a>

**에서 보조 가용성 그룹을 소스로 사용하려면 다음을 AWS DMS수행합니다.**

1.  AWS DMS 소스 엔드포인트 사용자가 사용하는 것과 동일한 자격 증명을 사용하여 개별 복제본에 연결합니다.

1.  AWS DMS 복제 인스턴스가 모든 기존 복제본의 DNS 이름을 확인하고 연결할 수 있는지 확인합니다. 다음 SQL 쿼리를 사용하여 모든 복제본의 DNS 이름을 가져올 수 있습니다.

   ```
   select ar.replica_server_name, ar.endpoint_url from sys.availability_replicas ar
   JOIN sys.availability_databases_cluster adc
   ON adc.group_id = ar.group_id AND adc.database_name = '<source_database_name>';
   ```

1. 소스 엔드포인트를 만들 때 엔드포인트의 **서버 이름** 또는 엔드포인트 암호의 **서버 주소**에 가용성 그룹 리스너의 DNS 이름을 지정합니다. 가용성 그룹 리스너에 대한 자세한 내용은 SQL Server 설명서의 [What is an availability group listner?](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-listener-overview?view=sql-server-ver15)를 참조하세요.

   공용 DNS 서버 또는 온프레미스 DNS 서버를 사용하여 가용성 그룹 리스너, 기본 복제본, 보조 복제본을 확인할 수 있습니다. 온프레미스 DNS 서버를 사용하려면 Amazon Route 53 Resolver를 구성하세요. 자세한 내용은 [자체 온프레미스 이름 서버 사용](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver) 단원을 참조하십시오.

1. 다음 추가 연결 속성을 소스 엔드포인트에 추가합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.SQLServer.html)

1. 가용성 그룹의 모든 복제본에서 배포 옵션을 활성화합니다. 배포자 목록에 모든 노드를 추가합니다. 자세한 내용은 [배포를 설정하려면](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC.Setup) 단원을 참조하십시오.

1. 기본 읽기-쓰기 복제본에서 다음 쿼리를 실행하여 데이터베이스를 게시할 수 있도록 합니다. 이 쿼리는 데이터베이스에 대해 한 번만 실행합니다.

   ```
   sp_replicationdboption @dbname = N'<source DB name>', @optname = N'publish', @value = N'true';
   ```



#### 제한 사항
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.limitations"></a>

다음은 보조 가용성 그룹 복제본 작업의 제한 사항입니다.
+ AWS DMS 는 읽기 전용 가용성 그룹 복제본을 소스로 사용할 때 Safeguard를 지원하지 않습니다. 자세한 내용은 [SQL Server를의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib) 단원을 참조하십시오.
+ AWS DMS 는 읽기 전용 가용성 그룹 복제본을 소스로 사용할 때 `setUpMsCdcForTables` 추가 연결 속성을 지원하지 않습니다. 자세한 내용은 [SQL Server를의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib) 단원을 참조하십시오.
+ AWS DMS 는 버전 3.4.7부터 자체 관리형 보조 가용성 그룹 복제본을 지속적 복제(변경 데이터 캡처 또는 CDC)를 위한 소스 데이터베이스로 사용할 수 있습니다. Cloud SQL Server 다중 AZ 읽기 전용 복제본은 지원되지 않습니다. 이전 버전의를 사용하는 경우 기본 가용성 그룹 복제본을 CDC의 소스 데이터베이스로 사용해야 AWS DMS합니다.

#### 다른 노드로의 장애 조치
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.failover"></a>

엔드포인트에 대한 `ApplicationIntent` 추가 연결 속성을 로 설정하면 `ReadOnly` AWS DMS 태스크가 읽기 전용 라우팅 우선 순위가 가장 높은 읽기 전용 노드에 연결됩니다. 우선 순위가 가장 높은 읽기 전용 노드를 사용할 수 없는 경우, 가용성 그룹에 있는 다른 읽기 전용 노드로 장애 조치됩니다. 를 설정하지 않으면 `ApplicationIntent` AWS DMS 작업은 가용성 그룹의 기본(읽기/쓰기) 노드에만 연결됩니다.

## SQL Server를의 소스로 사용할 때 엔드포인트 설정 AWS DMS
<a name="CHAP_Source.SQLServer.ConnectionAttrib"></a>

추가 연결 속성을 사용하는 것과 비슷하게 엔드포인트 설정을 사용하여 SQL Server 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나의 `create-endpoint` 명령을 `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON 구문과 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)함께 사용하여 소스 엔드포인트를 생성할 때 설정을 지정합니다.

SQL Server를 소스로 할 때 사용할 수 있는 엔드포인트 설정은 다음 테이블에 나와 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.SQLServer.html)

## SQL Server용 소스 데이터 형식
<a name="CHAP_Source.SQLServer.DataTypes"></a>

SQL Server를 소스로 사용하는 데이터 마이그레이션은 대부분의 SQL Server 데이터 유형을 AWS DMS 지원합니다. 다음 표에는 사용 시 지원되는 SQL Server 소스 데이터 형식 AWS DMS 과 AWS DMS 데이터 형식의 기본 매핑이 나와 있습니다.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  SQL Server 데이터 형식  |  AWS DMS 데이터 유형  | 
| --- | --- | 
|  BIGINT  |  INT8  | 
|  BIT  |  BOOLEAN  | 
|  DECIMAL  |  NUMERIC  | 
|  INT  |  INT4  | 
|  MONEY  |  NUMERIC  | 
|  NUMERIC(p,s)  |  NUMERIC   | 
|  SMALLINT  |  INT2  | 
|  SMALLMONEY  |  NUMERIC  | 
|  TINYINT  |  UINT1  | 
|  REAL  |  REAL4  | 
|  FLOAT  |  REAL8  | 
|  DATETIME  |  DATETIME  | 
|  DATETIME2(SQL Server 2008 이상)  |  DATETIME  | 
|  SMALLDATETIME  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIMEOFFSET  |  WSTRING  | 
|  CHAR  |  STRING  | 
|  VARCHAR  |  STRING  | 
|  VARCHAR(최대)  |  CLOB TEXT 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 CLOB 데이터 형식 사용을 활성화 AWS DMS해야 합니다. SQL Server 테이블의 경우 SQL Server의 LOB 열 값을 변경하지 않는 UPDATE 문에도 대상의 LOB 열을 AWS DMS 업데이트합니다. CDC 중에는 기본 키가 포함된 테이블에서만 CLOB 데이터 형식을 AWS DMS 지원합니다.  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR(길이)  |  WSTRING  | 
|  NVARCHAR(최대)  |  NCLOB NTEXT 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 SupportLobs 사용을 활성화 AWS DMS해야 합니다. Lob 지원 활성화에 대한 자세한 내용은 [AWS DMS 작업의 소스 데이터베이스에 대한 LOB 지원 설정](CHAP_Tasks.LOBSupport.md) 섹션을 참조하세요. SQL Server 테이블의 경우 SQL Server의 LOB 열 값을 변경하지 않는 UPDATE 문에도 대상의 LOB 열을 AWS DMS 업데이트합니다. CDC 중에는 기본 키가 포함된 테이블에서만 CLOB 데이터 형식을 AWS DMS 지원합니다.  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  VARBINARY(최대)  |  BLOB IMAGE SQL Server 테이블의 경우 SQL Server의 LOB 열 값을 변경하지 않는 UPDATE 문에도 대상의 LOB 열을 AWS DMS 업데이트합니다. 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 BLOB 데이터 형식 사용을 활성화 AWS DMS해야 합니다. AWS DMS 는 기본 키가 포함된 테이블에서만 BLOB 데이터 형식을 지원합니다.  | 
|  TIMESTAMP  |  BYTES  | 
|  UNIQUEIDENTIFIER  |  STRING  | 
|  HIERARCHYID   |  SQL Server 대상 엔드포인트에 복제할 때 HIERARCHYID를 사용합니다. 다른 모든 대상 엔드포인트에 복제할 때에는 WSTRING(250)을 사용합니다.  | 
|  XML  |  NCLOB SQL Server 테이블의 경우 SQL Server의 LOB 열 값을 변경하지 않는 UPDATE 문에도 대상의 LOB 열을 AWS DMS 업데이트합니다. 이 데이터 형식을와 함께 사용하려면 특정 작업에 대해 NCLOB 데이터 형식 사용을 활성화 AWS DMS해야 합니다. CDC 중에는 기본 키가 포함된 테이블에서만 NCLOB 데이터 형식을 AWS DMS 지원합니다.  | 
|  GEOMETRY  |  이 데이터 형식을 지원하는 대상 엔드포인트에 복제할 때에는 GEOMETRY를 사용합니다. 이 데이터 형식을 지원하지 않는 대상 엔드포인트에 복제할 때에는 CLOB를 사용합니다.  | 
|  GEOGRAPHY  |  이 데이터 형식을 지원하는 대상 엔드포인트에 복제할 때에는 GEOGRAPHY를 사용합니다. 이 데이터 형식을 지원하지 않는 대상 엔드포인트에 복제할 때에는 CLOB를 사용합니다.  | 

AWS DMS 는 다음 데이터 형식의 필드가 포함된 테이블을 지원하지 않습니다.
+ CURSOR
+ SQL\$1VARIANT
+ TABLE

**참고**  
사용자 정의 데이터 형식은 그 기반 유형에 따라 지원됩니다. 예를 들어, DATETIME을 기반으로 한 사용자 정의 데이터는 DATETIME 데이터 형식으로 처리됩니다.

# SQL Server에서 지속적인 복제를 위한 데이터 변경 사항 캡처
<a name="CHAP_Source.SQLServer.CDC"></a>

이 주제에서는 SQL Server 소스에서 CDC 복제를 설정하는 방법을 설명합니다.

**Topics**
+ [온프레미스 또는 Amazon EC2에서 자체 관리형 SQL Server의 데이터 변경 캡처](#CHAP_Source.SQLServer.CDC.Selfmanaged)
+ [클라우드 SQL Server DB 인스턴스에서 지속적 복제 설정](#CHAP_Source.SQLServer.Configuration)

## 온프레미스 또는 Amazon EC2에서 자체 관리형 SQL Server의 데이터 변경 캡처
<a name="CHAP_Source.SQLServer.CDC.Selfmanaged"></a>

소스 Microsoft SQL Server 데이터베이스에서 변경 내용을 캡처하려면 데이터베이스가 전체 백업을 수행하도록 구성되어 있어야 합니다. 데이터베이스를 전체 복구 모드 또는 대량 로그 모드로 구성합니다.

자체 관리형 SQL Server 소스의 경우 다음을 AWS DMS 사용합니다.

**MS-REPLICATION**  
프라이머리 키가 있는 테이블의 변경 사항을 캡처합니다. 소스 SQL Server 인스턴스의 AWS DMS 엔드포인트 사용자에게 sysadmin 권한을 부여하여 이를 자동으로 구성할 수 있습니다. 또는이 섹션의 단계에 따라 소스를 준비하고 AWS DMS 엔드포인트에 대한 sysadmin 권한이 없는 사용자를 사용할 수 있습니다.

**MS-CDC**  
프라이머리 키가 없는 테이블의 변경 사항을 캡처합니다. 데이터베이스 수준에서 모든 테이블에 대해 개별적으로 MS-CDC를 활성화합니다.

지속적 복제(CDC)를 위해 SQL Server 데이터베이스를 설정할 때 다음 중 하나를 수행할 수 있습니다.
+ sysadmin 역할을 사용하여 지속적 복제를 설정합니다.
+ sysadmin 역할을 사용하지 않도록 지속적 복제를 설정합니다.

**참고**  
다음 스크립트를 사용하여 프라이머리 키 또는 고유 키가 없는 모든 테이블을 찾을 수 있습니다.  

```
USE [DBname]
SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') = 0
        AND  OBJECTPROPERTY(object_id, 'TableHasUniqueCnst') = 0
ORDER BY schema_name, table_name;
```

### 자체 관리형 SQL Server에서 지속적 복제 설정
<a name="CHAP_Source.SQLServer.CDC.MSCDC"></a>

이 섹션에는 sysadmin 역할을 사용하거나 사용하지 않고 자체 관리형 SQL 서버에서 지속적 복제를 설정하는 방법에 대한 정보가 나와 있습니다.

**Topics**
+ [자체 관리형 SQL Server에서 지속적 복제 설정: sysadmin 역할 사용](#CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin)
+ [독립 실행형 SQL Server에서 지속적 복제 설정: sysadmin 역할 없음](#CHAP_SupportScripts.SQLServer.standalone)
+ [가용성 그룹 환경의 SQL Server에서 지속적 복제 설정: sysadmin 역할 없음](#CHAP_SupportScripts.SQLServer.ag)

#### 자체 관리형 SQL Server에서 지속적 복제 설정: sysadmin 역할 사용
<a name="CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin"></a>

AWS DMS SQL Server에 대한 지속적 복제는 기본 키가 있는 테이블에는 네이티브 SQL Server 복제를 사용하고 기본 키가 없는 테이블에는 변경 데이터 캡처(CDC)를 사용합니다.

지속적 복제를 설정하기 전에 [SQL Server 소스에서 지속적 복제(CDC) 사용을 위한 사전 요구 사항](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites) 섹션을 참조하세요.

기본 키가 있는 테이블의 경우 AWS DMS 는 일반적으로 소스에 필요한 아티팩트를 구성할 수 있습니다. 하지만 자체 관리형인 SQL Server 소스 인스턴스의 경우, 먼저 SQL Server 배포를 수동으로 구성해야 합니다. 이렇게 하면 sysadmin 권한이 있는 AWS DMS 소스 사용자가 기본 키가 있는 테이블에 대한 게시를 자동으로 생성할 수 있습니다.

배포가 이미 구성되어 있는지 확인하려면 다음 명령을 실행합니다.

```
sp_get_distributor
```

열 배포 결과가 `NULL`인 경우 배포가 구성되지 않은 것입니다. 다음 절차에 따라 배포를 설정할 수 있습니다.<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup"></a>

**배포를 설정하려면**

1. SQL Server Management Studio(SSMS) 도구를 사용하여 SQL Server 소스 데이터베이스에 연결합니다.

1. **복제** 폴더의 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 열고 **배포 구성**을 선택합니다. 배포 구성 마법사가 나타납니다.

1. 마법사에 따라 기본값을 입력하고 배포를 생성합니다.<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup.CDC"></a>

**CDC를 설정하려면**

AWS DMS 버전 3.4.7 이상에서는 읽기 전용 복제본을 사용하지 않는 경우 데이터베이스 및 모든 테이블에 대해 MS CDC를 자동으로 설정할 수 있습니다. 이 기능을 사용하려면 `SetUpMsCdcForTables` ECA를 true로 설정합니다. ECA에 대한 자세한 내용은 [엔드포인트 설정](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.ConnectionAttrib) 섹션을 참조하세요.

3.4.7 AWS DMS 이전 버전 또는 소스로서 읽기 전용 복제본의 경우 다음 단계를 수행합니다.

1. 프라이머리 키가 없는 테이블의 경우, 데이터베이스에 MS-CDC를 설정합니다. 이렇게 하려면 sysadmin 역할이 할당된 계정을 사용하고 다음 명령을 실행합니다.

   ```
   use [DBname]
   EXEC sys.sp_cdc_enable_db
   ```

1. 다음으로, 각 소스 테이블마다 MS-CDC를 설정합니다. 고유 키는 있지만 프라이머리 키가 없는 각 테이블마다 다음 쿼리를 실행하여 MS-CDC를 설정합니다.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

1. 프라이머리 키가 없거나 고유 키가 없는 각 테이블마다 다음 쿼리를 실행하여 MS-CDC를 설정합니다.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

특정 테이블에서 MS-CDC를 설정하는 방법에 대한 자세한 내용은 [ SQL Server 설명서](https://msdn.microsoft.com/en-us/library/cc627369.aspx)를 참조하세요.

#### 독립 실행형 SQL Server에서 지속적 복제 설정: sysadmin 역할 없음
<a name="CHAP_SupportScripts.SQLServer.standalone"></a>

이 섹션에서는 사용자 계정에 sysadmin 권한이 필요 없는 SQL Server 데이터베이스 소스에 대해 지속적 복제를 설정하는 방법을 설명합니다.

**참고**  
sysadmin이 아닌 DMS 사용자는 이 섹션의 단계를 실행한 후 다음을 수행할 수 있는 권한을 갖게 됩니다.  
온라인 트랜잭션 로그 파일에서 변경 사항 읽기
트랜잭션 로그 백업 파일의 변경 사항을 읽을 수 있는 디스크 액세스
DMS에서 사용하는 게시물 추가 또는 변경
게시물에 문서 추가

1. [SQL Server에서 지속적인 복제를 위한 데이터 변경 사항 캡처](#CHAP_Source.SQLServer.CDC)에 설명된 대로 복제를 위해 Microsoft SQL Server를 설정합니다.

1. 소스 데이터베이스에서 MS-REPLICATION을 활성화합니다. 이 작업은 수동으로 수행하거나, sysadmin 사용자로 태스크를 한 번 실행하여 수행할 수 있습니다.

1. 아래의 스크립트를 사용하여 소스 데이터베이스에서 `awsdms` 스키마를 생성합니다.

   ```
   use master
   go
   create schema awsdms
   go
   
   
   -- Create the table valued function [awsdms].[split_partition_list] on the Master database, as follows:
   USE [master]
   GO
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   go
   
   if (object_id('[awsdms].[split_partition_list]','TF')) is not null
   
   drop function [awsdms].[split_partition_list];
   
   go
   
   create function [awsdms].[split_partition_list]
   
   (
   
   @plist varchar(8000), --A delimited list of partitions
   
   @dlm nvarchar(1) --Delimiting character
   
   )
   
   returns @partitionsTable table --Table holding the BIGINT values of the string fragments
   
   (
   
   pid bigint primary key
   
   )   
   
   as
   
   begin
   
   declare @partition_id bigint;
   
   declare @dlm_pos integer;
   
   declare @dlm_len integer;
   
   set @dlm_len = len(@dlm);
   
   while (charindex(@dlm,@plist)>0)
   
   begin
   
   set @dlm_pos = charindex(@dlm,@plist);
   
   set @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
   
   insert into @partitionsTable (pid) values (@partition_id)
   
   set @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
   
   end
   
   set @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
   
   insert into @partitionsTable (pid) values ( @partition_id );
   
   return
   
   end
   
   GO
   ```

1. 아래의 스크립트를 사용하여 마스터 데이터베이스에서 `[awsdms].[rtm_dump_dblog]` 프로시저를 생성합니다.

   ```
   use [MASTER]
   
   go
   
   if (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null drop procedure [awsdms].[rtm_dump_dblog];
   go
   
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   GO
   
   
   
   CREATE procedure [awsdms].[rtm_dump_dblog]
   
   (
   
   @start_lsn varchar(32),
   
   @seqno integer,
   
   @filename varchar(260),
   
   @partition_list varchar(8000), -- A comma delimited list: P1,P2,... Pn
   
   @programmed_filtering integer,
   
   @minPartition bigint,
   
   @maxPartition bigint
   
   )
   
   as begin
   
   declare @start_lsn_cmp varchar(32); -- Stands against the GT comparator
   
   SET NOCOUNT ON -- – Disable "rows affected display"
   
   set @start_lsn_cmp = @start_lsn;
   
   if (@start_lsn_cmp) is null
   
   set @start_lsn_cmp = '00000000:00000000:0000';
   
   if (@partition_list is null)
   
   begin
   
   RAISERROR ('Null partition list waspassed',16,1);
   
   return
   
   end
   
   if (@start_lsn) is not null
   
   set @start_lsn = '0x'+@start_lsn;
   
   if (@programmed_filtering=0)
   
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1]
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   else
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1] -- After Image
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   
   SET NOCOUNT OFF -- Re-enable "rows affected display"
   
   end
   
   GO
   ```

1. 아래의 스크립트를 사용하여 마스터 데이터베이스에서 인증서를 생성합니다.

   ```
   Use [master]
   Go
   
   CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert] ENCRYPTION BY PASSWORD = N'@5trongpassword'
   
   WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions';
   ```

1. 아래의 스크립트를 사용하여 인증서에서 로그인을 생성합니다.

   ```
   Use [master]
   Go
   
   CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE [awsdms_rtm_dump_dblog_cert];
   ```

1. 아래의 스크립트를 사용하여 sysadmin 서버 역할에 로그인을 추가합니다.

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
   ```

1. 아래의 스크립트를 사용하여 [master].[awsdms].[rtm\$1dump\$1dblog]에 서명을 추가합니다.

   ```
   Use [master]
   GO
   ADD SIGNATURE
   TO [master].[awsdms].[rtm_dump_dblog] BY CERTIFICATE [awsdms_rtm_dump_dblog_cert] WITH PASSWORD = '@5trongpassword';
   ```
**참고**  
저장된 프로시저를 다시 생성할 경우 서명을 다시 추가해야 합니다.

1. 아래의 스크립트를 사용하여 마스터 데이터베이스에 [awsdms].[rtm\$1position\$11st\$1timestamp]를 생성합니다.

   ```
   use [master]
       if object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
       DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
       go
       create procedure [awsdms].[rtm_position_1st_timestamp]
       (
       @dbname                sysname,      -- Database name
       @seqno                 integer,      -- Backup set sequence/position number within file
       @filename              varchar(260), -- The backup filename
       @1stTimeStamp          varchar(40)   -- The timestamp to position by
       ) 
       as begin
   
       SET NOCOUNT ON       -- Disable "rows affected display"
   
       declare @firstMatching table
       (
       cLsn varchar(32),
       bTim datetime
       )
   
       declare @sql nvarchar(4000)
       declare @nl                       char(2)
       declare @tb                       char(2)
       declare @fnameVar                 nvarchar(254) = 'NULL'
   
       set @nl  = char(10); -- New line
       set @tb  = char(9)   -- Tab separator
   
       if (@filename is not null)
       set @fnameVar = ''''+@filename +''''
   
       set @sql='use ['+@dbname+'];'+@nl+
       'select top 1 [Current LSN],[Begin Time]'+@nl+
       'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @fnameVar+','+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default)'+@nl+
       'where operation=''LOP_BEGIN_XACT''' +@nl+
       'and [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
   
       --print @sql
       delete from  @firstMatching 
       insert into @firstMatching  exec sp_executesql @sql    -- Get them all
   
       select top 1 cLsn as [matching LSN],convert(varchar,bTim,121) as [matching Timestamp] from @firstMatching;
   
       SET NOCOUNT OFF      -- Re-enable "rows affected display"
   
       end
       GO
   ```

1. 아래의 스크립트를 사용하여 마스터 데이터베이스에서 인증서를 생성합니다.

   ```
   Use [master]
   Go
   CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
   ENCRYPTION BY PASSWORD = '@5trongpassword'
   WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
   ```

1. 아래의 스크립트를 사용하여 인증서에서 로그인을 생성합니다.

   ```
   Use [master]
   Go
   CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert];
   ```

1. 아래의 스크립트를 사용하여 sysadmin 역할에 로그인을 추가합니다.

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
   ```

1. 아래의 스크립트를 사용하여 인증서를 통해 [master].[awsdms].[rtm\$1position\$11st\$1timestamp]에 서명을 추가합니다.

   ```
   Use [master]
       GO
       ADD SIGNATURE
       TO [master].[awsdms].[rtm_position_1st_timestamp]
       BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
       WITH PASSWORD = '@5trongpassword';
   ```

1. 아래의 스크립트를 사용하여 DMS 사용자에게 새 저장 프로시저에 대한 실행 액세스 권한을 부여합니다.

   ```
   use master
   go
   GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dms_user;
   ```

1. 다음 각 데이터베이스에서 다음과 같은 권한 및 역할을 보유한 사용자를 생성합니다.
**참고**  
각 복제본에서 동일한 SID를 사용하여 dmsnosysadmin 사용자 계정을 생성해야 합니다. 아래의 SQL 쿼리는 각 복제본에서 dmsnosysadmin 계정 SID 값을 확인하는 데 도움이 될 수 있습니다. 사용자 생성에 대한 자세한 내용은 [Microsoft SQL 서버 설명서](https://learn.microsoft.com/en-us/sql/)의 [CREATE USER (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql) 섹션을 참조하세요. Azure SQL 데이터베이스의 SQL 사용자 계정 생성에 대한 자세한 내용은 [활성 geo-replication](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview) 섹션을 참조하세요.

   ```
   use master
   go
   grant select on sys.fn_dblog to [DMS_user]
   grant view any definition to [DMS_user]
   grant view server state to [DMS_user]--(should be granted to the login).
   grant execute on sp_repldone to [DMS_user]
   grant execute on sp_replincrementlsn to [DMS_user]
   grant execute on sp_addpublication to [DMS_user]
   grant execute on sp_addarticle to [DMS_user]
   grant execute on sp_articlefilter to [DMS_user]
   grant select on [awsdms].[split_partition_list] to [DMS_user]
   grant execute on [awsdms].[rtm_dump_dblog] to [DMS_user]
   ```

   ```
   use msdb
   go
   grant select on msdb.dbo.backupset to self_managed_user
   grant select on msdb.dbo.backupmediafamily to self_managed_user
   grant select on msdb.dbo.backupfile to self_managed_user
   ```

   소스 데이터베이스에서 다음과 같은 스크립트를 실행합니다.

   ```
   use Source_DB
       Go
       EXEC sp_addrolemember N'db_owner', N'DMS_user'
   ```

1. 마지막으로, 소스 SQL Server 엔드포인트에 추가 연결 속성(ECA)을 추가합니다.

   ```
   enableNonSysadminWrapper=true;
   ```

#### 가용성 그룹 환경의 SQL Server에서 지속적 복제 설정: sysadmin 역할 없음
<a name="CHAP_SupportScripts.SQLServer.ag"></a>

이 섹션에서는 사용자 계정에 sysadmin 권한이 필요 없는 가용성 그룹 환경의 SQL Server 데이터베이스 소스에 대해 지속적 복제를 설정하는 방법을 설명합니다.

**참고**  
sysadmin이 아닌 DMS 사용자는 이 섹션의 단계를 실행한 후 다음을 수행할 수 있는 권한을 갖게 됩니다.  
온라인 트랜잭션 로그 파일에서 변경 사항 읽기
트랜잭션 로그 백업 파일의 변경 사항을 읽을 수 있는 디스크 액세스
DMS에서 사용하는 게시물 추가 또는 변경
게시물에 문서 추가

**가용성 그룹 환경에서 sysadmin 사용자를 사용하지 않고 지속적 복제를 설정하려면**

1. [SQL Server에서 지속적인 복제를 위한 데이터 변경 사항 캡처](#CHAP_Source.SQLServer.CDC)에 설명된 대로 복제를 위해 Microsoft SQL Server를 설정합니다.

1. 소스 데이터베이스에서 MS-REPLICATION을 활성화합니다. 이 작업은 수동으로 수행하거나, sysadmin 사용자를 통해 태스크를 한 번 실행하여 수행할 수 있습니다.
**참고**  
MS-REPLICATION 배포자를 로컬로 구성하거나, 연결된 서버를 통해 sysadmin 이외의 사용자가 액세스할 수 있는 방식으로 구성해야 합니다.

1. **단일 태스크 내에서 sp\$1repldone을 단독으로 사용** 엔드포인트 옵션이 활성화된 경우, MS-REPLICATION Log Reader 작업을 중지합니다.

1. 각각의 복제에서 다음 단계를 수행합니다.

   1. 마스터 데이터베이스에서 `[awsdms]`[awsdms] 스키마를 생성합니다.

      ```
      CREATE SCHEMA [awsdms]
      ```

   1. 마스터 데이터베이스에서 `[awsdms].[split_partition_list]` 테이블 값 함수를 생성합니다.

      ```
      USE [master]
      GO
      
      SET ansi_nulls on
      GO
        
      SET quoted_identifier on
      GO
      
      IF (object_id('[awsdms].[split_partition_list]','TF')) is not null
        DROP FUNCTION [awsdms].[split_partition_list];
      GO
      
      CREATE FUNCTION [awsdms].[split_partition_list] 
      ( 
        @plist varchar(8000),    --A delimited list of partitions    
        @dlm nvarchar(1)    --Delimiting character
      ) 
      RETURNS @partitionsTable table --Table holding the BIGINT values of the string fragments
      (
        pid bigint primary key
      ) 
      AS 
      BEGIN
        DECLARE @partition_id bigint;
        DECLARE @dlm_pos integer;
        DECLARE @dlm_len integer;  
        SET @dlm_len = len(@dlm);
        WHILE (charindex(@dlm,@plist)>0)
        BEGIN 
          SET @dlm_pos = charindex(@dlm,@plist);
          SET @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
          INSERT into @partitionsTable (pid) values (@partition_id)
          SET @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
        END 
        SET @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
        INSERT into @partitionsTable (pid) values (  @partition_id  );
        RETURN
      END
      GO
      ```

   1. 마스터 데이터베이스에서 `[awsdms].[rtm_dump_dblog]` 프로시저를 생성합니다.

      ```
      USE [MASTER] 
      GO
      
      IF (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null
        DROP PROCEDURE [awsdms].[rtm_dump_dblog]; 
      GO
      
      SET ansi_nulls on
      GO 
      
      SET quoted_identifier on 
      GO
                                          
      CREATE PROCEDURE [awsdms].[rtm_dump_dblog]
      (
        @start_lsn            varchar(32),
        @seqno                integer,
        @filename             varchar(260),
        @partition_list       varchar(8000), -- A comma delimited list: P1,P2,... Pn
        @programmed_filtering integer,
        @minPartition         bigint,
        @maxPartition         bigint
      ) 
      AS 
      BEGIN
      
        DECLARE @start_lsn_cmp varchar(32); -- Stands against the GT comparator
      
        SET NOCOUNT ON  -- Disable "rows affected display"
      
        SET @start_lsn_cmp = @start_lsn;
        IF (@start_lsn_cmp) is null
          SET @start_lsn_cmp = '00000000:00000000:0000';
      
        IF (@partition_list is null)
          BEGIN
            RAISERROR ('Null partition list was passed',16,1);
            return
            --set @partition_list = '0,';    -- A dummy which is never matched
          END
      
        IF (@start_lsn) is not null
          SET @start_lsn = '0x'+@start_lsn;
      
        IF (@programmed_filtering=0)
          SELECT
            [Current LSN],
            [operation],
            [Context],
            [Transaction ID],
            [Transaction Name],
            [Begin Time],
            [End Time],
            [Flag Bits],
            [PartitionID],
            [Page ID],
            [Slot ID],
            [RowLog Contents 0],
            [Log Record],
            [RowLog Contents 1] -- After Image
          FROM
            fn_dump_dblog (
              @start_lsn, NULL, N'DISK', @seqno, @filename,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default)
          WHERE 
            [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND       
                [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
              )
            OR
            ([operation] = 'LOP_HOBT_DDL')
          )
          ELSE
            SELECT
              [Current LSN],
              [operation],
              [Context],
              [Transaction ID],
              [Transaction Name],
              [Begin Time],
              [End Time],
              [Flag Bits],
              [PartitionID],
              [Page ID],
              [Slot ID],
              [RowLog Contents 0],
              [Log Record],
              [RowLog Contents 1] -- After Image
            FROM
              fn_dump_dblog (
                @start_lsn, NULL, N'DISK', @seqno, @filename,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default)
            WHERE [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
              )
              OR
              ([operation] = 'LOP_HOBT_DDL')
            )
            SET NOCOUNT OFF -- Re-enable "rows affected display"
      END
      GO
      ```

   1. 마스터 데이터베이스에서 인증서를 생성합니다.

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions'
      ```

   1. 인증서에서 로그인을 생성합니다.

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE
        [awsdms_rtm_dump_dblog_cert];
      ```

   1. sysadmin 서버 역할에 로그인을 추가합니다.

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
      ```

   1. 인증서를 사용하여 [master].[awsdms].[rtm\$1dump\$1dblog] 프로시저에 서명을 추가합니다.

      ```
      USE [master]
      GO
      
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_dump_dblog]
        BY CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**참고**  
저장된 프로시저를 다시 생성할 경우 서명을 다시 추가해야 합니다.

   1. 마스터 데이터베이스에서 `[awsdms].[rtm_position_1st_timestamp]` 프로시저를 생성합니다.

      ```
      USE [master]
      IF object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
        DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
      GO
      CREATE PROCEDURE [awsdms].[rtm_position_1st_timestamp]
      (
        @dbname                sysname,      -- Database name
        @seqno                 integer,      -- Backup set sequence/position number within file
        @filename              varchar(260), -- The backup filename
        @1stTimeStamp          varchar(40)   -- The timestamp to position by
      ) 
      AS 
      BEGIN
        SET NOCOUNT ON       -- Disable "rows affected display"
      
        DECLARE @firstMatching table
        (
          cLsn varchar(32),
          bTim datetime
        )
        DECLARE @sql nvarchar(4000)
        DECLARE @nl                       char(2)
        DECLARE @tb                       char(2)
        DECLARE @fnameVar                 sysname = 'NULL'
      
        SET @nl  = char(10); -- New line
        SET @tb  = char(9)   -- Tab separator
      
        IF (@filename is not null)
          SET @fnameVar = ''''+@filename +''''
        SET @filename = ''''+@filename +''''
        SET @sql='use ['+@dbname+'];'+@nl+
          'SELECT TOP 1 [Current LSN],[Begin Time]'+@nl+
          'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @filename +','+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default)'+@nl+
          'WHERE operation=''LOP_BEGIN_XACT''' +@nl+
          'AND [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
      
          --print @sql
          DELETE FROM @firstMatching 
          INSERT INTO @firstMatching  exec sp_executesql @sql    -- Get them all
          SELECT TOP 1 cLsn as [matching LSN],convert(varchar,bTim,121) AS[matching Timestamp] FROM @firstMatching;
      
          SET NOCOUNT OFF      -- Re-enable "rows affected display"
      
      END
      GO
      ```

   1. 마스터 데이터베이스에서 인증서를 생성합니다.

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
      ```

   1. 인증서에서 로그인을 생성합니다.

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE
        [awsdms_rtm_position_1st_timestamp_cert];
      ```

   1. sysadmin 서버 역할에 로그인을 추가합니다.

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
      ```

   1. 인증서를 사용하여 `[master].[awsdms].[rtm_position_1st_timestamp]` 프로시저에 서명을 추가합니다.

      ```
      USE [master]
      GO
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_position_1st_timestamp]
        BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**참고**  
저장된 프로시저를 다시 생성할 경우 서명을 다시 추가해야 합니다.

   1. 다음 각 데이터베이스에서 다음과 같은 권한/역할을 보유한 사용자를 생성합니다.
**참고**  
각 복제본에서 동일한 SID를 사용하여 dmsnosysadmin 사용자 계정을 생성해야 합니다. 아래의 SQL 쿼리는 각 복제본에서 dmsnosysadmin 계정 SID 값을 확인하는 데 도움이 될 수 있습니다. 사용자 생성에 대한 자세한 내용은 [Microsoft SQL 서버 설명서](https://learn.microsoft.com/en-us/sql/)의 [CREATE USER (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql) 섹션을 참조하세요. Azure SQL 데이터베이스의 SQL 사용자 계정 생성에 대한 자세한 내용은 [활성 geo-replication](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview) 섹션을 참조하세요.

      ```
      SELECT @@servername servername, name, sid, create_date, modify_date
        FROM sys.server_principals
        WHERE name = 'dmsnosysadmin';
      ```

   1. 각 복제에서 마스터 데이터베이스에 대한 권한을 부여합니다.

      ```
      USE master
      GO 
      
      GRANT select on sys.fn_dblog to dmsnosysadmin;
      GRANT view any definition to dmsnosysadmin;
      GRANT view server state to dmsnosysadmin -- (should be granted to the login).
      GRANT execute on sp_repldone to dmsnosysadmin;
      GRANT execute on sp_replincrementlsn to dmsnosysadmin;
      GRANT execute on sp_addpublication to dmsnosysadmin;
      GRANT execute on sp_addarticle to dmsnosysadmin;
      GRANT execute on sp_articlefilter to dmsnosysadmin;
      GRANT select on [awsdms].[split_partition_list] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_dump_dblog] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dmsnosysadmin;
      ```

   1. 각 복제에서 msdb 데이터베이스에 대한 권한을 부여합니다.

      ```
      USE msdb
      GO
      GRANT select on msdb.dbo.backupset TO self_managed_user
      GRANT select on msdb.dbo.backupmediafamily TO self_managed_user
      GRANT select on msdb.dbo.backupfile TO self_managed_user
      ```

   1. 소스 데이터베이스에서 `db_owner` 역할을 `dmsnosysadmin`에 추가합니다. 데이터베이스가 동기화되었으므로, 기본 복제에만 역할을 추가할 수 있습니다.

      ```
      use <source DB>
      GO 
      EXEC sp_addrolemember N'db_owner', N'dmsnosysadmin'
      ```

## 클라우드 SQL Server DB 인스턴스에서 지속적 복제 설정
<a name="CHAP_Source.SQLServer.Configuration"></a>

이 섹션에서는 클라우드에 호스팅된 SQL Server 데이터베이스 인스턴스에 CDC를 설정하는 방법을 설명합니다. 클라우드에 호스팅된 SQL 서버 인스턴스는 Amazon RDS for SQL Server, Azure SQL Managed Instance 또는 기타 관리형 클라우드 SQL Server 인스턴스에서 실행되는 인스턴스입니다. 각 데이터베이스 유형에 따른 지속적 복제 제한 사항에 대한 자세한 내용은 [SQL Server를 소스로 사용할 때의 제한 사항 AWS DMS](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Limitations) 섹션을 참조하세요.

지속적 복제를 설정하기 전에 [SQL Server 소스에서 지속적 복제(CDC) 사용을 위한 사전 요구 사항](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites) 섹션을 참조하세요.

자체 관리형 Microsoft SQL Server 소스와 달리 Amazon RDS for SQL Server는 MS-Replication을 지원하지 않습니다. 따라서 기본 키가 있거나 없는 테이블에 MS-CDC를 사용해야 AWS DMS 합니다.

Amazon RDS는 소스 SQL Server 인스턴스의 지속적인 변경에 AWS DMS 가 사용하는 복제 아티팩트를 설정할 수 있는 sysadmin 권한을 부여하지 않습니다. 다음 절차와 같이 Amazon RDS 인스턴스에서 MS-CDC를 켜야 합니다(마스터 사용자 권한 사용).

**클라우드 SQL Server DB 인스턴스에서 MS-CDC를 켜려면**

1. 데이터베이스 수준에서 다음 쿼리 중 하나를 실행합니다.

   RDS for SQL Server DB 인스턴스에는 다음 쿼리를 사용하세요.

   ```
   exec msdb.dbo.rds_cdc_enable_db 'DB_name'
   ```

   Azure SQL 관리형 DB 인스턴스에는 다음 쿼리를 사용하세요.

   ```
   USE DB_name 
   GO 
   EXEC sys.sp_cdc_enable_db 
   GO
   ```

1. 프라이머리 키가 있는 각 테이블마다 다음 쿼리를 실행하여 MS-CDC를 켭니다.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

   고유 키는 있지만 프라이머리 키가 없는 각 테이블마다 다음 쿼리를 실행하여 MS-CDC를 켭니다.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

    프라이머리 키도 없고 고유 키도 없는 각 테이블마다 다음 쿼리를 실행하여 MS-CDC를 켭니다.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

1. 보존 기간 설정:
   + DMS 버전 3.5.3 이상을 사용하여 복제하는 RDS for SQL Server 인스턴스의 경우 보존 기간이 기본값인 5초로 설정되어 있는지 확인합니다. DMS 3.5.2 이하에서 DMS 3.5.3 이상으로 업그레이드하거나 이동하는 경우 새 인스턴스 또는 업그레이드된 인스턴스에서 작업이 실행된 후 폴링 간격 값을 변경합니다. 다음 스크립트는 보존 기간을 5초로 설정합니다.

     ```
     use dbname
     EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 5
     exec sp_cdc_stop_job 'capture'
     exec sp_cdc_start_job 'capture'
     ```
   + `@pollinginterval` 파라미터는 초 단위로 측정되며 권장 값은 86,399로 설정되어 있습니다. 즉, `@pollinginterval = 86399`일 경우 트랜잭션 로그는 86,399초(하루) 동안 변경 사항을 보존합니다. 프로시저 `exec sp_cdc_start_job 'capture'`에서 설정을 시작합니다.
**참고**  
일부 버전의 SQL Server에서는 `pollinginterval` 값을 3,599초 이상으로 설정하면 값이 기본값인 5초로 재설정됩니다. 이 경우가 항목을 AWS DMS 읽기 전에 T-Log 항목이 제거됩니다. 이 알려진 문제의 영향을 받는 SQL Server 버전을 확인하려면 [이 Microsoft KB 문서](https://support.microsoft.com/en-us/topic/kb4459220-fix-incorrect-results-occur-when-you-convert-pollinginterval-parameter-from-seconds-to-hours-in-sys-sp-cdc-scan-in-sql-server-dac8aefe-b60b-7745-f987-582dda2cfa78)를 참조하세요.

     다중 AZ에서 Amazon RDS를 사용하는 경우, 장애 조치 시 보조 AZ도 올바른 값을 갖도록 설정해야 합니다.

     ```
     exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , <5 or preferred value>
     ```

**AWS DMS 복제 작업이 1시간 이상 중지될 때 보존 기간을 유지하려면**
**참고**  
다음 단계는 DMS 3.5.3 이상을 사용하여 RDS for SQL Server 소스를 복제하는 데 필요하지 않습니다.

1. 다음 명령을 사용하여 트랜잭션 로그를 잘라내는 작업을 중지합니다.

   ```
   exec sp_cdc_stop_job 'capture'
   ```

1.  AWS DMS 콘솔에서 작업을 찾아 작업을 재개합니다.

1. **모니터링** 탭을 선택하고 `CDCLatencySource` 지표를 확인합니다.

1. `CDCLatencySource` 지표가 0이고 그대로 유지되면 다음 명령을 사용하여 트랜잭션 로그를 잘라내는 작업을 다시 시작합니다.

   ```
   exec sp_cdc_start_job 'capture'
   ```

SQL Server 트랜잭션 로그를 잘라내는 작업을 시작해야 한다는 점을 명심하세요. 그렇지 않으면 SQL Server 인스턴스의 스토리지가 꽉 찰 수 있습니다.

### RDS for SQL Server를 소스로 사용할 때 권장되는 설정 AWS DMS
<a name="CHAP_Source.SQLServer.Configuration.Settings"></a>

#### For AWS DMS 3.5.3 이상
<a name="CHAP_Source.SQLServer.Configuration.Settings.353"></a>

**참고**  
RDS for SQL Server 로그 백업 기능의 초기 릴리스는 DMS 버전 3.5.3 릴리스 후 생성하거나 수정한 엔드포인트에 대해 기본적으로 활성화됩니다. 기존 엔드포인트에 이 기능을 사용하려면 변경하지 않고 엔드포인트를 수정합니다.

AWS DMS 버전 3.5.3에는 로그 백업에서 읽기에 대한 지원이 도입되었습니다. DMS는 주로 활성 트랜잭션 로그의 읽기에 의존하여 이벤트를 복제합니다. DMS가 활성 로그에서 트랜잭션을 읽기 전에 백업되는 경우 작업은 온디맨드 방식으로 RDS 백업에 액세스하고 활성 트랜잭션 로그를 따라잡을 때까지 후속 백업 로그에서 읽습니다. DMS가 로그 백업에 액세스할 수 있도록 하려면 RDS 자동 백업 보존 기간을 최소 1일로 설정합니다. 자동 백업 보존 기간 설정에 대한 자세한 내용은 *Amazon RDS 사용 설명서*의 [백업 보존 기간](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ManagingAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupRetention)을 참조하세요.

로그 백업에 액세스하는 DMS 작업은 RDS 인스턴스의 스토리지를 활용합니다. 태스크는 복제에 필요한 로그 백업에만 액세스합니다. Amazon RDS는 다운로드한 백업을 몇 시간 내에 제거합니다. 이 제거는 Amazon S3 또는 Amazon RDS `RESTORE DATABASE` 기능에 보관된 Amazon RDS 백업에는 영향을 주지 않습니다. DMS를 사용하여 복제하려는 경우 RDS for SQL Server 소스에 추가 스토리지를 할당하는 것이 좋습니다. 필요한 스토리지 양을 추정하는 한 가지 방법은 DMS가 복제를 시작하거나 재개할 백업을 식별하고 RDS `tlog backup` 메타데이터 함수를 사용하여 모든 후속 백업의 파일 크기를 추가하는 것입니다. `tlog backup` 함수에 대한 자세한 내용은 *Amazon RDS 사용 설명서*의 [사용 가능한 트랜잭션 로그 백업 나열](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER.SQLServer.AddlFeat.TransactionLogAccess.html#USER.SQLServer.AddlFeat.TransactionLogAccess.Listing)을 참조하세요.

또는 Amazon RDS 인스턴스의 CloudWatch `FreeStorageSpace` 지표를 기반으로 스토리지 자동 크기 조정을 활성화하거나 스토리지 크기 조정을 트리거하도록 선택할 수 있습니다.

트랜잭션 로그 백업의 너무 먼 지점에서 시작하거나 재개하지 않는 것이 좋습니다. SQL Server 인스턴스에 스토리지가 채워질 수 있습니다. 이러한 경우 전체 로드를 시작하는 것이 좋습니다. 트랜잭션 로그 백업에서 복제하는 속도가 활성 트랜잭션 로그에서 읽는 것보다 느립니다. 자세한 내용은 [RDS for SQL Server에 대한 트랜잭션 로그 백업 처리](CHAP_Troubleshooting_Latency_Source_SQLServer.md#CHAP_Troubleshooting_Latency_Source_SQLServer_backup) 단원을 참조하십시오.

로그 백업에 액세스하려면 추가 권한이 필요합니다. 자세한 내용은 [클라우드 SQL Server 데이터베이스에서 지속적인 복제를 위한 권한 설정](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Permissions.Cloud) 섹션의 설명을 참조하세요. 태스크 복제를 시작하기 전에 이러한 권한을 부여했는지 확인하세요.

#### For AWS DMS 3.5.2 이하
<a name="CHAP_Source.SQLServer.Configuration.Settings.352"></a>

Amazon RDS for SQL Server를 소스로 사용하는 경우, MS-CDC 캡처 작업은 `maxscans` 및 `maxtrans` 파라미터를 사용합니다. 이러한 파라미터는 MS-CDC 캡처가 트랜잭션 로그에서 수행하는 최대 스캔 수와 각 스캔별로 처리되는 트랜잭션 수를 제어합니다.

트랜잭션 수가 `maxtrans*maxscans`보다 많은 데이터베이스의 경우, `polling_interval` 값을 늘리면 활성 트랜잭션 로그 레코드가 누적될 수 있습니다. 결과적으로 이러한 누적으로 인해 트랜잭션 로그 크기가 증가할 수 있습니다.

 AWS DMS 는 MS-CDC 캡처 작업에 의존하지 않습니다. MS-CDC 캡처 작업은 트랜잭션 로그 항목을 처리된 것으로 표시합니다. 이렇게 하면 트랜잭션 로그 백업 작업이 트랜잭션 로그에서 항목을 제거할 수 있습니다.

트랜잭션 로그의 크기와 MS-CDC 작업의 성공 여부를 모니터링하는 것이 좋습니다. MS-CDC 작업이 실패하면 트랜잭션 로그가 과도하게 증가하여 AWS DMS 복제가 실패할 수 있습니다. 소스 데이터베이스의 `sys.dm_cdc_errors` 동적 관리 뷰를 사용하여 MS-CDC 캡처 작업 오류를 모니터링할 수 있습니다. `DBCC SQLPERF(LOGSPACE)` 관리 명령을 사용하여 트랜잭션 로그 크기를 모니터링할 수 있습니다.

**MS-CDC로 인한 트랜잭션 로그 증가를 해결하려면**

1. `Log Space Used %` 데이터베이스 AWS DMS 가에서 복제되고 있는지 확인하고 지속적으로 증가하는지 확인합니다.

   ```
   DBCC SQLPERF(LOGSPACE)
   ```

1. 트랜잭션 로그 백업 프로세스를 방해하는 요인을 식별합니다.

   ```
   Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();
   ```

   `log_reuse_wait_desc` 값이 `REPLICATION`과 같으면 MS-CDC의 지연 시간으로 인해 로그 백업 보존이 발생합니다.

1. `maxtrans` 및 `maxscans` 파라미터 값을 늘려 캡처 작업에서 처리되는 이벤트 수를 늘립니다.

   ```
   EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 
   exec sp_cdc_stop_job 'capture'
   exec sp_cdc_start_job 'capture'
   ```

이 문제를 해결하려면 `maxtrans*maxscans`가 매일 소스 데이터베이스에서 AWS DMS 복제되는 테이블에 대해 생성된 평균 이벤트 수와 같`maxtrans`도록 `maxscans` 및 값을 설정합니다.

이러한 파라미터를 권장 값보다 높게 설정하면 캡처 작업은 트랜잭션 로그의 모든 이벤트를 처리합니다. 이러한 파라미터를 권장 값보다 낮게 설정하면 MS-CDC 지연 시간이 늘어나고 트랜잭션 로그가 증가합니다.

워크로드의 변경으로 이벤트 수가 달라지기 때문에 적절한 `maxscans` 값과 `maxtrans` 값을 식별하는 것이 어려울 수 있습니다. 이 경우 MS-CDC 지연 시간에 대한 모니터링을 설정하는 것이 좋습니다. 자세한 내용은 SQL Server 설명서에서 [Monitor the process](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/administer-and-monitor-change-data-capture-sql-server?view=sql-server-ver15#Monitor)를 참조하세요. 그런 다음 모니터링 결과를 기반으로 `maxtrans`과 `maxscans`를 동적으로 구성합니다.

 AWS DMS 작업이 작업을 재개하거나 계속하는 데 필요한 로그 시퀀스 번호(LSNs)를 찾을 수 없는 경우 작업이 실패하고 전체 재로드가 필요할 수 있습니다.

**참고**  
 AWS DMS 를 사용하여 RDS for SQL Server 소스에서 데이터를 복제하는 경우 Amazon RDS 인스턴스의 중지-시작 이벤트 후 복제를 재개하려고 할 때 오류가 발생할 수 있습니다. 이는 중지-시작 이벤트 후 다시 시작할 때 SQL Server Agent 프로세스가 캡처 작업 프로세스를 다시 시작하기 때문입니다. 이는 MS-CDC 폴링 간격을 우회합니다.  
따라서 트랜잭션 볼륨이 MS-CDC 캡처 작업 처리보다 낮은 데이터베이스에서는가 중지된 위치에서 재개하기 전에 데이터가 처리되거나 복제 및 백업된 것으로 표시되어 다음 오류가 발생할 AWS DMS 수 있습니다.  

```
[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)
```
이 문제를 완화하려면 앞서 권장한 대로 `maxtrans` 및 `maxscans` 값을 설정하세요.

# Microsoft Azure SQL 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.AzureSQL"></a>

를 사용하면 Microsoft Azure SQL 데이터베이스를 SQL Server와 거의 동일한 방식으로 소스로 사용할 AWS DMS수 있습니다.는 온프레미스 또는 Amazon EC2 인스턴스에서 실행되는 SQL Server에 대해 지원되는 것과 동일한 데이터베이스 버전 목록을 소스로 AWS DMS 지원합니다.

자세한 내용은 [Microsoft SQL Server 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.SQLServer.md) 단원을 참조하십시오.

**참고**  
AWS DMS 는 Azure SQL Database에서 변경 데이터 캡처 작업(CDC)을 지원하지 않습니다.

# Microsoft Azure SQL 관리형 인스턴스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.AzureMgd"></a>

를 사용하면 SQL Server와 거의 동일한 방식으로 Microsoft Azure SQL 관리형 인스턴스를 소스로 사용할 AWS DMS수 있습니다.는 온프레미스 또는 Amazon EC2 인스턴스에서 실행되는 SQL Server에 대해 지원되는 것과 동일한 데이터베이스 버전 목록을 소스로 AWS DMS 지원합니다.

자세한 내용은 [Microsoft SQL Server 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.SQLServer.md) 단원을 참조하십시오.

# Microsoft Azure Database for PostgreSQL 유연한 서버를의 소스로 사용 AWS DMS
<a name="CHAP_Source.AzureDBPostgreSQL"></a>

를 사용하면 PostgreSQL과 거의 동일한 방식으로 Microsoft Azure Database for PostgreSQL 유연한 서버를 소스로 사용할 AWS DMS수 있습니다.

가 소스로 AWS DMS 지원하는 Microsoft Azure Database for PostgreSQL 유연한 서버 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

## 논리적 복제 및 디코딩을 위한 Microsoft Azure Database for PostgreSQL 유연한 서버 설정
<a name="CHAP_Source.AzureDBPostgreSQL.setup"></a>

데이터베이스 마이그레이션 중에 Microsoft Azure Database for PostgreSQL 유연한 서버에서 논리적 복제 및 디코딩 기능을 사용할 수 있습니다.

논리적 디코딩을 위해 DMS는 `test_decoding` 또는 `pglogical` 플러그인 중 하나를 사용합니다. 소스 PostgreSQL 데이터베이스에서 `pglogical` 플러그인을 사용할 수 있는 경우, DMS는 `pglogical`을 사용하여 복제 슬롯을 생성합니다. 그렇지 않을 경우에는 `test_decoding` 플러그인을 사용합니다.

Microsoft Azure Database for PostgreSQL 유연한 서버를 DMS의 소스 엔드포인트로 구성하려면 다음 단계를 수행합니다.

1. 포털에서 서버 파라미터 페이지를 엽니다.

1. `wal_level` 서버 파라미터를 `LOGICAL`로 설정합니다.

1. `pglogical` 확장을 사용하려면 `shared_preload_libraries` 및 `azure.extensions` 파라미터를 `pglogical`로 설정합니다.

1. `max_replication_slots` 파라미터를 동시에 실행하려는 최대 DMS 태스크 수로 설정합니다. Microsoft Azure의 경우, 이 파라미터의 기본값은 10입니다. 이 파라미터의 최대값은 PostgreSQL 인스턴스의 사용 가능한 메모리에 따라 달라지며, 메모리의 GB당 2\$18개의 복제 슬롯이 허용됩니다.

1. `max_wal_senders` 파라미터를 1보다 큰 값으로 설정합니다. `max_wal_senders` 파라미터는 실행 가능한 동시 작업 개수를 설정합니다. 기본값은 10입니다.

1. `max_worker_processes` 파라미터 값을 최소 16으로 설정합니다. 그렇지 않을 경우, 다음과 같은 오류가 발생할 수 있습니다.

   ```
   WARNING: out of background worker slots.
   ```

1. 변경 사항을 저장합니다. 서버를 재시작하여 변경 사항을 적용합니다.

1. PostgreSQL 인스턴스가 연결 리소스의 네트워크 트래픽을 허용하는지 확인합니다.

1. 아래의 명령을 사용하여 기존 사용자에게 복제 권한을 부여하거나, 복제 권한이 있는 새 사용자를 생성합니다.
   + 아래의 명령을 사용하여 기존 사용자에게 복제 권한을 부여합니다.

     ```
     ALTER USER <existing_user> WITH REPLICATION;
     ```
   + 아래의 명령을 사용하여 복제 권한이 있는 새 사용자를 생성합니다.

     ```
     CREATE USER aws_dms_user PASSWORD 'aws_dms_user_password';
     GRANT azure_pg_admin to aws_dms_user;
     ALTER ROLE aws_dms_user REPLICATION LOGIN;
     ```

PostgreSQL을 사용한 논리적 복제에 대한 자세한 내용은 아래 주제를 참조하세요.
+ [논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [네이티브 CDC 시작 지점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드 설정](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ [Azure Database for PostgreSQL 설명서](https://learn.microsoft.com/en-us/azure/postgresql/)의 [ Logical replication and logical decoding in Azure Database for PostgreSQL - Flexible Server](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-logical).

# Microsoft Azure Database for MySQL 유연한 서버를의 소스로 사용 AWS DMS
<a name="CHAP_Source.AzureDBMySQL"></a>

를 사용하면 MySQL과 거의 동일한 방식으로 Microsoft Azure Database for MySQL 유연한 서버를 소스로 사용할 AWS DMS수 있습니다.

가 소스로 AWS DMS 지원하는 Microsoft Azure Database for MySQL 유연한 서버 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

에서 고객 관리형 MySQL 호환 데이터베이스를 사용하는 방법에 대한 자세한 내용은 섹션을 AWS DMS참조하세요[자체 관리형 MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.MySQL.md#CHAP_Source.MySQL.CustomerManaged).

## Azure MySQL을의 소스로 사용할 때의 제한 사항 AWS Database Migration Service
<a name="CHAP_Source.AzureDBMySQL.limitations"></a>
+ Azure MySQL 유연한 서버 시스템 변수의 기본값은 `sql_generate_invisible_primary_key`이며 `ON`서버는 생성된 보이지 않는 기본 키(GIPK)를 명시적 기본 키 없이 생성된 테이블에 자동으로 추가합니다. AWS DMS 는 GIPK 제약 조건이 있는 MySQL 테이블에 대한 지속적인 복제를 지원하지 않습니다.

# OCI MySQL Heatwave를의 소스로 사용 AWS DMS
<a name="CHAP_Source.heatwave"></a>

를 사용하면 MySQL과 거의 동일한 방식으로 OCI MySQL Heatwave를 소스로 사용할 AWS DMS수 있습니다. OCI MySQL Heatwave를 소스로 사용하려면 몇 가지 추가 구성을 변경해야 합니다.

가 소스로 AWS DMS 지원하는 OCI MySQL Heatwave 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

## 논리적 복제를 위한 OCI MySQL Heatwave 설정
<a name="CHAP_Source.heatwave.setup"></a>

OCI MySQL Heatwave 인스턴스를 DMS의 소스 엔드포인트로 구성하려면 다음을 수행합니다.

1. OCI 콘솔에 로그인하고 왼쪽 상단의 기본 햄버거 메뉴(≡)를 엽니다.

1. **데이터베이스**, **DB 시스템**을 선택합니다.

1. **구성** 메뉴를 엽니다.

1. **구성 생성**을 선택합니다.

1. 구성 이름(예: **dms\$1configuration**)을 입력합니다.

1. 현재 OCI MySQL Heatwave 인스턴스의 형태를 선택합니다. **DB 시스템 구성:형태** 섹션 아래에 있는 인스턴스의 **DB 시스템 구성** 속성 탭에서 형태를 찾을 수 있습니다.

1. **시스템 변수** 섹션에서 `binlog_row_value_options` 시스템 변수를 선택합니다. 기본값은 `PARTIAL_JSON`입니다. 값을 지웁니다.

1. **생성** 버튼을 선택합니다.

1. OCI MySQLHeatwave 인스턴스를 열고 **편집** 버튼을 선택합니다.

1. **구성** 섹션에서 **구성 변경** 버튼을 선택하고, 4단계에서 생성한 형태 구성을 선택합니다.

1. 변경 사항이 적용되면 인스턴스는 논리적 복제를 수행할 준비가 완료됩니다.

# MySQL용 Google Cloud를의 소스로 사용 AWS DMS
<a name="CHAP_Source.GC"></a>

를 사용하면 MySQL과 거의 동일한 방식으로 Google Cloud for MySQL을 소스로 사용할 AWS DMS수 있습니다.

가 소스로 AWS DMS 지원하는 GCP MySQL 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

자세한 내용은 [MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS](CHAP_Source.MySQL.md) 단원을 참조하십시오.

**참고**  
소스로서 GCP MySQL 8.0에 대한 지원은 AWS DMS 버전 3.4.6에서 사용할 수 있습니다.  
AWS DMS 는 MySQL 인스턴스`verify-full`용 GCP에 대한 SSL 모드를 지원하지 않습니다.  
GCP MySQL 보안 설정은 서버 및 클라이언트 인증서 확인이 모두 필요하므로 지원되지 `Allow only SSL connections` 않습니다.는 서버 인증서 확인 AWS DMS 만 지원합니다.  
AWS DMS 는 `binlog_checksum` 데이터베이스 플래그에 `CRC32` 대해의 기본 GCP CloudSQL for MySQL 값을 지원합니다.

# Google Cloud for PostgreSQL을의 소스로 사용 AWS DMS
<a name="CHAP_Source.GCPostgres"></a>

를 사용하면 자체 관리형 PostgreSQL 데이터베이스를 수행하는 것과 거의 동일한 방식으로 Google Cloud for PostgreSQL을 소스로 사용할 AWS DMS수 있습니다.

가 소스로 AWS DMS 지원하는 GCP PostgreSQL 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

자세한 내용은 [PostgreSQL 데이터베이스를 AWS DMS 소스로 사용](CHAP_Source.PostgreSQL.md) 단원을 참조하십시오.

## 논리적 복제 및 디코딩을 위해 Google Cloud for PostgreSQL 설정
<a name="CHAP_Source.GCPostgres.setup"></a>

데이터베이스 마이그레이션 중에 Google Cloud SQL for PostgreSQL에서 논리적 복제 및 디코딩 기능을 사용할 수 있습니다.

논리적 디코딩을 위해 DMS는 다음 플러그인 중 하나를 사용합니다.
+ `test_decoding`
+ `pglogical`

소스 PostgreSQL 데이터베이스에서 `pglogical` 플러그인을 사용할 수 있는 경우, DMS는 `pglogical`을 사용하여 복제 슬롯을 생성합니다. 그렇지 않을 경우에는 `test_decoding` 플러그인을 사용합니다.

에서 논리적 디코딩을 사용하는 방법은 AWS DMS다음과 같습니다.

1. Google Cloud SQL for PostgreSQL을 사용할 경우, `cloudsql.logical_decoding` 플래그를 `on`으로 설정하여 논리적 디코딩을 활성화합니다.

1. `pglogical`을 활성화하려면 `cloudsql.enable_pglogical` 플래그를 `on`으로 설정하고, 데이터베이스를 다시 시작합니다.

1. 논리적 디코딩 기능을 사용하려면 `REPLICATION` 속성을 보유한 PostgreSQL 사용자를 생성합니다. `pglogical` 확장을 사용할 경우, 사용자에게 `cloudsqlsuperuser` 역할이 있어야 합니다. `cloudsqlsuperuser` 역할이 있는 사용자를 생성하려면 다음을 수행합니다.

   ```
   CREATE USER new_aws_dms_user WITH REPLICATION
   IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'new_aws_dms_user_password';
   ```

   기존 사용자에 대해 이 속성을 설정하려면 다음 작업을 수행합니다.

   ```
   ALTER USER existing_user WITH REPLICATION;
   ```

1. `max_replication_slots` 파라미터를 동시에 실행하려는 최대 DMS 태스크 수로 설정합니다. Google Cloud SQL에서 이 파라미터의 기본값은 10입니다. 이 파라미터의 최대값은 PostgreSQL 인스턴스의 사용 가능한 메모리에 따라 달라지며, 메모리의 GB당 2\$18개의 복제 슬롯이 허용됩니다.

PostgreSQL을 사용한 논리적 복제에 대한 자세한 내용은 아래 주제를 참조하세요.
+ [논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [네이티브 CDC 시작 지점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드 설정](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ [Cloud SQL for PostgreSQL 설명서](https://cloud.google.com/sql/docs/postgres)의 [논리 복제 및 디코딩 설정](https://cloud.google.com/sql/docs/postgres/replication/configure-logical-replication).

# PostgreSQL 데이터베이스를 AWS DMS 소스로 사용
<a name="CHAP_Source.PostgreSQL"></a>

를 사용하여 하나 이상의 PostgreSQL 데이터베이스에서 데이터를 마이그레이션할 수 있습니다 AWS DMS. PostgreSQL 데이터베이스를 소스로 사용하여 다른 PostgreSQL 데이터베이스나 지원되는 다른 데이터베이스 중 하나로 데이터를 마이그레이션할 수 있습니다.

가 소스로 AWS DMS 지원하는 PostgreSQL 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

AWS DMS 는 다음과 같은 유형의 데이터베이스에 대해 PostgreSQL을 지원합니다.
+  온프레미스 데이터베이스
+ Amazon EC2 인스턴스의 데이터베이스
+ Amazon RDS DB 인스턴스의 데이터베이스
+ Amazon Aurora PostgreSQL 호환 버전 기반 DB 인스턴스의 데이터베이스
+ Amazon Aurora PostgreSQL 호환 서버리스 버전 기반 DB 인스턴스의 데이터베이스

**참고**  
DMS는 전체 로드에 한해 Amazon Aurora PostgreSQL Serverless V1을 소스로 지원합니다. 하지만 Amazon Aurora PostgreSQL Serverless V2는 전체 로드, 전체 로드 및 CDC, CDC 전용 작업의 소스로 사용할 수 있습니다.

Secure Sockets Layer(SSL)을 사용하여 PostgreSQL 엔드포인트와 복제 인스턴스 간 연결을 암호화할 수 있습니다. PostgreSQL 엔드포인트에서 SSL을 사용하는 방법에 대한 자세한 내용은 [에서 SSL 사용 AWS Database Migration Service](CHAP_Security.SSL.md) 섹션을 참조하세요.

PostgreSQL을 소스로 사용 시 추가 보안 요구 사항으로, 지정된 사용자 계정은 PostgreSQL 데이터베이스에서 등록된 사용자여야 합니다.

PostgreSQL 데이터베이스를 AWS DMS 소스 엔드포인트로 구성하려면 다음을 수행합니다.
+ PostgreSQL 소스 데이터베이스에 대한 AWS DMS 액세스를 제공할 수 있는 적절한 권한이 있는 PostgreSQL 사용자를 생성합니다.
**참고**  
PostgreSQL 소스 데이터베이스가 자체 관리형인 경우, 자세한 내용은 [에서 소스로 자체 관리형 PostgreSQL 데이터베이스 작업 AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites) 섹션을 참조하세요.
PostgreSQL 소스 데이터베이스를 Amazon RDS가 관리하는 경우, 자세한 내용은 [AWS관리형 PostgreSQL 데이터베이스를 DMS 소스로 사용](#CHAP_Source.PostgreSQL.RDSPostgreSQL) 섹션을 참조하세요.
+ 선택한 PostgreSQL 데이터베이스 구성을 준수하는 PostgreSQL 소스 엔드포인트를 생성합니다.
+ 작업 또는 작업 세트를 생성하여 테이블을 마이그레이션합니다.

  전체 로드 전용 작업을 생성하기 위한 추가 엔드포인트 구성이 필요하지 않습니다.

  변경 데이터 캡처 작업(CDC 전용 또는 전체 로드 및 CDC 작업)을 생성하기 전에 [자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 사용하여 CDC 활성화](#CHAP_Source.PostgreSQL.Prerequisites.CDC) 또는 [를 사용하여 AWS관리형 PostgreSQL DB 인스턴스로 CDC 활성화 AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC) 섹션을 참조하세요.

**Topics**
+ [에서 소스로 자체 관리형 PostgreSQL 데이터베이스 작업 AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites)
+ [AWS관리형 PostgreSQL 데이터베이스를 DMS 소스로 사용](#CHAP_Source.PostgreSQL.RDSPostgreSQL)
+ [논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화](#CHAP_Source.PostgreSQL.Security)
+ [네이티브 CDC 시작 지점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드 설정](#CHAP_Source.PostgreSQL.v10)
+ [를 사용하여 PostgreSQL에서 PostgreSQL로 마이그레이션 AWS DMS](#CHAP_Source.PostgreSQL.Homogeneous)
+ [를 사용하여 Babelfish for Amazon Aurora PostgreSQL에서 마이그레이션 AWS DMS](#CHAP_Source.PostgreSQL.Babelfish)
+ [PostgreSQL 소스 데이터베이스에서 AWS DMS 아티팩트 제거](#CHAP_Source.PostgreSQL.CleanUp)
+ [PostgreSQL 데이터베이스를 DMS 소스로 사용 시 추가 구성 설정](#CHAP_Source.PostgreSQL.Advanced)
+ [읽기 전용 복제본을 PostgreSQL의 소스로 사용](#CHAP_Source.PostgreSQL.ReadReplica)
+ [`MapBooleanAsBoolean` PostgreSQL 엔드포인트 설정 사용](#CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting)
+ [DMS 소스로 PostgreSQL 사용 시 엔드포인트 설정 및 추가 연결 속성(ECA)](#CHAP_Source.PostgreSQL.ConnectionAttrib)
+ [PostgreSQL 데이터베이스를 DMS 소스로 사용 시 제한 사항](#CHAP_Source.PostgreSQL.Limitations)
+ [PostgreSQL용 소스 데이터 형식](#CHAP_Source-PostgreSQL-DataTypes)

## 에서 소스로 자체 관리형 PostgreSQL 데이터베이스 작업 AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites"></a>

자체 관리형 PostgreSQL 데이터베이스를 소스로 사용하면 다른 PostgreSQL 데이터베이스 또는에서 지원하는 다른 대상 데이터베이스 중 하나로 데이터를 마이그레이션할 수 있습니다 AWS DMS. 온프레미스 데이터베이스나 Amazon EC2 인스턴스에서 실행되는 자체 관리형 엔진이 데이터베이스 소스가 될 수 있습니다. 전체 로드 작업 및 변경 데이터 캡처(CDC) 작업 모두에 DB 인스턴스를 사용할 수 있습니다.

### 자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 사용하기 위한 사전 조건
<a name="CHAP_Source.PostgreSQL.Prerequisites.SelfManaged"></a>

자체 관리형 PostgreSQL 소스 데이터베이스에서 데이터를 마이그레이션하기 전에 다음을 수행합니다.
+ 버전 9.4.x 이상의 PostgreSQL 데이터베이스를 사용해야 합니다.
+ 전체 로드 및 변경 데이터 캡처(CDC) 작업 또는 CDC 전용 작업의 경우, PostgreSQL 소스 데이터베이스에 지정된 사용자 계정에 슈퍼유저 권한을 부여합니다. 사용자 계정이 소스의 복제 관련 함수에 액세스하려면 슈퍼유저 권한이 필요합니다. DMS 사용자 계정은 테이블을 성공적으로 마이그레이션하려면 모든 열에 대한 SELECT 권한이 필요합니다. 열에 대한 권한이 누락된 경우 DMS는 일반 DMS 데이터 형식 매핑을 사용하여 대상 테이블을 생성하여 메타데이터 차이와 작업 실패를 초래합니다.
+  AWS DMS 복제 서버의 IP 주소를 `pg_hba.conf` 구성 파일에 추가하고 복제 및 소켓 연결을 활성화합니다. 예를 들면 다음과 같습니다.

  ```
              # Replication Instance
              host all all 12.3.4.56/00 md5
              # Allow replication connections from localhost, by a user with the
              # replication privilege.
              host replication dms 12.3.4.56/00 md5
  ```

  PostgreSQL의 `pg_hba.conf` 구성 파일은 클라이언트 인증을 제어합니다. (HBA는 호스트 기반 인증을 의미합니다.) 이 파일은 일반적으로 데이터베이스 클러스터의 데이터 디렉터리에 저장됩니다.
+ 를 사용하여 데이터베이스를 논리적 복제의 소스로 구성하는 경우 섹션을 AWS DMS 참조하세요. [자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 사용하여 CDC 활성화](#CHAP_Source.PostgreSQL.Prerequisites.CDC) 

**참고**  
일부 AWS DMS 트랜잭션은 DMS 엔진이 다시 사용하기 전에 잠시 유휴 상태입니다. PostgreSQL 버전 9.6 이상에서 `idle_in_transaction_session_timeout` 파라미터를 사용하면 유휴 트랜잭션이 시간 초과되어 실패하도록 할 수 있습니다. AWS DMS를 사용할 때는 유휴 트랜잭션을 종료하지 마세요.

### 자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 사용하여 CDC 활성화
<a name="CHAP_Source.PostgreSQL.Prerequisites.CDC"></a>

AWS DMS 는 논리적 복제를 사용하여 변경 데이터 캡처(CDC)를 지원합니다. 자체 관리형 PostgreSQL 소스 데이터베이스의 논리적 복제를 활성화하려면 `postgresql.conf` 구성 파일에서 다음 파라미터와 값을 설정합니다.
+ `wal_level = logical`을 설정합니다.
+ `max_replication_slots`를 1보다 큰 값으로 설정합니다.

  실행할 작업 개수에 따라 `max_replication_slots` 값을 설정합니다. 예를 들어, 5개 작업을 실행하려면 최소 5개의 슬롯을 설정해야 합니다. 작업이 시작된 즉시 슬롯이 자동으로 열리고 작업이 더 이상 실행되지 않더라도 계속 열려 있습니다. 열린 슬롯은 반드시 수동으로 삭제하세요. 참고로 DMS에서 슬롯을 생성한 경우 작업이 삭제되면 DMS가 복제 슬롯을 자동으로 삭제합니다.
+ `max_wal_senders`를 1보다 큰 값으로 설정합니다.

  `max_wal_senders` 파라미터는 실행 가능한 동시 작업 개수를 설정합니다.
+ `wal_sender_timeout` 파라미터는 지정된 밀리초보다 오래 사용되지 않는 복제 연결을 종료합니다. 온프레미스 PostgreSQL 데이터베이스의 기본값은 60,000밀리초(60초)입니다. 값을 0으로 설정하면 시간 제한 메커니즘이 비활성화되며, 이는 유효한 DMS 설정입니다.

  `wal_sender_timeout`을 0이 아닌 값으로 설정하는 경우, CDC가 있는 DMS 작업에는 최소 10,000밀리초(10초)가 필요하며, 값이 10,000보다 작으면 작업이 실패합니다. DMS 복제 인스턴스의 다중 AZ 장애 조치 중에 지연이 발생하지 않도록 하려면 값을 5분 미만으로 유지하세요.

일부 파라미터는 정적이며 서버 시작 시에만 설정할 수 있습니다. 구성 파일(자체 관리형 데이터베이스의 경우) 또는 DB 파라미터 그룹(RDS for PostgreSQL 데이터베이스의 경우)의 항목에 대한 모든 변경 사항은 서버를 다시 시작할 때까지 무시됩니다. 자세한 내용은 [PostgreSQL 설명서](https://www.postgresql.org/docs/current/intro-whatis.html)를 참조하세요.

CDC 활성화에 대한 자세한 내용은 [논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화](#CHAP_Source.PostgreSQL.Security) 섹션을 참조하세요.

## AWS관리형 PostgreSQL 데이터베이스를 DMS 소스로 사용
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL"></a>

 AWS관리형 PostgreSQL DB 인스턴스를 소스로 사용할 수 있습니다 AWS DMS. AWS관리형 PostgreSQL 소스를 사용하여 전체 로드 작업과 변경 데이터 캡처(CDC) 작업을 모두 수행할 수 있습니다.

### AWS관리형 PostgreSQL 데이터베이스를 DMS 소스로 사용하기 위한 사전 조건
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.Prerequisites"></a>

 AWS관리형 PostgreSQL 소스 데이터베이스에서 데이터를 마이그레이션하기 전에 다음을 수행합니다.
+ PostgreSQL DB 인스턴스에 필요한 최소 권한이 있는 AWS 사용자 계정을 PostgreSQL 소스 엔드포인트의 사용자 계정으로 사용하는 것이 좋습니다 AWS DMS. 마스터 계정을 사용하는 것은 권장되지 않습니다. 계정에는 `rds_superuser` 역할과 `rds_replication` 역할이 있어야 합니다. `rds_replication` 역할은 논리적 슬롯을 관리하고 논리적 슬롯을 사용하여 데이터를 스트리밍할 수 있는 권한을 부여합니다.

  사용하는 계정의 마스터 사용자 계정에서 여러 객체를 생성해야 합니다. 객체 생성에 대한 자세한 내용은 [마스터 사용자 계정을 사용하지 않고 Amazon RDS for PostgreSQL 데이터베이스 마이그레이션](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser) 섹션을 참조하세요.
+ 소스 데이터베이스가 가상 프라이빗 클라우드(VPC)에 있는 경우, 데이터베이스가 상주하는 DB 인스턴스에 대한 액세스 권한을 부여하는 VPC 보안 그룹을 선택합니다. 이는 DMS 복제 인스턴스를 소스 DB 인스턴스에 성공적으로 연결하는 데 필요합니다. 데이터베이스와 DMS 복제 인스턴스가 동일한 VPC에 있는 경우, 적절한 보안 그룹을 자체 인바운드 규칙에 추가합니다.

**참고**  
일부 AWS DMS 트랜잭션은 DMS 엔진이 다시 사용하기 전에 잠시 유휴 상태입니다. PostgreSQL 버전 9.6 이상에서 `idle_in_transaction_session_timeout` 파라미터를 사용하면 유휴 트랜잭션이 시간 초과되어 실패하도록 할 수 있습니다. AWS DMS를 사용할 때는 유휴 트랜잭션을 종료하지 마세요.

### 를 사용하여 AWS관리형 PostgreSQL DB 인스턴스로 CDC 활성화 AWS DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC"></a>

AWS DMS 는 DB 인스턴스가 논리적 복제를 사용하도록 구성된 경우 Amazon RDS PostgreSQL 데이터베이스에서 CDC를 지원합니다. 다음 표에는 각 AWS관리형 PostgreSQL 버전의 논리적 복제 호환성이 요약되어 있습니다.


|  PostgreSQL 버전  |  AWS DMS 전체 로드 지원   |  AWS DMS CDC 지원  | 
| --- | --- | --- | 
|  PostgreSQL 10.5(또는 이하)와 호환되는 Aurora PostgreSQL 버전 2.1  |  예  |  아니요  | 
|  PostgreSQL 10.6(또는 이상)과 호환되는 Aurora PostgreSQL 버전 2.2   |  예  |  예  | 
|  PostgreSQL 10.21(또는 이상)과 호환되는 RDS for PostgreSQL  |  예  |  예  | 

**RDS PostgreSQL DB 인스턴스에 대한 논리적 복제를 활성화하려면**

1. PostgreSQL DB 인스턴스의 AWS 마스터 사용자 계정을 PostgreSQL 소스 엔드포인트의 사용자 계정으로 사용합니다. 마스터 사용자 계정에는 CDC 설정을 허용하는 데 필요한 역할이 있습니다.

   마스터 사용자 계정 이외의 계정을 사용하는 경우, 사용하는 계정의 마스터 사용자 계정에서 여러 객체를 생성해야 합니다. 자세한 내용은 [마스터 사용자 계정을 사용하지 않고 Amazon RDS for PostgreSQL 데이터베이스 마이그레이션](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser) 단원을 참조하십시오.

1. DB 클러스터 파라미터 그룹의 `rds.logical_replication` 파라미터를 1로 설정합니다. 이 정적 파라미터를 적용하려면 DB 인스턴스를 재부팅해야 합니다. 이 파라미터를 적용하는 중에 AWS DMS 에서는 `wal_level`, `max_wal_senders`, `max_replication_slots`, `max_connections` 파라미터를 설정합니다. 이러한 파라미터 변경은 WAL(Write Ahead Log) 생성을 강화하므로 논리적 복제 슬롯을 사용할 때 `rds.logical_replication`만 설정하면 됩니다.

1. `wal_sender_timeout` 파라미터는 지정된 밀리초보다 오래 사용되지 않는 복제 연결을 종료합니다. AWS관리형 PostgreSQL 데이터베이스의 기본값은 30,000밀리초(30초)입니다. 값을 0으로 설정하면 시간 제한 메커니즘이 비활성화되며, 이는 유효한 DMS 설정입니다.

   `wal_sender_timeout`을 0이 아닌 값으로 설정하는 경우, CDC가 있는 DMS 작업에는 최소 10,000밀리초(10초)가 필요하며, 값이 0에서 10,000 사이이면 작업이 실패합니다. DMS 복제 인스턴스의 다중 AZ 장애 조치 중에 지연이 발생하지 않도록 하려면 값을 5분 미만으로 유지하세요.

1.  DB 클러스터 파라미터 그룹의 `max_worker_processes` 파라미터 값이 `max_logical_replication_workers`, `autovacuum_max_workers`, `max_parallel_workers`의 총 합계 값과 같거나 더 큰지 확인합니다. 백그라운드 작업자 프로세스 수가 많으면 소규모 인스턴스의 애플리케이션 워크로드에 영향을 미칠 수 있습니다. 따라서 `max_worker_processes`를 기본값보다 높게 설정한 경우, 데이터베이스의 성능을 모니터링하세요.

1.  Aurora PostgreSQL을 CDC의 소스로 사용하는 경우 `synchronous_commit`를 `ON`으로 설정합니다.

**CDC용 PostgreSQL MultiAZ DB 클러스터 읽기 전용 복제본을 사용하려면(지속 복제)**

1. DB 클러스터 파라미터 그룹의 `rds.logical_replication` 및 `sync_replication_slots` 파라미터를 1로 설정합니다. 이 정적 파라미터를 적용하려면 DB 인스턴스를 재부팅해야 합니다.

1. 다음 명령을 실행하여 Writer에서 `awsdms_ddl_audit` 테이블을 생성하고를 사용할 스키마의 `objects_schema` 이름으로 바꿉니다.

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. 다음 명령을 실행하여 `awsdms_intercept_ddl` 함수를 생성하고 `objects_schema`를 다음 스키마의 이름으로 바꿔서 다음을 사용합니다.

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. 다음 명령을 실행하여 이벤트 트리거 `awsdms_intercept_ddl`을 생성합니다.

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

   이러한 이벤트에 액세스하는 모든 사용자와 역할에 필요한 DDL 권한이 있는지 확인합니다. 예제:

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

1. 라이터에서 복제 슬롯 생성:

   ```
   SELECT * FROM pg_create_logical_replication_slot('dms_read_replica_slot', 'test_decoding', false, true);
   ```

1. Reader에서 복제 슬롯을 사용할 수 있는지 확인합니다.

   ```
   select * from pg_catalog.pg_replication_slots where slot_name = 'dms_read_replica_slot';
   
   slot_name            |plugin       |slot_type|datoid|database|temporary|active|active_pid|xmin|catalog_xmin|restart_lsn|confirmed_flush_lsn|wal_status|safe_wal_size|two_phase|inactive_since               |conflicting|invalidation_reason|failover|synced|
   ---------------------+-------------+---------+------+--------+---------+------+----------+----+------------+-----------+-------------------+----------+-------------+---------+-----------------------------+-----------+-------------------+--------+------+
   dms_read_replica_slot|test_decoding|logical  |     5|postgres|false    |false |          |    |3559        |0/180011B8 |0/180011F0         |reserved  |             |true     |2025-02-10 15:45:04.083 +0100|false      |                   |false   |false |
   ```

1. 읽기 전용 복제본에 대한 DMS 소스 엔드포인트를 생성하고 추가 연결 속성을 통해 논리적 복제 슬롯 이름을 설정합니다.

   ```
   slotName=dms_read_replica_slot;
   ```

1. CDC/FL\$1CDC 작업을 생성하고 시작합니다.
**참고**  
CDC/FL\$1CDC 마이그레이션의 경우 DMS는 작업 시작 시간을 CDC 시작 위치로 간주합니다. 복제 슬롯의 모든 이전 LSNs은 무시됩니다.

### 마스터 사용자 계정을 사용하지 않고 Amazon RDS for PostgreSQL 데이터베이스 마이그레이션
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser"></a>

경우에 따라 소스로 사용 중인 Amazon RDS for PostgreSQL DB 인스턴스에 마스터 사용자 계정을 사용하지 못할 수 있습니다. 이러한 경우, 데이터 정의 언어(DDL) 이벤트를 캡처하기 위해 몇 개의 객체를 생성합니다. 마스터 계정 이외의 계정에서 이 객체를 생성하고 나서 마스터 사용자 계정에서 트리거를 생성합니다.

**참고**  
소스 엔드포인트에서 `CaptureDdls` 엔드포인트 설정을 `false`로 설정하는 경우, 소스 데이터베이스에 다음 테이블 및 트리거를 생성할 필요가 없습니다.

다음 절차에 따라 이 객체를 생성합니다.

**객체를 생성하려면**

1. 객체가 생성되는 위치에 있는 스키마를 선택합니다. 기본 스키마는 `public`입니다. 스키마가 있는지와 이 스키마를 `OtherThanMaster` 계정으로 액세스할 수 있는지 확인합니다.

1. 마스터 계정이 아닌 사용자 계정(여기서는 `OtherThanMaster` 계정)을 사용하여 PostgreSQL DB 인스턴스에 로그인합니다.

1. 다음 명령을 실행하여 테이블 `awsdms_ddl_audit`를 생성하고, 다음 코드의 `objects_schema`를 사용할 스키마 이름으로 대체합니다.

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. 다음 코드의 `awsdms_intercept_ddl`를 사용할 스키마의 이름으로 바꿔서 다음 명령을 실행하여 `objects_schema` 함수를 생성합니다.

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. `OtherThanMaster` 계정에서 로그아웃하고 `rds_superuser` 역할이 할당된 계정으로 로그인합니다.

1. 다음 명령을 실행하여 이벤트 트리거 `awsdms_intercept_ddl`을 생성합니다.

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end 
   EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

1. 이러한 이벤트에 액세스하는 모든 사용자와 역할에 필요한 DDL 권한이 있는지 확인합니다. 예제:

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

이전 절차를 완료하면, `OtherThanMaster` 계정을 사용하여 AWS DMS 소스 엔드포인트를 생성할 수 있습니다.

**참고**  
이러한 이벤트는 `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE` 문에 의해 트리거됩니다.

## 논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화
<a name="CHAP_Source.PostgreSQL.Security"></a>

PostgreSQL의 네이티브 논리적 복제 기능을 사용하여 PostgreSQL 소스의 데이터베이스 마이그레이션 중에 변경 데이터 캡처(CDC)를 활성화할 수 있습니다. 이 기능은 자체 관리형 PostgreSQL 및 Amazon RDS for PostgreSQL SQL DB 인스턴스에 사용할 수 있습니다. 이 접근 방식은 가동 중지 시간을 줄이고 대상 데이터베이스를 소스 PostgreSQL 데이터베이스와 동기화하는 데 도움이 됩니다.

AWS DMS 는 기본 키가 있는 PostgreSQL 테이블용 CDC를 지원합니다. 테이블에 프라이머리 키가 없는 경우, 미리 쓰기 로그(WAL)에 데이터베이스 행의 이전 이미지가 포함되지 않습니다. 이 경우 DMS는 테이블을 업데이트할 수 없습니다. 여기서는 추가 구성 설정과 테이블 복제본 ID를 해결 방법으로 사용할 수 있습니다. 하지만 이 접근 방식을 사용하면 추가 로그가 생성될 수 있습니다. 신중하게 테스트한 후에만 테이블 복제본 ID를 해결 방법으로 사용하는 것이 좋습니다. 자세한 내용은 [PostgreSQL 데이터베이스를 DMS 소스로 사용 시 추가 구성 설정](#CHAP_Source.PostgreSQL.Advanced) 단원을 참조하십시오.

**참고**  
REPLICA IDENTITY FULL은 논리적 디코딩 플러그인에서는 지원되지만 pglogical 플러그인에서는 지원되지 않습니다. 자세한 내용은 [pglogical 설명서](https://github.com/2ndQuadrant/pglogical#primary-key-or-replica-identity-required)를 참조하세요.

전체 로드 및 CDC 및 CDC 전용 작업의 경우는 논리적 복제 슬롯을 AWS DMS 사용하여 로그가 디코딩될 때까지 복제용 WAL 로그를 유지합니다. 전체 로드 및 CDC 작업 또는 CDC 작업을 다시 시작(재개가 아님)하면 복제 슬롯이 다시 생성됩니다.

**참고**  
DMS는 논리적 디코딩에 test\$1decoding 또는 pglogical 플러그인을 사용합니다. 소스 PostgreSQL 데이터베이스에서 pglogical 플러그인을 사용할 수 있는 경우, DMS는 pglogical을 사용하여 복제 슬롯을 생성하고, 그렇지 않으면 test\$1decoding 플러그인을 사용합니다. test-decoding 플러그인에 대한 자세한 내용은 [PostgreSQL 설명서](https://www.postgresql.org/docs/9.4/test-decoding.html)를 참조하세요.  
데이터베이스 파라미터 `max_slot_wal_keep_size`가 기본값이 아닌 값으로 설정되고, 복제 슬롯의 `restart_lsn`이 현재 LSN보다 이 크기 이상 모자라는 경우, 필요한 WAL 파일이 제거되기 때문에 DMS 작업이 실패합니다.

### pglogical 플러그인 구성
<a name="CHAP_Source.PostgreSQL.Security.Pglogical"></a>

PostgreSQL 확장으로 구현된 pglogical 플러그인은 선택적 데이터 복제를 위한 논리적 복제 시스템 및 모델입니다. 다음 표에는 pglogical 플러그인을 지원하는 소스 PostgreSQL 데이터베이스 버전이 나와 있습니다.


|  PostgreSQL 소스   |  pglogical 지원  | 
| --- | --- | 
|  자체 관리형 PostgreSQL 9.4 이상  |  예  | 
|  Amazon RDS PostgreSQL 9.5 이하  |  아니요  | 
|  Amazon RDS PostgreSQL 9.6 이상  |  예  | 
|  Aurora PostgreSQL 1.x\$12.5.x  |  아니요  | 
|  Aurora PostgreSQL 2.6.x 이상  |  예  | 
|  Aurora PostgreSQL 3.3.x 이상  |  예  | 

와 함께 사용하도록 pglogical을 구성하기 전에 AWS DMS먼저 PostgreSQL 소스 데이터베이스에서 변경 데이터 캡처(CDC)에 대한 논리적 복제를 활성화합니다.
+ *자체 관리형* PostgreSQL 소스 데이터베이스에서 CDC의 논리적 복제를 활성화하는 방법에 대한 자세한 내용은 [자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 사용하여 CDC 활성화](#CHAP_Source.PostgreSQL.Prerequisites.CDC) 섹션을 참조하세요.
+ *AWS관리형* PostgreSQL 소스 데이터베이스에서 CDC의 논리적 복제를 활성화하는 방법에 대한 자세한 내용은 [를 사용하여 AWS관리형 PostgreSQL DB 인스턴스로 CDC 활성화 AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC) 섹션을 참조하세요.

PostgreSQL 소스 데이터베이스에서 논리적 복제를 활성화한 후 다음 단계를 사용하여 DMS에 사용할 pglogical을 구성합니다.

**를 사용하여 PostgreSQL 소스 데이터베이스에서 논리적 복제에 pglogical 플러그인을 사용하려면 AWS DMS**

1. 소스 PostgreSQL 데이터베이스에서 pglogical 확장을 생성합니다.

   1. 올바른 파라미터를 설정하세요.
      + 자체 관리형 PostgreSQL 데이터베이스의 경우, 데이터베이스 파라미터 `shared_preload_libraries= 'pglogical'`을 설정합니다.
      + Amazon RDS 기반 PostgreSQL과 Amazon Aurora PostgreSQL 호환 버전 데이터베이스의 경우, 동일한 RDS 파라미터 그룹에서 `shared_preload_libraries` 파라미터를 `pglogical`로 설정합니다.

   1. PostgreSQL 소스 데이터베이스를 다시 시작합니다.

   1. PostgreSQL 데이터베이스에서 `create extension pglogical;` 명령을 실행합니다.

1. 다음 명령을 실행하여 pglogical이 성공적으로 설치되었는지 확인합니다.

   `select * FROM pg_catalog.pg_extension`

이제 PostgreSQL 소스 데이터베이스 엔드포인트에 대한 변경 데이터 캡처를 수행하는 AWS DMS 작업을 생성할 수 있습니다.

**참고**  
PostgreSQL 소스 데이터베이스에서 pglogical을 활성화하지 않으면 AWS DMS 는 기본적으로 `test_decoding` 플러그인을 사용합니다. 논리적 디코딩에 pglogical이 활성화된 경우 기본적으로 pglogical을 AWS DMS 사용합니다. 하지만 `test_decoding` 플러그인을 대신 사용하도록 추가 연결 속성 `PluginName`을 설정할 수 있습니다.

## 네이티브 CDC 시작 지점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드 설정
<a name="CHAP_Source.PostgreSQL.v10"></a>

PostgreSQL을 소스로 사용하여 네이티브 CDC 시작 지점을 활성화하려면 엔드포인트를 생성할 때 `slotName` 추가 연결 속성을 기존 논리적 복제 슬롯의 이름으로 설정합니다. 이 논리적 복제 슬롯에는 엔드포인트 생성 시점부터 지속적인 변경 사항이 포함되므로 이전 시점의 복제를 지원합니다.

PostgreSQL은 AWS DMS 가 논리적 복제 슬롯에서 변경 사항을 성공적으로 읽은 후에만 삭제되는 WAL 파일에 데이터베이스 변경 사항을 기록합니다. 논리적 복제 슬롯을 사용하면 기록된 변경 사항이 복제 엔진에서 사용되기 전에 삭제되지 않도록 보호할 수 있습니다.

그러나 변경 비율과 사용 비율에 따라 논리적 복제 슬롯에 변경 사항이 포함되어 디스크 사용량이 증가할 수 있습니다. 논리적 복제 슬롯을 사용할 때 소스 PostgreSQL 인스턴스에서 공간 사용 경보를 설정하는 것이 좋습니다. `slotName` 추가 연결 속성 설정에 대한 자세한 내용은 [DMS 소스로 PostgreSQL 사용 시 엔드포인트 설정 및 추가 연결 속성(ECA)](#CHAP_Source.PostgreSQL.ConnectionAttrib) 섹션을 참조하세요.

다음 절차에서는 이 접근 방식에 대해 자세히 설명합니다.

**고유 CDC 시작 지점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드를 설정하려면**

1. 시작 지점으로 사용할 이전 복제 작업(상위 작업)에서 사용하는 논리적 복제 슬롯을 식별합니다. 그런 다음 원본 데이터베이스에서 `pg_replication_slots` 뷰를 쿼리하여 이 슬롯에 활성 연결이 없는지 확인합니다. 활성 연결이 있다면 계속하기 전에 연결을 확인하고 닫습니다.

   다음 단계에서는 논리적 복제 슬롯이 `abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef`라고 가정합니다.

1. 다음 추가 연결 속성 설정을 포함하는 새 소스 엔드포인트를 만듭니다.

   ```
   slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
   ```

1. 콘솔 AWS CLI 또는 AWS DMS API를 사용하여 새 CDC 전용 작업을 생성합니다. 예를 들어 CLI를 사용하여 다음 `create-replication-task` 명령을 실행할 수 있습니다.

   ```
   aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test 
   --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 
   --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 
   --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE 
   --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" 
   --replication-task-settings "file://task-pg.json"
   ```

   위의 명령에서는 다음 옵션이 설정됩니다.
   + `source-endpoint-arn` 옵션은 2단계에서 만든 새 값으로 설정됩니다.
   + `replication-instance-arn` 옵션은 1단계의 상위 작업과 동일한 값으로 설정됩니다.
   + `table-mappings` 및 `replication-task-settings` 옵션은 1단계의 상위 작업과 동일한 값으로 설정됩니다.
   + `cdc-start-position` 옵션은 시작 위치 값으로 설정됩니다. 이 시작 위치를 찾으려면 원본 데이터베이스의 `pg_replication_slots` 뷰를 쿼리하거나 1단계에서 상위 작업에 대한 콘솔 세부 정보를 확인합니다. 자세한 내용은 [CDC 기본 시작점 결정](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint.Native) 단원을 참조하십시오.

    AWS DMS 콘솔을 사용하여 새 CDC 전용 작업을 생성할 때 사용자 지정 CDC 시작 모드를 활성화하려면 다음을 수행합니다.
   + **작업 설정** 섹션의 **소스 트랜잭션의 CDC 시작 모드**에서 **사용자 지정 CDC 시작 모드 활성화**를 선택합니다.
   + **소스 트랜잭션의 사용자 지정 CDC 시작 지점**에서 **로그 시퀀스 번호 지정**을 선택합니다. 시스템 변경 번호를 지정하거나 **복구 체크포인트 지정**을 선택하고 복구 체크포인트를 제공합니다.

   이 CDC 태스크가 실행되면 지정된 논리적 복제 슬롯이 없는 경우에서 오류가 AWS DMS 발생합니다. 또한 작업이 `cdc-start-position`에 올바른 설정으로 생성되지 않은 경우에도 오류가 발생합니다.

pglogical 플러그인과 함께 네이티브 CDC 시작 지점을 사용하고 새 복제 슬롯을 사용하려는 경우, CDC 작업을 생성하기 전에 다음 설정 단계를 완료하세요.

**이전에 다른 DMS 작업의 일부로 생성하지 않은 새 복제 슬롯을 사용하려면**

1. 다음과 같이 복제 슬롯을 생성합니다.

   ```
   SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
   ```

1. 데이터베이스에서 복제 슬롯이 생성된 후 해당 슬롯의 **restart\$1lsn** 및 **confirmed\$1flush\$1lsn** 값을 가져와 적어 둡니다.

   ```
   select * from pg_replication_slots where slot_name like 'replication_slot_name';
   ```

   복제 슬롯 이후에 생성된 CDC 작업의 네이티브 CDC 시작 위치는 **confirmed\$1flush\$1lsn** 값보다 이전일 수 없습니다.

   **restart\$1lsn** 및 **confirmed\$1flush\$1lsn** 값에 대한 자세한 내용은 [pg\$1replication\$1slots](https://www.postgresql.org/docs/14/view-pg-replication-slots.html)를 참조하세요.

1. pglogical 노드를 생성합니다.

   ```
   SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
   ```

1. `pglogical.create_replication_set` 함수를 사용하여 두 개의 복제 세트를 생성합니다. 첫 번째 복제 세트는 프라이머리 키가 있는 테이블의 업데이트 및 삭제를 추적합니다. 두 번째 복제 세트는 삽입만 추적하며, 첫 번째 복제 세트와 같은 이름에 접두사 'i'가 추가됩니다.

   ```
   SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false);
   SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
   ```

1. 복제본 세트에 테이블을 추가합니다.

   ```
   SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true);
   SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);
   ```

1. 소스 엔드포인트를 생성할 때 추가 연결 속성(ECA)을 다음과 같이 설정합니다.

   ```
   PluginName=PGLOGICAL;slotName=slot_name;
   ```

이제 새 복제 슬롯을 사용하여 PostgreSQL 네이티브 시작 지점이 있는 CDC 전용 작업을 생성할 수 있습니다. pglogical 플러그인에 대한 자세한 내용은 [pglogical 3.7 설명서](https://www.enterprisedb.com/docs/pgd/3.7/pglogical/)를 참조하세요.

## 를 사용하여 PostgreSQL에서 PostgreSQL로 마이그레이션 AWS DMS
<a name="CHAP_Source.PostgreSQL.Homogeneous"></a>

PostgreSQL 이외의 데이터베이스 엔진에서 PostgreSQL 데이터베이스로 마이그레이션하는 경우 AWS DMS 는 거의 항상 사용할 수 있는 최상의 마이그레이션 도구입니다. 하지만 PostgreSQL 데이터베이스에서 PostgreSQL 데이터베이스로 마이그레이션하는 경우, PostgreSQL 도구가 더 효과적입니다.

### PostgreSQL 네이티브 도구를 사용하여 데이터 마이그레이션
<a name="CHAP_Source.PostgreSQL.Homogeneous.Native"></a>

다음과 같은 경우에는 `pg_dump`와 같은 PostgreSQL 데이터베이스 마이그레이션 도구를 사용하는 것이 좋습니다.
+ 같은 유형의 마이그레이션을 수행합니다. 이 경우 PostgreSQL 데이터베이스에서 대상 PostgreSQL 데이터베이스로 마이그레이션합니다.
+ 전체 데이터베이스를 마이그레이션합니다.
+ 기본 도구를 사용하여 최소한의 가동 중지 시간으로 데이터를 마이그레이션할 수 있습니다.

pg\$1dump 유틸리티는 COPY 명령을 사용하여 PostgreSQL 데이터베이스의 스키마와 데이터 덤프를 만듭니다. pg-dump에 의해 생성되는 덤프 스크립트는 같은 이름을 가진 데이터베이스로 데이터를 로드하고 테이블, 인덱스, 외래 키를 다시 만듭니다. 데이터를 다른 이름의 데이터베이스로 복구하려면 `pg_restore` 명령과 `-d` 파라미터를 사용하세요.

EC2에서 실행되는 PostgreSQL 소스 데이터베이스에서 Amazon RDS for PostgreSQL 대상으로 데이터를 마이그레이션하는 경우, pglogical 플러그인을 사용할 수 있습니다.

PostgreSQL 데이터베이스를 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL 호환 버전으로 가져오기에 대한 자세한 내용은 [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html) 섹션을 참조하세요.

### DMS를 사용하여 PostgreSQL에서 PostgreSQL로 데이터 마이그레이션
<a name="CHAP_Source.PostgreSQL.Homogeneous.DMS"></a>

 AWS DMS 는 예를 들어 온프레미스에 있는 소스 PostgreSQL 데이터베이스에서 대상 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 인스턴스로 데이터를 마이그레이션할 수 있습니다. 코어 또는 베이직 PostgreSQL 데이터 유형은 대부분은 성공적으로 마이그레이션됩니다.

**참고**  
파티션된 테이블을 PostgreSQL 소스에서 PostgreSQL 대상으로 복제할 때는 DMS 작업에서 선택 기준의 일부로 상위 테이블을 언급하지 않아도 됩니다. 상위 테이블을 언급하면 대상의 하위 테이블에서 데이터가 중복되어 PK 위반이 발생할 수 있습니다. 테이블 매핑 선택 기준에서 하위 테이블만 선택하면 상위 테이블이 자동으로 채워집니다.

소스 데이터베이스에서 지원되지만 대상에서 지원되지 않는 데이터 형식은 성공적으로 마이그레이션되지 않을 수 있습니다.는 데이터 형식을 알 수 없는 경우 일부 데이터 형식을 문자열로 AWS DMS 스트리밍합니다. XML 또는 JSON과 같은 어떤 데이터 유형은 작업 파일을 성공적으로 마이그레이션할 수 있지만 대형 문서의 경우 실패할 수 있습니다.

데이터 형식 마이그레이션을 수행할 때는 다음 사항에 유의하세요.
+ PostgreSQL NUMERIC(p,s) 데이터 형식이 정밀도와 스케일을 지정하지 않는 경우도 있습니다. DMS 버전 3.4.2 이하 버전에서 DMS는 기본적으로 정밀도 28과 스케일 6인 NUMERIC(28,6)을 사용합니다. 예를 들어 소스의 0.611111104488373 값은 PostgreSQL 대상에서 0.611111로 변환됩니다.
+ ARRAY 데이터 형식이 있는 테이블에는 프라이머리 키가 있어야 합니다. 프라이머리 키가 없는 ARRAY 데이터 형식이 있는 테이블은 전체 로드 중에 일시 중단됩니다.

다음 표는 소스 PostgreSQL 데이터 유형과 이 유형들이 성공적으로 마이그레이션되었는지 나타냅니다.


| 데이터 유형 | 마이그레이션 성공 | 부분적으로 마이그레이션 | 마이그레이션하지 않습니다 | 설명 | 
| --- | --- | --- | --- | --- | 
| INTEGER | X |  |  |  | 
| SMALLINT | X |  |  |  | 
| BIGINT | X |  |  |  | 
| NUMERIC/DECIMAL(p,s) |  | X |  | 여기서, 0<p<39 및 0<s | 
| NUMERIC/DECIMAL |  | X |  | 여기서, p>38 또는 p=s=0 | 
| REAL | X |  |  |  | 
| DOUBLE | X |  |  |  | 
| SMALLSERIAL | X |  |  |  | 
| SERIAL | X |  |  |  | 
| BIGSERIAL | X |  |  |  | 
| MONEY | X |  |  |  | 
| CHAR |  | X |  | 지정한 정밀도 없이 | 
| CHAR(n) | X |  |  |  | 
| VARCHAR |  | X |  | 지정한 정밀도 없이 | 
| VARCHAR(n) | X |  |  |  | 
| TEXT | X |  |  |  | 
| BYTEA | X |  |  |  | 
| TIMESTAMP | X |  |  | 양과 음의 무한대 값은 각각 '9999-12-31 23:59:59'와 '4713-01-01 00:00:00 BC'로 잘립니다. | 
| TIMESTAMP(시간대 사용) |  | X |  |  | 
| DATE | X |  |  |  | 
| TIME | X |  |  |  | 
| TIME WITH TIME ZONE | X |  |  |  | 
| INTERVAL |  | X |  |  | 
| BOOLEAN | X |  |  |  | 
| ENUM |  |  | X |  | 
| CIDR | X |  |  |  | 
| INET |  |  | X |  | 
| MACADDR |  |  | X |  | 
| TSVECTOR |  |  | X |  | 
| TSQUERY |  |  | X |  | 
| XML |  | X |  |  | 
| POINT | X |  |  | PostGIS 공간 데이터 형식 | 
| LINE |  |  | X |  | 
| LSEG |  |  | X |  | 
| BOX |  |  | X |  | 
| PATH |  |  | X |  | 
| POLYGON | X |  |  | PostGIS 공간 데이터 형식 | 
| CIRCLE |  |  | X |  | 
| JSON |  | X |  |  | 
| ARRAY | X |  |  | 프라이머리 키 필요 | 
| COMPOSITE |  |  | X |  | 
| RANGE |  |  | X |  | 
| LINESTRING | X |  |  | PostGIS 공간 데이터 형식 | 
| MULTIPOINT | X |  |  | PostGIS 공간 데이터 형식 | 
| MULTILINESTRING | X |  |  | PostGIS 공간 데이터 형식 | 
| MULTIPOLYGON | X |  |  | PostGIS 공간 데이터 형식 | 
| GEOMETRYCOLLECTION | X |  |  | PostGIS 공간 데이터 형식 | 

### PostGIS 공간 데이터 형식 마이그레이션
<a name="CHAP_Source.PostgreSQL.DataTypes.Spatial"></a>

*공간 데이터*는 공간에서 객체 또는 위치의 지오메트리 정보를 식별합니다. PostgreSQL 객체 관계형 데이터베이스는 PostGIS 공간 데이터 형식을 지원합니다.

PostgreSQL 공간 데이터 객체를 마이그레이션하기 전에 PostGIS 플러그인이 전역 수준에서 활성화되어 있는지 확인하세요. 이렇게 하면가 PostgreSQL 대상 DB 인스턴스에 대한 정확한 소스 공간 데이터 열을 AWS DMS 생성합니다.

PostgreSQL에서 PostgreSQL로의 동종 마이그레이션의 경우는 PostGIS 기하학적 및 지리적(지리적 좌표) 데이터 객체 유형과 다음과 같은 하위 유형의 마이그레이션을 AWS DMS 지원합니다.
+  POINT 
+  LINESTRING 
+  POLYGON 
+  MULTIPOINT 
+  MULTILINESTRING 
+  MULTIPOLYGON 
+  GEOMETRYCOLLECTION 

## 를 사용하여 Babelfish for Amazon Aurora PostgreSQL에서 마이그레이션 AWS DMS
<a name="CHAP_Source.PostgreSQL.Babelfish"></a>

를 사용하여 Babelfish for Aurora PostgreSQL 소스 테이블을 지원되는 모든 대상 엔드포인트로 마이그레이션할 수 있습니다 AWS DMS.

DMS 콘솔, API 또는 CLI 명령을 사용하여 AWS DMS 소스 엔드포인트를 생성할 때 소스를 **Amazon Aurora PostgreSQL**로 설정하고 데이터베이스 이름을 로 설정합니다**babelfish\$1db**. **엔드포인트 설정** 섹션에서 **DatabaseMode**가 **Babelfish**로 설정되어 있고 **BabelfishDatabaseName**이 소스 Babelfish T-SQL 데이터베이스의 이름으로 설정되어 있는지 확인합니다. Babelfish TCP 포트 **1433**을 사용하는 대신 Aurora PostgreSQL TCP 포트 **5432**를 사용합니다.

데이터를 마이그레이션하기 전에 테이블을 생성하여 DMS가 올바른 데이터 유형과 테이블 메타데이터를 사용하도록 해야 합니다. 마이그레이션을 실행하기 전에 대상에 테이블을 생성하지 않으면 DMS는 잘못된 데이터 유형 및 권한으로 테이블을 생성할 수 있습니다.

### 마이그레이션 작업에 변환 규칙 추가
<a name="CHAP_Source.PostgreSQL.Babelfish.Transform"></a>

Babelfish 소스에 대한 마이그레이션 태스크를 생성할 때는 DMS가 사전 생성된 대상 테이블을 사용하도록 하는 변환 규칙을 포함해야 합니다.

Babelfish for PostgreSQL 클러스터를 정의할 때 다중 데이터베이스 마이그레이션 모드를 설정한 경우 스키마 이름을 T-SQL 스키마로 바꾸는 변환 규칙을 추가합니다. 예를 들어 T-SQL 스키마 이름이 `dbo`이고 Babelfish for PostgreSQL 스키마 이름이 `mydb_dbo`인 경우, 변환 규칙을 사용하여 스키마 이름을 `dbo`로 바꾸세요. PostgreSQL 스키마 이름을 찾으려면 *Amazon Aurora 사용 설명서*의 [Babelfish 아키텍처](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-architecture.html)를 참조하세요.

단일 데이터베이스 모드를 사용하는 경우, 데이터베이스 스키마 이름을 바꾸는 변환 규칙을 사용할 필요가 없습니다. PostgreSQL 스키마 이름에는 T-SQL 데이터베이스의 스키마 이름에 대한 일대일 매핑이 있습니다.

다음 변환 규칙 예제에서는 스키마 이름을 `mydb_dbo`에서 `dbo`로 바꾸는 방법을 보여줍니다.

```
{
    "rules": [
        {
            "rule-type": "transformation",
            "rule-id": "566251737",
            "rule-name": "566251737",
            "rule-target": "schema",
            "object-locator": {
                "schema-name": "mydb_dbo"
            },
            "rule-action": "rename",
            "value": "dbo",
            "old-value": null
        },
        {
            "rule-type": "selection",
            "rule-id": "566111704",
            "rule-name": "566111704",
            "object-locator": {
                "schema-name": "mydb_dbo",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

### PostgreSQL 소스 엔드포인트를 Babelfish 테이블과 함께 사용할 때 적용되는 제한 사항
<a name="CHAP_Source.PostgreSQL.Babelfish.Limitations"></a>

PostgreSQL 소스 엔드포인트를 Babelfish 테이블과 함께 사용할 때 적용되는 제한 사항은 다음과 같습니다.
+ DMS는 Babelfish 버전 16.2/15.6 이상 및 DMS 버전 3.5.3 이상에서만 마이그레이션을 지원합니다.
+ DMS는 대상 엔드포인트에 Babelfish 테이블 정의 변경 사항을 복제하지 않습니다. 이 제한의 해결 방법은 먼저 대상에 테이블 정의 변경 사항을 적용한 다음 Babelfish 소스에서 테이블 정의를 변경하는 것입니다.
+ BYTEA 데이터 유형으로 Babelfish 테이블을 생성하면 DMS는 SQL Server로 대상을 마이그레이션할 때 해당 테이블을 `varbinary(max)` 데이터 유형으로 변환합니다.
+ DMS는 바이너리 데이터 유형에 대한 전체 LOB 모드를 지원하지 않습니다. 이진 데이터 유형에는 대신 제한된 LOB 모드를 사용합니다.
+ DMS는 Babelfish에 대한 데이터 검증을 소스로 지원하지 않습니다.
+ **대상 테이블 준비 모드** 태스크 설정의 경우, **아무것도 안 함** 또는 **잘라내기** 모드만 사용하세요. **대상에서 테이블 삭제** 모드를 사용하지 마세요. **대상에서 삭제 테이블**을 사용하는 경우 DMS는 잘못된 데이터 유형을 사용하여 테이블을 생성할 수 있습니다.
+ 지속적인 복제(CDC 또는 전체 로드 및 CDC)를 사용하는 경우 `PluginName` 추가 연결 속성(ECA)을 `TEST_DECODING`으로 설정합니다.
+ DMS는 Babelfish를 소스로 분할한 테이블의 복제(CDC 또는 전체 로드 및 CDC)를 지원하지 않습니다.

## PostgreSQL 소스 데이터베이스에서 AWS DMS 아티팩트 제거
<a name="CHAP_Source.PostgreSQL.CleanUp"></a>

DDL 이벤트를 캡처하기 위해는 마이그레이션 작업이 시작될 때 PostgreSQL 데이터베이스에서 다양한 아티팩트를 AWS DMS 생성합니다. 작업이 완료되면 이 아티팩트를 제거해야 할 수도 있습니다.

아티팩트를 제거하려면 다음 문을 (표시되는 순서대로) 발행합니다. 여기서 `{AmazonRDSMigration}`은 아티팩트가 생성되는 스키마입니다. 스키마 삭제를 수행할 때는 매우 주의해야 합니다. 절대로 연산 스키마(특히 퍼블릭 스키마)를 삭제해서는 안 됩니다.

```
drop event trigger awsdms_intercept_ddl;
```

이벤트 트리거는 특정 스키마에 속하지 않습니다.

```
drop function {AmazonRDSMigration}.awsdms_intercept_ddl()
drop table {AmazonRDSMigration}.awsdms_ddl_audit
drop schema {AmazonRDSMigration}
```

## PostgreSQL 데이터베이스를 DMS 소스로 사용 시 추가 구성 설정
<a name="CHAP_Source.PostgreSQL.Advanced"></a>

다음 두 가지 방법으로 PostgreSQL 데이터베이스에서 데이터를 마이그레이션할 때 구성 설정을 추가할 수 있습니다.
+ 연결 속성을 추가하여 DDL 이벤트를 캡처하고 연산 DDL 데이터베이스 아티팩트가 생성된 스키마를 지정할 수 있습니다. 자세한 내용은 [DMS 소스로 PostgreSQL 사용 시 엔드포인트 설정 및 추가 연결 속성(ECA)](#CHAP_Source.PostgreSQL.ConnectionAttrib) 단원을 참조하십시오.
+ 연결 문자열 파라미터를 재정의할 수 있습니다. 다음 중 하나를 수행하려면 이 옵션을 선택합니다.
  + 내부 AWS DMS 파라미터를 지정합니다. 이러한 파라미터는 거의 필요하지 않으므로 사용자 인터페이스에 표시되지 않습니다.
  + 특정 데이터베이스 클라이언트에 대한 패스스루(패스스루) 값을 지정합니다. 데이터베이스 클라이언트에 전달되는 연결 스팅에 패스스루 파라미터를 AWS DMS 포함합니다.
+ PostgreSQL 버전 9.4 이상에서 테이블 수준 파라미터 `REPLICA IDENTITY`를 사용하면 미리 쓰기 로그(WAL)에 기록되는 정보를 제어할 수 있습니다. 특히 업데이트되거나 삭제된 행을 식별하는 WAL의 경우 더욱 그렇습니다. `REPLICA IDENTITY FULL`은 행에 있는 모든 열의 이전 값을 기록합니다. `FULL`은 필요하지 않을 수도 있는 WAL을 추가로 생성하므로 각 테이블에 `REPLICA IDENTITY FULL`을 신중하게 사용하세요. 자세한 내용은 [ALTER TABLE-REPLICA IDENTITY](https://www.postgresql.org/docs/devel/sql-altertable.html)를 참조하세요.

## 읽기 전용 복제본을 PostgreSQL의 소스로 사용
<a name="CHAP_Source.PostgreSQL.ReadReplica"></a>

PostgreSQL 읽기 전용 복제본을의 CDC 소스로 사용하여 기본 데이터베이스 로드를 AWS DMS 줄입니다. 이 기능은 PostgreSQL 16.x에서 사용할 수 있으며 AWS DMS 버전 3.6.1 이상이 필요합니다. CDC 처리에 읽기 전용 복제본을 사용하면 기본 데이터베이스에 대한 운영 영향이 줄어듭니다.

**참고**  
Amazon RDS PostgreSQL 버전 16.x에는 3AZ(TAZ) 구성의 읽기 전용 복제본 논리적 복제에 대한 제한이 있습니다. TAZ 배포에서 전체 읽기 전용 복제본 논리적 복제를 지원하려면 PostgreSQL 버전 17.x 이상을 사용해야 합니다.

### 사전 조건
<a name="CHAP_Source.PostgreSQL.ReadReplica.prereq"></a>

읽기 전용 복제본을 CDC 소스로 사용하기 전에 기본 데이터베이스 인스턴스와 읽기 전용 복제본 모두에서 논리적 복제를 활성화하여 읽기 전용 복제본에 논리적 디코딩을 생성 AWS DMS해야 합니다. 다음 조치 중 하나를 취하세요.
+ 다른 필수 데이터베이스 파라미터와 함께 기본 데이터베이스 인스턴스 및 읽기 전용 복제본 모두에서 논리적 복제를 활성화합니다. 자세한 내용은 [DMS 소스로 AWS관리형 PostgreSQL 데이터베이스 작업을 참조하세요](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.RDSPostgreSQL).
+ CDC 전용 작업의 경우 기본(라이터) 인스턴스에 복제 슬롯을 생성합니다. 자세한 내용은 [네이티브 CDC 시작 지점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드 설정](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10)을 참조하세요. 읽기 전용 복제본은 복제 슬롯 생성을 지원하지 않으므로 이 작업이 필요합니다.
+ PostgreSQL 버전 16의 경우 읽기 전용 복제본에서 슬롯을 수동으로 생성해야 합니다.
+ PostgreSQL 버전 17 이상의 경우 복제 슬롯을 기본에 생성해야 하며 읽기 전용 복제본과 자동으로 동기화됩니다.
+ 전체 로드 \$1 CDC 또는 CDC 전용 작업을 사용하는 경우 AWS DMS 는 읽기 전용 복제본이 아닌 기본 인스턴스의 논리적 복제 슬롯을 자동으로 관리할 수 있습니다. PostgreSQL 버전 16 읽기 전용 복제본의 경우 작업을 다시 시작하기 전에(다시 시작하지 않고) 복제 슬롯을 수동으로 삭제하고 다시 생성해야 합니다. 이 단계를 건너뛰면 작업 실패 또는 잘못된 CDC 시작 위치가 발생할 수 있습니다. PostgreSQL 버전 17 이상에서는 기본 인스턴스의 논리적 슬롯 동기화가이 프로세스를 자동화합니다.

사전 조건을 완료한 후 엔드포인트 설정에서 `SlotName` 읽기 전용 복제본 AWS DMS 소스를 복제하여 소스 엔드포인트를 설정하고 네이티브 CDC 시작점을 사용하여 AWS DMS 작업을 구성할 수 있습니다. 자세한 내용은 [ PostgreSQL을 DMS 소스로 사용할 때 엔드포인트 설정 및 추가 연결 속성(ECAs)](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.ConnectionAttrib)과 [기본 CDC 시작점을 사용하여 PostgreSQL 소스의 CDC 로드 설정](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10)을 참조하세요.

## `MapBooleanAsBoolean` PostgreSQL 엔드포인트 설정 사용
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting"></a>

PostgreSQL 엔드포인트 설정을 사용하여 PostgreSQL 소스의 불을 Amazon Redshift 대상에 매핑할 수 있습니다. 기본적으로 부울 형식은 varchar(5)로 마이그레이션됩니다. 다음 예제에 나온 것처럼 PostgreSQL이 부울 형식을 불로 마이그레이션하도록 `MapBooleanAsBoolean`을 지정할 수 있습니다.

```
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
```

단, 이 설정이 적용되려면 소스 엔드포인트와 대상 엔드포인트 모두에서 이 설정을 지정해야 합니다.

MySQL에는 부울 형식이 없으므로 부울 데이터를 MySQL로 마이그레이션할 때는 이 설정 대신 변환 규칙을 사용하세요.

## DMS 소스로 PostgreSQL 사용 시 엔드포인트 설정 및 추가 연결 속성(ECA)
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib"></a>

엔드포인트 설정 및 추가 연결 속성(ECA)을 사용하여 PostgreSQL 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나의 `create-endpoint` 명령을 `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON 구문과 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)함께 사용하여 소스 엔드포인트를 생성할 때 엔드포인트 설정을 지정합니다.

다음 표에는 PostgreSQL을 소스로 사용할 수 있는 엔드포인트 설정 및 ECA가 나와 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.PostgreSQL.html)

## PostgreSQL 데이터베이스를 DMS 소스로 사용 시 제한 사항
<a name="CHAP_Source.PostgreSQL.Limitations"></a>

PostgreSQL을 AWS DMS에서 원본으로 사용하는 경우 다음 제한 사항이 적용됩니다.
+ AWS DMS 는 Amazon RDS for PostgreSQL 10.4 또는 Amazon Aurora PostgreSQL 10.4를 소스 또는 대상으로 사용할 수 없습니다.
+ 캡처된 테이블에는 프라이머리 키가 있어야 합니다. 테이블에 기본 키가 없는 경우는 해당 테이블에 대한 DELETE 및 UPDATE 레코드 작업을 AWS DMS 무시합니다. 해결 방법은 [논리적 복제를 사용한 변경 데이터 캡처(CDC) 활성화](#CHAP_Source.PostgreSQL.Security)를 참조하세요.

  **참고:** 프라이머리 키/고유 인덱스 없이 마이그레이션하는 것은 권장하지 않습니다. 마이그레이션할 경우, “NO” Batch 적용 기능, 전체 LOB 기능, 데이터 검증 및 Redshift 대상으로 효율적으로 복제할 수 없는 등의 추가 제한이 적용됩니다.
+ AWS DMS 는 기본 키 세그먼트를 업데이트하려는 시도를 무시합니다. 이 경우, 대상에서 아무 행도 업데이트하지 않는 것으로 업데이트를 식별합니다. 그러나, PostgreSQL의 프라이머리 키 업데이트 결과는 예측할 수 없기 때문에 예외 테이블에 레코드가 기록되지 않습니다.
+ AWS DMS 는 **타임스탬프 실행에서 프로세스 변경 시작** 옵션을 지원하지 않습니다.
+ AWS DMS 는 파티션 또는 하위 파티션 작업(`ADD`, 또는 `DROP``TRUNCATE`)으로 인한 변경 사항을 복제하지 않습니다.
+ 이름이 같지만 각 이름의 대소문자가 다른 여러 테이블(예: table1, TABLE1, Table1)을 복제하면 예측할 수 없는 동작이 발생할 수 있습니다. 이 문제로 인해 AWS DMS 는 이러한 유형의 복제를 지원하지 않습니다.
+ 대부분의 경우는 테이블에 대한 CREATE, ALTER 및 DROP DDL 명령문의 변경 처리를 AWS DMS 지원합니다.는 테이블이 내부 함수 또는 프로시 AWS DMS 저 본문 블록 또는 다른 중첩된 구문에 유지되는 경우이 변경 처리를 지원하지 않습니다.

  예를 들어 다음 변경은 캡처되지 않습니다.

  ```
  CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void
  LANGUAGE plpgsql
  AS $$
  BEGIN
  create table attu.distributors1(did serial PRIMARY KEY,name
  varchar(40) NOT NULL);
  END;
  $$;
  ```
+ 현재 PostgreSQL 소스의 `boolean` 데이터 형식은 값이 일치하지 않는 `bit` 데이터 형식으로 SQL Server 대상에 마이그레이션됩니다. 해결 방법으로 열에 대한 `VARCHAR(1)` 데이터 유형을 사용하여 테이블을 미리 생성(또는 테이블 AWS DMS 생성)합니다. 그런 다음, 다운스트림 처리에서 ‘F’를 False로 처리하고 ‘T’를 True로 처리합니다.
+ AWS DMS 는 TRUNCATE 작업의 변경 처리를 지원하지 않습니다.
+ OID LOB 데이터 형식은 대상으로 마이그레이션되지 않습니다.
+ AWS DMS 는 동종 마이그레이션에 대해서만 PostGIS 데이터 형식을 지원합니다.
+ 소스가 온프레미스 또는 Amazon EC2 인스턴스에 있는 PostgreSQL 데이터베이스인 경우, 소스 엔드포인트에 test\$1decoding 출력 플러그인이 설치되어 있는지 확인합니다. 이 플러그인은 PostgreSQL contrib 패키지에서 찾을 수 있습니다. test-decoding 플러그인에 대한 자세한 내용은 [PostgreSQL 설명서](https://www.postgresql.org/docs/10/static/test-decoding.html)를 참조하세요.
+ AWS DMS 는 열 기본값을 설정 및 설정 해제하는 변경 처리를 지원하지 않습니다(ALTER TABLE 문에서 ALTER COLUMN SET DEFAULT 절 사용).
+ AWS DMS 는 열 null성을 설정하는 변경 처리를 지원하지 않습니다(ALTER TABLE 문에서 ALTER COLUMN [SET\$1DROP] NOT NULL 절 사용).
+ 논리적 복제가 활성화된 경우, 트랜잭션당 메모리에 보관되는 최대 변경 사항 수는 4MB입니다. 그 후에는 변경 사항이 디스크로 유출됩니다. 따라서 트랜잭션이 완료 또는 중지되고 롤백이 완료될 때까지 `ReplicationSlotDiskUsage`가 증가하며 `restart_lsn`이 진행되지 않습니다. 트랜잭션이 길기 때문에 롤백하는 데 시간이 오래 걸릴 수 있습니다. 따라서 논리적 복제가 활성화된 경우, 장기 실행 트랜잭션 또는 많은 하위 트랜잭션은 피하세요. 대신 트랜잭션을 여러 개의 작은 트랜잭션으로 나누세요.

  Aurora PostgreSQL 버전 13 이상에서는 DMS 유출 시 디스크로 데이터가 변경될 때 제어할 `logical_decoding_work_mem` 파라미터를 조정할 수 있습니다. 자세한 내용은 [Aurora PostgreSQL에서 파일 유출](CHAP_Troubleshooting_Latency_Source_PostgreSQL.md#CHAP_Troubleshooting_Latency_Source_PostgreSQL_Spill) 단원을 참조하십시오.
+ ARRAY 데이터 형식이 있는 테이블에는 프라이머리 키가 있어야 합니다. 프라이머리 키가 없는 ARRAY 데이터 형식이 있는 테이블은 전체 로드 중에 일시 중단됩니다.
+ AWS DMS 는 테이블 파티셔닝 또는 [테이블 상속](https://www.postgresql.org/docs/15/ddl-inherit.html)과 관련된 테이블 메타데이터 마이그레이션을 지원하지 않습니다. 가 분할된 테이블 또는 상속을 사용하는 테이블을 AWS DMS 발견하면 다음 동작이 관찰됩니다.
  + AWS DMS 는 소스 데이터베이스의 파티셔닝 또는 상속과 관련된 상위 테이블과 하위 테이블을 모두 식별하고 보고합니다.
  + **대상 테이블 생성**: 대상 데이터베이스에서는 테이블을 표준(파티션되지 않은, 상속되지 않은) 테이블로 AWS DMS 생성하여 선택한 테이블의 구조와 속성을 보존하지만 파티셔닝 또는 상속 로직은 보존하지 않습니다.
  + **상속된 테이블의 레코드 구분**: 상속을 사용하는 테이블의 경우 상위 테이블을 채울 때는 하위 테이블에 속하는 레코드를 구분하지 AWS DMS 않습니다. 따라서 `SELECT * FROM ONLY parent_table_name`와 같은 구문으로 SQL 쿼리를 활용하지 않습니다.
+ 파티션된 테이블을 PostgreSQL 소스에서 PostgreSQL 대상으로 복제하려면, 먼저 대상에 상위 및 하위 테이블을 수동으로 생성해야 합니다. 그런 다음 이 테이블에 복제할 별도의 작업을 정의합니다. 이 경우에 작업 구성을 **로딩 전 자르기**로 설정합니다.
+ PostgreSQL `NUMERIC` 데이터 형식의 크기는 고정되어 있지 않습니다. `NUMERIC` 데이터 형식이지만 정밀도 및 배율이 없는 데이터를 전송하는 경우, DMS는 기본적으로 `NUMERIC(28,6)`(정밀도 28, 배율 6)을 사용합니다. 예를 들어 소스의 0.611111104488373 값은 PostgreSQL 대상에서 0.611111로 변환됩니다.
+ AWS DMS 는 Aurora PostgreSQL Serverless V1을 전체 로드 작업의 소스로만 지원합니다.는 Aurora PostgreSQL Serverless V2를 전체 로드, 전체 로드 및 CDC, CDC 전용 작업의 소스로 AWS DMS 지원합니다.
+ AWS DMS 는 병합 함수로 생성된 고유 인덱스가 있는 테이블의 복제를 지원하지 않습니다.
+ 소스와 대상의 프라이머리 키 정의가 일치하지 않는 경우 복제 결과를 예측할 수 없습니다.
+ 병렬 로드 기능을 사용하는 경우, 파티션 또는 하위 파티션에 따른 테이블 분할은 지원되지 않습니다. 병렬 로드에 관한 자세한 내용은 [선택한 테이블, 뷰 및 컬렉션에 병렬 로드 사용](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.ParallelLoad) 섹션을 참조하세요.
+ AWS DMS 는 연기된 제약 조건을 지원하지 않습니다.
+ AWS DMS 버전 3.4.7은 PostgreSQL 14.x를 다음과 같은 제한 사항이 있는 소스로 지원합니다.
  + AWS DMS 는 2단계 커밋의 변경 처리를 지원하지 않습니다.
  + AWS DMS 는 진행 중인 긴 트랜잭션을 스트리밍하기 위한 논리적 복제를 지원하지 않습니다.
+ AWS DMS 는 Amazon RDS Proxy for PostgreSQL에 대한 CDC를 소스로 지원하지 않습니다.
+ 프라이머리 키 열을 포함하지 않는 [소스 필터](CHAP_Tasks.CustomizingTasks.Filters.md)를 사용하면 `DELETE` 작업이 캡처되지 않습니다.
+ 소스 데이터베이스가 다른 타사 복제 시스템의 대상이기도 한 경우, CDC 중에는 DDL 변경 내용이 마이그레이션되지 않을 수 있습니다. 이러한 상황으로 인해 `awsdms_intercept_ddl` 이벤트 트리거가 실행되지 않을 수 있기 때문입니다. 이 상황을 해결하려면 소스 데이터베이스에서 해당 트리거를 다음과 같이 수정하세요.

  ```
  alter event trigger awsdms_intercept_ddl enable always;
  ```
+ AWS DMS 는 소스 데이터베이스의 기본 키 정의에 대한 변경 사항 복제를 지원하지 않습니다. 활성 복제 작업 중에 프라이머리 키 구조가 변경되면 영향을 받는 테이블에 대한 후속 변경 사항이 대상에 복제되지 않습니다.
+ 스크립트의 일부로 DDL 복제에서 스크립트당 최대 총 DDL 명령 수는 8192개이고 스크립트당 최대 총 줄 수는 8192개입니다.
+ AWS DMS 는 구체화된 보기를 지원하지 않습니다.
+ 읽기 전용 복제본을 소스로 사용하는 전체 로드 및 CDC 작업의 경우 읽기 전용 복제본에 복제 슬롯을 생성할 AWS DMS 수 없습니다.

## PostgreSQL용 소스 데이터 형식
<a name="CHAP_Source-PostgreSQL-DataTypes"></a>

다음 표에는 사용 시 지원되는 PostgreSQL 소스 데이터 형식 AWS DMS 과 AWS DMS 데이터 형식에 대한 기본 매핑이 나와 있습니다.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  PostgreSQL 데이터 형식  |  DMS 데이터 형식  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  NUMERIC(p,s)  |  정밀도 범위가 0\$138인 경우, NUMERIC을 사용합니다. 정밀도가 39 이상인 경우, STRING을 사용합니다.  | 
|  DECIMAL(P,S)  |  정밀도 범위가 0\$138인 경우, NUMERIC을 사용합니다. 정밀도가 39 이상인 경우, STRING을 사용합니다.  | 
|  REAL  |  REAL4  | 
|  DOUBLE  |  REAL8  | 
|  SMALLSERIAL  |  INT2  | 
|  SERIAL  |  INT4  | 
|  BIGSERIAL  |  INT8  | 
|  MONEY  |  NUMERIC(38,4) MONEY 데이터 형식은 SQL Server에서 FLOAT에 매핑됩니다.  | 
|  CHAR  |  WSTRING (1)  | 
|  CHAR(N)  |  WSTRING (n)  | 
|  VARCHAR(N)  |  WSTRING (n)  | 
|  TEXT  |  NCLOB  | 
|  CITEXT  |  NCLOB  | 
|  BYTEA  |  BLOB  | 
|  TIMESTAMP  |  DATETIME  | 
|  TIMESTAMP(시간대 사용)  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIME WITH TIME ZONE  |  TIME  | 
|  INTERVAL  |  STRING (128) - 1 YEAR, 2 MONTHS, 3 DAYS, 4 HOURS, 5 MINUTES, 6 SECONDS  | 
|  BOOLEAN  |  CHAR (5) 거짓 혹은 참  | 
|  ENUM  |  STRING (64)  | 
|  CIDR  |  STRING (50)  | 
|  INET  |  STRING (50)  | 
|  MACADDR  |  STRING (18)  | 
|  BIT (n)  |  STRING (n)  | 
|  BIT VARYING (n)  |  STRING (n)  | 
|  UUID  |  STRING  | 
|  TSVECTOR  |  CLOB  | 
|  TSQUERY  |  CLOB  | 
|  XML  |  CLOB  | 
|  POINT  |  STRING (255) "(x,y)"  | 
|  LINE  |  STRING (255) "(x,y,z)"  | 
|  LSEG  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  BOX  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  PATH  |  CLOB "((x1,y1),(xn,yn))"  | 
|  POLYGON  |  CLOB "((x1,y1),(xn,yn))"  | 
|  CIRCLE  |  STRING (255) "(x,y),r"  | 
|  JSON  |  NCLOB  | 
|  JSONB  |  NCLOB  | 
|  ARRAY  |  NCLOB  | 
|  COMPOSITE  |  NCLOB  | 
|  HSTORE  |  NCLOB  | 
|  INT4RANGE  |  STRING (255)  | 
|  INT8RANGE  |  STRING (255)  | 
|  NUMRANGE  |  STRING (255)  | 
|  STRRANGE  |  STRING (255)  | 

### PostgreSQL에 LOB 소스 데이터 형식 사용
<a name="CHAP_Source-PostgreSQL-DataTypes-LOBs"></a>

PostgreSQL 열 크기는 PostgreSQL LOB 데이터 형식의 AWS DMS 데이터 형식으로의 변환에 영향을 미칩니다. 이를 위해 다음 AWS DMS 데이터 형식의 경우, 다음 단계에 따르세요.
+ BLOB - 작업 생성 시 **LOB 크기를 다음으로 제한**을 **최대 LOB 크기(KB)** 값으로 설정합니다.
+ CLOB - 복제는 각 문자를 UTF8 문자로 취급합니다. 따라서 열에서 가장 긴 문자 텍스트의 길이를 찾습니다(여기에서는 `max_num_chars_text`로 표시). 이 길이를 사용하여 **LOB 크기를 다음으로 제한** 값을 지정합니다. 데이터에 4바이트 문자가 포함된 경우, 2를 곱해 **LOB 크기를 다음으로 제한** 값(바이트 단위)을 지정합니다. 이 경우, **LOB 크기를 다음으로 제한**은 `max_num_chars_text` x 2와 같습니다.
+ NCLOB - 복제는 각 문자를 2바이트 문자로 취급합니다. 따라서 열에서 가장 긴 문자 텍스트의 길이(`max_num_chars_text`)를 찾고 2를 곱합니다. 이렇게 하여 **LOB 크기를 다음으로 제한** 값을 지정합니다. 이 경우, **LOB 크기를 다음으로 제한**은 `max_num_chars_text` x 2와 같습니다. 데이터에 4바이트 문자가 포함된 경우에는 다시 2를 곱합니다. 이 경우, **LOB 크기를 다음으로 제한**은 `max_num_chars_text` x 4와 같습니다.

# MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.MySQL"></a>

 AWS Database Migration Service를 사용하여 MySQL 호환 데이터베이스(MySQL, MariaDB 또는 Amazon Aurora MySQL)에서 데이터를 마이그레이션할 수 있습니다.

가 소스로 AWS DMS 지원하는 MySQL 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

SSL을 사용하여 MySQL 호환 엔드포인트와 복제 인스턴스 간의 연결을 암호화할 수 있습니다. MySQL 호환 엔드포인트에서 SSL 사용에 관한 자세한 내용은 [에서 SSL 사용 AWS Database Migration Service](CHAP_Security.SSL.md) 섹션을 참조하세요.

다음 섹션에서 ‘자체 관리형’이라는 용어는 온프레미스나 Amazon EC2에 설치되어 있는 데이터베이스에 적용됩니다. ‘AWS관리형’이라는 용어는 Amazon RDS, Amazon Aurora 또는 Amazon S3에 있는 모든 데이터베이스에 적용됩니다.

MySQL 호환 데이터베이스 작업에 대한 자세한 내용은 다음 섹션을 AWS DMS참조하세요.

**Topics**
+ [를 사용하여 MySQL에서 MySQL로 마이그레이션 AWS DMS](#CHAP_Source.MySQL.Homogeneous)
+ [MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS](#CHAP_Source.MySQL.Prerequisites)
+ [자체 관리형 MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS](#CHAP_Source.MySQL.CustomerManaged)
+ [AWS관리형 MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS](#CHAP_Source.MySQL.AmazonManaged)
+ [MySQL 데이터베이스를 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.MySQL.Limitations)
+ [XA 트랜잭션 지원](#CHAP_Source.MySQL.XA)
+ [MySQL을의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.MySQL.ConnectionAttrib)
+ [MySQL용 소스 데이터 형식](#CHAP_Source.MySQL.DataTypes)

**참고**  
 AWS Database Migration Service (AWS DMS) 매핑 규칙을 구성할 때는 데이터베이스 또는 스키마 이름에 와일드카드(%)를 사용하지 않는 것이 중요합니다. 대신 마이그레이션해야 하는 사용자 생성 데이터베이스만 명시적으로 지정해야 합니다. 와일드카드 문자를 사용하면 대상 인스턴스에 필요하지 않은 시스템 데이터베이스를 포함하여 마이그레이션 프로세스의 모든 데이터베이스가 포함됩니다. MySQL Amazon RDS 마스터 사용자는 대상 시스템 데이터베이스로 데이터를 가져오는 데 필요한 권한이 없으므로 이러한 시스템 데이터베이스를 마이그레이션하지 못합니다.

## 를 사용하여 MySQL에서 MySQL로 마이그레이션 AWS DMS
<a name="CHAP_Source.MySQL.Homogeneous"></a>

MySQL 이외의 데이터베이스 엔진에서 MySQL 데이터베이스로 마이그레이션하는 이기종 마이그레이션의 경우는 거의 항상 사용할 수 있는 최상의 마이그레이션 도구 AWS DMS 입니다. 하지만 MySQL 데이터베이스에서 MySQL 데이터베이스로 마이그레이션하는 동종 마이그레이션의 경우, 동종 데이터 마이그레이션 프로젝트를 사용하는 것이 좋습니다. 동종 데이터 마이그레이션은 네이티브 데이터베이스 도구를 사용하여 AWS DMS와 비교할 때 향상된 데이터 마이그레이션 성능과 정확성을 제공합니다.

## MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.MySQL.Prerequisites"></a>

MySQL 데이터베이스를 소스로 사용하기 전에 다음 사전 조건이 있는지 AWS DMS확인합니다. 이러한 사전 조건은 자체 관리형 또는 AWS관리형 소스에 적용됩니다.

복제 관리자 역할 AWS DMS 이 있는의 계정이 있어야 합니다. 역할에는 다음 권한이 있어야 합니다.
+ **REPLICATION CLIENT** - 이 권한은 변경 데이터 캡처(CDC) 작업에만 필요합니다. 즉, 전체 로드 전용 작업에서는 이 권한이 필요하지 않습니다.
**참고**  
MariaDB 버전 10.5.2\$1의 경우 BINLOG MONITOR를 사용할 수 있습니다. BINLOG MONITOR는 REPLICATION CLIENT를 대체합니다.
+ **REPLICATION SLAVE** - 이 권한은 변경 데이터 캡처(CDC) 작업에만 필요합니다. 즉, 전체 로드 전용 작업에서는 이 권한이 필요하지 않습니다.
+ **SUPER** - 이 권한은 MySQL 5.6.6 이전 버전에서만 필요합니다.

또한 AWS DMS 사용자에게 복제용으로 지정된 소스 테이블에 대한 SELECT 권한이 있어야 합니다.

MySQL별 마이그레이션 전 평가를 사용하는 경우 다음 권한을 부여합니다.

```
grant select on mysql.user to <dms_user>;
grant select on mysql.db to <dms_user>;
grant select on mysql.tables_priv to <dms_user>;
grant select on mysql.role_edges to <dms_user>  #only for MySQL version 8.0.11 and higher
grant select on performance_schema.replication_connection_status to <dms_user>;  #Required for primary instance validation - MySQL version 5.7 and higher only
```

RDS 소스를 사용하고 MySQL별 사전 마이그레이션 평가를 실행하려는 경우 다음 권한을 추가합니다.

```
grant select on mysql.rds_configuration to <dms_user>;  #Required for binary log retention check
```

`BatchEnable` 파라미터가 `true`인 경우 다음을 부여해야 합니다.

```
grant create temporary tables on `<schema>`.* to <dms_user>;
```

## 자체 관리형 MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.MySQL.CustomerManaged"></a>

 AWS DMS용 원본으로 다음 자체 관리형 MySQL 호환 데이터베이스를 사용할 수 있습니다.
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ MariaDB Column Store

CDC를 사용하려면 이진 로깅을 활성화해야 합니다. 이진 로깅을 활성화하려면, MySQL의 `my.ini`(Windows) 또는 `my.cnf`(UNIX) 파일에서 다음 파라미터를 구성해야 합니다.


| 파라미터 | 값 | 
| --- | --- | 
| `server_id` | 이 파라미터 값을 1 이상의 값으로 설정합니다. | 
| `log-bin` | `log-bin=E:\MySql_Logs\BinLog`과 같은 이진 로그 파일로 이 경로를 설정합니다. 파일 확장자를 포함해서는 안 됩니다. | 
| `binlog_format` | 이 파라미터를 `ROW`으로 설정합니다. `binlog_format`을 `STATEMENT`로 설정하면 대상에 데이터를 복제할 때 불일치가 발생할 수 있으므로 복제 중에 이 설정을 사용하는 것이 좋습니다. `binlog_format`이 `MIXED`로 설정되면 데이터베이스 엔진도 비슷한 일관되지 않은 데이터를 대상에 기록합니다. 대상 데이터베이스에 일관되지 않은 데이터가 기록되도록 할 수 있는 `STATEMENT` 기반 로깅으로 데이터베이스 엔진이 자동으로 전환되기 때문입니다. | 
| `expire_logs_days` | 이 파라미터 값을 1 이상의 값으로 설정합니다. 디스크 공간의 과사용을 방지하려면 기본값 0을 사용하지 않는 것이 좋습니다. | 
| `binlog_checksum` | DMS 버전 3.4.7 이하에 대해 이 파라미터를 `NONE`으로 설정합니다. | 
| `binlog_row_image` | 이 파라미터를 `FULL`으로 설정합니다. | 
| `log_slave_updates` | 원본으로 MySQL 또는 MariaDB 읽기 전용 복제본을 사용하고 있는 경우 이 파라미터를 `TRUE`로 설정합니다. | 

MySQL 또는 MariaDB 읽기 전용 복제본을 **기존 데이터 마이그레이션 및 지속적인 변경 사항 복제** 모드를 사용하여 DMS 마이그레이션 작업의 소스로 사용하는 경우 데이터 손실 가능성이 있습니다. DMS는 다음 조건에서 전체 로드 또는 CDC 중에 트랜잭션을 작성하지 않습니다.
+ DMS 태스크가 시작되기 전에 트랜잭션이 기본 인스턴스에 커밋되었습니다.
+ 기본 인스턴스와 복제본 간의 지연으로 인해 DMS 태스크가 시작된 후까지 트랜잭션이 복제본에 커밋되지 않았습니다.

기본 인스턴스와 복제본 간의 지연 시간이 길수록 데이터 손실 가능성이 커집니다.

원본에서 NDB(클러스터 방식) 데이터베이스 엔진을 사용하는 경우, 해당 스토리지 엔진을 사용하는 테이블에 대해 CDC를 활성화하도록 다음 파라미터를 구성해야 합니다. 이러한 변경 사항을 MySQL의 `my.ini`(Windows) 또는 `my.cnf`(UNIX) 파일에 추가합니다.


| 파라미터 | 값 | 
| --- | --- | 
| `ndb_log_bin` | 이 파라미터를 `ON`으로 설정합니다. 이 값은 클러스터링된 테이블의 변경 사항이 이진 로그에 로깅되도록 보장해 줍니다. | 
| `ndb_log_update_as_write` | 이 파라미터를 `OFF`으로 설정합니다. 이 값은 이진 로그에서 UPDATE 문을 INSERT 문으로 쓰지 않도록 해줍니다. | 
| `ndb_log_updated_only` | 이 파라미터를 `OFF`으로 설정합니다. 이 값은 이진 로그가 변경된 열뿐만 아니라 전체 행을 포함하도록 해줍니다. | 

## AWS관리형 MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.MySQL.AmazonManaged"></a>

 AWS DMS다음 AWS관리형 MySQL 호환 데이터베이스를의 소스로 사용할 수 있습니다.
+ MySQL Community Edition
+ MariaDB Community Edition
+ Amazon Aurora MySQL 호환 버전

 AWS관리형 MySQL 호환 데이터베이스를 소스로 사용하는 경우 CDC에 대해 다음과 같은 사전 조건이 있는지 AWS DMS확인합니다.
+ RDS for MySQL 및 RDS for MariaDB에 이진 로그를 활성화하려면 인스턴스 수준에서 자동 백업을 활성화하세요. Aurora MySQL 클러스터의 이진 로그를 활성화하려면 파라미터 그룹에서 `binlog_format` 변수를 변경합니다.

  자동 백업 설정에 관한 자세한 내용은 *Amazon RDS 사용 설명서*의 [백업 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) 섹션을 참조하세요.

  Amazon RDS for MySQL 데이터베이스에 이진 로깅을 설정하는 방법에 대한 자세한 내용은 *Amazon RDS 사용 설명서*의 [MySQL 이진 로깅 구성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)을 참조하세요.

  Aurora MySQL 클러스터의 이진 로깅을 설정하는 방법에 대한 자세한 내용은 [Amazon Aurora MySQL 클러스터에 대한 바이너리 로깅을 활성화하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/)를 참조하세요.
+ CDC를 사용하려면 이진 로깅을 켭니다. Amazon RDS for MySQL 데이터베이스에 이진 로깅을 설정하는 방법에 대한 자세한 내용은 *Amazon RDS 사용 설명서*의 [MySQL 이진 로깅 형식 구성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)을 참조하세요.
+ 바이너리 로그를 사용할 수 있는지 확인합니다 AWS DMS. AWS관리형 MySQL 호환 데이터베이스는 이진 로그를 최대한 빨리 제거하므로 로그를 계속 사용할 수 있는 시간을 늘려야 합니다. 예를 들어, 로그 보존 시간을 24시간으로 늘리려면 다음 명령을 실행합니다.

  ```
   call mysql.rds_set_configuration('binlog retention hours', 24);
  ```
+ `binlog_format` 파라미터를 `"ROW"`로 설정합니다.
**참고**  
MySQL 또는 MariaDB에서는 `binlog_format`이 동적 파라미터이므로 새 값을 적용하기 위해 재부팅할 필요가 없습니다. 하지만 새 값은 새 세션에만 적용됩니다. 복제를 위해 `binlog_format`을 `ROW`로 전환해도 값을 변경하기 전에 해당 세션이 시작된 경우, 데이터베이스는 `MIXED` 형식을 사용하여 후속 이진 로그를 계속 생성할 수 있습니다. 이렇게 하면 AWS DMS 가 소스 데이터베이스의 모든 변경 사항을 올바르게 캡처하지 못할 수 있습니다. MariaDB 또는 MySQL 데이터베이스에서 `binlog_format` 설정을 변경하는 경우, 데이터베이스를 다시 시작하여 기존 세션을 모두 닫거나 DML(데이터 조작 언어) 작업을 수행하는 애플리케이션을 다시 시작해야 합니다. `binlog_format` 파라미터를 로 변경한 후 데이터베이스를 강제로 모든 세션을 다시 시작`ROW`하면 데이터베이스가 올바른 형식을 사용하여 모든 후속 소스 데이터베이스 변경 사항을 기록하므로가 이러한 변경 사항을 올바르게 캡처할 AWS DMS 수 있습니다.
+ `binlog_row_image` 파라미터를 `"Full"`로 설정합니다.
+ DMS 버전 3.4.7 이전의 경우 `binlog_checksum` 파라미터를 `"NONE"`으로 설정합니다. Amazon RDS MySQL의 파라미터 설정에 대한 자세한 내용은 *Amazon RDS 사용 설명서*의 [백업 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html)을 참조하세요.
+ Amazon RDS MySQL 또는 Amazon RDS MariaDB 읽기 전용 복제본을 소스로 사용하고 있는 경우, 읽기 전용 복제본에서 백업을 활성화하고 `log_slave_updates` 파라미터를 `TRUE`로 설정해야 합니다.

## MySQL 데이터베이스를 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.MySQL.Limitations"></a>

MySQL 데이터베이스를 원본으로 사용하는 경우 다음 사항을 고려하세요.
+  Amazon RDS MySQL 5.5 이하의 경우, 변경 데이터 캡처(CDC)가 지원되지 않습니다. Amazon RDS MySQL의 경우, CDC를 활성화하려면 버전 5.6, 5.7 또는 8.0을 사용해야 합니다. CDC는 자체 관리형 MySQL 5.5 소스에서 지원됩니다.
+ CDC의 경우, `CREATE TABLE`, `ADD COLUMN`, `DROP COLUMN` 열 데이터 형식 변경과 `renaming a column`이 지원됩니다. 하지만 `DROP TABLE`, `RENAME TABLE` 및 열 기본값, 열 Null 허용 여부, 문자 집합 등과 같은 다른 속성에 대한 업데이트는 지원되지 않습니다.
+  소스의 분할된 테이블의 경우 **대상 테이블 준비 모드를** **대상의 테이블 삭제**로 설정하면는 MySQL 대상에 파티션이 없는 간단한 테이블을 AWS DMS 생성합니다. 파티션된 테이블을 대상의 파티션된 테이블로 마이그레이션하려면, 대상 MySQL 데이터베이스에서 파티션된 테이블을 미리 생성합니다.
+  `ALTER TABLE table_name ADD COLUMN column_name` 문을 사용하여 테이블의 시작(FIRST) 또는 중간(AFTER)에 열을 추가하는 것은 관계형 대상에 대해 지원되지 않습니다. 열은 항상 테이블 끝에 추가됩니다. 대상이 Amazon S3 또는 Amazon Kinesis Data Streams인 경우 FIRST 또는 AFTER를 사용하여 열을 추가할 수 있습니다.
+ 테이블 이름에 대/소문자가 포함되어 있고, 대/소문자를 구분하지 않는 파일 이름이 있는 운영 체제에서 소스 엔진이 호스팅되는 경우, CDC가 지원되지 않습니다. 예로는 HFS\$1를 사용하는 Microsoft Windows 또는 OS X가 있습니다.
+ Aurora MySQL 호환 버전 서버리스 v1은 전체 로드에 사용할 수 있지만 CDC에는 사용할 수 없습니다. MySQL 사전 요구 사항을 활성화할 수 없기 때문입니다. 자세한 내용은 [파라미터 그룹 및 Aurora Serverless v1](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html#aurora-serverless.parameter-groups)을 참조하세요.

  Aurora MySQL 호환 버전 서버리스 v2는 CDC를 지원합니다.
+  열의 AUTO\$1INCREMENT 속성은 대상 데이터베이스 열로 마이그레이션되지 않습니다.
+  표준 블록 스토리지에 이진 로그가 저장되지 않으면 변경 사항 캡처가 지원되지 않습니다. 예를 들어 이진 로그가 Amazon S3에 저장되면 CDC가 작동하지 않습니다.
+  AWS DMS 는 기본적으로 InnoDB 스토리지 엔진을 사용하여 대상 테이블을 생성합니다. InnoDB가 아닌 스토리지 엔진을 사용해야 하는 경우, 테이블을 수동으로 생성하고 이를 [아무 작업 안 함](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) 모드를 사용하여 마이그레이션해야 합니다.
+ DMS 마이그레이션 작업 모드가 **기존 데이터 마이그레이션**인 AWS DMS 경우에만 Aurora MySQL 복제본을 소스로 사용할 수 있습니다.
+  MySQL 호환 소스가 전체 로드 도중 중지되는 경우, AWS DMS 작업은 오류로 중지되지 않습니다. 작업은 성공적으로 종료되지만 대상과 원본이 동기화되지 않았을 수 있습니다. 그러한 경우, 작업을 다시 시작하거나 영향을 받은 테이블을 다시 로드하세요.
+  열의 일부에 생성된 색인 값은 마이그레이션되지 않습니다. 예를 들어 CREATE INDEX first\$1ten\$1chars ON 색인 고객(이름(10))은 대상에서 생성되지 않습니다.
+ 일부 경우, LOB를 복제하지 않도록 작업이 구성됩니다(작업 설정에서 "SupportLobs"가 false이거나 작업 콘솔에서 **Don't include LOB columns**가 선택되지 않음). 이러한 경우는 MEDIUMBLOB, LONGBLOB, MEDIUMTEXT 및 LONGTEXT 열을 대상으로 마이그레이션하지 AWS DMS 않습니다.

  BLOB, TINYBLOB, TEXT 및 TINYTEXT 열은 영향을 받지 않으며 대상으로 마이그레이션됩니다.
+ 임시 데이터 테이블 또는 시스템 버전이 지정된 테이블은 MariaDB 소스 및 대상 데이터베이스에서 지원되지 않습니다.
+ 두 Amazon RDS Aurora MySQL 클러스터 간에 마이그레이션하는 경우, RDS Aurora MySQL 소스 엔드포인트는 복제본 인스턴스가 아니라 읽기/쓰기 인스턴스여야 합니다.
+ AWS DMS 는 현재 MariaDB에 대한 뷰 마이그레이션을 지원하지 않습니다.
+ AWS DMS 는 MySQL의 분할된 테이블에 대한 DDL 변경을 지원하지 않습니다. CDC 도중 파티션 DDL 변경으로 인한 테이블 일시 중단을 건너뛰려면 `skipTableSuspensionForPartitionDdl`을 `true`로 설정합니다.
+ AWS DMS 는 버전 3.5.0 이상의 XA 트랜잭션만 지원합니다. 이전 버전은 XA 트랜잭션 AWS DMS 을 지원하지 않습니다. MariaDB 버전 10.6 이상에서는 XA 트랜잭션을 지원하지 않습니다. 자세한 내용은 [XA 트랜잭션 지원](#CHAP_Source.MySQL.XA) 다음을 참조하세요.
+ AWS DMS 는 소스 데이터에 GTIDs를 사용하지 않습니다.
+ AWS DMS 는 Aurora MySQL 향상된 바이너리 로그를 지원하지 않습니다.
+ AWS DMS 는 이진 로그 트랜잭션 압축을 지원하지 않습니다.
+ AWS DMS 는 InnoDB 스토리지 엔진을 사용하여 MySQL 데이터베이스에 대한 ON DELETE CASCADE 및 ON UPDATE CASCADE 이벤트를 전파하지 않습니다. 이러한 이벤트의 경우, MySQL은 하위 테이블의 계단식 작업을 반영하기 위해 binlog 이벤트를 생성하지 않습니다. 따라서 AWS DMS 는 해당 변경 사항을 하위 테이블에 복제할 수 없습니다. 자세한 내용은 [인덱스, 외부 키 또는 하위 항목 업데이트 또는 삭제가 마이그레이션되지 않음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.MySQL.FKsAndIndexes) 단원을 참조하십시오.
+ AWS DMS 는 계산된 (`VIRTUAL` 및 `GENERATED ALWAYS`) 열의 변경 사항을 캡처하지 않습니다. 이러한 제한을 해결하려면 다음을 수행하세요.
  + 대상 데이터베이스에서 대상 테이블을 미리 생성하고, `DO_NOTHING` 또는 `TRUNCATE_BEFORE_LOAD` 전체 로드 작업 설정을 사용하여 AWS DMS 작업을 생성합니다.
  + 계산된 열을 작업 범위에서 제거하는 변환 규칙을 추가합니다. 변환에 대한 자세한 내용은 [변환 규칙 및 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md) 섹션을 참조하세요.
+ 내부 MySQL 제한으로 인해는 BINLOGs 4GB 크기 이하로 처리할 AWS DMS 수 있습니다. BINLOGs 4GB보다 크면 DMS 작업 실패 또는 기타 예측할 수 없는 동작이 발생할 수 있습니다. 4GB보다 큰 BINLOG를 방지하려면 트랜잭션 크기를 줄여야 합니다.
+ AWS DMS 는 스키마, 테이블 및 열 이름에서 백틱(```) 또는 작은따옴표(`'`)를 지원하지 않습니다.
+ AWS DMS 는 소스 데이터베이스의 보이지 않는 열에서 데이터를 마이그레이션하지 않습니다. 이러한 열을 마이그레이션 범위에 포함하려면 ALTER TABLE 문을 사용하여 이러한 열을 표시하세요.

## XA 트랜잭션 지원
<a name="CHAP_Source.MySQL.XA"></a>

확장 아키텍처(XA) 트랜잭션은 여러 트랜잭션 리소스의 일련의 작업을 신뢰할 수 있는 단일 전역 트랜잭션으로 그룹화하는 데 사용할 수 있는 트랜잭션입니다. XA 트랜잭션은 2단계 커밋 프로토콜을 사용합니다. 일반적으로 열린 XA 트랜잭션이 있는 동안 변경 내용을 캡처하면 데이터가 손실될 수 있습니다. 데이터베이스에서 XA 트랜잭션을 사용하지 않는 경우, 기본값 `TRUE`를 사용하여 이 권한과 `IgnoreOpenXaTransactionsCheck` 구성을 무시할 수 있습니다. XA 트랜잭션이 있는 소스에서 복제를 시작하려면 다음을 수행합니다.
+  AWS DMS 엔드포인트 사용자에게 다음 권한이 있는지 확인합니다.

  ```
  grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
  ```
+ 엔드포인트 설정 `IgnoreOpenXaTransactionsCheck`를 `false`로 설정합니다.

**참고**  
AWS DMS 는 MariaDB 소스 DB 버전 10.6 이상에서 XA 트랜잭션을 지원하지 않습니다.

## MySQL을의 소스로 사용할 때 엔드포인트 설정 AWS DMS
<a name="CHAP_Source.MySQL.ConnectionAttrib"></a>

추가 연결 속성을 사용하는 것과 비슷하게 엔드포인트 설정을 사용하여 MySQL 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나의 `create-endpoint` 명령을 `--my-sql-settings '{"EndpointSetting": "value", ...}'` JSON 구문과 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)함께 사용하여 소스 엔드포인트를 생성할 때 설정을 지정합니다.

MySQL을 소스로 하여 사용할 수 있는 엔드포인트 설정은 다음 테이블에 나와 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MySQL.html)

## MySQL용 소스 데이터 형식
<a name="CHAP_Source.MySQL.DataTypes"></a>

다음 표에는를 사용할 때 지원되는 MySQL 데이터베이스 소스 데이터 형식 AWS DMS 과 AWS DMS 데이터 형식의 기본 매핑이 나와 있습니다.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  MySQL 데이터 형식  |  AWS DMS 데이터 형식  | 
| --- | --- | 
|  INT  |  INT4  | 
|  BIGINT  |  INT8  | 
|  MEDIUMINT  |  INT4  | 
|  TINYINT  |  INT1  | 
|  SMALLINT  |  INT2  | 
|  UNSIGNED TINYINT  |  UINT1  | 
|  UNSIGNED SMALLINT  |  UINT2  | 
|  UNSIGNED MEDIUMINT  |  UINT4  | 
|  UNSIGNED INT  |  UINT4  | 
|  UNSIGNED BIGINT  |  UINT8  | 
|  DECIMAL(10)  |  NUMERIC (10,0)  | 
|  BINARY  |  BYTES(1)  | 
|  BIT  |  BOOLEAN  | 
|  BIT(64)  |  BYTES(8)  | 
|  BLOB  |  BYTES(65535)  | 
|  LONGBLOB  |  BLOB  | 
|  MEDIUMBLOB  |  BLOB  | 
|  TINYBLOB  |  BYTES(255)  | 
|  DATE  |  DATE  | 
|  DATETIME  |  DATETIME 괄호 안의 값이 없는 DATETIME은 밀리초 없이 복제됩니다. 괄호 안의 값이 1\$15인 DATETIME(예: `DATETIME(5)`)은 밀리초를 사용하여 복제됩니다. DATETIME 열을 복제할 때 대상에서 시간이 동일하게 유지됩니다. UTC로 변환되지 않습니다.  | 
|  TIME  |  STRING  | 
|  TIMESTAMP  |  DATETIME TIMESTAMP 열을 복제할 때는 대상에서 시간이 UTC로 변환됩니다.  | 
|  YEAR  |  INT2  | 
|  DOUBLE  |  REAL8  | 
|  FLOAT  |  REAL(DOUBLE) FLOAT 값이 다음 범위에 속하지 않는 경우, 변환을 사용하여 FLOAT를 STRING에 매핑하세요. 변환에 관한 자세한 내용은 [변환 규칙 및 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md) 섹션을 참조하세요. 지원되는 FLOAT 범위는 -1.79E\$1308\$1-2.23E-308, 0, 그리고 2.23E-308\$11.79E\$1308입니다.  | 
|  VARCHAR (45)  |  WSTRING (45)  | 
|  VARCHAR (2000)  |  WSTRING (2000)  | 
|  VARCHAR (4000)  |  WSTRING (4000)  | 
|  VARBINARY (4000)  |  BYTES (4000)  | 
|  VARBINARY (2000)  |  BYTES (2000)  | 
|  CHAR  |  WSTRING  | 
|  TEXT  |  WSTRING  | 
|  LONGTEXT  |  NCLOB  | 
|  MEDIUMTEXT  |  NCLOB  | 
|  TINYTEXT  |  WSTRING(255)  | 
|  GEOMETRY  |  BLOB  | 
|  POINT  |  BLOB  | 
|  LINESTRING  |  BLOB  | 
|  POLYGON  |  BLOB  | 
|  MULTIPOINT  |  BLOB  | 
|  MULTILINESTRING  |  BLOB  | 
|  MULTIPOLYGON  |  BLOB  | 
|  GEOMETRYCOLLECTION  |  BLOB  | 
|  ENUM  |  WSTRING (*length*) 여기서 *length*는 ENUM에서 가장 긴 값의 길이입니다.  | 
|  SET  |  WSTRING (*length*) 여기서 *length*는 쉼표를 포함하여 SET에 있는 모든 값의 총 길이입니다.  | 
|  JSON  |  CLOB  | 

**참고**  
경우에 따라 '0' 값으로 DATETIME 및 TIMESTAMP 데이터 형식(즉, 0000-00-00)을 지정할 수 있습니다. 이 경우, 복제 작업의 대상 데이터베이스가 DATETIME 및 TIMESTAMP 데이터 형식으로 ‘0’ 값을 지원하는지 확인하세요. 그렇지 않으면, 이 값이 대상에서 null로 기록됩니다.

# SAP ASE 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.SAP"></a>

이전에는 Sybase라고 했던 SAP Adaptive Server Enterprise(ASE) 데이터베이스에서 데이터를 마이그레이션할 수 있습니다 AWS DMS. SAP ASE 데이터베이스를 소스로 사용하면 지원되는 다른 AWS DMS 대상 데이터베이스로 데이터를 마이그레이션할 수 있습니다.

가 소스로 AWS DMS 지원하는 SAP ASE 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

SAP ASE 데이터베이스 및 작업에 대한 자세한 내용은 다음 섹션을 AWS DMS참조하세요.

**Topics**
+ [SAP ASE 데이터베이스를 소스로 사용하기 위한 사전 조건 AWS DMS](#CHAP_Source.SAP.Prerequisites)
+ [SAP ASE를 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.SAP.Limitations)
+ [SAP ASE를의 소스로 사용하는 데 필요한 권한 AWS DMS](#CHAP_Source.SAP.Security)
+ [잘림 지점 제거](#CHAP_Source.SAP.Truncation)
+ [SAP ASE를의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.SAP.ConnectionAttrib)
+ [SAP ASE용 소스 데이터 형식](#CHAP_Source.SAP.DataTypes)

## SAP ASE 데이터베이스를 소스로 사용하기 위한 사전 조건 AWS DMS
<a name="CHAP_Source.SAP.Prerequisites"></a>

SAP ASE 데이터베이스를 소스로 사용하려면 다음을 AWS DMS수행합니다.
+ `sp_setreptable` 명령을 사용하여 테이블에서 SAP ASE 복제를 활성화합니다. 자세한 내용은 [Sybase Infocenter Archive]( http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc32410_1501/html/refman/X37830.htm)를 참조하세요.
+ SAP ASE 데이터베이스에서 `RepAgent`를 비활성화합니다. 자세한 내용은 [Stop and disable the RepAgent thread in the primary database](http://infocenter-archive.sybase.com/help/index.jsp?topic=/com.sybase.dc20096_1260/html/mra126ag/mra126ag65.htm)를 참조하세요.
+ 비라틴 문자(예: 중국어)에 대해 구성된 Windows EC2 인스턴스에 SAP ASE 버전 15.7을 복제하려면 대상 컴퓨터에 SAP ASE 15.7 SP121을 설치해야 합니다.

**참고**  
지속적 변경 데이터 캡처(CDC) 복제의 경우, DMS는 `dbcc logtransfer`와 `dbcc log`를 실행하여 트랜잭션 로그에서 데이터를 읽습니다.

## SAP ASE를 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.SAP.Limitations"></a>

SAP ASE 데이터베이스를 AWS DMS에서 원본으로 사용 시 다음 제한 사항이 적용됩니다.
+ 각 SAP ASE 데이터베이스에 대해 지속적 복제 또는 CDC를 사용하여 하나의 AWS DMS 작업만 실행할 수 있습니다. 여러 개의 전체 로드 전용 작업을 병렬로 실행할 수 있습니다.
+ 테이블의 이름을 바꿀 수 없습니다. 예를 들어 다음 명령은 실패합니다.

  ```
  sp_rename 'Sales.SalesRegion', 'SalesReg;
  ```
+ 열의 이름을 바꿀 수 없습니다. 예를 들어 다음 명령은 실패합니다.

  ```
  sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';
  ```
+ 이진 데이터 형식 문자열 끝에 있는 0 값은 대상 데이터베이스에 복제될 때 잘립니다. 예를 들어, 원본 테이블의 `0x0000000000000000000000000100000100000000`은 대상 테이블에서 `0x00000000000000000000000001000001`이 됩니다.
+ 데이터베이스 기본값이 NULL 값을 허용하지 않도록 설정된 경우는 NULL 값을 허용하지 않는 열이 있는 대상 테이블을 AWS DMS 생성합니다. 따라서 전체 로드 또는 CDC 복제 작업에 빈 값이 포함된 경우 오류가 AWS DMS 발생합니다. 다음 명령을 사용하여 원본 데이터베이스에서 NULL 값을 허용함으로써 이러한 오류를 방지할 수 있습니다.

  ```
  sp_dboption database_name, 'allow nulls by default', 'true'
  go
  use database_name
  CHECKPOINT
  go
  ```
+ `reorg rebuild` 인덱스 명령은 지원되지 않습니다.
+ AWS DMS 는 클러스터 또는 MSA(Multi-Site Availability)/Warm Standby를 소스로 사용하는 것을 지원하지 않습니다.
+ 매핑 규칙에 `AR_H_TIMESTAMP` 변환 헤더 표현식을 사용하는 경우, 추가된 열에서는 밀리초가 캡처되지 않습니다.
+ CDC 중에 병합 작업을 실행하면 복구할 수 없는 오류가 발생합니다. 대상을 다시 동기화하려면 전체 로드를 실행하세요.
+ 데이터 행 잠금 체계를 사용하는 테이블에는 롤백 트리거 이벤트가 지원되지 않습니다.
+ AWS DMS 는 소스 SAP 데이터베이스에서 작업 범위 내의 테이블을 삭제한 후에는 복제 작업을 재개할 수 없습니다. DMS 복제 작업을 중지하고 DML 작업(INSERT, UPDATE, DELETE)을 수행한 후 테이블을 삭제한 경우, 복제 작업을 다시 시작해야 합니다.

## SAP ASE를의 소스로 사용하는 데 필요한 권한 AWS DMS
<a name="CHAP_Source.SAP.Security"></a>

SAP ASE 데이터베이스를 AWS DMS 작업의 소스로 사용하려면 권한을 부여해야 합니다. AWS DMS 데이터베이스 정의에 지정된 사용자 계정에 SAP ASE 데이터베이스에서 다음 권한을 부여합니다.
+ sa\$1role
+ replication\$1role
+ sybase\$1ts\$1role
+ 기본적으로 `sp_setreptable` 저장 프로시저를 실행할 권한이 필요한 경우 SAP ASE 복제 옵션을 AWS DMS 활성화합니다. 자체가 아닌 데이터베이스 엔드포인트에서 직접 테이블`sp_setreptable`에서를 실행하려면 `enableReplication` 추가 연결 속성을 사용할 AWS DMS 수 있습니다. 자세한 내용은 [SAP ASE를의 소스로 사용할 때 엔드포인트 설정 AWS DMS](#CHAP_Source.SAP.ConnectionAttrib) 단원을 참조하십시오.

## 잘림 지점 제거
<a name="CHAP_Source.SAP.Truncation"></a>

작업이 시작되면는 `syslogshold` 시스템 보기에서 복제 프로세스가 진행 중임을 나타내는 `$replication_truncation_point` 항목을 AWS DMS 설정합니다. AWS DMS 가 작동하는 동안 대상에 이미 복사된 데이터의 양에 따라 복제 잘림 지점을 정기적으로 진행합니다.

`$replication_truncation_point` 항목이 설정되면 데이터베이스 로그가 과도하게 커지지 않도록 AWS DMS 작업을 계속 실행합니다. AWS DMS 작업을 영구적으로 중지하려면 다음 명령을 실행하여 복제 잘림 지점을 제거합니다.

```
dbcc settrunc('ltm','ignore')
```

잘림 지점을 제거한 후에는 AWS DMS 작업을 재개할 수 없습니다. 로그는 체크포인트에서 계속 자동으로 잘립니다(자동 잘림이 설정된 경우).

## SAP ASE를의 소스로 사용할 때 엔드포인트 설정 AWS DMS
<a name="CHAP_Source.SAP.ConnectionAttrib"></a>

추가 연결 속성을 사용하는 것과 비슷하게 엔드포인트 설정을 사용하여 SAP ASE 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나의 `create-endpoint` 명령을 `--sybase-settings '{"EndpointSetting": "value", ...}'` JSON 구문과 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)함께 사용하여 소스 엔드포인트를 생성할 때 설정을 지정합니다.

SAP ASE를 소스로 하여 사용할 수 있는 엔드포인트 설정은 다음 표에 나와 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.SAP.html)

## SAP ASE용 소스 데이터 형식
<a name="CHAP_Source.SAP.DataTypes"></a>

사용 AWS DMS 시 지원되는 SAP ASE 소스 데이터 형식 목록과 AWS DMS 데이터 형식의 기본 매핑은 다음 표를 참조하세요. AWS DMS 는 사용자 정의 형식(UDT) 데이터 형식의 열이 있는 SAP ASE 소스 테이블을 지원하지 않습니다. 이 데이터 형식을 사용하는 복제된 열은 NULL로 생성됩니다.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 대상 엔드포인트의 [마이그레이션에 적합한 대상](CHAP_Target.md) 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  SAP ASE 데이터 형식  |  AWS DMS 데이터 형식  | 
| --- | --- | 
| BIGINT | INT8 | 
| UNSIGNED BIGINT | UINT8 | 
| INT | INT4 | 
| UNSIGNED INT | UINT4 | 
| SMALLINT | INT2 | 
| UNSIGNED SMALLINT | UINT2 | 
| TINYINT | UINT1 | 
| DECIMAL | NUMERIC | 
| NUMERIC | NUMERIC | 
| FLOAT | REAL8 | 
| DOUBLE | REAL8 | 
| REAL | REAL4 | 
| MONEY | NUMERIC | 
| SMALLMONEY | NUMERIC | 
| DATETIME | DATETIME | 
| BIGDATETIME | DATETIME(6) | 
| SMALLDATETIME | DATETIME | 
| DATE | DATE | 
| TIME | TIME | 
| BIGTIME | TIME | 
| CHAR | STRING | 
| UNICHAR | WSTRING | 
| NCHAR | WSTRING | 
| VARCHAR | STRING | 
| UNIVARCHAR | WSTRING | 
| NVARCHAR | WSTRING | 
| BINARY | BYTES | 
| VARBINARY | BYTES | 
| BIT | BOOLEAN | 
| TEXT | CLOB | 
| UNITEXT | NCLOB | 
| IMAGE | BLOB | 

# MongoDB를의 소스로 사용 AWS DMS
<a name="CHAP_Source.MongoDB"></a>

 가 소스로 AWS DMS 지원하는 MongoDB 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

MongoDB 버전 지원에 대한 다음 사항에 유의하세요.
+  AWS DMS 3.4.5 이상 버전은 MongoDB 버전 4.2 및 4.4를 지원합니다.
+  AWS DMS 3.4.5 이상 버전과 MongoDB 4.2 이상 버전은 분산 트랜잭션을 지원합니다. MongoDB 분산 트랜잭션에 대한 자세한 내용은 [MongoDB 설명서](https://www.mongodb.com/docs/)의 [Transactions](https://docs.mongodb.com/manual/core/transactions/)를 참조하세요.
+  AWS DMS 3.5.0 이상 버전은 3.6 이전 버전의 MongoDB를 지원하지 않습니다.
+  AWS DMS 3.5.1 이상 버전은 MongoDB 버전 5.0을 지원합니다.
+  AWS DMS 3.5.2 이상 버전은 MongoDB 버전 6.0을 지원합니다.
+  AWS DMS 3.5.4 이상 버전은 MongoDB 버전 7.0 및 8.0을 지원합니다.



MongoDB가 생소하다면 다음과 같은 MongoDB 데이터베이스의 중요 개념을 잘 이해하시기 바랍니다.
+ MongoDB의 레코드는 필드와 값으로 구성된 데이터 구조인 *문서*입니다. 필드의 값에는 다른 문서, 배열 및 문서의 배열이 포함될 수 있습니다. 문서는 대체로 관계형 데이터베이스 테이블의 행에 상응합니다.
+ MongoDB의 *모음*은 문서 그룹이며 대략 관계형 데이터베이스 테이블에 상응합니다.
+ MongoDB의 *데이터베이스*는 모음 세트이며, 대략 관계형 데이터베이스의 스키마에 해당합니다.
+ 내부적으로 MongoDB 문서는 이진 JSON(BSON) 파일에 문서의 각 필드별로 형식을 포함하는 압축 형식으로 저장됩니다. 각 문서에는 고유 ID가 있습니다.

AWS DMS 는 MongoDB를 소스로 사용할 때 *문서 모드* 또는 *테이블* 모드라는 두 가지 마이그레이션 모드를 지원합니다. MongoDB 엔드포인트를 생성할 때 또는 AWS DMS 콘솔에서 **메타데이터 모드** 파라미터를 설정하여 사용할 마이그레이션 모드를 지정합니다. 선택에 따라 엔드포인트 구성 패널에서 **\$1id를 별도의 열로** 확인 표시 버튼을 선택하여 프라이머리 키 역할을 하는 `_id`라는 두 번째 열을 생성할 수 있습니다.

마이그레이션 모드 선택은 아래 설명된 대로 결과로 얻는 대상 데이터의 형식에 영향을 미칩니다.

**문서 모드**  
문서 모드에서 MongoDB 문서는 있는 그대로 마이그레이션됩니다. 즉 해당 문서 데이터는 대상 테이블에서 `_doc`라는 단일 열로 통합됩니다. 문서 모드는 MongoDB를 소스 엔드포인트로 사용할 때의 기본 설정입니다.  
예를 들어, myCollection이라는 MongoDB 모음의 문서를 가정해 보세요.  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
데이터를 문서 모드를 사용하는 관계형 데이터베이스 테이블로 마이그레이션 하면, 데이터의 구조는 다음과 같습니다. MongoDB 문서의 데이터 필드는` _doc` 열로 통합됩니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MongoDB.html)
선택적으로 추가 연결 속성 `extractDocID`를 *true*로 설정하여 프라이머리 키 역할을 하는 `"_id"`라는 두 번째 열을 생성할 수 있습니다. CDC를 사용할 경우, 이 파라미터를 *true*로 설정합니다.  
[다중 문서 트랜잭션](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)을 생성하는 소스와 함께 CDC를 사용하는 경우 `ExtractDocId` 파라미터를 *true*로 설정해야 **합니다**. 이 파라미터를 활성화하지 않으면 다중 문서 트랜잭션이 발생하면 AWS DMS 작업이 실패합니다.  
문서 모드에서는 다음과 같이 컬렉션의 생성 및 이름 변경을 AWS DMS 관리합니다.  
+ 소스 데이터베이스에 새 컬렉션을 추가하는 경우는 컬렉션에 대한 새 대상 테이블을 AWS DMS 생성하고 모든 문서를 복제합니다.
+ 소스 데이터베이스에서 기존 모음의 이름을 바꾸면 AWS DMS 는 대상 테이블의 이름을 바꾸지 않습니다.
대상 엔드포인트가 Amazon DocumentDB인 경우, **문서 모드**에서 마이그레이션을 실행하세요.

**테이블 모드**  
테이블 모드에서는 MongoDB 문서의 각 최상위 필드를 대상 테이블의 열로 AWS DMS 변환합니다. 필드가 중첩된 경우 중첩된 값을 단일 열로 AWS DMS 확장합니다. AWS DMS 그런 다음 대상 테이블의 열 세트에 키 필드와 데이터 유형을 추가합니다.  
각 MongoDB 문서에 대해는 각 키와 유형을 대상 테이블의 열 세트에 AWS DMS 추가합니다. 예를 들어 테이블 모드를 사용하면가 이전 예제를 다음 테이블로 AWS DMS 마이그레이션합니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MongoDB.html)
중첩된 값은 점으로 분리된 키 이름을 포함하는 열에 평면화됩니다. 열은 마침표로 각각 분리된 연속된 평면화된 필드 이름으로 이름이 지정됩니다. 예를 들어,와 같은 중첩 값 필드가 있는 JSON 문서를 라는 열`{"a" : {"b" : {"c": 1}}}`로 AWS DMS 마이그레이션합니다. `a.b.c.`   
대상 열을 생성하기 위해는 지정된 수의 MongoDB 문서를 AWS DMS 스캔하고 모든 필드 및 유형 세트를 생성합니다. AWS DMS 그런 다음이 세트를 사용하여 대상 테이블의 열을 생성합니다. 콘솔을 사용해 MongoDB 소스 엔드포인트를 생성하거나 수정한다면, 스캔(검사)할 문서의 수를 지정할 수 있습니다. 기본값은 1000 개 문서입니다. 를 사용하는 경우 추가 연결 속성를 사용할 AWS CLI수 있습니다`docsToInvestigate`.  
테이블 모드에서는 다음과 같이 문서 및 컬렉션을 AWS DMS 관리합니다.  
+ 기존 모음에 문서를 추가할 때 문서가 복제됩니다. 대상에 없는 필드가 있으면 이 필드는 복제되지 않습니다.
+ 문서를 업데이트하면 업데이트된 문서가 복제됩니다. 대상에 없는 필드가 있으면 이 필드는 복제되지 않습니다.
+ 문서 삭제는 완벽하게 지원됩니다.
+ 새 모음을 CDC 작업 중에 추가해도 대상에 테이블이 새로 생성되지 않습니다.
+ 변경 데이터 캡처(CDC) 단계에서 AWS DMS 는 컬렉션 이름 변경을 지원하지 않습니다.

**Topics**
+ [MongoDB를의 소스로 사용할 때 필요한 권한 AWS DMS](#CHAP_Source.MongoDB.PrerequisitesCDC)
+ [CDC를 위한 MongoDB 복제본 세트 구성](#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)
+ [MongoDB를 소스로 사용할 때의 보안 요구 사항 AWS DMS](#CHAP_Source.MongoDB.Security)
+ [MongoDB 모음을 분할하고 병렬로 마이그레이션](#CHAP_Source.MongoDB.ParallelLoad)
+ [MongoDB를 소스로 사용할 때 여러 데이터베이스 마이그레이션 AWS DMS](#CHAP_Source.MongoDB.Multidatabase)
+ [MongoDB를의 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.MongoDB.Limitations)
+ [MongoDB를의 소스로 사용할 때 엔드포인트 구성 설정 AWS DMS](#CHAP_Source.MongoDB.Configuration)
+ [MongoDB용 소스 데이터 형식](#CHAP_Source.MongoDB.DataTypes)

## MongoDB를의 소스로 사용할 때 필요한 권한 AWS DMS
<a name="CHAP_Source.MongoDB.PrerequisitesCDC"></a>

MongoDB 소스를 사용한 AWS DMS 마이그레이션의 경우 루트 권한이 있는 사용자 계정 또는 마이그레이션할 데이터베이스에 대한 권한만 있는 사용자를 생성할 수 있습니다.

다음 코드는 루트 계정이 되도록 사용자를 생성합니다.

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
)
```

MongoDB 3.x 소스의 경우, 다음 코드는 마이그레이션할 데이터베이스에 대한 최소 권한이 있는 사용자를 생성합니다.

```
use database_to_migrate
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "read", db: "local" }, "read"] 
})
```

MongoDB 4.x 소스의 경우, 다음 코드는 최소 권한을 가진 사용자를 생성합니다.

```
{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }
```

예를 들어 “admin” 데이터베이스에 다음 역할을 생성합니다.

```
use admin
db.createRole(
{
role: "changestreamrole",
privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] }
],
roles: []
}
)
```

그리고 역할이 생성되면 마이그레이션할 데이터베이스에 사용자를 생성합니다.

```
 use test
> db.createUser( 
{ 
user: "dms-user12345",
pwd: "password",
roles: [ { role: "changestreamrole", db: "admin" }, "read"] 
})
```

## CDC를 위한 MongoDB 복제본 세트 구성
<a name="CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet"></a>

MongoDB에서 지속적 복제 또는 CDC를 사용하려면 MongoDB 작업 로그(oplog)에 대한 액세스 권한이 AWS DMS 필요합니다. oplog를 생성하려면 복제 세트를 배포하여 합니다(복제 세트가 없는 경우). 자세한 내용은 [MongoDB 설명서](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/)를 참조하세요.

CDC는 소스 엔드포인트로 설정된 MongoDB 복제본 세트의 기본 또는 보조 노드와 함께 사용할 수 있습니다.

**독립형 인스턴스를 복제본 집합으로 변환하려면**

1. 명령줄을 사용하여 `mongo`에 연결합니다.

   ```
   mongo localhost
   ```

1. `mongod` 서비스를 중단합니다.

   ```
   service mongod stop
   ```

1. 다음 명령을 사용하여 `mongod`를 다시 시작합니다.

   ```
   mongod --replSet "rs0" --auth -port port_number
   ```

1. 다음 명령을 사용하여 복제본 집합에 대한 연결을 테스트합니다.

   ```
   mongo -u root -p password --host rs0/localhost:port_number 
     --authenticationDatabase "admin"
   ```

문서 모드 마이그레이션을 계획하고 있다면 MongoDB 엔드포인트 생성 시 `_id as a separate column` 옵션을 선택하세요. 이 옵션을 선택하면 프라이머리 키로 작동하는 두 번째 열인 `_id` 가 생성됩니다. 이 두 번째 열은 데이터 조작 언어(DML) 작업을 지원하기 AWS DMS 위해에 필요합니다.

**참고**  
AWS DMS 는 작업 로그(oplog)를 사용하여 지속적 복제 중에 변경 사항을 캡처합니다. 가 레코드를 AWS DMS 읽기 전에 MongoDB가 oplog에서 레코드를 플러시하면 작업이 실패합니다. 24시간 이상 변경 사항이 유지되도록 oplog의 크기를 조정하는 것이 좋습니다.

## MongoDB를 소스로 사용할 때의 보안 요구 사항 AWS DMS
<a name="CHAP_Source.MongoDB.Security"></a>

AWS DMS는 MongoDB에 대해 두 가지 인증 방법을 지원합니다. 이 두 가지 인증 메서드는 암호를 암호화하는 데 사용되므로 `authType` 파라미터를 *PASSWORD*로 설정할 때만 사용됩니다.

MongoDB 인증 메서드는 다음과 같습니다.
+ **MONGODB-CR** - 이전 버전과의 호환성을 위해
+ **SCRAM-SHA-1** - MongoDB 버전 3.x 및 4.0 사용 시 기본값

인증 방법을 지정하지 않으면 AWS DMS는 MongoDB 소스 버전에 기본 방법을 사용합니다.

## MongoDB 모음을 분할하고 병렬로 마이그레이션
<a name="CHAP_Source.MongoDB.ParallelLoad"></a>

마이그레이션 작업의 성능을 개선하기 위해 MongoDB 소스 엔드포인트는 테이블 매핑에서 병렬 전체 로드 옵션 두 가지를 지원합니다.

다시 말해 JSON 설정에서 병렬 전체 로드를 위해 테이블 매핑에 자동 분할 또는 범위 분할을 사용하여 모음을 병렬로 마이그레이션할 수 있습니다. 자동 분할을 사용하면가 각 스레드에서 마이그레이션을 위해 소스를 자동으로 분할 AWS DMS 하는 기준을 지정할 수 있습니다. 범위 분할을 사용하면 DMS AWS DMS 가 각 스레드에서 마이그레이션하도록 각 세그먼트의 특정 범위를 지정할 수 있습니다. 이러한 설정에 대한 자세한 내용은 [테이블 및 컬렉션 설정 규칙과 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md) 섹션을 참조하세요.

### 자동 분할 범위를 사용하여 MongoDB 데이터베이스를 병렬로 마이그레이션
<a name="CHAP_Source.MongoDB.ParallelLoad.AutoPartitioned"></a>

 AWS DMS 가 각 스레드의 데이터를 자동으로 파티셔닝(분할)하는 기준을 지정하여 문서를 병렬로 마이그레이션할 수 있습니다. 특히 스레드당 마이그레이션할 문서 수를 지정합니다. 이 접근 방식을 사용하면는 스레드당 최대 성능을 위해 세그먼트 경계를 최적화하려고 AWS DMS 시도합니다.

테이블 매핑에서 다음 테이블 설정 옵션을 사용하여 분할 기준을 지정할 수 있습니다.


|  테이블 설정 옵션  |  설명  | 
| --- | --- | 
|  `"type"`  |  (필수) MongoDB를 소스로 사용하는 경우 `"partitions-auto"`로 설정합니다.  | 
|  `"number-of-partitions"`  |  (선택 사항) 마이그레이션에 사용되는 총 파티션(세그먼트) 수. 기본값은 16입니다.  | 
|  `"collection-count-from-metadata"`  |  (선택 사항) 이 옵션을 `true`로 설정하면 AWS DMS 는 추정 모음 개수를 사용하여 파티션 수를 결정합니다. 이 옵션이 로 설정된 경우 실제 컬렉션 수를 `false` AWS DMS 사용합니다. 기본값은 `true`입니다.  | 
|  `"max-records-skip-per-page"`  |  (선택 사항) 각 파티션의 경계를 결정할 때 한 번에 건너뛸 레코드 수입니다.는 페이지가 매겨진 건너뛰기 접근 방식을 AWS DMS 사용하여 파티션의 최소 경계를 결정합니다. 기본값은 10,000입니다. 상대적으로 큰 값을 설정하면 커서 시간이 초과되고 작업이 실패할 수 있습니다. 상대적으로 작은 값을 설정하면 페이지당 작업 수가 늘어나고 전체 로드 속도가 느려집니다.  | 
|  `"batch-size"`  |  (선택 사항) 배치 하나에서 반환되는 문서 수를 제한합니다. 배치마다 서버를 왕복해야 합니다. 배치 크기가 0인 경우, 커서는 서버에서 정의한 최대 배치 크기를 사용합니다. 기본값은 0입니다.  | 

다음 예제는 자동 분할을 위한 테이블 매핑을 보여 줍니다.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

자동 분할에는 다음과 같은 제한이 있습니다. 각 세그먼트의 마이그레이션은 모음 개수와 모음의 최소 `_id`를 개별적으로 가져옵니다. 그런 다음 페이지 매김 건너뛰기를 사용하여 해당 세그먼트의 최소 경계를 계산합니다.

따라서 모음의 모든 세그먼트 경계를 계산할 때까지 각 모음의 최소 `_id` 값이 일정하게 유지되어야 합니다. 세그먼트 경계를 계산하는 동안 모음의 최소 `_id` 값을 변경하면 데이터가 손실되거나 행 중복 오류가 발생할 수 있습니다.

### 범위 분할을 사용하여 MongoDB 데이터베이스를 병렬로 마이그레이션
<a name="CHAP_Source.MongoDB.ParallelLoad.Ranges"></a>

스레드의 각 세그먼트마다 범위를 지정하여 문서를 병렬로 마이그레이션할 수 있습니다. 이 접근 방식을 사용하면 스레드당 선택한 문서 범위에 따라 AWS DMS 특정 문서가 각 스레드에서 마이그레이션하도록 지시할 수 있습니다.

다음 예제에 나온 MongoDB 모음에는 항목 7개와 프라이머리 키 `_id`가 있습니다.

![\[7개의 항목이 있는 MongoDB 모음.\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/images/datarep-docdb-collection.png)


가 병렬로 마이그레이션 AWS DMS 하기 위해 컬렉션을 3개의 특정 세그먼트로 분할하려면 마이그레이션 작업에 테이블 매핑 규칙을 추가할 수 있습니다. 이 방법은 다음 JSON 예제에 나와 있습니다.

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

이 테이블 매핑 정의는 소스 모음을 세 개의 세그먼트로 분할하고 병렬로 마이그레이션합니다. 분할 경계는 다음과 같습니다.

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id > "5f805c97873173399a278d79" and num > 2 and _id  less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records)
Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)
```

마이그레이션 작업이 완료되면 다음 예제와 같이 작업 로그에서 테이블이 병렬로 로드된 것을 확인할 수 있습니다. 소스 테이블에서 각 세그먼트를 언로드하는 데 사용된 MongoDB `find` 절도 확인할 수 있습니다.

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

현재는 다음 MongoDB 데이터 형식을 세그먼트 키 열로 AWS DMS 지원합니다.
+ 배정밀도 실수
+ 문자열
+ ObjectId
+ 32비트 정수
+ 64비트 정수

## MongoDB를 소스로 사용할 때 여러 데이터베이스 마이그레이션 AWS DMS
<a name="CHAP_Source.MongoDB.Multidatabase"></a>

AWS DMS 버전 3.4.5 이상에서는 지원되는 모든 MongoDB 버전에 대해 단일 작업으로 여러 데이터베이스를 마이그레이션할 수 있습니다. 여러 데이터베이스를 마이그레이션하려면 다음 단계에 따릅니다.

1. MongoDB 소스 엔드포인트를 생성할 때 다음 중 하나를 수행합니다.
   + DMS 콘솔의 **엔드포인트 생성** 페이지에서 **엔드포인트 구성** 아래 **데이터베이스 이름**을 비워 둡니다.
   + 명령을 사용하여 AWS CLI `CreateEndpoint`의 `DatabaseName` 파라미터에 빈 문자열 값을 할당합니다`MongoDBSettings`.

1. MongoDB 소스에서 마이그레이션하려는 각 데이터베이스의 데이터베이스 이름을 작업 테이블 매핑의 스키마 이름으로 지정합니다. 콘솔의 안내 입력을 사용하거나 JSON에서 직접 이 작업을 수행할 수 있습니다. 안내 입력에 대한 자세한 내용은 [콘솔에서 테이블 선택 및 변환 규칙 지정](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md) 섹션을 참조하세요. JSON에 대한 자세한 내용은 [선택 규칙 및 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md) 섹션을 참조하세요.

예를 들면 다음과 같이 JSON을 지정하여 MongoDB 데이터베이스 3개를 마이그레이션할 수 있습니다.

**Example 스키마에서 모든 테이블 마이그레이션**  
다음 JSON은 소스 엔드포인트에 있는 `Customers`, `Orders`, `Suppliers` 데이터베이스의 모든 테이블을 대상 엔드포인트로 마이그레이션합니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "3",
            "rule-name": "3",
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

## MongoDB를의 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.MongoDB.Limitations"></a>

MongoDB를 소스로 사용할 때의 제한 사항은 AWS DMS다음과 같습니다.
+ 테이블 모드에서 모음에 있는 문서의 데이터 형식은 동일한 필드의 값에 사용하는 데이터 형식과 일치해야 합니다. 예를 들어 모음의 문서에 `'{ a:{ b:value ... }'`가 포함된 경우, 해당 `a.b` 필드의 `value`를 참조하는 모음의 모든 문서는 모음의 어디에 표시되든 `value`에 동일한 데이터 형식을 사용해야 합니다.
+ `_id` 옵션이 별도의 열로 설정된 경우 ID 문자열이 200자를 초과할 수 없습니다.
+ 객체 ID와 배열 형식 키는 테이블 모드에서 `oid` 및 `array` 접두사가 붙은 열로 변환됩니다.

  내부적으로 이러한 열은 접두사 이름으로 참조됩니다. 이러한 열을 참조 AWS DMS 하는에서 변환 규칙을 사용하는 경우 접두사가 붙은 열을 지정해야 합니다. 예를 들면 `${oid__id}`를 지정하고 `${_id}`를 지정하지 않거나 `${array__addresses}`를 지정하고 `${_addresses}`는 지정하지 않습니다.
+  모음 이름과 키 이름에는 달러 기호(\$1)를 포함할 수 없습니다.
+ AWS DMS 는 RDBMS 대상이 있는 테이블 모드에서 대소문자가 다른(상위, 아래) 동일한 필드가 포함된 컬렉션을 지원하지 않습니다. 예를 들어 AWS DMS 는 `Field1` 및 라는 두 개의 컬렉션이 있는 것을 지원하지 않습니다`field1`.
+ 테이블 모드와 문서 모드에는 앞서 설명한 제한이 있습니다.
+ 자동 분할을 사용한 병렬 마이그레이션에는 앞에서 설명한 제한 사항이 있습니다.
+ MongoDB에는 소스 필터가 지원되지 않습니다.
+ AWS DMS 는 중첩 수준이 97보다 큰 문서를 지원하지 않습니다.
+ AWS DMS 에서는 DocumentDB가 아닌 대상으로 마이그레이션할 때 UTF-8 인코딩 소스 데이터가 필요합니다. non-UTF-8 소스의 경우 마이그레이션하기 전에 UTF-8로 변환하거나 대신 Amazon DocumentDB로 마이그레이션합니다.
+ AWS DMS 는 MongoDB 버전 5.0의 다음 기능을 지원하지 않습니다.
  + 라이브 리샤딩
  + 클라이언트 측 필드 수준 암호화(CSFLE)
  + 시계열 모음 마이그레이션
**참고**  
Amazon DocumentDB는 시계열 모음을 지원하지 않기 때문에 전체 로드 단계에서 마이그레이션된 시계열 모음은 Amazon DocumentDB에서 일반 모음으로 변환됩니다.

## MongoDB를의 소스로 사용할 때 엔드포인트 구성 설정 AWS DMS
<a name="CHAP_Source.MongoDB.Configuration"></a>

MongoDB 소스 엔드포인트를 설정할 때 AWS DMS 콘솔을 사용하여 여러 엔드포인트 구성 설정을 지정할 수 있습니다.

다음 표에서는 MongoDB 데이터베이스를 AWS DMS 소스로 사용할 때 사용할 수 있는 구성 설정을 설명합니다.


| 설정(속성) | 유효값 | 기본값과 설명 | 
| --- | --- | --- | 
|  **인증 모드**  |  `"none"` `"password"`  |  값 `"password"`는 사용자 이름과 암호를 입력하라는 메시지를 표시합니다. `"none"`을 지정하면 사용자 이름 및 암호 파라미터가 사용되지 않습니다.  | 
|  **인증 소스**  |  유효한 MongoDB 데이터베이스 이름입니다.  |  인증을 위한 자격 증명 정보를 검증하는 데 사용할 MongoDB 데이터베이스의 이름입니다. 기본값은 `"admin"`입니다.  | 
|  **인증 메커니즘**  |  `"default"` `"mongodb_cr"` `"scram_sha_1"`  |  인증 메커니즘입니다. ` "default"` 값은 `"scram_sha_1"`입니다. `authType`이 `"no"`로 설정된 경우에는 이 설정이 사용되지 않습니다.  | 
|  **메타데이터 모드**  |  문서 및 테이블  |  문서 모드 또는 테이블 모드를 선택합니다.  | 
|  **스캔할 문서 수**(`docsToInvestigate`)  |  `0`보다 큰 양의 정수입니다.  |  이 옵션은 테이블 모드에서 대상 테이블 정의를 정의할 때만 사용하세요.  | 
|  **\$1id를 별도의 열로**  |  상자의 확인 표시  |  프라이머리 키 역할을 하는 `_id`라는 두 번째 열을 생성하는 선택적 확인 표시 상자입니다.  | 
|   `ExtractDocID`   |  `true` `false`  |  `false` - 이 속성은 `NestingLevel`이 `"none"`으로 설정된 경우에 사용합니다. [다중 문서 트랜잭션](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)을 생성하는 소스와 함께 CDC를 사용하는 경우 `ExtractDocId` 파라미터를 로 설정해야 **합니다**`true`. 이 파라미터를 활성화하지 않으면 다중 문서 트랜잭션이 발생하면 AWS DMS 작업이 실패합니다.  | 
|  `socketTimeoutMS`  |  0보다 크거나 같은 정수입니다. 추가 연결 속성(ECA) 전용입니다.  |  이 설정은 밀리초 단위이며 MongoDB 클라이언트의 연결 제한 시간을 구성합니다. 값이 0보다 작거나 같으면 MongoDB 클라이언트 기본값이 사용됩니다.  | 
|   `UseUpdateLookUp`   |  `true` `false`  |  true인 경우 CDC 업데이트 이벤트 중에는 업데이트된 문서 전체를 대상으로 AWS DMS 복사합니다. false로 설정하면 MongoDB 업데이트 명령을 AWS DMS 사용하여 대상의 문서에서 수정된 필드만 업데이트합니다.  | 
|   `ReplicateShardCollections`   |  `true` `false`  |  true인 경우는 데이터를 샤드 컬렉션에 AWS DMS 복제합니다. 대상 엔드포인트가 DocumentDB 탄력적 클러스터인 경우에만는이 설정을 AWS DMS 사용합니다. 이 설정이 true인 경우 다음 사항에 유의하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MongoDB.html)  | 
|  `useTransactionVerification`  |  `true` `false`  |  `false`인 경우는 변경 스트림과 oplog 간의 확인을 비활성화합니다.  기본 DMS 동작은 이러한 시나리오에서 작업에 실패하는 것이므로 변경 스트림과 oplog 항목 간에 불일치가 발생하는 경우 작업을 놓칠 수 있습니다. 기본값: `true`.   | 
|  `useOplog`  |  `true` `false`  |  `true`인 경우를 사용하면 DMS 태스크가 변경 스트림을 사용하는 대신 'oplog'에서 직접 읽을 수 있습니다. 기본값: `false`.  | 

**문서**를 **메타데이터 모드**로 선택하면 다른 옵션을 사용할 수 있습니다.

대상 엔드포인트가 DocumentDB인 경우, **문서 모드**에서 마이그레이션을 실행해야 합니다. 또한 소스 엔드포인트를 수정하고 **\$1id를 별도의 열로** 옵션을 선택합니다. 이는 소스 MongoDB 워크로드에 트랜잭션이 포함된 경우에 필수 사전 요구 사항입니다.

## MongoDB용 소스 데이터 형식
<a name="CHAP_Source.MongoDB.DataTypes"></a>

MongoDB를 소스로 사용하는 데이터 마이그레이션은 대부분의 MongoDB 데이터 유형을 AWS DMS 지원합니다. 다음 표에서는를 사용할 때 지원되는 MongoDB 소스 데이터 형식 AWS DMS 과 AWS DMS 데이터 형식의 기본 매핑을 확인할 수 있습니다. MongoDB 데이터 형식에 대한 자세한 내용은 MongoDB 설명서의 [BSON Types(BSON 형식)](https://docs.mongodb.com/manual/reference/bson-types)를 참조하세요.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  MongoDB 데이터 형식  |  AWS DMS 데이터 유형  | 
| --- | --- | 
| 부울 | 부울 | 
| 바이너리 | BLOB | 
| Date | Date | 
| 타임스탬프 | Date | 
| 정수 | INT4 | 
| Long | INT8 | 
| 배정밀도 실수 | REAL8 | 
| 문자열(UTF-8) | CLOB | 
| 배열 | CLOB | 
| OID | 문자열 | 
| REGEX | CLOB | 
| 코드  | CLOB | 

# Amazon DocumentDB(MongoDB 호환)를 소스로 사용 AWS DMS
<a name="CHAP_Source.DocumentDB"></a>

 AWS DMS 가 소스로 지원하는 Amazon DocumentDB(MongoDB 호환) 버전에 대한 자세한 내용은 [의 소스 AWS DMS](CHAP_Introduction.Sources.md) 섹션을 참조하세요.

 Amazon DocumentDB를 소스로 사용하여 한 Amazon DocumentDB 클러스터에서 다른 Amazon DocumentDB 클러스터로 데이터를 마이그레이션할 수 있습니다. Amazon DocumentDB 클러스터에서에서 지원하는 다른 대상 엔드포인트 중 하나로 데이터를 마이그레이션할 수도 있습니다 AWS DMS.

Amazon DocumentDB를 처음 사용하는 경우, Amazon DocumentDB 데이터베이스의 다음 중요 개념을 알고 있어야 합니다.
+ Amazon DocumentDB의 레코드는 필드와 값의 쌍으로 구성된 데이터 구조인 *문서*입니다. 필드의 값에는 다른 문서, 배열 및 문서의 배열이 포함될 수 있습니다. 문서는 대체로 관계형 데이터베이스 테이블의 행에 상응합니다.
+ Amazon DocumentDB의 *모음*은 문서 그룹이며, 대략 관계형 데이터베이스 테이블에 해당합니다.
+ Amazon DocumentDB의 *데이터베이스*는 모음 세트이며, 대략 관계형 데이터베이스의 스키마에 해당합니다.

AWS DMS 는 Amazon DocumentDB를 소스로 사용할 때 문서 모드와 테이블 모드라는 두 가지 마이그레이션 모드를 지원합니다. AWS DMS 콘솔에서 Amazon DocumentDB 소스 엔드포인트를 생성할 때 **메타데이터 모드 옵션 또는 추가 연결 속성를 사용하여 마이그레이션 모드를** 지정합니다`nestingLevel`. 마이그레이션 모드 선택이 대상 데이터의 형식에 결과적으로 어떤 영향을 미치는지 아래에서 설명합니다.

**문서 모드**  
*문서 모드*에서는 JSON 문서가 그대로 마이그레이션됩니다. 즉, 문서 데이터가 두 항목 중 하나로 통합됩니다. 관계형 데이터베이스를 대상으로 사용하는 경우, 데이터는 대상 테이블에서 이름이 `_doc`인 단일 열입니다. 비관계형 데이터베이스를 대상으로 사용하는 경우, 데이터는 단일 JSON 문서입니다. 문서 모드가 기본 모드이며, Amazon DocumentDB 대상으로 마이그레이션할 때 사용하는 것이 좋습니다.  
예를 들어 `myCollection`이라는 Amazon DocumentDB 모음에 있는 다음 문서를 생각해 보세요.  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
데이터를 문서 모드를 사용하는 관계형 데이터베이스 테이블로 마이그레이션 하면, 데이터의 구조는 다음과 같습니다. 문서의 데이터 필드는 ` _doc` 열로 통합됩니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.DocumentDB.html)
선택적으로 추가 연결 속성 `extractDocID`를 `true`로 설정하여 프라이머리 키 역할을 하는 `"_id"`라는 두 번째 열을 생성할 수 있습니다. 변경 데이터 캡처(CDC)를 사용하려는 경우, Amazon DocumentDB를 대상으로 사용하는 경우를 제외하고 이 파라미터를 `true`로 설정합니다.  
[다중 문서 트랜잭션](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)을 생성하는 소스와 함께 CDC를 사용하는 경우 `ExtractDocId` 파라미터를 로 설정해야 **합니다**`true`. 이 파라미터를 활성화하지 않으면 다중 문서 트랜잭션이 발생하면 AWS DMS 작업이 실패합니다.  
소스 데이터베이스에 새 컬렉션을 추가하는 경우는 컬렉션에 대한 새 대상 테이블을 AWS DMS 생성하고 모든 문서를 복제합니다.

**테이블 모드**  
*테이블 모드*에서AWS DMS 는 Amazon DocumentDB 문서의 각 최상위 수준 필드를 대상 테이블의 열로 변환합니다. 필드가 중첩된 경우 중첩된 값을 단일 열로 AWS DMS 확장합니다. 그런 AWS DMS 다음는 대상 테이블의 열 세트에 키 필드와 데이터 유형을 추가합니다.  
각 Amazon DocumentDB 문서에 대해는 각 키와 유형을 대상 테이블의 열 세트에 AWS DMS 추가합니다. 예를 들어 테이블 모드를 사용하면는 이전 예제를 다음 테이블로 AWS DMS 마이그레이션합니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.DocumentDB.html)
중첩된 값은 점으로 분리된 키 이름을 포함하는 열에 평면화됩니다. 열의 이름은 마침표로 구분되고 평면화된 필드 이름의 연결을 사용하여 지정됩니다. 예를 들어,와 같은 중첩 값 필드가 있는 JSON 문서를 라는 열`{"a" : {"b" : {"c": 1}}}`로 AWS DMS 마이그레이션합니다. `a.b.c.`   
대상 열을 생성하기 위해는 지정된 수의 Amazon DocumentDB 문서를 AWS DMS 스캔하고 모든 필드 및 유형 세트를 생성합니다. AWS DMS 그런 다음이 세트를 사용하여 대상 테이블의 열을 생성합니다. 콘솔을 사용하여 Amazon DocumentDB 소스 엔드포인트를 생성하거나 수정하는 경우, 스캔할 문서 수를 지정할 수 있습니다. 기본값은 1,000 개 문서입니다. 를 사용하는 경우 추가 연결 속성를 사용할 AWS CLI수 있습니다`docsToInvestigate`.  
테이블 모드에서는 다음과 같은 문서 및 컬렉션을 AWS DMS 관리합니다.  
+ 기존 모음에 문서를 추가할 때 문서가 복제됩니다. 대상에 없는 필드가 있으면 이 필드는 복제되지 않습니다.
+ 문서를 업데이트하면 업데이트된 문서가 복제됩니다. 대상에 없는 필드가 있으면 이 필드는 복제되지 않습니다.
+ 문서 삭제는 완벽하게 지원됩니다.
+ 새 모음을 CDC 작업 중에 추가해도 대상에 테이블이 새로 생성되지 않습니다.
+ 변경 데이터 캡처(CDC) 단계에서 AWS DMS 는 컬렉션 이름 변경을 지원하지 않습니다.

**Topics**
+ [Amazon DocumentDB를 소스로 사용하기 위한 권한 설정](#CHAP_Source.DocumentDB.Permissions)
+ [Amazon DocumentDB 클러스터를 위한 CDC 구성](#CHAP_Source.DocumentDB.ConfigureCDC)
+ [TLS를 사용하여 Amazon DocumentDB에 연결](#CHAP_Source.DocumentDB.TLS)
+ [Amazon DocumentDB 소스 엔드포인트 생성](#CHAP_Source.DocumentDB.ConfigureEndpoint)
+ [Amazon DocumentDB 모음을 분할하고 병렬로 마이그레이션](#CHAP_Source.DocumentDB.ParallelLoad)
+ [Amazon DocumentDB를 소스로 사용할 때 여러 데이터베이스 마이그레이션 AWS DMS](#CHAP_Source.DocumentDB.Multidatabase)
+ [Amazon DocumentDB를 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.DocumentDB.Limitations)
+ [Amazon DocumentDB를 소스로 하는 엔드포인트 설정 사용](#CHAP_Source.DocumentDB.ECAs)
+ [Amazon DocumentDB의 소스 데이터 형식](#CHAP_Source.DocumentDB.DataTypes)

## Amazon DocumentDB를 소스로 사용하기 위한 권한 설정
<a name="CHAP_Source.DocumentDB.Permissions"></a>

 AWS DMS 마이그레이션에 Amazon DocumentDB 소스를 사용하는 경우 루트 권한이 있는 사용자 계정을 생성할 수 있습니다. 또는 마이그레이션할 데이터베이스에 대한 권한만 있는 사용자를 생성할 수도 있습니다.

다음 코드는 루트 계정으로 사용자를 생성합니다.

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  })
```

Amazon DocumentDB 3.6의 경우, 다음 코드는 마이그레이션할 데이터베이스에 대한 최소 권한이 있는 사용자를 생성합니다.

```
use db_name
db.createUser( 
    {
        user: "dms-user",
        pwd: "password",
        roles: [{ role: "read", db: "db_name" }]
    }
)
```

Amazon DocumentDB 4.0 이상의 경우 배포 전반의 변경 스트림을 AWS DMS 사용합니다. 여기서 다음 코드는 최소 권한을 가진 사용자를 생성합니다.

```
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "readAnyDatabase", db: "admin" }] 
})
```

## Amazon DocumentDB 클러스터를 위한 CDC 구성
<a name="CHAP_Source.DocumentDB.ConfigureCDC"></a>

Amazon DocumentDB에서 지속적 복제 또는 CDC를 사용하려면 Amazon DocumentDB 클러스터의 변경 스트림에 대한 액세스 권한이 AWS DMS 필요합니다. 클러스터 모음 및 데이터베이스의 시간순 업데이트 이벤트 시퀀스에 대한 설명은 *Amazon DocumentDB 개발자 안내서*의 [변경 스트림 사용](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html)을 참조하세요.

MongoDB 쉘을 사용하여 Amazon DocumentDB 클러스터에 인증합니다. 그러고 나서 다음 명령을 실행하여 변경 스트림을 활성화합니다.

```
db.adminCommand({modifyChangeStreams: 1,
    database: "DB_NAME",
    collection: "", 
    enable: true});
```

이 방식을 사용하면 데이터베이스의 모든 모음에 변경 스트림을 활성화할 수 있습니다. 변경 스트림이 활성화되면 기존 데이터를 마이그레이션하는 동시에 진행 중인 변경 사항을 복제하는 마이그레이션 작업을 생성할 수 있습니다. 대량 데이터가 로드된 후에도는 AWS DMS 계속해서 변경 사항을 캡처하고 적용합니다. 결국 소스 데이터베이스와 대상 데이터베이스가 동기화되어 마이그레이션의 가동 중지 시간이 최소화됩니다.

**참고**  
AWS DMS 는 작업 로그(oplog)를 사용하여 지속적 복제 중에 변경 사항을 캡처합니다. Amazon DocumentDB가 oplog에서 레코드를 AWS DMS 읽기 전에 플러시하면 작업이 실패합니다. 24시간 이상 변경 사항이 유지되도록 oplog의 크기를 조정하는 것이 좋습니다.

## TLS를 사용하여 Amazon DocumentDB에 연결
<a name="CHAP_Source.DocumentDB.TLS"></a>

기본적으로 새로 생성한 Amazon DocumentDB 클러스터는 Transport Layer Security(TLS)을 사용한 보안 연결만 허용합니다. TLS가 활성화되면 Amazon DocumentDB에 대한 모든 연결에 퍼블릭 키가 필요합니다.

 AWS호스팅된 Amazon S3 버킷에서 파일을 다운로드하여 Amazon DocumentDB의 퍼블릭 키를 검색할 수 있습니다. `rds-combined-ca-bundle.pem` Amazon S3 이 파일을 다운로드하는 방법에 관한 자세한 내용은 *Amazon DocumentDB 개발자 안내서*의 [TLS를 사용한 연결 암호화](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html)를 참조하세요.

`rds-combined-ca-bundle.pem` 파일을 다운로드한 후 포함된 퍼블릭 키를 가져올 수 있습니다 AWS DMS. 다음 단계에서 그 방법을 설명합니다.

**AWS DMS 콘솔을 사용하여 퍼블릭 키를 가져오려면**

1. 에 로그인 AWS Management Console 하고를 선택합니다 AWS DMS.

1. 탐색 창에서 **인증서**를 선택합니다.

1. **인증서 가져오기**를 선택합니다. **새 CA 인증서 가져오기** 페이지가 나타납니다.

1. **인증서 구성** 섹션에서 다음 중 하나를 수행합니다.
   + **인증서 식별자**에 해당 인증서의 고유 이름(예: `docdb-cert`)을 입력합니다.
   + **파일 선택**을 선택하고 `rds-combined-ca-bundle.pem` 파일을 저장한 위치로 이동한 다음 파일을 선택합니다.

1. **새 CA 인증서 추가**를 선택합니다.

 AWS CLI 다음 예제에서는 명령을 사용하여 AWS DMS `import-certificate` 퍼블릭 키 `rds-combined-ca-bundle.pem` 파일을 가져옵니다.

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

## Amazon DocumentDB 소스 엔드포인트 생성
<a name="CHAP_Source.DocumentDB.ConfigureEndpoint"></a>

콘솔 또는 AWS CLI를 사용하여 Amazon DocumentDB 소스 엔드포인트를 생성할 수 있습니다. 콘솔에서는 다음 절차를 사용하세요.

**AWS DMS 콘솔을 사용하여 Amazon DocumentDB 소스 엔드포인트를 구성하려면**

1. 에 로그인 AWS Management Console 하고를 선택합니다 AWS DMS.

1. 탐색 창에서 **엔드포인트**를 선택하고 **엔드포인트 생성**을 선택합니다.

1. **엔드포인트 식별자**에 쉽게 식별할 수 있는 이름(예: `docdb-source`)을 제공합니다.

1. **소스 엔진**에서 **Amazon DocumentDB(MongoDB 호환)**를 선택합니다.

1. **서버 이름**에 Amazon DocumentDB 데이터베이스 엔드포인트가 있는 서버의 이름을 입력합니다. 예를 들어 Amazon EC2 인스턴스의 퍼블릭 DNS 이름(예: `democluster.cluster-cjf6q8nxfefi.us-east-2.docdb.amazonaws.com`)을 입력할 수 있습니다.

1. **포트**에 27017을 입력합니다.

1. **SSL 모드**에서 **verify-full**을 선택합니다. Amazon DocumentDB 클러스터에서 SSL을 비활성화한 경우, 이 단계를 건너뛰어도 됩니다.

1. **CA 인증서**에서 Amazon DocumentDB 인증서인 `rds-combined-ca-bundle.pem`을 선택합니다. 이 인증서를 추가하는 방법에 대한 지침은 [TLS를 사용하여 Amazon DocumentDB에 연결](#CHAP_Source.DocumentDB.TLS) 섹션을 참조하세요.

1. **데이터베이스 이름**에 마이그레이션할 데이터베이스의 이름을 입력합니다.

CLI에서는 다음 절차를 사용하세요.

**를 사용하여 Amazon DocumentDB 소스 엔드포인트를 구성하려면 AWS CLI**
+ 다음 AWS DMS `create-endpoint` 명령을 실행하여 Amazon DocumentDB 소스 엔드포인트를 구성하고 자리 표시자를 고유한 값으로 바꿉니다.

  ```
  aws dms create-endpoint \
             --endpoint-identifier a_memorable_name \
             --endpoint-type source \
             --engine-name docdb \
             --username value \
             --password value \
             --server-name servername_where_database_endpoint_resides \
             --port 27017 \
             --database-name name_of_endpoint_database
  ```

## Amazon DocumentDB 모음을 분할하고 병렬로 마이그레이션
<a name="CHAP_Source.DocumentDB.ParallelLoad"></a>

마이그레이션 작업의 성능을 개선하기 위해 Amazon DocumentDB 소스 엔드포인트는 테이블 매핑에서 병렬 전체 로드 기능 옵션 두 가지를 지원합니다. 다시 말해 JSON 설정에서 병렬 전체 로드를 위해 테이블 매핑에서 자동 분할 옵션이나 범위 분할 옵션을 사용하여 모음을 병렬로 마이그레이션할 수 있습니다. 자동 분할 옵션을 사용하면가 각 스레드에서 마이그레이션을 위해 소스를 자동으로 분할 AWS DMS 하는 기준을 지정할 수 있습니다. 범위 분할 옵션을 사용하면 DMS AWS DMS 가 각 스레드에서 마이그레이션할 각 세그먼트의 특정 범위를 지정할 수 있습니다. 이러한 설정에 대한 자세한 내용은 [테이블 및 컬렉션 설정 규칙과 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md) 섹션을 참조하세요.

### 자동 분할 범위를 사용하여 Amazon DocumentDB 데이터베이스를 병렬로 마이그레이션
<a name="CHAP_Source.DocumentDB.ParallelLoad.AutoPartitioned"></a>

 AWS DMS 가 각 스레드의 데이터를 자동으로 파티셔닝(분할)하는 기준, 특히 스레드당 마이그레이션할 문서 수를 지정하여 문서를 병렬로 마이그레이션할 수 있습니다. AWS DMS 는 이 방식을 사용하여 스레드당 성능을 극대화하는 세그먼트 경계 최적화를 시도합니다.

테이블 매핑에서 다음 테이블 설정 옵션을 사용하여 분할 기준을 지정할 수 있습니다.


|  테이블 설정 옵션  |  설명  | 
| --- | --- | 
|  `"type"`  |  (필수) 소스로 사용하는 Amazon DocumentDB의 경우, `"partitions-auto"`로 설정합니다.  | 
|  `"number-of-partitions"`  |  (선택 사항) 마이그레이션에 사용되는 총 파티션(세그먼트) 수. 기본값은 16입니다.  | 
|  `"collection-count-from-metadata"`  |  (선택 사항) 로 설정하면 예상 컬렉션 수를 `true` AWS DMS 사용하여 파티션 수를 결정합니다. 로 설정하면 실제 컬렉션 수를 `false` AWS DMS 사용합니다. 기본값은 `true`입니다.  | 
|  `"max-records-skip-per-page"`  |  (선택 사항) 각 파티션의 경계를 결정할 때 한 번에 건너뛸 레코드 수입니다.는 페이지가 매겨진 건너뛰기 접근 방식을 AWS DMS 사용하여 파티션의 최소 경계를 결정합니다. 기본값은 10,000입니다. 상대적으로 큰 값을 설정하면 커서 시간이 초과되고 작업이 실패할 수 있습니다. 상대적으로 작은 값을 설정하면 페이지당 작업 수가 늘어나고 전체 로드 속도가 느려집니다.  | 
|  `"batch-size"`  |  (선택 사항) 배치 하나에서 반환되는 문서 수를 제한합니다. 배치마다 서버를 왕복해야 합니다. 배치 크기가 0인 경우, 커서는 서버에서 정의한 최대 배치 크기를 사용합니다. 기본값은 0입니다.  | 

다음 예제는 자동 분할을 위한 테이블 매핑을 보여 줍니다.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

자동 분할에는 다음과 같은 제한이 있습니다. 각 세그먼트의 마이그레이션은 모음 개수와 모음의 최소 `_id`를 개별적으로 가져옵니다. 그런 다음 페이지 매김 건너뛰기를 사용하여 해당 세그먼트의 최소 경계를 계산합니다. 따라서 모음의 모든 세그먼트 경계를 계산할 때까지 각 모음의 최소 `_id` 값이 일정하게 유지되어야 합니다. 세그먼트 경계를 계산하는 동안 모음의 최소 `_id` 값을 변경하면 데이터가 손실되거나 행 중복 오류가 발생할 수 있습니다.

### 특정 세그먼트 범위를 사용하여 Amazon DocumentDB 데이터베이스를 병렬로 마이그레이션
<a name="CHAP_Source.DocumentDB.ParallelLoad.Ranges"></a>

다음 예제에 나온 Amazon DocumentDB 모음에는 항목 7개와 프라이머리 키 `_id`가 있습니다.

![\[7개 항목이 있는 Amazon DocumentDB 모음.\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/images/datarep-docdb-collection.png)


모음을 세 개의 세그먼트로 분할하고 병렬로 마이그레이션하려면 다음 JSON 예제와 같이 마이그레이션 작업에 테이블 매핑 규칙을 추가하면 됩니다.

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

이 테이블 매핑 정의는 소스 모음을 세 개의 세그먼트로 분할하고 병렬로 마이그레이션합니다. 분할 경계는 다음과 같습니다.

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 and not in (_id less-than-or-equal-to  "5f805c97873173399a278d79" and num less-than-or-equal-to 2) (3 records)
Data not in (_id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5) (2 records)
```

마이그레이션 작업이 완료되면 다음 예제와 같이 작업 로그에서 테이블이 병렬로 로드된 것을 확인할 수 있습니다. 소스 테이블에서 각 세그먼트를 언로드하는 데 사용된 Amazon DocumentDB `find` 절도 확인할 수 있습니다.

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

현재는 다음 Amazon DocumentDB 데이터 형식을 세그먼트 키 열로 AWS DMS 지원합니다.
+ 배정밀도 실수
+ 문자열
+ ObjectId
+ 32비트 정수
+ 64비트 정수

## Amazon DocumentDB를 소스로 사용할 때 여러 데이터베이스 마이그레이션 AWS DMS
<a name="CHAP_Source.DocumentDB.Multidatabase"></a>

AWS DMS 버전 3.4.5 이상에서는 Amazon DocumentDB 버전 4.0 이상에서만 단일 작업으로 여러 데이터베이스를 마이그레이션할 수 있습니다. 여러 데이터베이스를 마이그레이션하려면 다음을 수행하세요.

1. Amazon DocumentDB 소스 엔드포인트를 생성할 때:
   +  AWS Management Console 의 엔드포인트 **생성** 페이지의 **엔드포인트 구성**에서 **데이터베이스 이름을** 비워 AWS DMS둡니다.
   +  AWS Command Line Interface (AWS CLI)에서 **CreateEndpoint** 작업에 지정한 **DocumentDBSettings**의 **DatabaseName** 파라미터에 빈 문자열 값을 할당합니다.

1. 이 Amazon DocumentDB 소스 엔드포인트에서 마이그레이션하려는 각 데이터베이스마다 콘솔의 안내 입력을 사용하거나 JSON에서 직접 각 데이터베이스의 이름을 작업 테이블 매핑의 스키마 이름으로 지정합니다. 안내 입력에 대한 자세한 내용은 [콘솔에서 테이블 선택 및 변환 규칙 지정](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md)의 설명을 참조하세요. JSON에 대한 자세한 내용은 [선택 규칙 및 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md) 섹션을 참조하세요.

예를 들면 다음과 같이 JSON을 지정하여 Amazon DocumentDB 데이터베이스 3개를 마이그레이션할 수 있습니다.

**Example 스키마에서 모든 테이블 마이그레이션**  
다음 JSON은 소스 엔드포인트에 있는 `Customers`, `Orders`, `Suppliers` 데이터베이스의 모든 테이블을 대상 엔드포인트로 마이그레이션합니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include"
        }
    ]
}
```

## Amazon DocumentDB를 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.DocumentDB.Limitations"></a>

다음은 Amazon DocumentDB를 소스로 사용할 때의 제한 사항입니다 AWS DMS.
+ `_id` 옵션이 별도의 열로 설정된 경우 ID 문자열이 200자를 초과할 수 없습니다.
+ 객체 ID와 배열 형식 키는 테이블 모드에서 `oid` 및 `array` 접두사가 붙은 열로 변환됩니다.

  내부적으로 이러한 열은 접두사 이름으로 참조됩니다. 이러한 열을 참조 AWS DMS 하는에서 변환 규칙을 사용하는 경우 접두사가 붙은 열을 지정해야 합니다. 예를 들면 `${_id}`가 아니라 `${oid__id}`, 또는 `${_addresses}`가 아니라 `${array__addresses}`를 지정합니다.
+  모음 이름과 키 이름에는 달러 기호(\$1)를 포함할 수 없습니다.
+ 테이블 모드와 문서 모드에는 앞서 설명한 제한이 있습니다.
+ 자동 분할을 사용한 병렬 마이그레이션에는 앞에서 설명한 제한 사항이 있습니다.
+ Amazon DocumentDB(MongoDB 호환) 소스는 변경 데이터 캡처(CDC) 시작 위치로 특정 타임스탬프를 사용하는 것을 지원하지 않습니다. 지속적 복제 작업은 타임스탬프에 상관없이 변경 내용을 캡처하기 시작합니다.
+ AWS DMS 는 3.5.2보다 낮은 AWS DMS 버전의 경우 중첩 수준이 97보다 큰 문서를 지원하지 않습니다.
+ DocumentDB에는 소스 필터가 지원되지 않습니다.
+ AWS DMS 는 탄력적 클러스터 모드에서 DocumentDB에 대한 CDC(변경 데이터 캡처) 복제를 소스로 지원하지 않습니다.

## Amazon DocumentDB를 소스로 하는 엔드포인트 설정 사용
<a name="CHAP_Source.DocumentDB.ECAs"></a>

추가 연결 속성을 사용하는 것과 비슷하게 엔드포인트 설정을 사용하여 Amazon DocumentDB 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나의 `create-endpoint` 명령을 `--doc-db-settings '{"EndpointSetting": "value", ...}'` JSON 구문과 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)함께 사용하여 소스 엔드포인트를 생성할 때 설정을 지정합니다.

Amazon DocumentDB를 소스로 하여 사용할 수 있는 엔드포인트 설정이 다음 표에 나와 있습니다.


| 속성 이름 | 유효값 | 기본값과 설명 | 
| --- | --- | --- | 
|   `NestingLevel`   |  `"none"` `"one"`  |  `"none"` - 문서 모드를 사용하려면 `"none"`을 지정합니다. 테이블 모드를 사용하려면 `"one"`을 지정합니다.  | 
|   `ExtractDocID`   |  `true` `false`  |  `false` - 이 속성은 `NestingLevel`이 `"none"`으로 설정된 경우에 사용합니다. [다중 문서 트랜잭션](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)을 생성하는 소스와 함께 CDC를 사용하는 경우 `ExtractDocId` 파라미터를 로 설정해야 **합니다**`true`. 이 파라미터를 활성화하지 않으면 다중 문서 트랜잭션이 발생하면 AWS DMS 작업이 실패합니다.  | 
|   `DocsToInvestigate`   |  `0`보다 큰 양의 정수입니다.  |  `1000` - 이 속성은 `NestingLevel`이 `"one"`으로 설정된 경우에 사용합니다.  | 
|   `ReplicateShardCollections `   |  `true` `false`  |  true인 경우는 데이터를 샤드 컬렉션에 AWS DMS 복제합니다. 대상 엔드포인트가 DocumentDB 탄력적 클러스터인 경우에만는이 설정을 AWS DMS 사용합니다. 이 설정이 true인 경우 다음 사항에 유의하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.DocumentDB.html)  | 

## Amazon DocumentDB의 소스 데이터 형식
<a name="CHAP_Source.DocumentDB.DataTypes"></a>

다음 표에서 AWS DMS사용 시 지원되는 Amazon DocumentDB 소스 데이터 형식을 찾을 수 있습니다. 이 표의 AWS DMS 데이터 형식에서 기본 매핑을 찾을 수도 있습니다. 데이터 형식에 대한 자세한 내용은 MongoDB 설명서의 [BSON Types](https://docs.mongodb.com/manual/reference/bson-types)를 참조하세요.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  Amazon DocumentDB 데이터 형식  |  AWS DMS 데이터 형식  | 
| --- | --- | 
| 부울 | 부울 | 
| 바이너리 | BLOB | 
| Date | Date | 
| 타임스탬프 | Date | 
| 정수 | INT4 | 
| Long | INT8 | 
| 배정밀도 실수 | REAL8 | 
| 문자열(UTF-8) | CLOB | 
| 배열 | CLOB | 
| OID | 문자열 | 

# Amazon S3를의 소스로 사용 AWS DMS
<a name="CHAP_Source.S3"></a>

를 사용하여 Amazon S3 버킷에서 데이터를 마이그레이션할 수 있습니다 AWS DMS. 이렇게 하려면 하나 이상의 데이터 파일을 포함하는 Amazon S3 버킷에 액세스합니다. 해당 S3 버킷에서, 데이터와 데이터의 데이터베이스 테이블 간 매핑을 설명하는 JSON 파일을 이러한 파일 안에 포함합니다.

전체 로드가 시작되기 전에 Amazon S3 버킷에 소스 데이터 파일이 있어야 합니다. `bucketName` 파라미터를 사용하여 버킷 이름을 지정합니다.

소스 데이터 파일은 다음 형식일 수 있습니다.
+ 쉼표로 구분된 값(.csv)
+ Parquet(DMS 버전 3.5.3 이상). Parquet 형식 파일에 대한 자세한 내용은 [Amazon S3의 Parquet 형식 파일을의 소스로 사용 AWS DMS](#CHAP_Source.S3.Parquet) 섹션을 참조하세요.

쉼표로 구분된 값(.csv) 형식의 소스 데이터 파일의 경우 다음 이름 지정 규칙을 사용하여 이름을 지정합니다. 이 규칙에서 *`schemaName`*은 원본 스키마이고 *`tableName`*은 해당 스키마 내 테이블 이름입니다.

```
/schemaName/tableName/LOAD001.csv
/schemaName/tableName/LOAD002.csv
/schemaName/tableName/LOAD003.csv
...
```

 예를 들면 다음 Amazon S3 경로에서 `amzn-s3-demo-bucket`에 데이터 파일이 있다고 가정합니다.

```
s3://amzn-s3-demo-bucket/hr/employee
```

로드 시 소스 스키마 이름이 이고 소스 테이블 이름이 `hr`라고 AWS DMS 가정합니다`employee`.

`bucketName` (필수) 외에도 선택적으로 `bucketFolder` 파라미터를 제공하여가 Amazon S3 버킷에서 데이터 파일을 찾을 위치를 지정할 수 AWS DMS 있습니다. 이전 예제를 계속 진행하면서를 `bucketFolder`로 설정하면가 다음 경로에서 데이터 파일을 `sourcedata` AWS DMS 읽습니다.

```
s3://amzn-s3-demo-bucket/sourcedata/hr/employee
```

추가 연결 속성을 사용하여 열 구분 기호, 행 구분 기호, null 값 지표 등 여러 파라미터를 지정할 수 있습니다. 자세한 내용은 [Amazon S3를 소스로 사용하기 위한 엔드포인트 설정 AWS DMS](#CHAP_Source.S3.Configuring) 단원을 참조하십시오.

다음과 같이 `ExpectedBucketOwner` Amazon S3 엔드포인트 설정을 사용하여 버킷 소유자를 지정하고 스나이핑을 방지할 수 있습니다. 그런 다음, 연결을 테스트하거나 마이그레이션을 수행하도록 요청하면 S3는 지정된 파라미터와 비교하여 버킷 소유자의 계정 ID를 확인합니다.

```
--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'
```

**Topics**
+ [Amazon S3용 외부 테이블을의 소스로 정의 AWS DMS](#CHAP_Source.S3.ExternalTableDef)
+ [Amazon S3와 함께 CDC를의 소스로 사용 AWS DMS](#CHAP_Source.S3.CDC)
+ [Amazon S3를의 소스로 사용할 때의 사전 조건 AWS DMS](#CHAP_Source.S3.Prerequisites)
+ [Amazon S3를의 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.S3.Limitations)
+ [Amazon S3를 소스로 사용하기 위한 엔드포인트 설정 AWS DMS](#CHAP_Source.S3.Configuring)
+ [Amazon S3의 소스 데이터 형식](#CHAP_Source.S3.DataTypes)
+ [Amazon S3의 Parquet 형식 파일을의 소스로 사용 AWS DMS](#CHAP_Source.S3.Parquet)

## Amazon S3용 외부 테이블을의 소스로 정의 AWS DMS
<a name="CHAP_Source.S3.ExternalTableDef"></a>

데이터 파일 외에, 외부 테이블 정의도 제공해야 합니다. *외부 테이블 정의*는가 Amazon S3의 데이터를 해석하는 방법을 설명하는 JSON 문서 AWS DMS 입니다. 이 문서의 최대 크기는 2 MB입니다. AWS DMS Management Console을 사용하여 소스 엔드포인트를 생성하는 경우 테이블 매핑 상자에 JSON을 직접 입력할 수 있습니다. AWS Command Line Interface (AWS CLI) 또는 AWS DMS API를 사용하여 마이그레이션을 수행하는 경우 JSON 파일을 생성하여 외부 테이블 정의를 지정할 수 있습니다.

다음을 포함하는 데이터 파일이 있다고 가정해 보겠습니다.

```
101,Smith,Bob,2014-06-04,New York
102,Smith,Bob,2015-10-08,Los Angeles
103,Smith,Bob,2017-03-13,Dallas
104,Smith,Bob,2017-03-13,Dallas
```

다음은 이 데이터에 대한 외부 테이블 정의 예제입니다.

```
{
    "TableCount": "1",
    "Tables": [
        {
            "TableName": "employee",
            "TablePath": "hr/employee/",
            "TableOwner": "hr",
            "TableColumns": [
                {
                    "ColumnName": "Id",
                    "ColumnType": "INT8",
                    "ColumnNullable": "false",
                    "ColumnIsPk": "true"
                },
                {
                    "ColumnName": "LastName",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                },
                {
                    "ColumnName": "FirstName",
                    "ColumnType": "STRING",
                    "ColumnLength": "30"
                },
                {
                    "ColumnName": "HireDate",
                    "ColumnType": "DATETIME"
                },
                {
                    "ColumnName": "OfficeLocation",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                }
            ],
            "TableColumnsTotal": "5"
        }
    ]
}
```

이 JSON 문서의 요소는 다음과 같습니다.

`TableCount` - 소스 테이블 수. 이 예제에는 테이블이 하나뿐입니다.

`Tables` - 소스 테이블당 하나의 JSON 맵으로 구성된 배열. 이 예제에는 맵이 하나뿐입니다. 각 맵은 다음 요소로 구성됩니다.
+ `TableName` - 소스 테이블의 이름.
+ `TablePath` - AWS DMS 가 전체 데이터 로드 파일을 찾을 수 있는 Amazon S3 버킷의 경로. `bucketFolder` 값이 지정된 경우, 해당 값이 경로에 추가됩니다.
+ `TableOwner` - 이 테이블의 스키마 이름.
+ `TableColumns` - 하나 이상의 맵으로 이루어진 배열. 각 맵은 소스 테이블의 열을 설명합니다.
  + `ColumnName` – 소스 테이블의 열 이름.
  + `ColumnType` - 열의 데이터 형식. 유효한 데이터 형식은 [Amazon S3의 소스 데이터 형식](#CHAP_Source.S3.DataTypes) 섹션을 참조하세요.
  + `ColumnLength` - 이 열의 바이트 수. S3 소스가 전체 LOB 모드를 지원하지 않으므로 최대 열 길이는 2,147,483,647바이트(2,047메가바이트)로 제한됩니다. `ColumnLength`가 유효한 데이터 형식은 다음과 같습니다.
    + BYTE
    + STRING
  + `ColumnNullable` - 이 열에 NULL 값을 포함할 수 있는 경우 `true`인 부울 값(기본값=`false`).
  + `ColumnIsPk` - 이 열이 프라이머리 키의 일부인 경우 `true`인 부울 값(기본값=`false`).
  + `ColumnDateFormat` - DATE, TIME, DATETIME 형식이 있는 열의 입력 날짜 형식으로, 데이터 문자열을 날짜 객체로 파싱하는 데 사용됩니다. 가능한 값은 다음과 같습니다.

    ```
    - YYYY-MM-dd HH:mm:ss
    - YYYY-MM-dd HH:mm:ss.F
    - YYYY/MM/dd HH:mm:ss
    - YYYY/MM/dd HH:mm:ss.F
    - MM/dd/YYYY HH:mm:ss
    - MM/dd/YYYY HH:mm:ss.F
    - YYYYMMdd HH:mm:ss
    - YYYYMMdd HH:mm:ss.F
    ```
+ `TableColumnsTotal` - 총 열 수. 이 숫자는 `TableColumns` 배열의 요소 수와 일치해야 합니다.

달리 지정하지 않으면 `ColumnLength`가 0이라고 AWS DMS 가정합니다.

**참고**  
지원되는 버전에서는 AWS DMS S3 소스 데이터에 선택적 작업 열이 열 `TableName` 값 앞에 첫 번째 열로 포함될 수도 있습니다. 이 작업 열은 전체 로드 중에 데이터를 S3 대상 엔드포인트로 마이그레이션하는 데 사용되는 작업(`INSERT`)을 식별합니다.  
있는 경우 이 열의 값은 `INSERT` 작업 키워드(`I`)의 초기 문자열입니다. 지정된 경우 일반적으로 이 열은 이전 마이그레이션 중에 DMS에서 S3 대상으로 생성한 S3 소스입니다.  
3.4.2 이전 DMS 버전에서 이 열은 이전 DMS 전체 로드에서 생성한 S3 소스 데이터에 없었습니다. S3 대상 데이터에 열을 추가하면 모든 행이 데이터의 전체 로드 중에 기록되는지 또는 CDC 로드 중에 기록되는지와 상관없이 S3 대상에 기록된 모든 행의 형식을 일관적으로 유지할 수 있습니다. S3 대상 데이터 서식 지정에 대한 자세한 내용은 [마이그레이션된 S3 데이터에 소스 DB 작업 표시](CHAP_Target.S3.md#CHAP_Target.S3.Configuring.InsertOps) 섹션을 참조하세요.

NUMERIC 유형 열의 경우, 정밀도와 배율을 지정합니다. *정밀도*는 숫자의 총 자릿수이며, *배율*은 소수점 오른쪽의 자릿수입니다. 다음과 같이, 이를 위해 `ColumnPrecision` 및 `ColumnScale` 요소를 사용할 수 있습니다.

```
...
    {
        "ColumnName": "HourlyRate",
        "ColumnType": "NUMERIC",
        "ColumnPrecision": "5"
        "ColumnScale": "2"
    }
...
```

소수점 이하 초가 포함된 데이터가 있는 DATETIME 유형 열의 경우, 스케일을 지정합니다. *스케일*은 소수점 이하 초의 자릿수이며, 범위는 0에서 9까지입니다. 다음과 같이 이를 위해 `ColumnScale` 요소를 사용할 수 있습니다.

```
...
{
      "ColumnName": "HireDate",
      "ColumnType": "DATETIME",
      "ColumnScale": "3"
}
...
```

달리 지정하지 않으면 `ColumnScale`가 0이고 소수 초를 잘라낸 AWS DMS 다고 가정합니다.

## Amazon S3와 함께 CDC를의 소스로 사용 AWS DMS
<a name="CHAP_Source.S3.CDC"></a>

가 전체 데이터 로드를 AWS DMS 수행한 후 선택적으로 데이터 변경 사항을 대상 엔드포인트에 복제할 수 있습니다. 이렇게 하려면 변경 데이터 캡처 파일(CDC 파일)을 Amazon S3 버킷에 업로드합니다.는 업로드할 때 이러한 CDC 파일을 AWS DMS 읽은 다음 대상 엔드포인트에 변경 사항을 적용합니다.

CDC 파일은 다음과 같이 지정됩니다.

```
CDC00001.csv
CDC00002.csv
CDC00003.csv
...
```

**참고**  
변경 데이터 폴더에서 CDC 파일을 복제하려면 어휘(순차적) 순으로 CDC 파일을 성공적으로 업로드합니다. 예를 들어 CDC00002.csv 파일을 CDC00003.csv 파일 앞에 업로드합니다. 그렇지 않으면 CDC00002.csv를 건너뛰고 CDC00003.csv 이후에 로드해도 CDC00002.csv가 복제되지 않습니다. CDC00003.csv 이후에 CDC00004.csv를 로드하면 CDC00004.csv가 성공적으로 복제됩니다.

에서 파일을 찾을 AWS DMS 수 있는 위치를 표시하려면 `cdcPath` 파라미터를 지정합니다. 이전 예제를 계속하여, `cdcPath`를 `changedata`로 설정하는 경우 AWS DMS 는 다음 경로에서 CDC 파일을 읽습니다.

```
s3://amzn-s3-demo-bucket/changedata
```

`cdcPath`를 `changedata`로, `bucketFolder`를 `myFolder`로 설정하면 AWS DMS 는 다음 경로에서 CDC 파일을 읽습니다.

```
s3://amzn-s3-demo-bucket/myFolder/changedata
```

다음과 같이 CDC 파일의 레코드에는 형식 지정되어 있습니다.
+ 작업 - `INSERT` 또는 `I`, `UPDATE` 또는 `U`, `DELETE` 또는 `D`와 같은 수행할 변경 작업. 이러한 키워드 및 문자 값은 대소문자를 구분합니다.
**참고**  
지원되는 AWS DMS 버전에서는 두 가지 방법으로 각 로드 레코드에 대해 수행할 작업을 식별할 AWS DMS 수 있습니다. AWS DMS 는 레코드의 키워드 값(예: `INSERT`) 또는 키워드 초기 문자(예: )에서이 작업을 수행할 수 있습니다`I`. 이전 버전에서는가 전체 키워드 값에서만 로드 작업을 AWS DMS 인식했습니다.  
의 이전 버전에서는 CDC 데이터를 로깅하기 위해 AWS DMS전체 키워드 값이 작성되었습니다. 또한 이전 버전에서는 키워드 첫 문자만 사용하여 작업 값을 S3 대상에 기록했습니다.  
두 형식을 모두 인식하면 작업 열이 S3 소스 데이터를 생성하기 위해 작성되는 방식에 관계없이가 작업을 AWS DMS 처리할 수 있습니다. 이 접근 방식은 이후 마이그레이션에 대한 소스로 S3 대상 데이터 사용을 지원합니다. 이 접근 방식을 사용하면 이후 S3 소스의 작업 열에 나타나는 키워드 초기 값의 형식을 변경할 필요가 없습니다.
+ 테이블 이름 - 소스 테이블의 이름.
+ 스키마 이름 - 소스 스키마의 이름.
+ 데이터 - 변경할 데이터를 나타내는 하나 이상의 열.

다음은 `employee` 이름의 테이블에 대한 예제 CDC 파일입니다.

```
INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York
UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles
UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
```

## Amazon S3를의 소스로 사용할 때의 사전 조건 AWS DMS
<a name="CHAP_Source.S3.Prerequisites"></a>

Amazon S3를 소스로 사용하려면 AWS DMS소스 S3 버킷이 데이터를 마이그레이션하는 DMS 복제 인스턴스와 동일한 AWS 리전에 있어야 합니다. 또한, 마이그레이션에 사용하는 AWS 계정에 소스 버킷에 대한 읽기 액세스 권한이 있어야 합니다. AWS DMS 버전 3.4.7 이상의 경우 DMS는 VPC 엔드포인트 또는 퍼블릭 경로를 통해 소스 버킷에 액세스해야 합니다. VPC 엔드포인트에 대한 자세한 내용은 [에 대한 VPC 엔드포인트 구성 AWS DMS](CHAP_VPC_Endpoints.md) 섹션을 참조하세요.

마이그레이션 작업을 생성하는 데 사용되는 사용자 계정에 할당된 AWS Identity and Access Management (IAM) 역할에는 다음과 같은 권한 집합이 있어야 합니다.

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

****  

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

------

Amazon S3 버킷에서 버전 관리가 활성화된 경우 마이그레이션 작업을 생성하는 데 사용되는 사용자 계정에 할당된 AWS Identity and Access Management (IAM) 역할에는 다음과 같은 권한 집합이 있어야 합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
    ]
}
```

------

## Amazon S3를의 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.S3.Limitations"></a>

Amazon S3를 소스로 사용할 때 적용되는 제한 사항은 다음과 같습니다.
+ S3의 버전 관리를 활성화하지 마세요. S3 버전 관리가 필요한 경우, 수명 주기 정책을 사용하여 이전 버전을 적극적으로 삭제하세요. 그렇지 않으면 S3 `list-object` 직접 호출 시간 초과로 인해 엔드포인트 테스트 연결 실패가 발생할 수 있습니다. S3 버킷의 수명 주기 정책을 생성하려면 [스토리지 수명 주기 관리](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)를 참조하세요. S3 객체의 버전을 삭제하려면 [버전 관리 활성화 버킷에서 객체 버전 삭제](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html)를 참조하세요.
+ VPC 지원(게이트웨이 VPC) S3 버킷은 버전 3.4.7 이상 버전에서 지원됩니다.
+ MySQL은 `time` 데이터 유형을 `string`으로 변환합니다. MySQL에서 `time` 데이터 유형 값을 보려면 대상 테이블의 열을 `string`으로 정의하고 작업의 **대상 테이블 준비 모드** 설정을 **잘라내기**로 설정합니다.
+ AWS DMS 는 `BYTE` 및 `BYTE` 데이터 형식의 데이터에 대해 내부적으로 `BYTES` 데이터 형식을 사용합니다.
+ S3 소스 엔드포인트는 DMS 테이블 다시 로드 기능을 지원하지 않습니다.
+ AWS DMS 는 Amazon S3를 소스로 사용하는 전체 LOB 모드를 지원하지 않습니다.

소스로 사용하는 Amazon S3에서 Parquet 형식 파일을 사용할 때 적용되는 제한 사항은 다음과 같습니다.
+ `MMYYYYDD` 또는 `DDMMYYYY`의 날짜는 S3 Parquet 소스 날짜 파티셔닝 기능에서 지원되지 않습니다.

## Amazon S3를 소스로 사용하기 위한 엔드포인트 설정 AWS DMS
<a name="CHAP_Source.S3.Configuring"></a>

추가 연결 속성을 사용하는 것과 비슷하게 엔드포인트 설정을 사용하여 Amazon S3 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나의 `create-endpoint` 명령을 `--s3-settings '{"EndpointSetting": "value", ...}'` JSON 구문과 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)함께 사용하여 소스 엔드포인트를 생성할 때 설정을 지정합니다.

**참고**  
AWS DMS 는 SSL 모드 또는 인증서를 지정할 필요 없이 Amazon S3 엔드포인트에 대한 보안 연결을 기본값으로 설정합니다.

Amazon S3를 소스로 하여 사용할 수 있는 엔드포인트 설정이 다음 표에 나와 있습니다.


| **옵션** | **설명** | 
| --- | --- | 
| BucketFolder |  (선택 사항) S3 버킷의 폴더 이름. 이 속성이 지정된 경우, 소스 데이터 파일과 CDC 파일을 경로 `s3://amzn-s3-demo-bucket/bucketFolder/schemaName/tableName/`과 `s3://amzn-s3-demo-bucket/bucketFolder/`에서 각각 읽습니다. 이 속성이 지정되지 않은 경우, 사용되는 경로는 `schemaName/tableName/`입니다. `'{"BucketFolder": "sourceData"}'`  | 
| BucketName |  S3 버킷의 이름. `'{"BucketName": "amzn-s3-demo-bucket"}'`  | 
| CdcPath | CDC 파일의 위치. 작업에서 변경 데이터를 캡처하는 경우에는 이 속성이 필수이며, 그렇지 않은 경우에는 선택 사항입니다. 이 있는 경우 CdcPath는이 경로에서 CDC 파일을 AWS DMS 읽고 대상 엔드포인트에 데이터 변경 사항을 복제합니다. 자세한 내용은 [Amazon S3와 함께 CDC를의 소스로 사용 AWS DMS](#CHAP_Source.S3.CDC) 단원을 참조하십시오.`'{"CdcPath": "changeData"}'`  | 
| CsvDelimiter |  원본 파일에서 열을 구분하는 데 사용되는 구분 기호입니다. 기본값은 쉼표입니다. 예를 들면 다음과 같습니다. `'{"CsvDelimiter": ","}'`  | 
| CsvNullValue |  소스에서 읽을 때 null로 AWS DMS 취급되는 사용자 정의 문자열입니다. 기본값은 빈 문자열입니다. 이 파라미터를 설정하지 않으면는 빈 문자열을 null 값으로 AWS DMS 처리합니다. 이 파라미터를 "\$1N"과 같은 문자열로 설정하면는이 문자열을 null 값으로 AWS DMS 취급하고 빈 문자열을 빈 문자열 값으로 취급합니다.  | 
| CsvRowDelimiter |  원본 파일에서 행을 구분하는 데 사용되는 구분 기호입니다. 기본값은 줄 바꿈(`\n`)입니다. `'{"CsvRowDelimiter": "\n"}'`  | 
| DataFormat |  Parquet 형식으로 데이터를 읽으려면 이 값을 `Parquet`으로 설정합니다. `'{"DataFormat": "Parquet"}'`  | 
| IgnoreHeaderRows |  이 값을 1로 설정하면 .csv 파일의 첫 번째 행 헤더를 AWS DMS 무시합니다. 1 값은 이 기능을 활성화하고, 0 값은 비활성화합니다. 기본값은 0입니다. `'{"IgnoreHeaderRows": 1}'`  | 
| Rfc4180 |  이 값을 `true` 또는 `y`로 설정하면 여는 큰따옴표 뒤에 닫는 큰따옴표가 와야 합니다. 이 형식은 RFC 4180을 준수합니다. 이 값을 `false` 또는 `n`으로 설정하면 문자열 리터럴이 그대로 대상에 복사됩니다. 이 경우 구분 기호(행 또는 열)는 필드의 끝을 알립니다. 이렇게 구분 기호는 값의 끝을 알리는 것이므로 문자열의 일부로 사용할 수 없습니다. 기본값은 `true`입니다. 유효값: `true`, `false`, `y`, `n`  `'{"Rfc4180": false}'`  | 

## Amazon S3의 소스 데이터 형식
<a name="CHAP_Source.S3.DataTypes"></a>

Amazon S3를 소스로 사용하는 데이터 마이그레이션은 Amazon S3의 데이터를 AWS DMS 데이터 형식으로 매핑 AWS DMS 해야 합니다. 자세한 내용은 [Amazon S3용 외부 테이블을의 소스로 정의 AWS DMS](#CHAP_Source.S3.ExternalTableDef) 단원을 참조하십시오.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).

다음 AWS DMS 데이터 형식은 Amazon S3를 소스로 사용할 때 사용됩니다.
+ BYTE - `ColumnLength`가 필요합니다. 자세한 내용은 [Amazon S3용 외부 테이블을의 소스로 정의 AWS DMS](#CHAP_Source.S3.ExternalTableDef) 단원을 참조하십시오.
+ DATE
+ TIME
+ DATETIME - 자세한 내용과 예제는 [Amazon S3용 외부 테이블을의 소스로 정의 AWS DMS](#CHAP_Source.S3.ExternalTableDef)에서 DATETIME 형식 예제를 참조하세요.
+ INT1
+ INT2
+ INT4
+ INT8
+ NUMERIC - `ColumnPrecision` 및가 필요합니다`ColumnScale`.는 다음 최대값을 AWS DMS 지원합니다.
  + **ColumnPrecision: 38**
  + **ColumnScale: 31**

  자세한 내용과 예제는 [Amazon S3용 외부 테이블을의 소스로 정의 AWS DMS](#CHAP_Source.S3.ExternalTableDef)에서 NUMERIC 형식 예제를 참조하세요.
+ REAL4
+ REAL8
+ STRING - `ColumnLength`가 필요합니다. 자세한 내용은 [Amazon S3용 외부 테이블을의 소스로 정의 AWS DMS](#CHAP_Source.S3.ExternalTableDef) 단원을 참조하십시오.
+ UINT1
+ UINT2
+ UINT4
+ UINT8
+ BLOB
+ CLOB
+ BOOLEAN

## Amazon S3의 Parquet 형식 파일을의 소스로 사용 AWS DMS
<a name="CHAP_Source.S3.Parquet"></a>

 AWS DMS 버전 3.5.3 이상에서는 S3 버킷의 Parquet 형식 파일을 전체 로드 또는 CDC 복제의 소스로 사용할 수 있습니다.

DMS는 데이터를 S3 대상 엔드포인트로 마이그레이션하여 DMS가 생성하는 소스로 Parquet 형식 파일만 지원합니다. 파일 이름은 지원되는 형식이어야 합니다. 그렇지 않으면 DMS는 마이그레이션에 이를 포함하지 않습니다.

Parquet 형식의 소스 데이터 파일의 경우 다음 폴더 및 명명 규칙을 따라야 합니다.

```
schema/table1/LOAD00001.parquet
schema/table2/LOAD00002.parquet
schema/table2/LOAD00003.parquet
```

Parquet 형식의 CDC 데이터에 대한 소스 데이터 파일의 경우 다음 폴더 및 명명 규칙을 사용하여 이름을 지정하고 저장합니다.

```
schema/table/20230405-094615814.parquet
schema/table/20230405-094615853.parquet
schema/table/20230405-094615922.parquet
```

Parquet 형식의 파일에 액세스하려면 다음 엔드포인트 설정을 지정합니다.
+ `DataFormat`를 `Parquet`으로 설정합니다.
+ `cdcPath` 설정을 지정하지 마세요. 지정된 스키마/테이블 폴더에 Parquet 형식 파일을 생성해야 합니다.

S3 엔드포인트 설정에 대한 자세한 내용은 *AWS Database Migration Service API 참조*의 [S3Settings](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html)를 참조하세요.

### Parquet 형식 파일에 지원되는 데이터 유형
<a name="CHAP_Source.S3.Parquet.Datatypes"></a>

AWS DMS 는 Parquet 형식 파일에서 데이터를 마이그레이션할 때 다음과 같은 소스 및 대상 데이터 형식을 지원합니다. 마이그레이션하기 전에 대상 테이블에 올바른 데이터 유형의 열이 있는지 확인합니다.


| 소스 데이터 유형 | 대상 데이터 유형 | 
| --- | --- | 
| BYTE | BINARY | 
| DATE | DATE32 | 
| TIME | TIME32 | 
| DATETIME | TIMESTAMP | 
| INT1 | INT8 | 
| INT2 | INT16 | 
| INT4 | INT32 | 
| INT8 | INT64 | 
| NUMERIC | DECIMAL | 
| REAL4 | FLOAT | 
| REAL8 | DOUBLE | 
| STRING | STRING | 
| UINT1 | UINT8 | 
| UINT2 | UINT16 | 
| UINT4 | UINT32 | 
| UINT8 | UINT | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 

# Linux, Unix, Windows 및 Amazon RDS 데이터베이스(Db2 LUW)용 IBM Db2를의 소스로 사용 AWS DMS
<a name="CHAP_Source.DB2"></a>

 AWS Database Migration Service ()를 사용하여 Linux, Unix, Windows 및 Amazon RDS용 IBM Db2(Db2 LUW) 데이터베이스에서 지원되는 모든 대상 데이터베이스로 데이터를 마이그레이션할 수 있습니다AWS DMS.

가 소스로 AWS DMS 지원하는 Linux, Unix, Windows 및 RDS의 Db2 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

Secure Sockets Layer(SSL)를 사용하여 Db2 LUW 엔드포인트와 복제 인스턴스 간 연결을 암호화할 수 있습니다. Db2 LUW 엔드포인트에서 SSL을 사용하는 방법에 대한 자세한 내용은 [에서 SSL 사용 AWS Database Migration Service](CHAP_Security.SSL.md) 섹션을 참조하세요.

가 IBM Db2 소스 데이터베이스에서 데이터를 AWS DMS 읽을 때 Db2 버전 9.7 이상의 기본 격리 수준 CURSOR STABILITY(CS)을 사용합니다. 자세한 내용은 [IBM DB2 for Linux, UNIX 및 Windows](https://www.ibm.com/docs/en/db2/12.1.0) 설명서를 참조하세요.

## Db2 LUW를의 소스로 사용할 때의 사전 조건 AWS DMS
<a name="CHAP_Source.DB2.Prerequisites"></a>

Db2 LUW 데이터베이스를 소스로 사용하기 전에 다음 사전 조건이 요구됩니다.

변경 데이터 캡처(CDC)라고도 하는 지속적 복제를 활성화하기 위해서는 다음을 수행하세요.
+ 데이터베이스를 복구 가능으로 설정하여가 변경 사항을 캡처 AWS DMS 해야 합니다. 데이터베이스 구성 파라미터인 `LOGARCHMETH1`과 `LOGARCHMETH2` 중 하나, 또는 둘 모두가 `ON`으로 설정되어 있어야 데이터베이스를 복구할 수 있습니다.

  데이터베이스를 복구할 수 있는 경우는 필요한 `ARCHIVE LOG` 경우 Db2에 액세스할 AWS DMS 수 있습니다.
+ DB2 트랜잭션 로그를 사용할 수 있고 처리할 보존 기간이 충분한지 확인합니다 AWS DMS.
+ DB2에는 트랜잭션 로그 레코드를 추출하기 위한 `SYSADM` 또는 `DBADM` 권한 부여가 필요합니다. 사용자 계정에 다음 권한을 부여합니다.
  + `SYSADM` 또는 `DBADM`
  + `DATAACCESS`
**참고**  
전체 로드 전용 작업의 경우, DMS 사용자 계정에 DATAACCESS 권한이 필요합니다.
+ IBM DB2 for LUW 버전 9.7을 소스로 사용하는 경우, 추가 연결 속성(ECA) `CurrentLsn`을 다음과 같이 설정합니다.

  `CurrentLsn=LSN`, 여기서 `LSN`은 복제가 시작될 로그 시퀀스 번호(LSN)를 지정합니다. 또는 `CurrentLsn=scan`.
+ Amazon RDS for Db2 LUW를 소스로 사용하는 경우 아카이브 로그를 사용할 수 있는지 확인합니다 AWS DMS. AWS관리형 Db2 데이터베이스는 아카이브 로그를 최대한 빨리 제거하므로 로그를 계속 사용할 수 있는 시간을 늘려야 합니다. 예를 들어, 로그 보존 시간을 24시간으로 늘리려면 다음 명령을 실행합니다.

  ```
  db2 "call rdsadmin.set_archive_log_retention( ?, 'TESTDB', '24')"
  ```

  Amazon RDS for Db2 LUW 절차에 대한 자세한 내용은 [ Amazon Relational Database Service 사용 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-stored-procedures.html)의 *Amazon RDS for Db2 저장 프로시저 참조*를 참조하세요.
+ DB2별 마이그레이션 전 평가를 사용하는 경우 다음 권한을 부여합니다.

  ```
  GRANT CONNECT ON DATABASE TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBM.SYSDUMMY1 TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.ENV_INST_INFO TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.DBCFG TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.SCHEMATA TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.COLUMNS TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.TABLES TO USER <DMS_USER>;
  GRANT EXECUTE ON FUNCTION SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID TO <DMS_USER>;
  GRANT EXECUTE ON PACKAGE NULLID.SYSSH200 TO USER <DMS_USER>;
  ```

## Db2 LUW를 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.DB2.Limitations"></a>

AWS DMS 는 클러스터링된 데이터베이스를 지원하지 않습니다. 하지만 클러스터의 각 엔드포인트에 별도의 Db2 LUW를 정의할 수 있습니다. 예를 들어 클러스터의 노드 중 하나를 사용하여 전체 로드 마이그레이션 작업을 생성한 다음 각 노드에서 별도의 작업을 생성할 수 있습니다.

AWS DMS 는 소스 Db2 LUW 데이터베이스의 `BOOLEAN` 데이터 형식을 지원하지 않습니다.

지속적 복제(CDC)를 사용할 때 다음 제한 사항이 적용됩니다.
+ 파티션이 여러 개인 테이블이 잘리면 AWS DMS 콘솔에 표시된 DDL 이벤트 수가 파티션 수와 같습니다. Db2 LUW가 각 파티션에 별개의 DDL을 기록하기 때문입니다.
+ 분할된 테이블에서는 다음 DDL 작업이 지원되지 않습니다.
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DETACH PARTITION
  + ALTER TABLE ATTACH PARTITION
+ AWS DMS 는 DB2 고가용성 재해 복구(HADR) 대기 인스턴스에서 지속적인 복제 마이그레이션을 지원하지 않습니다. 대기 인스턴스에 액세스할 수 없습니다.
+ DECFLOAT 데이터 형식은 지원되지 않습니다. 따라서 지속적 복제 진행 중 DECFLOAT 열들의 변경 내용이 무시됩니다.
+ RENAME COLUMN 문은 지원되지 않습니다.
+ 다중 차원 클러스터링(MDC) 테이블에 대한 업데이트를 수행할 때 각 업데이트는 AWS DMS 콘솔에 INSERT \$1 DELETE로 표시됩니다.
+ 작업 설정 **복제에 LOB 열 포함**이 활성화되지 않은 경우, LOB 열이 있는 테이블은 지속적 복제 도중 일시 중지됩니다.
+ Db2 LUW 버전 10.5 이상의 경우, 데이터가 행 외부에 저장된 가변 길이 문자열 열은 무시됩니다. 이 제한은 VARCHAR 및 VARGRAPHIC과 같은 데이터 형식을 가진 열의 확장된 행 크기로 생성된 테이블에만 적용됩니다. 이 제한을 해결하려면 페이지 크기가 더 큰 테이블 공간으로 테이블을 이동하세요. 자세한 내용은 [ What can I do if I want to change the pagesize of DB2 tablespaces]( https://www.ibm.com/support/pages/what-can-i-do-if-i-want-change-pagesize-db2-tablespaces )를 참조하세요.
+ 지속적 복제의 경우, DMS는 DB2 LOAD 유틸리티에 의해 페이지 수준에서 로드된 데이터의 마이그레이션을 지원하지 않습니다. 대신 SQL 삽입을 사용하는 IMPORT 유틸리티를 사용하세요. 자세한 내용은 [ differences between the import and load utilities]( https://www.ibm.com/docs/en/db2/11.1?topic=utilities-differences-between-import-load-utility)를 참조하세요.
+ 복제 작업이 실행되는 동안 DMS는 테이블이 DATA CAPTURE CHANGE 속성으로 생성된 경우에만 CREATE TABLE DDL을 캡처합니다.
+ DMS는 Db2 데이터베이스 파티션 기능(DPF)을 사용할 때 다음과 같은 제한 사항이 있습니다.
  + DMS는 DPF 환경의 Db2 노드 간 트랜잭션을 조정할 수 없습니다. 이는 IBM DB2READLOG API 인터페이스 내의 제약으로 인한 것입니다. DPF에서 트랜잭션은 DB2가 데이터를 분할하는 방식에 따라 여러 Db2 노드에 걸쳐 있을 수 있습니다. 따라서 DMS 솔루션은 각 Db2 노드에서 독립적으로 트랜잭션을 캡처해야 합니다.
  + DMS는 여러 DMS 소스 엔드포인트에서 `connectNode`를 `1`로 설정하여 DPF 클러스터의 각 Db2 노드에서 로컬 트랜잭션을 캡처할 수 있습니다. 이 구성은 DB2 서버 구성 파일 `db2nodes.cfg`에 정의된 논리적 노드 번호에 해당합니다.
  + 개별 Db2 노드의 로컬 트랜잭션은 대규모 글로벌 트랜잭션의 일부일 수 있습니다. DMS는 다른 Db2 노드의 트랜잭션과 조정하지 않고 대상에 각 로컬 트랜잭션을 독립적으로 적용합니다. 이러한 독립적인 처리는 특히 파티션 간에 행을 이동할 때 복잡성을 초래할 수 있습니다.
  + DMS는 각 Db2 노드에 독립적으로 작업을 적용하므로 DMS가 여러 Db2 노드에서 복제할 때 대상에 대한 올바른 작업 순서를 보장할 수 없습니다. 각 Db2 노드와 독립적으로 로컬 트랜잭션을 캡처하는 것이 특정 사용 사례에 적합한지 확인해야 합니다.
  + DPF 환경에서 마이그레이션할 때는 먼저 캐시된 이벤트 없이 전체 로드 작업을 실행한 다음 CDC 전용 태스크를 실행하는 것이 좋습니다. `StartFromContext` 엔드포인트 추가 연결 속성을 사용하여 설정한 전체 로드 시작 타임스탬프 또는 LRI(로그 레코드 식별자)부터 시작하여 Db2 노드당 하나의 작업을 실행하는 것이 좋습니다. 복제 시작점을 결정하는 방법에 대한 자세한 내용은 *IBM 지원 설명서*의 [ 복제 시작을 위한 LSN 또는 LRI 값 찾기](https://www.ibm.com/support/pages/db2-finding-lsn-or-lri-value-replication-start)를 참조하세요.
+ 지속적 복제(CDC)의 경우 특정 타임스탬프에서 복제를 시작하려면 `StartFromContext` 추가 연결 속성을 필수 타임스탬프로 설정해야 합니다.
+ 현재 DMS는 데이터베이스 솔루션을 확장하는 데 사용할 수 있는 DB2 LUW의 확장인 Db2 PureScale 기능을 지원하지 않습니다.
+ `DATA CAPTURE CHANGES` 테이블 옵션은 DB2 데이터 복제 프로세스의 중요한 사전 조건입니다. 테이블을 생성할 때이 옵션을 활성화하지 않으면 데이터가 누락될 수 있습니다. 특히 CDC(Change Data Capture)의 경우 이전 시작점에서 시작된 복제 작업만 해당됩니다. AWS DMS 는 CDC 또는 FULL\$1CDC 작업을 다시 시작할 때 기본적으로이 속성을 활성화합니다. 그러나 작업 재시작 전에 소스 데이터베이스에서 변경한 내용은 누락될 수 있습니다.

  ```
  ALTER TABLE TABLE_SCHEMA.TABLE_NAME DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
  ```

## Db2 LUW를의 소스로 사용할 때 엔드포인트 설정 AWS DMS
<a name="CHAP_Source.DB2.ConnectionSettings"></a>

 AWS DMS 콘솔을 사용하거나에서 `create-endpoint` 명령을 사용하여 소스 엔드포인트를 생성할 때 설정을 지정할 수 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)있습니다.

`--ibm-db2-settings '{"EndpointSetting1": "value1","EndpointSetting2": "value2"}'`

JSON 구문.

Db2 LUW를 소스로 하여 사용할 수 있는 엔드포인트 설정은 다음 표에 나와 있습니다.


| 설정 이름 | 설명 | 
| --- | --- | 
|  `CurrentLsn`  |  지속적 복제(CDC)의 경우, `CurrentLsn`을 사용하여 복제가 시작될 로그 시퀀스 번호(LSN)를 지정합니다.  | 
|  `MaxKBytesPerRead`  |  읽기 당 바이트의 최대 수(NUMBER 값). 기본값은 64KB입니다.  | 
|  `SetDataCaptureChanges`  |  부울 값으로 지속적 복제(CDC)를 활성화합니다. 기본값은 true입니다.  | 

## Db2 LUW를의 소스로 사용할 때 추가 연결 속성(ECAs) AWS DMS
<a name="CHAP_Source.DB2.ConnectionAttrib"></a>

 AWS DMS 콘솔을 사용하거나에서 `create-endpoint` 명령을 사용하여 소스 엔드포인트를 생성할 때 추가 연결 속성(ECAs)을와 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)함께 지정할 수 있습니다.

`--extra-connection-attributes 'ECAname1=value1;ECAname2=value2;'`

다음 표에는 Db2 LUW를 소스로 사용할 수 있는 ECAs가 나와 있습니다.


| 속성 이름 | 설명 | 
| --- | --- | 
|  `ConnectionTimeout`  |  이 ECA를 사용하여 Db2 LUW 엔드포인트의 엔드포인트 연결 제한 시간을 초 단위로 설정합니다. 기본값은 10초입니다. 예시: `ConnectionTimeout=30;`  | 
|  `executeTimeout`  |  DB2 LUW 엔드포인트에 대한 문(쿼리) 제한 시간을 초 단위로 설정하는 추가 연결 속성입니다. 기본값은 60초입니다. 예시: `executeTimeout=120;`  | 
|  `StartFromContext`  |  지속적 복제(CDC)의 경우, `StartFromContext`를 사용하여 복제가 시작될 로그 하한선을 지정합니다. `StartFromContext`는 다양한 형식의 값을 허용합니다. 유효한 값으로는 다음이 포함됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.DB2.html) 로그 파일의 LRI/LSN 범위를 확인하려면 다음 예제와 같이 `db2flsn` 명령을 실행합니다. <pre>db2flsn -db SAMPLE -lrirange 2</pre> 예제의 출력은 다음과 비슷합니다. <pre><br />S0000002.LOG: has LRI range 00000000000000010000000000002254000000000004F9A6 to <br />000000000000000100000000000022CC000000000004FB13</pre> 이 출력에서 로그 파일은 S0000002.LOG이고 **StartFromContext** LRI 값은 범위 끝에 있는 34바이트입니다. <pre>0100000000000022CC000000000004FB13</pre>  | 

## IBM DB2 LUW용 소스 데이터 형식
<a name="CHAP_Source.DB2.DataTypes"></a>

Db2 LUW를 소스로 사용하는 데이터 마이그레이션은 대부분의 Db2 LUW 데이터 유형을 AWS DMS 지원합니다. 다음 표에는 사용 시 지원되는 Db2 LUW 소스 데이터 형식 AWS DMS 과 AWS DMS 데이터 형식의 기본 매핑이 나와 있습니다. Db2 LUW 데이터 형식에 대한 자세한 내용은 [Db2 LUW 설명서](https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008483.html)를 참조하세요.

대상에서 매핑된 데이터 형식을 보는 방법에 대한 자세한 내용은 사용 중인 대상 엔드포인트 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  Db2 LUW 데이터 형식  |  AWS DMS 데이터 형식  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC(p,s)  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  정밀도가 16이면 REAL8, 정밀도가 34이면 STRING  | 
|  GRAPHIC (n)  |  길이가 0보다 크고 127 이하인 2바이트 문자 고정 길이 그래픽 문자열의 경우, WSTRING  | 
|  VARGRAPHIC (n)  |  길이가 0보다 크고 16,352 이하인 2바이트 문자 가변 길이 그래픽 문자열의 경우, WSTRING  | 
|  LONG VARGRAPHIC (n)  |  길이가 0보다 크고 16,352 이하인 2바이트 문자 가변 길이 그래픽 문자열의 경우, CLOB  | 
|  CHARACTER (n)  |  길이가 0보다 크고 255 이하인 2바이트 문자 고정 길이 문자열의 경우, STRING  | 
|  VARCHAR (n)  |  길이가 0보다 크고 32,704 이하인 2바이트 문자 가변 길이 문자열의 경우, STRING  | 
|  LONG VARCHAR (n)  |  길이가 0보다 크고 32,704 이하인 2바이트 문자 가변 길이 문자열의 경우, CLOB  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  DATETIME  | 
|  BLOB (n)  |  BLOB 최대 길이는 2,147,483,647바이트  | 
|  CLOB (n)  |  CLOB 최대 길이는 2,147,483,647바이트  | 
|  DBCLOB (n)  |  CLOB 최대 길이는 1,073,741,824 2바이트 문자  | 
|  XML  |  CLOB  | 

# IBM Db2 for z/OS 데이터베이스를의 소스로 사용 AWS DMS
<a name="CHAP_Source.DB2zOS"></a>

 AWS Database Migration Service (AWS DMS)를 사용하여 IBM for z/OS 데이터베이스에서 데이터를 마이그레이션할 수 있습니다.

가 소스로 AWS DMS 지원하는 z/OS용 Db2 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

## z/OS용 Db2를의 소스로 사용할 때의 사전 조건 AWS DMS
<a name="CHAP_Source.DB2zOS.Prerequisites"></a>

IBM Db2 for z/OS 데이터베이스를 소스로 사용하려면 소스 엔드포인트 연결 설정에 지정된 Db2 for z/OS 사용자에게 다음 권한을 AWS DMS부여합니다.

```
GRANT SELECT ON SYSIBM.SYSTABLES TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLESPACE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLEPART TO Db2USER;                    
GRANT SELECT ON SYSIBM.SYSCOLUMNS TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDATABASE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDUMMY1 TO Db2USER
```

`user defined` 소스 테이블에 대한 SELECT 권한도 부여하세요.

 AWS DMS IBM Db2 for z/OS 소스 엔드포인트는 IBM Data Server Driver for ODBC를 사용하여 데이터에 액세스합니다. DMS가 이 엔드포인트에 연결하려면 데이터베이스 서버에 유효한 IBM ODBC Connect 라이선스가 있어야 합니다.

## z/OS용 Db2를 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.DB2zOS.Limitations"></a>

IBM DB2 for z/OS를 AWS DMS소스로 사용 시 다음 제한 사항이 적용됩니다.
+ 전체 로드 복제 작업만 지원됩니다. 변경 데이터 캡처(CDC)는 지원되지 않습니다.
+ 병렬 로드는 지원되지 않습니다.
+ 뷰의 데이터 검증은 지원되지 않습니다.
+ 열/테이블 수준 변환 및 행 수준 선택 필터를 위한 테이블 매핑에서 스키마, 테이블, 열 이름을 대문자로 지정해야 합니다.

## IBM DB2 for z/OS 소스 데이터 형식
<a name="CHAP_Source.DB2zOS.DataTypes"></a>

z/OS용 Db2를 소스로 사용하는 데이터 마이그레이션은 z/OS용 대부분의 Db2 데이터 형식을 AWS DMS 지원합니다. 다음 표에는 사용 시 지원되는 z/OS 소스 데이터 형식의 Db2 AWS DMS와 AWS DMS 데이터 형식의 기본 매핑이 나와 있습니다.

Db2 for z/OS 데이터 형식에 대한 자세한 내용은 [IBM DB2 for z/OS 설명서](https://www.ibm.com/docs/en/db2-for-zos/12?topic=elements-data-types)를 참조하세요.

대상에서 매핑된 데이터 형식을 보는 방법에 대한 자세한 내용은 사용 중인 대상 엔드포인트 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  Db2 for z/OS 데이터 형식  |  AWS DMS 데이터 형식  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC(p,s) DB2 구성에서 소수점이 쉼표(,)로 설정된 경우, DB2 설정을 지원하도록 Replicate를 구성하세요.  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  정밀도가 16이면 REAL8, 정밀도가 34이면 STRING  | 
|  GRAPHIC (n)  |  n>=127이면 길이가 0보다 크고 127 이하인 2바이트 문자 고정 길이 그래픽 문자열의 경우, WSTRING  | 
|  VARGRAPHIC (n)  |  길이가 0보다 크고 16,352 이하인 2바이트 문자 가변 길이 그래픽 문자열의 경우, WSTRING  | 
|  LONG VARGRAPHIC (n)  |  길이가 0보다 크고 16,352 이하인 2바이트 문자 가변 길이 그래픽 문자열의 경우, CLOB  | 
|  CHARACTER (n)  |  길이가 0보다 크고 255 이하인 2바이트 문자 고정 길이 문자열의 경우, STRING  | 
|  VARCHAR (n)  |  길이가 0보다 크고 32,704 이하인 2바이트 문자 가변 길이 문자열의 경우, STRING  | 
|  LONG VARCHAR (n)  |  길이가 0보다 크고 32,704 이하인 2바이트 문자 가변 길이 문자열의 경우, CLOB  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  DATETIME  | 
|  BLOB (n)  |  BLOB 최대 길이는 2,147,483,647바이트  | 
|  CLOB (n)  |  CLOB 최대 길이는 2,147,483,647바이트  | 
|  DBCLOB (n)  |  CLOB 최대 길이는 1,073,741,824 2바이트 문자  | 
|  XML  |  CLOB  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  ROWID  |  BYTES ROWID 작업에 대한 자세한 내용은 다음을 참조하세요.  | 
|  TIMESTAMP(시간대 사용)  |  지원되지 않음.  | 

작업의 대상 테이블 준비 모드가 DROP\$1AND\$1CREATE(기본값)로 설정된 경우, ROWID 열이 기본적으로 마이그레이션됩니다. 특정 데이터베이스 및 테이블 외부에서는 행이 무의미하므로 데이터 검증은 이러한 열을 무시합니다. 이러한 열의 마이그레이션을 끄려면 다음 준비 단계 중 하나를 수행하면 됩니다.
+ 이러한 열이 없는 대상 테이블을 미리 생성합니다. 그런 다음 작업의 대상 테이블 준비 모드를 DO\$1NOTHING 또는 TRUNCATE\$1BEFORE\$1LOAD로 설정합니다. AWS Schema Conversion Tool (AWS SCT)를 사용하여 열 없이 대상 테이블을 미리 생성할 수 있습니다.
+ 이러한 열을 필터링하여 무시되도록 하는 테이블 매핑 규칙을 작업에 추가합니다. 자세한 내용은 [변환 규칙 및 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md) 단원을 참조하십시오.

## PostgreSQL for AWS Mainframe Modernization 서비스의 EBCDIC 데이터 정렬
<a name="CHAP_Source.DB2zOS.EBCDIC"></a>

AWS 메인프레임 현대화 프로그램은 메인프레임 애플리케이션을 AWS 관리형 런타임 환경으로 현대화하는 데 도움이 됩니다. 이 서비스는 마이그레이션 및 현대화 프로젝트를 계획하고 구현하는 데 도움이 되는 도구와 리소스를 제공합니다. 메인프레임 현대화 및 마이그레이션에 대한 자세한 내용은 [를 사용한 메인프레임 현대화 AWS](https://aws.amazon.com/mainframe/)를 참조하세요.

일부 IBM DB2 for z/OS 데이터세트는 EBCDIC(Extended Binary Coded Decimal Interchange) 문자 집합으로 인코딩됩니다. 이 문자 집합은 ASCII(American Standard Code for Information Interchange)가 일반적으로 사용되기 전에 개발되었습니다. *코드 페이지*는 텍스트의 각 문자를 문자 집합의 문자에 매핑합니다. 기존 코드 페이지에는 코드 포인트와 문자 ID 간의 매핑 정보가 들어 있습니다. *문자 ID*는 8바이트 문자 데이터 문자열입니다. *코드 포인트*는 문자를 나타내는 8비트 2진수입니다. 코드 포인트는 일반적으로 해당 2진수 값의 16진수 표현으로 표시됩니다.

현재 Mainframe Modernization 서비스의 Micro Focus 또는 BluAge 구성 요소를 사용하는 경우 특정 코드 포인트를 *이동*(번역) AWS DMS 하도록에 지시해야 합니다. AWS DMS 작업 설정을 사용하여 교대 근무를 수행할 수 있습니다. 다음 예제에서는 작업을 사용하여 AWS DMS `CharacterSetSettings` DMS 작업 설정의 교대를 매핑하는 방법을 보여줍니다.

```
"CharacterSetSettings": {
        "CharacterSetSupport": null,
        "CharacterReplacements": [
{"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
            }
        ]
    }
```

필요한 시프팅을 이해하는 EBCDIC 데이터 정렬이 PostgreSQL에 이미 일부 있습니다. 여러 가지 코드 페이지가 지원됩니다. 다음 섹션에서는 지원되는 모든 코드 페이지에서 시프트해야 하는 항목의 JSON 샘플을 제공합니다. DMS 작업에 필요한 필수 JSON을 간단히 복사하여 붙여넣을 수 있습니다.

### Micro Focus 관련 EBCDIC 데이터 정렬
<a name="CHAP_Source.DB2zOS.EBCDIC.MicroFocus"></a>

Micro Focus의 경우, 다음 데이터 정렬에 필요한 문자 하위 집합을 시프트합니다.

```
 da-DK-cp1142m-x-icu
 de-DE-cp1141m-x-icu
 en-GB-cp1146m-x-icu
 en-US-cp1140m-x-icu
 es-ES-cp1145m-x-icu
 fi-FI-cp1143m-x-icu
 fr-FR-cp1147m-x-icu
 it-IT-cp1144m-x-icu
 nl-BE-cp1148m-x-icu
```

**Example 데이터 정렬에 따른 Micro Focus 데이터 시프트:**  
**en\$1us\$1cp1140m**  
코드 시프트:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1141m**  
코드 시프트:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1142m**  
코드 시프트:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1143m**  
코드 시프트:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1144m**  
코드 시프트:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1145m**  
코드 시프트:  

```
0000    0180
00A6    0160
00B8    0161
00A8    017D
00BC    017E
00BD    0152
00BE    0153
00B4    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1146m**  
코드 시프트:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1147m**  
코드 시프트:  

```
0000    0180
00B8    0160
00A8    0161
00BC    017D
00BD    017E
00BE    0152
00B4    0153
00A6    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1148m**  
코드 시프트:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```

### BluAge 관련 EBCDIC 데이터 정렬
<a name="CHAP_Source.DB2zOS.EBCDIC.BluAge"></a>

BluAge의 경우, 필요에 따라 다음의 *낮은 값*과 *높은 값*을 모두 시프트합니다. 이러한 데이터 정렬은 Mainframe Migration BluAge 서비스를 지원하는 용도로만 사용해야 합니다.

```
da-DK-cp1142b-x-icu
 da-DK-cp277b-x-icu
 de-DE-cp1141b-x-icu
 de-DE-cp273b-x-icu
 en-GB-cp1146b-x-icu
 en-GB-cp285b-x-icu
 en-US-cp037b-x-icu
 en-US-cp1140b-x-icu
 es-ES-cp1145b-x-icu
 es-ES-cp284b-x-icu
 fi-FI-cp1143b-x-icu
 fi-FI-cp278b-x-icu 
 fr-FR-cp1147b-x-icu
 fr-FR-cp297b-x-icu
 it-IT-cp1144b-x-icu
 it-IT-cp280b-x-icu
 nl-BE-cp1148b-x-icu
 nl-BE-cp500b-x-icu
```

**Example BluAge 데이터 시프트:**  
**da-DK-cp277b** 및 **da-DK-cp1142b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**de-DE-273b** 및 **de-DE-1141b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-GB-285b** 및 **en-GB-1146b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-us-037b** 및 **en-us-1140b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**es-ES-284b** 및 **es-ES-1145b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fi\$1FI-278b** 및 **fi-FI-1143b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fr-FR-297b** 및 **fr-FR-1147b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**it-IT-280b** 및 **it-IT-1144b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**nl-BE-500b** 및 **nl-BE-1148b**  
코드 시프트:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 작업에 해당하는 입력 매핑:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```