이스케이프 해치를 사용하여 Babelfish 오류 처리 관리 - Amazon Aurora

이스케이프 해치를 사용하여 Babelfish 오류 처리 관리

Babelfish는 제어 흐름 및 트랜잭션 상태에 대해 SQL 동작을 가능한 한 모방합니다. Babelfish에 오류가 발생하면 SQL Server 오류 코드와 유사한 오류 코드를 반환합니다. Babelfish가 오류를 SQL Server 코드에 매핑할 수 없으면 고정 오류 코드(33557097)를 반환하고 다음과 같이 오류 유형에 따라 특정 작업을 수행합니다.

  • 컴파일 타임 오류인 경우 Babelfish는 트랜잭션을 롤백합니다.

  • 런타임 오류인 경우 Babelfish는 배치를 종료하고 트랜잭션을 롤백합니다.

  • 클라이언트와 서버 간의 프로토콜 오류인 경우 트랜잭션이 롤백되지 않습니다.

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

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

@@ERROR를 사용하여 SQL Server 오류 코드를 반환하거나 @@PGERROR 함수를 사용하여 PostgreSQL 오류 코드를 반환할 수 있습니다. fn_mapped_system_error_list 함수를 사용하여 매핑된 오류 코드 목록을 반환할 수 있습니다. PostgreSQL 오류 코드에 대한 자세한 내용은 PostgreSQL 웹 사이트를 참조하세요.

Babelfish 이스케이프 해치 설정 수정

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

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

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

사용법은 다음과 같습니다.

  • 모든 이스케이프 해치와 해당 상태 및 사용 정보를 나열하려면 sp_babelfish_configure를 실행합니다.

  • 명명된 이스케이프 해치와 해당 값을 나열하려면 현재 세션 또는 클러스터 전체에 대해 hatch_name이 하나 이상의 이스케이프 해치의 식별자인 sp_babelfish_configure 'hatch_name' 명령을 실행합니다. hatch_name에는 '%'와 같은 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 사전 정의된 이스케이프 해치에 대한 설명과 기본값을 확인할 수 있습니다.

이스케이프 해치 설명 기본값
escape_hatch_checkpoint

절차 코드에서 CHECKPOINT 문을 사용할 수 있지만 CHECKPOINT 문은 현재 구현되지 않았습니다.

무시

escape_hatch_constraint_name_for_default

기본 제약 조건 이름과 관련된 Babelfish 동작을 제어합니다.

무시

escape_hatch_database_misc_options

CREATE 또는 ALTER DATABASE: CONTAINMENT, DB_CHAINING, TRUSTWORTHY, PERSISTENT_LOG_BUFFER에서 다음 옵션과 관련된 Babelfish 동작을 제어합니다.

무시

escape_hatch_for_replication

테이블을 만들거나 변경하는 경우 [NOT] FOR REPLICATION 절과 관련된 Babelfish 동작을 제어합니다.

strict

escape_hatch_fulltext

DEFAULT_FULLTEXT_LANGUAGE in CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX, 또는 sp_fulltext_database와 같은 FULLTEXT 기능과 관련된 Babelfish 동작을 제어합니다.

무시

escape_hatch_ignore_dup_key

CREATE/ALTER TABLE 및 CREATE INDEX와 관련된 Babelfish 동작을 제어합니다. IGNORE_DUP_KEY=ON인 경우 strict(기본값)로 설정하면 오류가 반환되고ignore로 설정하면 오류가 무시됩니다(Babelfish 버전 1.2.0 이상).

strict

escape_hatch_index_clustering

인덱스 및 PRIMARY KEY 또는 UNIQUE 제약 조건에 대한 CLUSTERED 또는 NONCLUSTERED 키워드와 관련된 Babelfish 동작을 제어합니다. 클러스터링이 무시되면 NONCLUSTERED가 지정된 것처럼 인덱스 또는 제약 조건이 계속 만들어집니다.

무시

escape_hatch_index_columnstore

COLUMNSTORE 절과 관련된 Babelfish 동작을 제어합니다. ignore를 지정한 경우 Babelfish는 일반 B-tree 인덱스를 생성합니다.

strict

escape_hatch_join_hints

LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE 등 JOIN 연산자의 키워드 동작을 제어합니다.

무시

escape_hatch_language_non_english

화면 메시지에 대해 영어 이외의 언어와 관련된 Babelfish 동작을 제어합니다. Babelfish는 현재 화면 메시지에 대해 us_english만 지원합니다. SET LANGUAGE는 언어 이름을 포함하는 변수를 사용할 수 있으므로 설정 중인 실제 언어는 런타임 시에만 감지할 수 있습니다.

strict

escape_hatch_login_hashed_password

무시하면 CREATE LOGINALTER LOGIN에 대한 HASHED 키워드의 오류를 표시하지 않습니다.

