

# Babelfish 아키텍처 및 구성 이해
<a name="babelfish-understanding-overview-howitworks"></a>

Aurora DB 클러스터와 마찬가지로 Babelfish를 실행하는 Aurora PostgreSQL-Compatible Edition DB 클러스터를 관리합니다. 즉 확장성, 장애 조치를 지원하는 고가용성 및 Aurora DB 클러스터가 제공하는 기본 제공 복제본의 이점을 누릴 수 있습니다. 이러한 기능에 대해 자세히 알아보려면 [Aurora DB 클러스터의 성능 및 확장 관리](Aurora.Managing.Performance.md), [Amazon Aurora의 고가용성](Concepts.AuroraHighAvailability.md) 및 [Amazon Aurora를 사용한 복제](Aurora.Replication.md) 섹션을 참조하세요. 다음과 같이 다른 많은 AWS 도구 및 유틸리티에 대한 액세스 권한도 있습니다.
+ Amazon CloudWatch는 데이터 및 실행 가능한 인사이트를 제공하는 모니터링 및 관찰 가능 서비스입니다. 자세한 내용은 [Amazon CloudWatch로 Amazon Aurora 지표 모니터링](monitoring-cloudwatch.md) 단원을 참조하십시오.
+ 성능 개선 도우미는 데이터베이스의 로드를 빠르게 평가할 수 있는 데이터베이스 성능 튜닝 및 모니터링 기능입니다. 자세한 내용은 [성능 개선 도우미를 통한 Amazon Aurora 모니터링](USER_PerfInsights.md)을 참조하십시오.
+ Aurora 글로벌 데이터베이스는 여러 AWS 리전에 걸쳐 있으므로 대기 시간이 짧은 글로벌 읽기를 지원하며, 드물게 발생하여 전체 AWS 리전에 영향을 미칠 수 있는 중단을 신속하게 복구할 수 있습니다. 자세한 내용은 [Amazon Aurora Global Database 사용](aurora-global-database.md) 단원을 참조하십시오.
+ 사용 가능한 경우 자동 소프트웨어 패치를 사용하면 최신 보안 및 기능 패치로 데이터베이스를 최신 상태로 유지할 수 있습니다.
+ Amazon RDS 이벤트는 이메일 또는 SMS 메시지를 통해 사용자에게 자동 장애 조치와 같은 중요한 데이터베이스 이벤트에 대한 알림을 제공합니다. 자세한 내용은 [Amazon Aurora 이벤트 모니터링](working-with-events.md) 단원을 참조하십시오.

아래에서 Babelfish 아키텍처와 마이그레이션하는 SQL Server 데이터베이스를 Babelfish에서 처리하는 방법에 대해 알아볼 수 있습니다. Babelfish DB 클러스터를 생성할 때 단일 데이터베이스 또는 다중 데이터베이스, 데이터 정렬 및 기타 세부 사항에 대해 몇 가지 결정을 내려야 합니다.

**Topics**
+ [Babelfish 아키텍처](babelfish-architecture.md)
+ [Babelfish용 DB 클러스터 파라미터 그룹 설정](babelfish-configuration.md)
+ [Babelfish for Aurora PostgreSQL의 데이터 정렬 이해](babelfish-collations.md)
+ [이스케이프 해치를 사용하여 Babelfish 오류 처리 관리](babelfish-strict.md)

# Babelfish 아키텍처
<a name="babelfish-architecture"></a>

Babelfish가 켜진 상태에서 Aurora PostgreSQL 클러스터를 생성하면 Aurora는 `babelfish_db`라는 PostgreSQL 데이터베이스로 클러스터를 프로비저닝합니다. 이 데이터베이스에는 마이그레이션된 모든 SQL Server 객체 및 구조가 상주합니다.

**참고**  
Aurora PostgreSQL 클러스터에서 `babelfish_db` 데이터베이스 이름은 Babelfish용으로 예약되어 있습니다. Babelfish DB 클러스터에 자체 'babelfish\$1db' 데이터베이스를 생성하면 Aurora가 Babelfish를 성공적으로 프로비저닝하지 못합니다.

TDS 포트에 연결하면 세션이 `babelfish_db` 데이터베이스에 배치됩니다. T-SQL에서 구조는 SQL Server 인스턴스에 연결되는 것과 비슷합니다. `master`, `msdb`, `tempdb` 데이터베이스와 `sys.databases` 카탈로그가 표시됩니다. USE 문을 사용하여 추가 사용자 데이터베이스를 생성하고 데이터베이스 간에 전환할 수 있습니다. SQL Server 사용자 데이터베이스를 생성하면 `babelfish_db` PostgreSQL 데이터베이스에 병합됩니다. 데이터베이스는 SQL Server에서 제공하는 것과 같거나 유사한 교차 데이터베이스 구문 및 의미 체계를 유지합니다.

## 단일 데이터베이스 또는 여러 데이터베이스에서 Babelfish 사용
<a name="babelfish-single_vs_multi_db"></a>

Babelfish와 함께 사용할 Aurora PostgreSQL 클러스터를 생성하면 자체적으로 단일 SQL Server 데이터베이스를 사용하거나 여러 SQL Server 데이터베이스를 함께 사용할 것인지 선택할 수 있습니다. 선택 사항은 `babelfish_db` 데이터베이스 내부의 SQL Server 스키마의 이름이 Aurora PostgreSQL에서 나타나는 방식에 영향을 미칩니다. 마이그레이션 모드는 `migration_mode` 파라미터에 저장됩니다. 이전에 생성한 모든 SQL 객체에 대한 액세스 권한이 손실될 수 있으므로, 클러스터를 생성한 후에는 이 파라미터를 변경하지 않아야 합니다.

단일 데이터베이스 모드에서는 SQL Server 데이터베이스의 스키마 이름이 PostgreSQL의 `babelfish_db` 데이터베이스에서도 그대로 유지됩니다. 단일 데이터베이스만 마이그레이션하도록 선택하면, 마이그레이션된 사용자 데이터베이스의 스키마 이름을 SQL Server에서 사용한 것과 동일한 이름으로 PostgreSQL에서 참조할 수 있습니다. 예를 들어 `dbo` 및 `smith` 스키마는 `dbA` 데이터베이스 내부에 상주합니다*.*

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/images/babelfish_single_db_mode.png)


TDS를 통해 연결할 때 SQL 서버에서와 마찬가지로 T-SQL에서 `dbo` 및 `dev` 스키마를 보려면 `USE dba`를 실행할 수 있습니다. 변경되지 않은 스키마 이름은 PostgreSQL에서 볼 수 있습니다.

다중 데이터베이스 모드에서 사용자 데이터베이스의 스키마 이름은 PostgreSQL에서 액세스하는 경우 `dbname_schemaname`이 됩니다. T-SQL에서 액세스하는 경우에도 스키마 이름은 동일하게 유지됩니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/images/babelfish_multi_db_mode.png)


이미지에서 볼 수 있듯이 다중 데이터베이스 모드와 단일 데이터베이스 모드는 TDS 포트를 통해 연결하고 T-SQL을 사용할 때 SQL Server와 동일합니다. 예를 들어, `USE dbA`은 SQL Server에서와 같이 스키마 `dbo` 및 `dev`를 나열합니다. 매핑된 스키마 이름(예: `dba_dbo` 및 `dba_dev`)은 PostgreSQL에서 볼 수 있습니다.

각 데이터베이스에는 여전히 스키마가 포함되어 있습니다. 각 데이터베이스의 이름이 SQL Server 스키마 이름 앞에 추가되며 밑줄을 구분 기호로 사용합니다. 예를 들면 다음과 같습니다.
+ `dba`가 `dba_dbo` 및 `dba_dev`를 포함합니다.
+ `dbb`가 `dbb_dbo` 및 `dbb_test`를 포함합니다.
+ `dbc`가 `dbc_dbo` 및 `dbc_prod`를 포함합니다.

`babelfish_db` 데이터베이스 내부에서 T-SQL 사용자는 계속 `USE dbname`을 실행하여 데이터베이스 컨텍스트를 변경하므로 모양과 느낌이 SQL Server와 비슷하게 유지됩니다.

## 마이그레이션 모드 선택
<a name="babelfish-choosing_single_vs_multi"></a>

각 마이그레이션 모드에는 장점과 단점이 있습니다. 보유한 사용자 데이터베이스 수와 마이그레이션 계획에 따라 마이그레이션 모드를 선택합니다. Babelfish와 함께 사용할 클러스터를 생성한 후에는 마이그레이션 모드를 변경하지 않아야 합니다. 이전에 생성한 모든 SQL 객체에 대한 액세스 권한을 잃을 수 있습니다. 마이그레이션 모드를 선택할 때는 사용자 데이터베이스 및 클라이언트의 요구 사항을 고려하세요.

Babelfish와 함께 사용할 클러스터를 만들면 Aurora PostgreSQL은 시스템 데이터베이스 `master` 및 `tempdb`를 생성합니다. 시스템 데이터베이스(`master` 또는 `tempdb`)에서 객체를 생성하거나 수정한 경우 새 클러스터에서 해당 객체를 다시 생성해야 합니다. SQL 서버와 달리 Babelfish는 클러스터 재부팅 후 `tempdb`를 다시 초기화하지 않습니다.

