管理 Babelfish 错误处理 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

管理 Babelfish 错误处理

在可能的情况下,Babelfish 会在控制流和事务状态方面模仿 SQL 行为。如果 Babelfish 遇到错误,在可能的情况下,它会返回与 SQL Server 错误代码类似的错误代码。如果 Babelfish 无法映射错误,它会返回一个固定的错误代码 (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 存储过程来控制转义孵化的设置。使用脚本将转义孵化设置为 ignorestrict。如果设置为 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 关键字。要仅为当前会话设置它们,请不要使用 server

标识孵化(或多个孵化)的字符串可能包含 SQL 通配符。例如,以下选项为 Aurora PostgreSQL 集群将所有语法转义孵化设置为 ignore

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

Babelfish 预定义的转义孵化如下。

转义孵化 描述 默认值
escape_hatch_storage_options

对 CREATE、ALTER DATABASE、TABLE、INDEX 中使用的任何存储选项的转义孵化。这包括为表、索引和约束以及为数据库定义存储位置(分区、文件组)的子句 (LOG) ON、TEXTIMAGE_ON、FILESTREAM_ON。此转义孵化设置适用于所有这些子句(包括 ON [PRIMARY] 和 ON“DEFAULT”)。例外情况是,使用 ON partition_scheme(列)为表或索引指定分区时。

ignore

escape_hatch_storage_on_partition

在定义分区时控制与 ON partition_scheme column 子句相关的 Babelfish 行为。Babelfish 目前没有实施分区。

严格

escape_hatch_database_misc_options

控制与 CREATE 或 ALTER DATABASE 上的以下选项相关的 Babelfish 行为:CONTAINMENT、DB_CHAINING、TRUSTWORTHY、PERSISTENT_LOG_BUFFER

ignore

escape_hatch_language_non_english

控制屏幕上的消息中与英语以外的语言相关的 Babelfish 行为。Babelfish 目前仅对屏幕上的消息支持 us_english。SET LANGUAGE 可能会使用包含语言名称的变量,因此只能在运行时检测到正在设置的实际语言。

严格

escape_hatch_login_hashed_password

如果被忽略,则会抑制 CREATE LOGINALTER LOGINHASHED 关键字。

严格

escape_hatch_login_misc_options

如果被忽略,则除了 HASHEDMUST_CHANGEOLD_PASSWORD 之外,还会抑制其他关键字的错误,并且还会抑制 CREATE LOGINALTER LOGINUNLOCK

严格

escape_hatch_login_old_password

如果被忽略,则会抑制 CREATE LOGINALTER LOGINOLD_PASSWORD 关键字。

严格

escape_hatch_login_password_must_change

如果被忽略,则会抑制 CREATE LOGINALTER LOGINMUST_CHANGE 关键字。

严格

escape_hatch_login_password_unlock

如果被忽略,则会抑制 CREATE LOGINALTER LOGINUNLOCK 关键字。

严格

escape_hatch_fulltext

控制与 FULLTEXT 功能相关的 Babelfish 行为,例如 CREATE/ALTER DATABASE、CREATE FULLTEXT INDEX 中的 DEFAULT_FULLTEXT_LANGUAGE 或 sp_fulltext_database。

严格

escape_hatch_schemabinding_function

控制与 WITH SCHEMABINDING 子句相关的 Babelfish 行为。预设情况下,使用 CREATE 或 ALTER FUNCTION 命令指定时,WITH SCHEMABINDING 子句将被忽略。

ignore

escape_hatch_schemabinding_procedure

控制与 WITH SCHEMABINDING 子句相关的 Babelfish 行为。预设情况下,使用 CREATE 或 ALTER PROCEDURE 命令指定时,WITH SCHEMABINDING 子句将被忽略。

ignore

escape_hatch_schemabinding_view

控制与 WITH SCHEMABINDING 子句相关的 Babelfish 行为。预设情况下,使用 CREATE 或 ALTER VIEW 命令指定时,WITH SCHEMABINDING 子句将被忽略。

ignore

escape_hatch_schemabinding_trigger

控制与 WITH SCHEMABINDING 子句相关的 Babelfish 行为。预设情况下,使用 CREATE 或 ALTER TRIGGER 命令指定时,WITH SCHEMABINDING 子句将被忽略。

ignore

escape_hatch_index_clustering

控制与索引的 CLUSTERED 或 NONCLUSTERED 关键字相关的 Babelfish 行为以及 PRIMARY KEY 或 UNIQUE 约束。如果忽略 CLUSTERED,则仍会像指定了 NONCLUSTERED 一样创建索引或约束条件。

ignore

escape_hatch_index_columnstore

控制与 COLUMNSTORE 子句相关的 Babelfish 行为。如果您指定 ignore,Babelfish 会创建一个常规的 B 树索引。

严格

escape_hatch_for_replication

控制创建或更改表时与 [NOT] FOR REPLICATION 子句相关的 Babelfish 行为。

严格

escape_hatch_for_replication

控制创建或更改过程时与 [NOT] FOR REPLICATION 子句相关的 Babelfish 行为。

严格

escape_hatch_rowguidcol_column

控制创建或更改表时与 ROWGUIDCOL 子句相关的 Babelfish 行为。

严格

escape_hatch_nocheck_add_constraint

控制与 WITH CHECK 或 NOCHECK 子句相关的 Babelfish 行为以获取约束条件。

严格

escape_hatch_nocheck_existing_constraint

控制与 FOREIGN KEY 或 CHECK 约束相关的 Babelfish 行为。

严格

escape_hatch_constraint_name_for_default

控制与原定设置约束名称相关的 Babelfish 行为。

ignore

escape_hatch_table_hints

控制使用 WITH (...) 子句指定的表提示的行为。

ignore

escape_hatch_query_hints

控制与查询提示相关的 Babelfish 行为。当此选项设置为忽略时,服务器将忽略使用 OPTION (...) 子句指定查询处理方面的提示。示例包括 SELECT FROM ... OPTION(MERGE JOIN HASH, MAXRECURSION 10))。

ignore

escape_hatch_join_hints

控制 JOIN 运算符中关键字的行为:LOOP、HASH、MERGE、REMOTE、REDUCE、REDISTRIBUTE、REPLICATE。

ignore

escape_hatch_session_settings

控制 Babelfish 针对不受支持的会话级别 SET 语句的行为。

ignore

escape_hatch_unique_constraint

控制 Babelfish 针对不受支持的会话级别 SET 语句的行为。

严格