本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用逃生艙管理 Babelfish 錯誤處理
Babelfish 會盡可能模擬控制流程和交易狀態SQL的行為。當 Babelfish 遇到錯誤時,會傳回類似於SQL伺服器錯誤碼的錯誤碼。如果 Babelfish 無法將錯誤對應至SQL伺服器程式碼,它會傳回固定錯誤碼 (33557097
),並根據錯誤類型採取特定動作,如下所示:
-
針對編譯階段錯誤,Babelfish 會回復交易。
-
針對執行階段錯誤,Babelfish 會結束批次並回復交易。
-
對於用戶端和伺服器之間的通訊協定錯誤,不會回復交易。
如果錯誤代碼無法映射至同等代碼,但類似錯誤有可用代碼,則錯誤代碼會映射至替代碼。例如,導致SQL伺服器代碼 8143
和 8144
的行為都對應到 8143
。
無法映射的錯誤不遵守 TRY... CATCH
建構。
您可以使用 @@ERROR
傳回SQL伺服器錯誤碼,或使用 @@PGERROR
函數傳回 PostgreSQL 錯誤碼。您也可以使用 fn_mapped_system_error_list
函數來傳回映射的錯誤代碼清單。如需 PostgreSQL 錯誤代碼的詳細資訊,請參閱 PostgreSQL 網站
修改 Babelfish 逃生艙設定
為了處理可能失敗的陳述式,Babelfish 定義幾個稱為逃生艙的選項。逃生艙選項指定 Babelfish 遇到不支援的功能或語法時採取的行為。
您可以使用 sp_babelfish_configure
預存程序來控制逃生艙的設定。使用指令碼將逃生艙設定為 ignore
或 strict
。如果設定為 strict
,Babelfish 會傳回錯誤,您必須更正才能繼續。
將變更套用至目前工作階段和叢集層級,包括 server
關鍵字。
用法如下:
若要列出所有逃生艙及狀態,還有使用資訊,請執行
sp_babelfish_configure
。若要列出具名逃生艙及其值,請針對目前工作階段或整個叢集執行 命令,
sp_babelfish_configure '
其中hatch_name
'
是一或多個逃生艙的識別符。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萬用字元。例如,以下會將 ignore
Aurora PostgreSQL 叢集的所有語法逸出艙組設為 。
EXECUTE sp_babelfish_configure '%', 'ignore', 'server'
在下表中,您可以找到 Babelfish 預先定義逃生艙的說明和預設值。
逃生艙 | 描述 | 預設 |
---|---|---|
escape_hatch_checkpoint |
允許在程序程式碼中使用 CHECKPOINT 陳述式,但目前未實作 CHECKPOINT陳述式。 |
ignore |
escape_hatch_constraint_name_for_default |
控制預設限制條件名稱相關的 Babelfish 行為。 |
ignore |
escape_hatch_database_misc_options |
在 上控制與下列選項相關的 Babelfish CREATE 行為DATABASE:CONTAINMENT、DB_CHAINING、TRUSTWORTHY、PERSISTENT_LOG_BUFFER。 |
ignore |
escape_hatch_for_replication |
在建立或修改資料表時,控制與 【NOT】 FORREPLICATION子句相關的 Babelfish 行為。 |
strict |
escape_hatch_fulltext |
控制與FULLTEXT功能相關的 Babelfish 行為,例如 CREATE/ALTER LANGUAGEDATABASE、 CREATE FULLTEXT INDEX或 sp_fulltext_database DEFAULTFULLTEXT中的 __。 |
ignore |
escape_hatch_ignore_dup_key |
控制與 CREATE/ALTER TABLE和 相關的 Babelfish CREATE 行為INDEX。當 IGNORE_DUP_KEY=ON 時, 會在設定為 |
strict |
escape_hatch_index_clustering |
控制與索引和 CLUSTERED或 UNIQUE限制條件的 PRIMARYKEY或 NONCLUSTERED關鍵字相關的 Babelfish 行為。忽略 CLUSTERED 時,仍會像NONCLUSTERED指定一樣建立索引或限制條件。 |
ignore |
escape_hatch_index_columnstore |
控制與 COLUMNSTORE子句相關的 Babelfish 行為。如果指定 |
strict |
escape_hatch_join_hints |
控制JOIN運算子中關鍵字的行為:LOOP、HASH、MERGE、REMOTE、REDUCE、REDISTRIBUTE、、REPLICATE。 |
ignore |
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 |
控制與 WITHCHECK或 NOCHECK子句相關的 Babelfish 行為,以因應限制。 |
strict |
escape_hatch_nocheck_existing_constraint |
控制與 FOREIGNKEY或 CHECK限制相關的 Babelfish 行為。 |
strict |
escape_hatch_query_hints |
控制查詢提示相關的 Babelfish 行為。當此選項設定為忽略時,伺服器會忽略使用 OPTION(...) 子句來指定查詢處理層面的提示。範例包括 SELECT FROM ... OPTION(MERGE JOIN HASH, MAXRECURSION 10))。 |
ignore |
escape_hatch_rowversion |
控制 ROWVERSION和 TIMESTAMP資料類型的行為。如需使用方式的資訊,請參閱 使用具有限制實作的 Babelfish 功能。 |
strict |
escape_hatch_schemabinding_function |
控制與 WITHSCHEMABINDING子句相關的 Babelfish 行為。根據預設,使用 CREATE或 ALTERFUNCTION命令指定時,會忽略 WITHSCHEMABINDING子句。 |
ignore |
escape_hatch_schemabinding_procedure |
控制與 WITHSCHEMABINDING子句相關的 Babelfish 行為。根據預設,使用 CREATE或 ALTERPROCEDURE命令指定時,會忽略 WITHSCHEMABINDING子句。 |
ignore |
escape_hatch_rowguidcol_column |
在建立或修改資料表時,控制與ROWGUIDCOL子句相關的 Babelfish 行為。 |
strict |
escape_hatch_schemabinding_trigger |
控制與 WITHSCHEMABINDING子句相關的 Babelfish 行為。根據預設,使用 CREATE或 ALTERTRIGGER命令指定時,會忽略 WITHSCHEMABINDING子句。 |
ignore |
escape_hatch_schemabinding_view |
控制與 WITHSCHEMABINDING子句相關的 Babelfish 行為。根據預設,使用 CREATE或 ALTERVIEW命令指定時,會忽略 WITHSCHEMABINDING子句。 |
ignore |
escape_hatch_session_settings |
控制 Babelfish 對不支援工作階段層級SET陳述式的行為。 |
ignore |
escape_hatch_showplan_all |
控制與 SHOWPLAN_ SET ALL 和 相關的 Babelfish SET STATISTICS 行為PROFILE。當設定為忽略時,它們的行為類似於 SET BABELFISH_SHOWPLAN_ALL SET 和 BABELFISH_STATISTICS PROFILE;當設定為嚴格時,它們會被無提示忽略。 |
strict |
escape_hatch_storage_on_partition |
定義分割時控制 |
strict |
escape_hatch_storage_options |
在 CREATE、、DATABASE、 ALTER 中使用的任何儲存選項上逸出雜湊TABLEINDEX。這包括子句 (LOG) ON、TEXTIMAGE_ON、FILESTREAM_ON,定義資料表、索引和限制條件以及資料庫的儲存位置 (分割區、檔案群組)。此逸出雜湊設定適用於所有這些子句 (包括 ON 【PRIMARY】 和 ON "DEFAULT")。但以 ON partition_scheme (column) 指定資料表或索引的分割區時例外。 |
ignore |
escape_hatch_table_hints |
控制使用 WITH(...) 子句指定的資料表提示行為。 |
ignore |
escape_hatch_unique_constraint |
設為嚴格時,SQL伺服器和 PostgreSQL 在處理索引資料欄上的NULL值時,可能會產生錯誤。語義差異只會出現於不切實際的使用案例中,因此您可將此轉義剖面設定為「忽略」以避免看到錯誤。 從下列版本取代:3.6.0 和更高版本、4.2.0 和更高版本 |
strict |