다음과 같은 경우 단일 데이터베이스 마이그레이션 모드를 사용합니다.
+ 단일 SQL Server 데이터베이스를 마이그레이션하는 경우. 단일 데이터베이스 모드의 경우 PostgreSQL에서 액세스될 때 마이그레이션된 스키마 이름은 원래 SQL Server 스키마 이름과 동일합니다. 따라서 PostgreSQL 연결에서 실행되도록 기존 SQL 쿼리를 최적화하려는 경우 기존 SQL 쿼리에 대한 코드 변경이 줄어듭니다.
+ 최종 목표가 기본 Aurora PostgreSQL로 완전히 마이그레이션하는 경우. 마이그레이션하기 전에 스키마를 단일 스키마(`dbo`)로 통합한 다음, 단일 클러스터로 마이그레이션하여 필요한 변경 사항을 줄입니다.

다음과 같은 경우 여러 데이터베이스 마이그레이션 모드를 사용합니다.
+ 동일한 인스턴스에서 여러 사용자 데이터베이스를 사용하는 기본 SQL Server 경험을 원하는 경우
+ 여러 사용자 데이터베이스를 함께 마이그레이션해야 하는 경우

# Babelfish용 DB 클러스터 파라미터 그룹 설정
<a name="babelfish-configuration"></a>

Aurora PostgreSQL DB 클러스터를 생성하고 **Babelfish에서 설정(Turn on Babelfish)**을 선택한 경우 **새로 생성(Create new)**을 선택하면 DB 클러스터 파라미터 그룹이 자동으로 생성됩니다. 이 DB 클러스터 파라미터 그룹은 설치를 위해 선택한 Aurora PostgreSQL 버전(예: Aurora PostgreSQL 버전 14)의 Aurora PostgreSQL DB 클러스터 파라미터 그룹을 기반으로 합니다. 다음과 같은 일반 패턴을 사용하여 이름을 지정합니다.

```
custom-aurora-postgresql14-babelfish-compat-3
```

클러스터 생성 프로세스 중에 다음 설정을 변경할 수 있지만, 일부 설정은 사용자 지정 파라미터 그룹에 저장되면 변경할 수 없으므로 신중하게 지정해야 합니다.
+ 단일 데이터베이스 또는 다중 데이터베이스
+ 기본 데이터 정렬 로캘
+ 데이터 정렬 이름
+ DB 파라미터 그룹

기존 Aurora PostgreSQL DB 클러스터 버전 13 이상의 파라미터 그룹을 사용하려면 그룹을 편집하고 `babelfish_status` 파라미터를 `on`으로 설정합니다. Aurora PostgreSQL 클러스터를 생성하기 전에 Babelfish 옵션을 지정합니다. 자세한 내용은 [Amazon Aurora의 파라미터 그룹](USER_WorkingWithParamGroups.md)를 참조하세요.

다음 파라미터는 Babelfish 기본 설정을 제어합니다. 설명(Description)에 달리 명시되지 않는 한 파라미터를 수정할 수 있습니다. 기본값이 설명에 포함됩니다. 파라미터에 사용할 수 있는 값을 보려면 다음을 수행합니다.

**참고**  
새 DB 파라미터 그룹을 DB 인스턴스와 연결하면 수정된 정적 파라미터 및 동적 파라미터는 DB 인스턴스가 재부팅된 후에만 적용됩니다. 그러나 DB 파라미터 그룹을 DB 인스턴스에 연결한 후 DB 파라미터 그룹에서 동적 파라미터를 수정하면 이러한 변경 사항이 재부팅 없이 즉시 적용됩니다.

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

1. 탐색 메뉴에서 **파라미터 그룹(Parameter groups)**을 선택합니다.

1. 목록에서 `default.aurora-postgresql14` DB 클러스터 파라미터 그룹을 선택합니다.

1. 검색 필드에 파라미터 이름을 입력합니다. 예를 들면, 검색 필드에 `babelfishpg_tsql.default_locale`을 입력하여 이 파라미터와 기본값 및 허용되는 설정을 표시합니다.
**참고**  
Babelfish for Aurora PostgreSQL 글로벌 데이터베이스는 보조 리전에 다음 파라미터가 설정된 경우에만 보조 리전에서 작동합니다.


