이스케이프 해치를 사용하여 Babelfish 오류 처리 관리
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 웹 사이트
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 사전 정의된 이스케이프 해치에 대한 설명과 기본값을 확인할 수 있습니다.
이스케이프 해치 | 설명 | Default |
---|---|---|
escape_hatch_checkpoint |
절차 코드에서 CHECKPOINT 문을 사용할 수 있지만 CHECKPOINT 문은 현재 구현되지 않았습니다. |
무시 |
escape_hatch_constraint_name_for_default |
기본 제약 조건 이름과 관련된 Babelfish 동작을 제어합니다. |
무시 |
escape_hatch_database_misc_options |
CREATE 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 |
escape_hatch_index_clustering |
인덱스 및 PRIMARY KEY 또는 UNIQUE 제약 조건에 대한 CLUSTERED 또는 NONCLUSTERED 키워드와 관련된 Babelfish 동작을 제어합니다. 클러스터링이 무시되면 NONCLUSTERED가 지정된 것처럼 인덱스 또는 제약 조건이 계속 만들어집니다. |
무시 |
escape_hatch_index_columnstore |
COLUMNSTORE 절과 관련된 Babelfish 동작을 제어합니다. |
strict |
escape_hatch_join_hints |
LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE 등 JOIN 연산자의 키워드 동작을 제어합니다. |
무시 |
escape_hatch_language_non_english |
화면 메시지에 대해 영어 이외의 언어와 관련된 Babelfish 동작을 제어합니다. Babelfish는 현재 화면 메시지에 대해 |
strict |
escape_hatch_login_hashed_password |
무시하면 |
strict |
escape_hatch_login_misc_options |
무시하면 |
strict |
escape_hatch_login_old_password |
무시하면 |
strict |
escape_hatch_login_password_must_change |
무시하면 |
strict |
escape_hatch_login_password_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 |
파티셔닝을 정의하는 경우 |
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의 의미 차이가 모호한 경우 오류가 발생할 수 있습니다. 의미 차이는 비현실적인 사용 사례에서만 나타나므로 오류가 표시되지 않도록 이 이스케이프 해치를 '무시'로 설정할 수 있습니다. 다음 버전에서 더 이상 사용되지 않음: 3.6.0 이상 버전, 4.2.0 이상 버전 |
strict |