strict

escape_hatch_login_misc_options

무시하면 CREATE LOGINALTER LOGIN에 대한 HASHED, MUST_CHANGE, OLD_PASSWORDUNLOCK을 제외한 다른 키워드의 오류를 표시하지 않습니다.

strict

escape_hatch_login_old_password

무시하면 CREATE LOGINALTER LOGIN에 대한 OLD_PASSWORD 키워드의 오류를 표시하지 않습니다.

strict

escape_hatch_login_password_must_change

무시하면 CREATE LOGINALTER LOGIN에 대한 MUST_CHANGE 키워드의 오류를 표시하지 않습니다.

strict

escape_hatch_login_password_unlock

무시하면 CREATE LOGINALTER LOGIN에 대한 UNLOCK 키워드의 오류를 표시하지 않습니다.

strict

escape_hatch_nocheck_add_constraint

제약 조건에 대한 WITH CHECK 또는 NOCHECK 절과 관련된 Babelfish 동작을 제어합니다.

strict

escape_hatch_nocheck_existing_constraint

FOREIGN KEY 또는 CHECK 제약 조건과 관련된 Babelfish 동작을 제어합니다.

strict

escape_hatch_query_hints

쿼리 힌트와 관련된 Babelfish 동작을 제어합니다. 이 옵션을 무시하도록 설정하면 서버는 OPTION (...) 절을 사용하여 쿼리 처리 측면을 지정하는 힌트를 무시합니다. 예에는 SELECT FROM ...이 있습니다. OPTION(MERGE JOIN HASH, MAXRECURSION 10)).

무시

escape_hatch_rowversion

ROWVERSION 및 TIMESTAMP 데이터 유형의 동작을 제어합니다. 사용 정보는 구현이 제한된 Babelfish 기능 사용 단원을 참조하세요.

strict

escape_hatch_schemabinding_function

WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER FUNCTION 명령으로 지정되면 무시됩니다.

무시

escape_hatch_schemabinding_procedure

WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER PROCEDURE 명령으로 지정되면 무시됩니다.

무시

escape_hatch_rowguidcol_column

테이블을 만들거나 변경하는 경우 ROWGUIDCOL 절과 관련된 Babelfish 동작을 제어합니다.

strict

escape_hatch_schemabinding_trigger

WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER TRIGGER 명령으로 지정되면 무시됩니다.

무시

escape_hatch_schemabinding_view

WITH SCHEMABINDING 절과 관련된 Babelfish 동작을 제어합니다. 기본적으로 WITH SCHEMABINDING 절은 CREATE 또는 ALTER VIEW 명령으로 지정되면 무시됩니다.

무시

escape_hatch_session_settings

지원되지 않는 세션 수준 SET 문에 대한 Babelfish 동작을 제어합니다.

무시

escape_hatch_showplan_all

SET SHOWPLAN_ALL 및 SET STATISTICS PROFILE과 관련된 Babelfish 동작을 제어합니다. 무시하도록 설정하면 SET BABELFISH_SHOWPLAN_ALL 및 SET BABELFISH_STATISTICS PROFILE처럼 동작합니다. 엄격하게 설정하면 자동으로 무시됩니다.

strict

escape_hatch_storage_on_partition

파티셔닝을 정의하는 경우 ON partition_scheme column 절과 관련된 Babelfish 동작을 제어합니다. Babelfish는 현재 파티셔닝을 구현하지 않습니다.

strict

escape_hatch_storage_options

CREATE, ALTER DATABASE, TABLE, INDEX에 사용되는 모든 스토리지 옵션의 이스케이프 해치. 여기에는 테이블, 인덱스, 제약 조건과 데이터베이스에 대한 스토리지 위치(파티션, 파일 그룹)를 정의하는 (LOG) ON, TEXTIMAGE_ON, FILESTREAM_ON 절이 포함됩니다. 이 이스케이프 해치 설정은 이러한 모든 절(ON [PRIMARY] 및 ON 'DEFAULT' 포함)에 적용됩니다. ON partition_scheme(열)이 있는 테이블이나 인덱스에 대해 파티션이 지정된 경우는 예외입니다.

무시

escape_hatch_table_hints

WITH (...) 절을 사용하여 지정된 테이블 힌트의 동작을 제어합니다.

무시

escape_hatch_unique_constraint

엄격으로 설정하면 인덱싱된 열에서 NULL 값을 처리할 때 SQL Server와 PostgreSQL의 의미 차이가 모호한 경우 오류가 발생할 수 있습니다. 의미 차이는 비현실적인 사용 사례에서만 나타나므로 오류가 표시되지 않도록 이 이스케이프 해치를 '무시'로 설정할 수 있습니다.

strict