| 파라미터 | 설명 | 적용 유형 | 수정 가능 | 
| --- | --- | --- | --- | 
| babelfishpg\$1tsql.apg\$1enable\$1correlated\$1scalar\$1transform | 플래너가 Babelfish에서 상관관계가 있는 스칼라 하위 쿼리를 변환할 수 있습니다. (기본값: on)(허용: on, off)  | 동적 | true | 
| babelfishpg\$1tsql.apg\$1enable\$1subquery\$1cache | Babelfish에서 상관관계가 있는 스칼라 하위 쿼리에 캐시를 사용할 수 있도록 지원합니다. (기본값: on)(허용: on, off)  | 동적 | true | 
| babelfishpg\$1tds.tds\$1default\$1numeric\$1scale | 엔진에서 지정하지 않은 경우 TDS 열 메타데이터에서 전송할 숫자 유형의 기본 배율을 설정합니다. (기본값: 8)(허용: 0\$138)  | 동적 | true | 
| babelfishpg\$1tds.tds\$1default\$1numeric\$1precision | 엔진에서 지정하지 않은 경우 TDS 열 메타데이터에서 전송할 숫자 유형의 기본 정밀도를 설정하는 정수입니다. (기본값: 38)(허용: 1\$138) | 동적 | true | 
| babelfishpg\$1tds.tds\$1default\$1packet\$1size | SQL Server 클라이언트 연결을 위한 기본 패킷 크기를 설정하는 정수입니다. (기본값: 4096)(허용: 512\$132767) | 동적 | true | 
| babelfishpg\$1tds.tds\$1default\$1protocol\$1version | 클라이언트 연결을 위한 기본 TDS 프로토콜 버전을 설정하는 정수입니다. (기본값: DEFAULT) (허용: TDSv7.0, TDSv7.1, TDSv7.1.1, TDSv7.2, TDSv7.3A, TDSv7.3B, TDSv7.4, DEFAULT) | 동적 | true | 
| babelfishpg\$1tds.default\$1server\$1name | Babelfish 서버의 기본 이름을 식별하는 문자열입니다. (기본값: Microsoft SQL Server)(허용: null) | 동적 | true | 
| babelfishpg\$1tds.tds\$1debug\$1log\$1level | TDS에서 로깅 수준을 설정하는 정수로, 0은 로깅을 끕니다. (기본값: 1)(허용: 0, 1, 2, 3) | 동적 | true | 
| babelfishpg\$1tds.listen\$1addresses | TDS를 수신할 호스트 이름, IP 주소 또는 주소를 설정하는 문자열입니다. Babelfish DB 클러스터를 생성한 후에는 이 파라미터를 수정할 수 없습니다. (기본값: \$1)(허용: null)  | – | false | 
| babelfishpg\$1tds.port | SQL Server 구문의 요청에 사용되는 TCP 포트를 설정하는 정수입니다. (기본값: 1433)(허용: 1\$165535) | 고정 | true | 
| babelfishpg\$1tds.tds\$1ssl\$1encrypt | TDS 리스너 포트를 통과하는 데이터에 대해 암호화를 켜거나(0) 끄는(1) 부울입니다. 클라이언트 연결을 위해 SSL 사용법에 대한 자세한 내용은 [Babelfish SSL 설정 및 클라이언트 연결](#babelfish-ssl) 섹션을 참조하세요. (기본값: 0)(허용: 0, 1) | 동적 | true | 
| babelfishpg\$1tds.tds\$1ssl\$1max\$1protocol\$1version | TDS 세션에 사용할 가장 높은 SSL/TLS 프로토콜 버전을 지정하는 문자열입니다. (기본값: 'TLSv1.2')(허용: 'TLSv1', 'TLSv1.1', 'TLSv1.2') | 동적 | true | 
| babelfishpg\$1tds.tds\$1ssl\$1min\$1protocol\$1version | TDS 세션에 사용할 최소 SSL/TLS 프로토콜 버전을 지정하는 문자열입니다. (기본값: Aurora PostgreSQL 버전 16의 'TLSv1.2', Aurora PostgreSQL 버전 16 이전 버전의 경우 'TLSv1') (허용 가능: 'TLSv1', 'TLSv1.1', 'TLSv1.2') | 동적 | true | 
| babelfishpg\$1tds.unix\$1socket\$1directories | TDS 서버 Unix 소켓 디렉터리를 식별하는 문자열입니다. Babelfish DB 클러스터를 생성한 후에는 이 파라미터를 수정할 수 없습니다. (기본값: /tmp)(허용: null) | – | false | 
| babelfishpg\$1tds.unix\$1socket\$1group | TDS 서버 Unix 소켓 그룹을 식별하는 문자열입니다. Babelfish DB 클러스터를 생성한 후에는 이 파라미터를 수정할 수 없습니다. (기본값: rdsdb)(허용: null) | – | false | 
| babelfishpg\$1tsql.default\$1locale |  Babelfish 데이터 정렬에 사용되는 기본 로캘을 지정하는 문자열입니다. 기본 로캘은 로캘일 뿐이며 한정자는 포함하지 않습니다. Babelfish DB 클러스터를 프로비저닝할 때 이 파라미터를 설정합니다. DB 클러스터를 프로비저닝한 후 이 파라미터에 대한 변경은 무시됩니다. (기본값: en\$1US)(허용: [테이블](babelfish-collations.md) 참조)   | 고정 | true | 
| babelfishpg\$1tsql.migration\$1mode |  단일 또는 다중 사용자 데이터베이스에 대한 지원을 지정하는 수정할 수 없는 목록입니다. Babelfish DB 클러스터를 프로비저닝할 때 이 파라미터를 설정합니다. DB 클러스터를 프로비저닝한 후에는 이 파라미터의 값을 수정할 수 없습니다. (기본값: Aurora PostgreSQL 버전 16의 multi-db, Aurora PostgreSQL 버전 16 이전 버전의 경우 single-db) (허용: single-db, multi-db, null)  | 고정 | true | 
| babelfishpg\$1tsql.server\$1collation\$1name |  서버 수준 작업에 사용되는 데이터 정렬의 이름을 지정하는 문자열입니다. Babelfish DB 클러스터를 프로비저닝할 때 이 파라미터를 설정합니다. DB 클러스터를 프로비저닝한 후에는 이 파라미터의 값을 수정하지 마세요. (기본값: bbf\$1unicode\$1general\$1ci\$1as)(허용: [테이블](babelfish-collations.md) 참조)  | 고정 | true | 
| babelfishpg\$1tsql.version |  @@VERSION 변수의 출력을 설정하는 문자열입니다. Aurora PostgreSQL DB 클러스터에 대해 이 값을 수정하지 마세요. (기본값: null)(허용: 기본값)  | 동적 | true | 
| rds.babelfish\$1status | Babelfish 기능의 상태를 설정하는 문자열입니다. 이 파라미터가 `datatypesonly`로 설정된 경우 Babelfish는 꺼져 있지만 SQL Server 데이터 유형은 계속 사용할 수 있습니다. (기본값: off)(허용: on, off, datatypesonly) | 고정 | true | 
| unix\$1socket\$1permissions | TDS 서버 Unix 소켓 권한을 설정하는 정수입니다. Babelfish DB 클러스터를 생성한 후에는 이 파라미터를 수정할 수 없습니다. (기본값: 0700)(허용: 0\$1511) | – | false | 

## Babelfish SSL 설정 및 클라이언트 연결
<a name="babelfish-ssl"></a>

Babelfish for Aurora PostgreSQL DB 클러스터에 대한 SSL/TLS 연결을 요구하려면 `rds.force_ssl` 파라미터를 사용합니다.
+ SSL/TLS 연결을 요구하려면 `rds.force_ssl` 파라미터 값을 1(켜짐)로 설정합니다.
+ SSL/TLS 연결 요구를 끄려면 `rds.force_ssl` 파라미터 값을 0(꺼짐)으로 설정합니다.

이 파라미터의 기본값은 Aurora PostgreSQL 버전에 따라 다릅니다.
+ Aurora PostgreSQL 버전 17 이상: 기본값은 1(켜짐)입니다.
+ Aurora PostgreSQL 버전 16 이상: 기본값은 0(꺼짐)입니다.

**참고**  
Aurora PostgreSQL 버전 16 이하에서 버전 17 이상으로 메이저 버전 업그레이드를 수행하면 파라미터의 기본값이 0(꺼짐)에서 1(켜짐)로 변경됩니다. 이 변경으로 인해 SSL용으로 구성되지 않은 애플리케이션에 대한 연결이 실패할 수 있습니다. 이 파라미터를 0(꺼짐)으로 설정하여 이전 기본 동작으로 되돌릴 수 있습니다.

드라이버별 세부 정보는 [Babelfish DB 클러스터에 연결](babelfish-connect.md) 섹션을 참조하세요.

클라이언트가 TDS 포트(기본값 `1433`)에 연결하는 경우 Babelfish는 클라이언트 핸드셰이크 중에 전송된 보안 소켓 계층(SSL) 설정을 Babelfish SSL 파라미터 설정(`tds_ssl_encrypt`)과 비교합니다. 그런 다음, Babelfish는 연결이 허용되는지 여부를 결정합니다. 연결이 허용되면 파라미터 설정과 클라이언트가 제공하는 암호화 지원에 따라 암호화 동작이 적용되거나 적용되지 않습니다.

다음 테이블은 Babelfish가 각 조합에 대해 어떻게 동작하는지 보여줍니다.


| 클라이언트 SSL 설정 | Babelfish SSL 설정 | rds.force\$1ssl | 연결이 허용되나요? | 클라이언트에 반환된 값 | 
| --- | --- | --- | --- | --- | 
| ENCRYPT\$1ON | 임의 | 임의 | 허용됨, 전체 연결 암호화 | ENCRYPT\$1ON | 
| ENCRYPT\$1OFF | tds\$1ssl\$1encrypt=1 | 임의 | 허용됨, 전체 연결 암호화 | ENCRYPT\$1REQ | 
| ENCRYPT\$1OFF | tds\$1ssl\$1encrypt=0 | rds.force\$1ssl=0 | 허용됨, 로그인 패킷 암호화 | ENCRYPT\$1OFF | 
| ENCRYPT\$1OFF | tds\$1ssl\$1encrypt=0 | rds.force\$1ssl=1 | 아니요. 연결 종료 | ENCRYPT\$1OFF | 
| ENCRYPT\$1NOT\$1SUP | tds\$1ssl\$1encrypt=0 | rds.force\$1ssl=0 | 예 | ENCRYPT\$1NOT\$1SUP | 
| ENCRYPT\$1NOT\$1SUP | tds\$1ssl\$1encrypt=1 | 임의 | 아니요. 연결 종료  | ENCRYPT\$1REQ | 
| ENCRYPT\$1NOT\$1SUP | tds\$1ssl\$1encrypt=0 | rds.force\$1ssl=1 | 아니요. 연결 종료 | ENCRYPT\$1NOT\$1SUP | 
| ENCRYPT\$1CLIENT\$1CERT | 임의 | 임의 | 아니요. 연결 종료 | 지원되지 않음 | 

# Babelfish for Aurora PostgreSQL의 데이터 정렬 이해
<a name="babelfish-collations"></a>

Babelfish를 사용하여 Aurora PostgreSQL DB 클러스터를 생성하는 경우 데이터의 데이터 정렬을 선택하게 됩니다. *데이터 정렬*은 주어진 문자 언어로 텍스트 또는 문자를 생성하는 정렬 순서와 비트 패턴을 지정합니다. 데이터 정렬에는 지정된 비트 패턴 세트에 대한 데이터를 비교하는 규칙이 포함됩니다. 데이터 정렬은 현지화와 관련이 있습니다. 서로 다른 로캘은 문자 매핑, 정렬 순서 등에 영향을 줍니다. 데이터 정렬 속성은 다양한 데이터 정렬의 이름에 반영됩니다. 속성에 대한 자세한 내용은 [Babelfish collation attributes table](#bfish-collation-attributes-table) 섹션을 참조하세요.

Babelfish는 SQL Server 데이터 정렬을 Babelfish에서 제공하는 유사한 데이터 정렬에 매핑합니다. Babelfish는 문화적으로 민감한 문자열 비교 및 정렬 순서를 사용하여 유니코드 데이터 정렬을 미리 정의합니다. 또한 Babelfish는 SQL Server DB에 있는 데이터 정렬을 가장 r근접하게 일치하는 Babelfish 데이터 정렬로 변환하는 방법을 제공합니다. 로캘별 데이터 정렬은 다양한 언어 및 지역에 대해 제공됩니다.

일부 데이터 정렬은 클라이언트 측 인코딩에 해당하는 코드 페이지를 지정합니다. Babelfish는 각 출력 열의 데이터 정렬에 따라 서버 인코딩에서 클라이언트 인코딩으로 자동 변환됩니다.

Babelfish는 [Babelfish supported collations table](#bfish-collations-table)에 나열된 데이터 정렬을 지원합니다. Babelfish는 SQL Server 데이터 정렬을 Babelfish에서 제공하는 유사한 데이터 정렬에 매핑합니다.

Babelfish는 International Components for Unicode(ICU) 데이터 정렬 라이브러리 버전 153.80을 사용합니다. ICU 데이터 정렬의 자세한 내용은 ICU 설명서의 [데이터 정렬](https://unicode-org.github.io/icu/userguide/collation/)을 참조하세요. PostgreSQL 및 데이터 정렬에 대한 자세한 내용은 PostgreSQL 설명서의 [Collation Support](https://www.postgresql.org/docs/current/collation.html)(데이터 정렬 지원)을 참조하세요.

**Topics**
+ [데이터 정렬 및 로캘을 제어하는 DB 클러스터 파라미터](#babelfish-collations.parameters)
+ [Babelfish의 결정적 및 비결정적 데이터 정렬](#babelfish-collations.deterministic-nondeterministic)
+ [Babelfish의 데이터베이스 수준에서 지원되는 데이터 정렬](#babelfish-collations.database-level)
+ [Babelfish의 서버 및 객체 데이터 정렬](#babelfish-collations.reference-tables-supported-collations)
+ [Babelfish의 기본 데이터 정렬 동작](#babelfish-collations-default)
+ [데이터 정렬 관리](collation.managing.md)
+ [데이터 정렬 제한 및 동작 차이점](collation.limitations.md)

## 데이터 정렬 및 로캘을 제어하는 DB 클러스터 파라미터
<a name="babelfish-collations.parameters"></a><a name="collation-related-parameters"></a>

다음 파라미터는 데이터 정렬 동작에 영향을 줍니다.

**babelfishpg\$1tsql.default\$1locale**  
이 파라미터는 데이터 정렬에 사용되는 기본 로캘을 지정합니다. 또한, [Babelfish collation attributes table](#bfish-collation-attributes-table)에 나열된 속성과 함께 사용되어 특정 언어 및 지역에 대한 데이터 정렬을 사용자 지정합니다. 이 파라미터의 기본값은 `en-US`입니다.  
기본 로캘은 BBF로 시작하는 모든 Babelfish 데이터 정렬 이름과 Babelfish 데이터 정렬에 매핑되는 모든 SQL Server 데이터 정렬에 적용됩니다. 기존 Babelfish DB 클러스터의 이 파라미터에 대한 설정을 변경해도 기존 데이터 정렬의 로캘에는 영향을 주지 않습니다. 데이터 정렬 목록은 [Babelfish supported collations table](#bfish-collations-table) 섹션을 참조하세요.

**babelfishpg\$1tsql.server\$1collation\$1name**  
이 파라미터는 서버(Aurora PostgreSQL DB 클러스터 인스턴스)와 데이터베이스의 기본 데이터 정렬을 지정합니다. 기본값은 `sql_latin1_general_cp1_ci_as`입니다. T-SQL에서 서버 데이터 정렬이 식별자를 비교하는 방법을 결정하므로 `server_collation_name`은 `CI_AS` 데이터 정렬이어야 합니다.  
Babelfish DB 클러스터를 생성할 때 선택 가능한 목록에서 **데이터 정렬 이름(Collation name)**을 선택합니다. 여기에는 [Babelfish supported collations table](#bfish-collations-table)에 나열된 데이터 정렬이 포함됩니다. Babelfish 데이터베이스가 생성된 후 `server_collation_name`을 수정하지 마세요.

Babelfish for Aurora PostgreSQL DB 클러스터를 생성할 때 선택하는 설정은 이러한 파라미터의 클러스터와 연결된 DB 클러스터 파라미터 그룹에 저장되고 데이터 정렬 동작을 설정합니다.

## Babelfish의 결정적 및 비결정적 데이터 정렬
<a name="babelfish-collations.deterministic-nondeterministic"></a>

Babelfish는 결정적이고 비결정적인 데이터 정렬을 지원합니다.
+ *결정적 데이터 정렬*은 동일한 바이트 시퀀스를 가진 문자를 동등하게 평가합니다. 이는 `x` 및 `X`가 결정적 데이터 정렬에서는 동일하지 않다는 뜻입니다. 결정적 데이터 정렬에는 대소문자 구분(CS) 및 악센트 구분(AS)이 적용됩니다.
+ *비결정적 데이터 정렬*은 똑같이 일치할 필요가 없습니다. 비결정적 데이터 정렬은 `x` 및 `X`를 동일한 것으로 확인합니다. 비결정적 데이터 정렬은 대소문자 구분하지 않음(CI)이나 악센트 구분하지 않음(AI) 또는 둘 다가 적용됩니다.

다음 테이블에서 비결정적 데이터 정렬을 사용할 때 Babelfish와 PostgreSQL 간의 동작 차이점을 확인할 수 있습니다.


| Babelfish | PostgreSQL | 
| --- | --- | 
|  CI\$1AS 데이터 정렬에 대한 LIKE 절을 지원합니다.  |  비결정적 데이터 정렬에서는 LIKE 절을 지원하지 않습니다.  | 
|  Babelfish 버전 4.2.0의 다음 AI 데이터 정렬에서만 LIKE 절을 지원합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/babelfish-collations.html)  |  비결정적 데이터 정렬에서는 LIKE 절을 지원하지 않습니다.  | 

SQL Server 및 PostgreSQL과 비교하여 Babelfish의 기타 제한 사항 및 동작 차이점에 대한 목록은 [데이터 정렬 제한 및 동작 차이점](collation.limitations.md) 섹션을 참조하세요.

Babelfish와 SQL Server는 다음 테이블과 같이 데이터 정렬 속성을 설명하는 데이터 정렬에 대한 명명 규칙을 따릅니다.<a name="bfish-collation-attributes-table"></a>


| 속성 | 설명 | 
| --- | --- | 
| AI | 악센트 구분하지 않음. | 
| AS | 악센트 구분. | 
| BIN2 | BIN2는 코드 포인트 순서대로 데이터를 정렬하도록 요청합니다. 유니코드 코드 포인트 순서는 UTF-8, UTF-16 및 UCS-2 인코딩의 문자 순서와 동일합니다. 코드 포인트 순서는 빠른 결정적 데이터 정렬입니다. | 
| CI | 대소문자 구분하지 않음. | 
| CS | 대소문자 구분. | 
| PREF | 소문자 앞에 대문자를 정렬하려면 PREF 데이터 정렬을 사용합니다. 비교가 대소문자를 구분하지 않는 경우 다른 구분이 없으면 대문자 버전은 소문자 버전 앞에 정렬됩니다. ICU 라이브러리는 `colCaseFirst=upper`의 대문자 기본 설정을 지원하지만 CI\$1AS 데이터 정렬은 지원하지 않습니다. PREF는 `CS_AS` 결정적 데이터 정렬에만 적용될 수 있습니다. | 

## Babelfish의 데이터베이스 수준에서 지원되는 데이터 정렬
<a name="babelfish-collations.database-level"></a>

다음 데이터 정렬은 Babelfish의 데이터베이스 수준에서 지원됩니다.
+ bbf\$1unicode\$1bin2
+ bbf\$1unicode\$1cp1\$1ci\$1ai
+ bbf\$1unicode\$1cp1\$1ci\$1as
+ bbf\$1unicode\$1cp1250\$1ci\$1ai
+ bbf\$1unicode\$1cp1250\$1ci\$1as
+ bbf\$1unicode\$1cp1257\$1ci\$1ai
+ bbf\$1unicode\$1cp1257\$1ci\$1as
+ estonian\$1ci\$1ai
+ estonian\$1ci\$1as
+ finnish\$1swedish\$1ci\$1ai
+ finnish\$1swedish\$1ci\$1as
+ french\$1ci\$1ai
+ french\$1ci\$1as
+ latin1\$1general\$1bin2
+ latin1\$1general\$1ci\$1ai
+ latin1\$1general\$1ci\$1as
+ latin1\$1general\$190\$1bin2
+ latin1\$1general\$1100\$1bin2
+ latin1\$1general\$1140\$1bin2
+ modern\$1spanish\$1ci\$1ai
+ modern\$1spanish\$1ci\$1as
+ polish\$1ci\$1ai
+ polish\$1ci\$1as
+ sql\$1latin1\$1general\$1cp1\$1ci\$1ai
+ sql\$1latin1\$1general\$1cp1\$1ci\$1as
+ sql\$1latin1\$1general\$1cp1250\$1ci\$1as
+ sql\$1latin1\$1general\$1cp1251\$1ci\$1as
+ sql\$1latin1\$1general\$1cp1257\$1ci\$1as
+ traditional\$1spanish\$1ci\$1ai
+ traditional\$1spanish\$1ci\$1as

**참고**  
데이터베이스 수준에서 다른 데이터 정렬을 사용하려면 서버 수준 데이터 정렬과 일치하는지 확인합니다. 자세한 내용은 [Babelfish의 서버 및 객체 데이터 정렬](#babelfish-collations.reference-tables-supported-collations) 단원을 참조하세요.

## Babelfish의 서버 및 객체 데이터 정렬
<a name="babelfish-collations.reference-tables-supported-collations"></a>

다음 데이터 정렬을 서버 데이터 정렬 또는 객체 데이터 정렬로 사용합니다.<a name="bfish-collations-table"></a>


| 데이터 정렬 ID | 참고 | 
| --- | --- | 
|  bbf\$1unicode\$1general\$1ci\$1as  |  대소문자를 구분하지 않는 비교와 LIKE 연산자를 지원합니다.  | 
|  bbf\$1unicode\$1cp1\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1252.txt)은 CP1252라고도 합니다.  | 
|  bbf\$1unicode\$1CP1250\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1250.txt)은 라틴 문자를 사용하는 중부 유럽 및 동유럽 언어로 텍스트를 표현하는 데 사용됩니다.  | 
|  bbf\$1unicode\$1CP1251\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1251.txt)은 키릴 문자를 사용하는 언어에 사용됩니다.  | 
|  bbf\$1unicode\$1cp1253\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1253.txt)은 현대 그리스어를 표현하는 데 사용됩니다.  | 
|  bbf\$1unicode\$1cp1254\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1254.txt)은 터키어를 지원합니다.  | 
|  bbf\$1unicode\$1cp1255\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1255.txt)은 히브리어를 지원합니다.  | 
|  bbf\$1unicode\$1cp1256\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1256.txt)은 아랍 문자를 사용하는 언어를 작성하는 데 사용됩니다.  | 
|  bbf\$1unicode\$1cp1257\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1257.txt)은 에스토니아어, 라트비아어 및 리투아니아어를 지원하는 데 사용됩니다.  | 
|  bbf\$1unicode\$1cp1258\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1258.txt)은 베트남 문자를 작성하는 데 사용됩니다.  | 
|  bbf\$1unicode\$1cp874\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit874.txt)은 태국 문자를 작성하는 데 사용됩니다.  | 
|  sql\$1latin1\$1general\$1cp1250\$1ci\$1as  |  [비결정적 싱글바이트 문자 인코딩](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1250.txt)은 라틴 문자를 표현하는 데 사용됩니다.  | 
|  sql\$1latin1\$1general\$1cp1251\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1251.txt)은 라틴 문자를 지원합니다.  | 
|  sql\$1latin1\$1general\$1cp1\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1252.txt)은 라틴 문자를 지원합니다.  | 
|  sql\$1latin1\$1general\$1cp1253\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1253.txt)은 라틴 문자를 지원합니다.  | 
|  sql\$1latin1\$1general\$1cp1254\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1254.txt)은 라틴 문자를 지원합니다.  | 
|  sql\$1latin1\$1general\$1cp1255\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1255.txt)은 라틴 문자를 지원합니다.  | 
|  sql\$1latin1\$1general\$1cp1256\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1256.txt)은 라틴 문자를 지원합니다.  | 
|  sql\$1latin1\$1general\$1cp1257\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1257.txt)은 라틴 문자를 지원합니다.  | 
|  sql\$1latin1\$1general\$1cp1258\$1ci\$1as  |  [비결정적 데이터 정렬](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1258.txt)은 라틴 문자를 지원합니다.  | 
|  chinese\$1prc\$1ci\$1as  |  비결정적 데이터 정렬은 중국어(PRC)를 지원합니다.  | 
|  cyrillic\$1general\$1ci\$1as  |  비결정적 데이터 정렬은 키릴어를 지원합니다.  | 
|  finnish\$1swedish\$1ci\$1as  |  비결정적 데이터 정렬은 핀란드어를 지원합니다.  | 
|  french\$1ci\$1as  |  비결정적 데이터 정렬은 프랑스어를 지원합니다.  | 
|  japanese\$1ci\$1as  | 비결정적 데이터 정렬은 일본어를 지원합니다. Babelfish 2.1.0 이상 릴리스에서 지원됩니다. | 
|  korean\$1wansung\$1ci\$1as  |  비결정적 데이터 정렬은 한국어를 지원합니다(사전 정렬 사용).  | 
|  latin1\$1general\$1ci\$1as  |  비결정적 데이터 정렬은 라틴 문자를 지원합니다.  | 
|  modern\$1spanish\$1ci\$1as  |  비결정적 데이터 정렬은 현대 스페인어를 지원합니다.  | 
|  polish\$1ci\$1as  |  비결정적 데이터 정렬은 폴란드어를 지원합니다.  | 
|  thai\$1ci\$1as  |  비결정적 데이터 정렬은 태국어를 지원합니다.  | 
|  traditional\$1spanish\$1ci\$1as  |  비결정적 데이터 정렬은 스페인어(전통에 따라 정렬)를 지원합니다.  | 
|  turkish\$1ci\$1as  |  비결정적 데이터 정렬은 터키어를 지원합니다.  | 
|  ukrainian\$1ci\$1as  |  비결정적 데이터 정렬은 우크라이나어를 지원합니다.  | 
|  vietnamese\$1ci\$1as  |  비결정적 데이터 정렬은 베트남어를 지원합니다.  | 

다음 데이터 정렬을 객체 데이터 정렬로 사용할 수 있습니다.<a name="bfish-icu-collations-table"></a>


| 언어 | 결정적 옵션 | 비결정적 옵션 | 
| --- | --- | --- | 
|  아랍어  |  Arabic\$1CS\$1AS  |  Arabic\$1CI\$1AS Arabic\$1CI\$1AI  | 
|  아랍어 문자  |  BBF\$1Unicode\$1CP1256\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1256\$1CS\$1AS  |  BBF\$1Unicode\$1CP1256\$1CI\$1AI BBF\$1Unicode\$1CP1256\$1CS\$1AI  | 
|  바이너리  |  latin1\$1general\$1bin2 BBF\$1Unicode\$1BIN2  |  –  | 
|  라틴 문자를 사용하는 중부 유럽 및 동유럽 언어  |  BBF\$1Unicode\$1CP1250\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1250\$1CS\$1AS  |  BBF\$1Unicode\$1CP1250\$1CI\$1AI BBF\$1Unicode\$1CP1250\$1CS\$1AI  | 
|  중국어  |  Chinese\$1PRC\$1CS\$1AS  |  Chinese\$1PRC\$1CI\$1AS Chinese\$1PRC\$1CI\$1AI  | 
|  키릴 문자\$1일반  |  Cyrillic\$1General\$1CS\$1AS  |  Cyrillic\$1General\$1CI\$1AS Cyrillic\$1General\$1CI\$1AI  | 
|  키릴 문자  |  BBF\$1Unicode\$1CP1251\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1251\$1CS\$1AS  |  BBF\$1Unicode\$1CP1251\$1CI\$1AI BBF\$1Unicode\$1CP1251\$1CS\$1AI  | 
|  에스토니아어  |  Estonian\$1CS\$1AS  |  Estonian\$1CI\$1AS Estonian\$1CI\$1AI  | 
|  에스토니아어, 라트비아어, 리투아니아어  |  BBF\$1Unicode\$1CP1257\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1257\$1CS\$1AS  |  BBF\$1Unicode\$1CP1257\$1CI\$1AI BBF\$1Unicode\$1CP1257\$1CS\$1AI  | 
|  필란드어\$1스웨덴어  |  Finnish\$1Swedish\$1CS\$1AS  |  Finnish\$1Swedish\$1CI\$1AS Finnish\$1Swedish\$1CI\$1AI  | 
|  프랑스어  |  French\$1CS\$1AS  |  French\$1CI\$1AS French\$1CI\$1AI  | 
|  그리스어  |  Greek\$1CS\$1AS  |  Greek\$1CI\$1AS Greek\$1CI\$1AI  | 
|  히브리어  |  BBF\$1Unicode\$1CP1255\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1255\$1CS\$1AS Hebrew\$1CS\$1AS  |  BBF\$1Unicode\$1CP1255\$1CI\$1AI BBF\$1Unicode\$1CP1255\$1CS\$1AI Hebrew\$1CI\$1AS Hebrew\$1CI\$1AI  | 
|  일본어(Babelfish 2.1.0 이상)  | Japanese\$1CS\$1AS | Japanese\$1CI\$1AI Japanese\$1CI\$1AS | 
|  한국어\$1완성형  |  Korean\$1Wamsung\$1CS\$1AS  |  Korean\$1Wamsung\$1CI\$1AS Korean\$1Wamsung\$1CI\$1AI  | 
|  코드 페이지 CP1252의 라틴 문자  |  latin1\$1general\$1cs\$1as BBF\$1Unicode\$1General\$1CS\$1AS BBF\$1Unicode\$1General\$1Pref\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1\$1CS\$1AS BBF\$1Unicode\$1CP1\$1CS\$1AS  |  latin1\$1general\$1ci\$1as latin1\$1general\$1ci\$1ai latin1\$1general\$1cs\$1ai BBF\$1Unicode\$1General\$1CI\$1AI BBF\$1Unicode\$1General\$1CS\$1AI BBF\$1Unicode\$1CP1\$1CI\$1AI BBF\$1Unicode\$1CP1\$1CS\$1AI  | 
|  현대 그리스어  |  BBF\$1Unicode\$1CP1253\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1253\$1CS\$1AS  |  BBF\$1Unicode\$1CP1253\$1CI\$1AI BBF\$1Unicode\$1CP1253\$1CS\$1AI  | 
|  현대\$1스페인어  |  Modern\$1Spanish\$1CS\$1AS  |  Modern\$1Spanish\$1CI\$1AS Modern\$1Spanish\$1CI\$1AI  | 
|  몽골어  |  Mongolian\$1CS\$1AS  |  Mongolian\$1CI\$1AS Mongolian\$1CI\$1AI  | 
|  폴란드어  |  Polish\$1CS\$1AS  |  Polish\$1CI\$1AS Polish\$1CI\$1AI  | 
|  태국어  |  BBF\$1Unicode\$1CP874\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP874\$1CS\$1AS Thai\$1CS\$1AS  |  BBF\$1Unicode\$1CP874\$1CI\$1AI BBF\$1Unicode\$1CP874\$1CS\$1AI Thai\$1CI\$1AS, Thai\$1CI\$1AI  | 
|  정통\$1스페인어  |  Traditional\$1Spanish\$1CS\$1AS  |  Traditional\$1Spanish\$1CI\$1AS Traditional\$1Spanish\$1CI\$1AI  | 
|  터키어  |  BBF\$1Unicode\$1CP1254\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1254\$1CS\$1AS Turkish\$1CS\$1AS  |  BBF\$1Unicode\$1CP1254\$1CI\$1AI BBF\$1Unicode\$1CP1254\$1CS\$1AI Turkish\$1CI\$1AS, Turkish\$1CI\$1AI  | 
|  우크라이나어  |  Ukranian\$1CS\$1AS  |  Ukranian\$1CI\$1AS Ukranian\$1CI\$1AI  | 
|  베트남어  |  BBF\$1Unicode\$1CP1258\$1CS\$1AS BBF\$1Unicode\$1Pref\$1CP1258\$1CS\$1AS Vietnamese\$1CS\$1AS  |  BBF\$1Unicode\$1CP1258\$1CI\$1AI BBF\$1Unicode\$1CP1258\$1CS\$1AI Vietnamese\$1CI\$1AS Vietnamese\$1CI\$1AI  | 

## Babelfish의 기본 데이터 정렬 동작
<a name="babelfish-collations-default"></a>

이전에는 `pg_catalog.default`가 정렬 가능한 데이터 형식의 기본 데이터 정렬이었습니다. 이러한 데이터 형식에 의존하는 데이터 형식 및 객체는 대/소문자 구분 데이터 정렬을 따릅니다. 이 조건은 대소문자를 구분하지 않는 데이터 정렬을 따르는 데이터 세트의 T-SQL 객체에 잠재적으로 영향을 미칩니다. Babelfish 2.3.0부터 정렬 가능한 데이터 형식(TEXT 및 NTEXT 제외)의 기본 데이터 정렬은 `babelfishpg_tsql.server_collation_name` 파라미터의 데이터 정렬과 동일합니다. Babelfish 2.3.0으로 업그레이드하면 DB 클러스터 생성 시 기본 데이터 정렬이 자동으로 선택되므로 눈에 띄는 영향이 없습니다.

# 데이터 정렬 관리
<a name="collation.managing"></a>

ICU 라이브러리는 데이터 정렬 버전 추적을 제공하여 새 버전의 ICU를 사용할 수 있으면 데이터 정렬에 종속된 인덱스를 다시 인덱싱할 수 있도록 합니다. 현재 데이터베이스에 새로 고침이 필요한 데이터 정렬이 있는지 확인하려면 `psql` 또는 `pgAdmin`을 사용하여 연결한 후 다음 쿼리를 활용합니다.

```
SELECT pg_describe_object(refclassid, refobjid,
    refobjsubid) AS "Collation", 
    pg_describe_object(classid, objid, objsubid) AS "Object" 
    FROM pg_depend d JOIN pg_collation c ON refclassid = 'pg_collation'::regclass
    AND refobjid = c.oid WHERE c.collversion <> pg_collation_actual_version(c.oid) 
    ORDER BY 1, 2;
```

이 쿼리는 다음과 같은 출력을 반환합니다.

```
 Collation | Object
-----------+--------
(0 rows)
```

이 예에서는 데이터 정렬을 업데이트할 필요가 없습니다.

Babelfish 데이터베이스에서 미리 정의된 데이터 정렬 목록을 확인하려면 다음 쿼리와 함께 `psql` 또는 `pgAdmin`을 사용하면 됩니다.

```
SELECT * FROM pg_collation;
```

미리 정의된 데이터 정렬은 `sys.fn_helpcollations` 테이블에 저장됩니다. 다음 명령을 사용하여 데이터 정렬에 대한 정보(예: lcid, style 및 collate flags)를 표시할 수 있습니다. `sqlcmd`를 사용하여 모든 데이터 정렬 목록을 가져오려면 T-SQL 포트(기본값 1433)에 연결하고 다음 쿼리를 실행합니다.

```
1> :setvar SQLCMDMAXVARTYPEWIDTH 40
2> :setvar SQLCMDMAXFIXEDTYPEWIDTH 40
3> SELECT * FROM fn_helpcollations()
4> GO
name                                     description
---------------------------------------- ----------------------------------------
arabic_cs_as                             Arabic, case-sensitive, accent-sensitive
arabic_ci_ai                             Arabic, case-insensitive, accent-insensi
arabic_ci_as                             Arabic, case-insensitive, accent-sensiti
bbf_unicode_bin2                         Unicode-General, case-sensitive, accent-
bbf_unicode_cp1250_ci_ai                 Default locale, code page 1250, case-ins
bbf_unicode_cp1250_ci_as                 Default locale, code page 1250, case-ins
bbf_unicode_cp1250_cs_ai                 Default locale, code page 1250, case-sen
bbf_unicode_cp1250_cs_as                 Default locale, code page 1250, case-sen
bbf_unicode_pref_cp1250_cs_as            Default locale, code page 1250, case-sen
bbf_unicode_cp1251_ci_ai                 Default locale, code page 1251, case-ins
bbf_unicode_cp1251_ci_as                 Default locale, code page 1251, case-ins
bbf_unicode_cp1254_ci_ai                 Default locale, code page 1254, case-ins
...
(124 rows affected)
```

이 예에 표시된 1행과 2행은 문서 가독성을 위해 출력 범위를 좁혔습니다.

```
1> SELECT SERVERPROPERTY('COLLATION')
2> GO
serverproperty
---------------------------------------------------------------------------
sql_latin1_general_cp1_ci_as

(1 rows affected)
1>
```

# 데이터 정렬 제한 및 동작 차이점
<a name="collation.limitations"></a>

Babelfish는 데이터 정렬 지원을 위해 ICU 라이브러리를 사용합니다. PostgreSQL은 특정 버전의 ICU로 빌드되며 최대 한 버전의 데이터 정렬을 일치시킬 수 있습니다. 시간이 흐름에 따라 언어가 발전하면서 사소한 변형이 있는 것처럼 버전 간 변형은 피할 수 없습니다. 다음 목록에는 Babelfish 데이터 정렬의 알려진 제한 사항 및 동작 변형이 나와 있습니다.
+ **인덱스 및 데이터 정렬 유형 종속성** – International Components for Unicode(ICU) 데이터 정렬 라이브러리(Babelfish에서 사용하는 라이브러리)를 따르는 사용자 지정 유형의 인덱스는 라이브러리 버전이 변경되어도 무효화되지 않습니다.
+ **COLLATIONPROPERTY 함수** – 데이터 정렬 속성은 지원되는 Babelfish BBF 데이터 정렬에 대해서만 구현됩니다. 자세한 내용은 [Babelfish supported collations table](babelfish-collations.md#bfish-collations-table)을 참조하세요.
+ **유니코드 정렬 규칙 차이점** - SQL Server의 SQL 데이터 정렬은 유니코드로 인코딩된 데이터(`nchar` 및 `nvarchar`)를 유니코드로 인코딩되지 않은 데이터(`char` 및 `varchar`)와 다르게 정렬합니다. Babelfish 데이터베이스는 항상 UTF-8으로 인코딩되며, `char` 또는 `varchar`에 대한 정렬 순서가 `nchar` 또는 `nvarchar`에 대한 정렬 순서와 같도록 데이터 유형에 관계없이 항상 유니코드 정렬 규칙을 일관되게 적용합니다.
+ **2차와 동일한 데이터 정렬 및 정렬 동작** – 기본 ICU 유니코드 2차와 동일한(`CI_AS`) 데이터 정렬은 문장 부호 및 기타 영숫자가 아닌 문자를 숫자 문자 앞에 정렬하고 숫자 문자는 알파벳 문자 앞에 정렬합니다. 그러나 문장 부호 및 기타 특수 문자의 순서는 다릅니다.
+ **3차 데이터 정렬, ORDER BY용 차선책** – SQL 데이터 정렬(예: `SQL_Latin1_General_Pref_CP1_CI_AS`)은 `TERTIARY_WEIGHTS` 함수 및 `CI_AS` 데이터 정렬에서 균등하게 비교되는 문자열을 정렬하는 기능을 지원하여 `ABC`, `ABc`, `AbC`, `Abc`, `aBC`, `aBc`, `abC`, `abc`와 같이 먼저 대문자로 정렬되도록 합니다. 따라서 `DENSE_RANK OVER (ORDER BY column)` 분석 함수는 이러한 문자열을 동일한 순위를 갖는 것으로 평가하지만 파티션 내에서 먼저 대문자를 정렬합니다.

  `COLLATE` 절을 `@colCaseFirst=upper`를 지정하는 3차 `CS_AS` 데이터 정렬을 지정하는 `ORDER BY` 절에 추가하여 Babelfish와 비슷한 결과를 얻을 수 있습니다. 그러나 `colCaseFirst` 한정자는 `CI_AS` 데이터 정렬과 같이 2차와 동일한 문자열이 아닌 3차와 동일한 문자열에만 적용됩니다. 따라서 단일 ICU 데이터 정렬을 사용하여 3차 SQL 데이터 정렬을 에뮬레이션할 수 없습니다.

  해결 방법으로 먼저 `BBF_SQL_Latin1_General_CP1_CI_AS` 데이터 정렬을 사용하려면 `SQL_Latin1_General_Pref_CP1_CI_AS` 데이터 정렬을 사용하는 애플리케이션을 수정하는 것이 좋습니다. 그런 다음, `COLLATE BBF_SQL_Latin1_General_Pref_CP1_CS_AS`를 이 열의 `ORDER BY` 절에 추가합니다.
+ **문자 확장** – 문자 확장은 단일 문자를 기본 수준의 문자 시퀀스와 동일하게 취급합니다. SQL Server의 기본 `CI_AS` 데이터 정렬은 문자 확장을 지원합니다. ICU 데이터 정렬은 악센트를 구분하지 않는 데이터 정렬에 대해서만 문자 확장을 지원합니다.

  문자 확장이 필요한 경우 비교를 위해 `AI` 데이터 정렬을 사용합니다. 그러나 이러한 데이터 정렬은 현재 LIKE 연산자에서 지원되지 않습니다.
+ **char 및 varchar 인코딩** – SQL 데이터 정렬이 `char` 또는 `varchar` 데이터 유형에 사용되는 경우 ASCII 127 이전 문자의 정렬 순서는 해당 SQL 데이터 정렬에 대한 특정 코드 페이지에 따라 결정됩니다. SQL 데이터 정렬의 경우 `char` 또는 `varchar`로 선언된 문자열은 `nchar` 또는 `nvarchar`로 선언된 문자열과 다르게 정렬될 수 있습니다.

  PostgreSQL은 데이터베이스 인코딩으로 모든 문자열을 인코딩하므로 모든 문자를 UTF-8으로 변환하고 유니코드 규칙을 사용하여 정렬합니다.

  SQL 데이터 정렬은 유니코드 규칙을 사용하여 nchar 및 nvarchar 데이터 유형을 정렬하므로 Babelfish는 UTF-8을 사용하여 서버의 모든 문자열을 인코딩합니다. Babelfish는 유니코드 규칙을 사용하여 char 및 varchar 문자열을 정렬하는 것과 동일한 방식으로 nchar 및 nvarchar 문자열을 정렬합니다.
+ **보조 문자** – SQL Server 함수 `NCHAR`, `UNICODE`, `LEN`은 유니코드 기본 다국어 평면(BMP) 외부의 코드 포인트에 대한 문자를 지원합니다. 대조적으로 SC가 아닌 데이터 정렬은 서로게이트 쌍 문자를 사용하여 보조 문자를 처리합니다. 유니코드 데이터 형식의 경우 SQL Server는 UCS-2 또는 보조 문자를 사용하는 경우 전체 유니코드 범위(1,114,114자)를 사용하여 최대 65,535자를 나타낼 수 있습니다.
+ **가나 구분(KS) 데이터 정렬** - 가나 구분(KS) 데이터 정렬은 `Hiragana` 및 `Katakana` 일본어 가나 문자를 다르게 취급합니다. ICU는 일본 데이터 정렬 표준 `JIS X 4061`을 지원합니다. 이제 사용되지 않는 `colhiraganaQ [on | off]` 로캘 한정자는 KS 데이터 정렬과 동일한 기능을 제공할 수 있습니다. 그러나 SQL Server와 동일한 이름의 KS 데이터 정렬은 현재 Babelfish에서 지원하지 않습니다.
+ **전자/반자 구분(WS) 데이터 정렬** – 싱글바이트 문자(반자)와 더블바이트 문자(전자)로 표현되는 동일한 문자가 다르게 처리되는 경우의 데이터 정렬을 *전자/반자 구분(WS)*이라고 합니다. 그러나 SQL Server와 동일한 이름의 WS 데이터 정렬은 현재 Babelfish에서 지원하지 않습니다.
+ **변형 선택기 구분(VSS) 데이터 정렬** - 변형 선택기 구분(VSS) 데이터 정렬은 일본어 데이터 정렬 `Japanese_Bushu_Kakusu_140` 및 `Japanese_XJIS_140`에서 표의 문자 변형 선택기를 구분합니다. 변형 시퀀스는 기본 문자와 추가 변형 선택기로 구성됩니다. `_VSS` 옵션을 선택하지 않은 경우 변형 선택기는 비교 시 고려되지 않습니다.

  VSS 데이터 정렬은 현재 Babelfish에서 지원되지 않습니다.
+ **BIN 및 BIN2 데이터 정렬** – BIN2 데이터 정렬은 코드 포인트 순서에 따라 문자를 정렬합니다. UTF-8의 바이트별 이진 순서는 유니코드 코드 포인트 순서를 준수하므로 가장 성능이 좋은 데이터 정렬이 될 수 있습니다. 유니코드 코드 포인트 순서가 애플리케이션에서 작동하는 경우 BIN2 데이터 정렬을 사용하는 것이 좋습니다. 그러나 BIN2 데이터 정렬을 사용하면 문화적으로 예상치 못한 순서로 데이터가 클라이언트에 표시될 수 있습니다. 시간이 진행되면서 소문자에 대한 새로운 매핑이 유니코드에 추가되므로 `LOWER` 함수는 ICU의 다른 버전에서 다르게 수행될 수 있습니다. 이 경우는 BIN2 데이터 정렬과 관련된 문제가 아닌 좀 더 일반적인 데이터 정렬 버전 관리 문제의 특별한 경우입니다.

  Babelfish는 Babelfish 배포를 통해 `BBF_Latin1_General_BIN2` 데이터 정렬을 제공하여 유니코드 코드 포인트 순서로 정렬합니다. BIN 데이터 정렬에서는 첫 번째 문자만 wchar로 정렬됩니다. 나머지 문자는 해당 인코딩에 따라 코드 포인트 순서로 바이트별 정렬이 효과적으로 이뤄집니다. 이 방법은 유니코드 데이터 정렬 규칙을 따르지 않으며 Babelfish에서 지원하지 않습니다.
+ **비결정적 데이터 정렬 및 CHARINDEX 제한** - 버전 2.1.0 이전 Babelfish 릴리스의 경우 CHARINDEX를 비결정적 데이터 정렬과 함께 사용할 수 없습니다. 기본적으로 Babelfish는 대소문자를 구분하지 않는(비결정적) 데이터 정렬을 사용합니다. 이전 버전의 Babelfish에 CHARINDEX를 사용하면 다음과 같은 런타임 오류가 발생합니다.

  ```
  nondeterministic collations are not supported for substring searches
  ```
**참고**  
이 제한 사항 및 해결 방법은 Babelfish 버전 1.x(Aurora PostgreSQL 13.x 버전)에만 적용됩니다. Babelfish 2.1.0 이상 릴리스에는 문제가 발생하지 않습니다.

  이 문제를 해결하려면 다음 중 한 방법을 시도하면 됩니다.
  + 표현식을 대소문자를 구분하는 데이터 정렬로 명시적으로 변환하고 LOWER 또는 UPPER를 적용하여 두 인수를 모두 케이스 폴드(case-fold)합니다. 예를 들어 `SELECT charindex('x', a) FROM t1`은 다음이 됩니다.

    ```
    SELECT charindex(LOWER('x'), LOWER(a COLLATE sql_latin1_general_cp1_cs_as)) FROM t1
    ```
  + SQL 함수 f\$1charindex를 만들고 CHARINDEX 호출을 다음 함수에 대한 호출로 바꿉니다.

    ```
    CREATE function f_charindex(@s1 varchar(max), @s2 varchar(max)) RETURNS int
    AS
    BEGIN
    declare @i int = 1
    WHILE len(@s2) >= len(@s1)
    BEGIN
      if LOWER(@s1) = LOWER(substring(@s2,1,len(@s1))) return @i
      set @i += 1
      set @s2 = substring(@s2,2,999999999)
    END
    return 0
    END
    go
    ```

# 이스케이프 해치를 사용하여 Babelfish 오류 처리 관리
<a name="babelfish-strict"></a>

Babelfish는 제어 흐름 및 트랜잭션 상태에 대해 SQL 동작을 가능한 한 모방합니다. Babelfish에 오류가 발생하면 SQL Server 오류 코드와 유사한 오류 코드를 반환합니다. Babelfish가 오류를 SQL Server 코드에 매핑할 수 없으면 고정 오류 코드(`33557097`)를 반환하고 다음과 같이 오류 유형에 따라 특정 작업을 수행합니다.
+ 컴파일 타임 오류인 경우 Babelfish는 트랜잭션을 롤백합니다.
+ 런타임 오류인 경우 Babelfish는 배치를 종료하고 트랜잭션을 롤백합니다.
+ 클라이언트와 서버 간의 프로토콜 오류인 경우 트랜잭션이 롤백되지 않습니다.

오류 코드를 동등한 코드에 매핑할 수 없고 유사한 오류에 대한 코드를 사용할 수 있는 경우 오류 코드가 대체 코드에 매핑됩니다. 예를 들어 SQL Server 코드, `8143` 및 `8144`를 유발하는 동작이 둘 다 `8143`으로 매핑됩니다.

매핑할 수 없는 오류는 `TRY... CATCH` 구문을 준수하지 않습니다.

`@@ERROR`를 사용하여 SQL Server 오류 코드를 반환하거나 `@@PGERROR` 함수를 사용하여 PostgreSQL 오류 코드를 반환할 수 있습니다. `fn_mapped_system_error_list` 함수를 사용하여 매핑된 오류 코드 목록을 반환할 수 있습니다. PostgreSQL 오류 코드에 대한 자세한 내용은 [PostgreSQL 웹 사이트](https://www.postgresql.org/docs/current/errcodes-appendix.html)를 참조하세요.

## Babelfish 이스케이프 해치 설정 수정
<a name="babelfish-escape_hatches"></a>

오류가 있을 수 있는 문장을 처리하기 위해 Babelfish는 이스케이프 해치라는 특정 옵션을 정의합니다. *이스케이프 해치*는 지원되지 않는 기능이나 구문을 발견했을 때 Babelfish 동작을 지정하는 옵션입니다.

`sp_babelfish_configure` 저장 프로시저를 사용하여 이스케이프 해치의 설정을 제어할 수 있습니다. 스크립트를 사용하여 이스케이프 해치를 `ignore` 또는 `strict`로 설정합니다. `strict`로 설정된 경우 Babelfish는 계속하기 전에 수정해야 하는 오류를 반환합니다.

현재 세션과 클러스터 수준에 변경 사항을 적용하려면 `server` 키워드를 포함합니다.

사용법은 다음과 같습니다.
+ 모든 이스케이프 해치와 해당 상태 및 사용 정보를 나열하려면 `sp_babelfish_configure`를 실행합니다.
+ 명명된 이스케이프 해치와 해당 값을 나열하려면 현재 세션 또는 클러스터 전체에 대해 `hatch_name`이 하나 이상의 이스케이프 해치의 식별자인 `sp_babelfish_configure 'hatch_name'` 명령을 실행합니다. *hatch\$1name*에는 '%'와 같은 SQL 와일드카드를 사용할 수 있습니다.
+ 하나 이상의 이스케이프 해치를 지정된 값으로 설정하려면 `sp_babelfish_configure ['hatch_name' [, 'strict'|'ignore' [, 'server']]`을 실행합니다. 클러스터 전체 수준에서 설정이 영구적이 되게 하려면 아래 나와 있는 것처럼 `server` 키워드를 포함합니다.

  ```
  EXECUTE sp_babelfish_configure 'escape_hatch_unique_constraint', 'ignore', 'server'
  ```

  현재 세션에 대해서만 설정하려면 `server`는 사용하지 마세요.
+ 모든 이스케이프 해치를 기본값으로 재설정하려면 `sp_babelfish_configure 'default'`(Babelfish 1.2.0 이상)를 실행합니다.

해치를 식별하는 문자열에는 SQL 와일드카드가 포함될 수 있습니다. 예를 들어 다음은 모든 구문 이스케이프 해치를 Aurora PostgreSQL 클러스터의 `ignore`로 설정합니다.

```
EXECUTE sp_babelfish_configure '%', 'ignore', 'server'
```

다음 표에서는 Babelfish 사전 정의된 이스케이프 해치에 대한 설명과 기본값을 확인할 수 있습니다.


| 이스케이프 해치 | 설명 | Default | 
| --- | --- | --- | 
| escape\$1hatch\$1checkpoint |  절차 코드에서 CHECKPOINT 문을 사용할 수 있지만 CHECKPOINT 문은 현재 구현되지 않았습니다.  |  무시  | 
| escape\$1hatch\$1constraint\$1name\$1for\$1default |  기본 제약 조건 이름과 관련된 Babelfish 동작을 제어합니다.  |  무시  | 
| escape\$1hatch\$1database\$1misc\$1options |  CREATE DATABASE: CONTAINMENT, DB\$1CHAINING, TRUSTWORTHY, PERSISTENT\$1LOG\$1BUFFER에서 다음 옵션과 관련된 Babelfish 동작을 제어합니다.  |  무시  | 
| escape\$1hatch\$1for\$1replication |  테이블을 만들거나 변경하는 경우 [NOT] FOR REPLICATION 절과 관련된 Babelfish 동작을 제어합니다.  |  strict  | 
| escape\$1hatch\$1fulltext |  DEFAULT\$1FULLTEXT\$1LANGUAGE in CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX, 또는 sp\$1fulltext\$1database와 같은 FULLTEXT 기능과 관련된 Babelfish 동작을 제어합니다.  |  무시  | 
| escape\$1hatch\$1ignore\$1dup\$1key |  CREATE/ALTER TABLE 및 CREATE INDEX와 관련된 Babelfish 동작을 제어합니다. IGNORE\$1DUP\$1KEY=ON인 경우 `strict`(기본값)로 설정하면 오류가 반환되고`ignore`로 설정하면 오류가 무시됩니다(Babelfish 버전 1.2.0 이상).  |  strict  | 
| escape\$1hatch\$1index\$1clustering |  인덱스 및 PRIMARY KEY 또는 UNIQUE 제약 조건에 대한 CLUSTERED 또는 NONCLUSTERED 키워드와 관련된 Babelfish 동작을 제어합니다. 클러스터링이 무시되면 NONCLUSTERED가 지정된 것처럼 인덱스 또는 제약 조건이 계속 만들어집니다.  |  무시  | 
| escape\$1hatch\$1index\$1columnstore |  COLUMNSTORE 절과 관련된 Babelfish 동작을 제어합니다. `ignore`를 지정한 경우 Babelfish는 일반 B-tree 인덱스를 생성합니다.  |  strict  | 
| escape\$1hatch\$1join\$1hints |  LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE 등 JOIN 연산자의 키워드 동작을 제어합니다.  |  무시  | 
| escape\$1hatch\$1language\$1non\$1english |  화면 메시지에 대해 영어 이외의 언어와 관련된 Babelfish 동작을 제어합니다. Babelfish는 현재 화면 메시지에 대해 `us_english`만 지원합니다. SET LANGUAGE는 언어 이름을 포함하는 변수를 사용할 수 있으므로 설정 중인 실제 언어는 런타임 시에만 감지할 수 있습니다.  |  strict  | 
| escape\$1hatch\$1login\$1hashed\$1password |  무시하면 `CREATE LOGIN`과 `ALTER LOGIN`에 대한 `HASHED` 키워드의 오류를 표시하지 않습니다.  |  strict  | 
| escape\$1hatch\$1login\$1misc\$1options |  무시하면 `CREATE LOGIN` 및 `ALTER LOGIN`에 대한 `HASHED`, `MUST_CHANGE`, `OLD_PASSWORD` 및 `UNLOCK`을 제외한 다른 키워드의 오류를 표시하지 않습니다.  |  strict  | 
| escape\$1hatch\$1login\$1old\$1password |  무시하면 `CREATE LOGIN`과 `ALTER LOGIN`에 대한 `OLD_PASSWORD` 키워드의 오류를 표시하지 않습니다.  |  strict  | 
| escape\$1hatch\$1login\$1password\$1must\$1change |  무시하면 `CREATE LOGIN`과 `ALTER LOGIN`에 대한 `MUST_CHANGE` 키워드의 오류를 표시하지 않습니다.  |  strict  | 
| escape\$1hatch\$1login\$1password\$1unlock |  무시하면 `CREATE LOGIN`과 `ALTER LOGIN`에 대한 `UNLOCK` 키워드의 오류를 표시하지 않습니다.  |  strict  | 
| escape\$1hatch\$1nocheck\$1add\$1constraint |  제약 조건에 대한 WITH CHECK 또는 NOCHECK 절과 관련된 Babelfish 동작을 제어합니다.  |  strict  | 
| escape\$1hatch\$1nocheck\$1existing\$1constraint |  FOREIGN KEY 또는 CHECK 제약 조건과 관련된 Babelfish 동작을 제어합니다.  |  strict  | 
| escape\$1hatch\$1query\$1hints |  쿼리 힌트와 관련된 Babelfish 동작을 제어합니다. 이 옵션을 무시하도록 설정하면 서버는 OPTION (...) 절을 사용하여 쿼리 처리 측면을 지정하는 힌트를 무시합니다. 예에는 SELECT FROM ...이 있습니다. OPTION(MERGE JOIN HASH, MAXRECURSION 10)).  |  무시  | 
|  escape\$1hatch\$1rowversion | ROWVERSION 및 TIMESTAMP 데이터 유형의 동작을 제어합니다. 사용 정보는 [구현이 제한된 Babelfish 기능 사용](babelfish-compatibility.tsql.limited-implementation.md) 단원을 참조하세요. | strict | 
| escape\$1hatch\$1schemabinding\$1function |  WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER FUNCTION 명령으로 지정되면 무시됩니다.  |  무시  | 
| escape\$1hatch\$1schemabinding\$1procedure |  WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER PROCEDURE 명령으로 지정되면 무시됩니다.  |  무시  | 
| escape\$1hatch\$1rowguidcol\$1column |  테이블을 만들거나 변경하는 경우 ROWGUIDCOL 절과 관련된 Babelfish 동작을 제어합니다.  |  strict  | 
| escape\$1hatch\$1schemabinding\$1trigger |  WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER TRIGGER 명령으로 지정되면 무시됩니다.  |  무시  | 
| escape\$1hatch\$1schemabinding\$1view |  WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER VIEW 명령으로 지정되면 무시됩니다.  |  무시  | 
| escape\$1hatch\$1session\$1settings |  지원되지 않는 세션 수준 SET 문에 대한 Babelfish 동작을 제어합니다.  |  무시  | 
| escape\$1hatch\$1showplan\$1all |  SET SHOWPLAN\$1ALL 및 SET STATISTICS PROFILE과 관련된 Babelfish 동작을 제어합니다. 무시하도록 설정하면 SET BABELFISH\$1SHOWPLAN\$1ALL 및 SET BABELFISH\$1STATISTICS PROFILE처럼 동작합니다. 엄격하게 설정하면 자동으로 무시됩니다.  |  strict  | 
| escape\$1hatch\$1storage\$1on\$1partition |  파티셔닝을 정의하는 경우 `ON partition_scheme column ` 절과 관련된 Babelfish 동작을 제어합니다. Babelfish는 현재 파티셔닝을 구현하지 않습니다.  |  strict  | 
| escape\$1hatch\$1storage\$1options |  CREATE, ALTER DATABASE, TABLE, INDEX에 사용되는 모든 스토리지 옵션의 이스케이프 해치. 여기에는 테이블, 인덱스, 제약 조건과 데이터베이스에 대한 스토리지 위치(파티션, 파일 그룹)를 정의하는 (LOG) ON, TEXTIMAGE\$1ON, FILESTREAM\$1ON 절이 포함됩니다. 이 이스케이프 해치 설정은 이러한 모든 절(ON [PRIMARY] 및 ON 'DEFAULT' 포함)에 적용됩니다. ON partition\$1scheme(열)이 있는 테이블이나 인덱스에 대해 파티션이 지정된 경우는 예외입니다.  |  무시  | 
| escape\$1hatch\$1table\$1hints |  WITH (...) 절을 사용하여 지정된 테이블 힌트의 동작을 제어합니다.  |  무시  | 
| escape\$1hatch\$1unique\$1constraint |  엄격으로 설정하면 인덱싱된 열에서 NULL 값을 처리할 때 SQL Server와 PostgreSQL의 의미 차이가 모호한 경우 오류가 발생할 수 있습니다. 의미 차이는 비현실적인 사용 사례에서만 나타나므로 오류가 표시되지 않도록 이 이스케이프 해치를 '무시'로 설정할 수 있습니다. 다음 버전에서 더 이상 사용되지 않음: 3.6.0 이상 버전, 4.2.0 이상 버전  |  strict  | 