Administración de la gestión de errores de Babelfish con escotillas de escape - Amazon Aurora

Administración de la gestión de errores de Babelfish con escotillas de escape

Babelfish imita el comportamiento de SQL en el flujo de control y el estado de transacción siempre que sea posible. Cuando Babelfish encuentra un error, devuelve un código de error similar al código de error de SQL Server. Si Babelfish no puede asignar el error a un código de SQL Server, devuelve un código de error fijo (33557097) y realiza acciones específicas en función del tipo de error, como se indica a continuación:

  • En el caso de los errores de tiempo de compilación, Babelfish revierte la transacción.

  • En el caso de los errores de tiempo de ejecución, Babelfish finaliza el lote y revierte la transacción.

  • En el caso de los errores de protocolo entre el cliente y el servidor, la transacción no se revierte.

Si un código de error no se puede asignar a un código equivalente y el código de un error similar está disponible, el código de error se asigna al código alternativo. Por ejemplo, los comportamientos que provocan los códigos 8143 y 8144 de SQL Server se asignan a 8143.

Los errores que no se pueden asignar no respetan una construcción de TRY... CATCH.

Puede usar @@ERROR para devolver un código de error de SQL Server o la función @@PGERROR para devolver un código de error de PostgreSQL. También puede utilizar la función fn_mapped_system_error_list para devolver una lista de códigos de error asignados. Para obtener información sobre los códigos de error de PostgreSQL, consulte el sitio web de PostgreSQL.

Modificación de la configuración de escotilla de escape Babelfish

Para gestionar mejor las instrucciones que podrían producir errores, Babelfish define ciertas opciones llamadas “escotillas de escape”. Una escotilla de escape es una opción que especifica el comportamiento de Babelfish cuando encuentra una característica o sintaxis no admitidas.

Puede utilizar el procedimiento almacenado sp_babelfish_configure para controlar la configuración de una escotilla de escape. Utilice el script para establecer la escotilla de escape en ignore o strict. Si está configurado en strict, Babelfish devuelve un error que debe corregir antes de continuar.

Incluya la palabra clave server para aplicar los cambios a la sesión actual y a nivel de clúster.

El uso es como se indica a continuación:

  • Para enumerar todas las escotillas de escape y su estado, además de la información de uso, ejecute sp_babelfish_configure.

  • Para enumerar las escotillas de escape con nombre y sus valores, en la sesión actual o en todo el clúster, ejecute el comando sp_babelfish_configure 'hatch_name' en el que hatch_name es el identificador de una o más escotillas de escape. hatch_namepuede utilizar comodines de SQL, como '%'.

  • Para establecer uno o más escotillas de escape en el valor especificado, ejecute sp_babelfish_configure ['hatch_name' [, 'strict'|'ignore' [, 'server']]. Para que la configuración sea permanente a nivel de todo el clúster, incluya la palabra clave server, como se muestra a continuación:

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

    Para configurarlos solo para la sesión actual, no utilice server.

  • Para restablecer todas las escotillas de escape a sus valores predeterminados, ejecutesp_babelfish_configure 'default' (Babelfish 1.2.0 y posteriores).

La cadena que identifica la escotilla (o escotillas) podría contener comodines de SQL. Por ejemplo, a continuación, se establecen todas las escotillas de escape de sintaxis en ignore para el clúster de Aurora PostgreSQL.

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

En la tabla siguiente encontrará descripciones y valores predeterminados para las escotillas de escape predefinidas Babelfish.

Escotilla de escape Descripción Predeterminado
escape_hatch_checkpoint

Permite el uso de la instrucción CHECKPOINT en el código de procedimiento, pero la instrucción CHECKPOINT no está implementada actualmente.

ignore

escape_hatch_constraint_name_for_default

Controla el comportamiento de Babelfish relacionado con los nombres de restricciones predeterminados.

ignore

escape_hatch_database_misc_options

Controla el comportamiento de Babelfish relacionado con las siguientes opciones de CREATE o ALTER DATABASE: CONTAINMENT, DB_CHAINING, TRUSTWORTHY, PERSISTENT_LOG_BUFFER.

ignore

escape_hatch_for_replication

Controla el comportamiento de Babelfish relacionado con la cláusula [NOT] FOR REPLICATION cuando se crea o modifica una tabla.

strict

escape_hatch_fulltext

Controla el comportamiento de Babelfish relacionado con las características de FULLTEXT, como DEFAULT_FULLTEXT_LANGUAGE en CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX o sp_fulltext_database.

ignore

escape_hatch_ignore_dup_key

Controla el comportamiento de Babelfish relacionado con CREATE/ALTER TABLE y CREATE INDEX. Cuando IGNORE_DUP_KEY=ON genera un error cuando se establece enstrict (el valor predeterminado) o ignora el error cuando se establece enignore (versión de Babelfish 1.2.0 y posteriores).

strict

escape_hatch_index_clustering

Controla el comportamiento de Babelfish relacionado con las palabras clave CLUSTERED o NONCLUSTERED para índices y restricciones PRIMARY KEY o UNIQUE. Cuando se ignora CLUSTERED, el índice o la restricción se siguen creando como si se hubiera especificado NONCLUSTERED.

ignore

escape_hatch_index_columnstore

Controla el comportamiento de Babelfish relacionado con la cláusula COLUMNSTORE. Si se especifica ignore, Babelfish crea un índice de árbol B. regular.

strict

escape_hatch_join_hints

Controla el comportamiento de las palabras clave en un operador JOIN: LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE.

ignore

escape_hatch_language_non_english

Controla el comportamiento de Babelfish relacionado con idiomas distintos del inglés para los mensajes en pantalla. Babelfish actualmente solo admite us_english para mensajes en pantalla. SET LANGUAGE puede utilizar una variable que contiene el nombre del idioma, por lo que el idioma que se esté configurando solo se puede detectar en tiempo de ejecución.

strict

escape_hatch_login_hashed_password

Cuando se ignora, suprime el error de la palabra clave HASHED para CREATE LOGIN y ALTER LOGIN.

strict

escape_hatch_login_misc_options

Cuando se ignora, suprime el error de otras palabras clave además de HASHED, MUST_CHANGE, OLD_PASSWORD y UNLOCK para CREATE LOGIN y ALTER LOGIN.

strict

escape_hatch_login_old_password

Cuando se ignora, suprime el error de la palabra clave OLD_PASSWORD para CREATE LOGIN y ALTER LOGIN.

strict

escape_hatch_login_password_must_change

Cuando se ignora, suprime el error de la palabra clave MUST_CHANGE para CREATE LOGIN y ALTER LOGIN.

strict

escape_hatch_login_password_unlock

Cuando se ignora, suprime el error de la palabra clave UNLOCK para CREATE LOGIN y ALTER LOGIN.

strict

escape_hatch_nocheck_add_constraint

Controla el comportamiento de Babelfish relacionado con la cláusula WITH CHECK o NOCHECK para las restricciones.

strict

escape_hatch_nocheck_existing_constraint

Controla el comportamiento de Babelfish relacionado con las restricciones FOREIGN KEY o CHECK.

strict

escape_hatch_query_hints

Controla el comportamiento de Babelfish relacionado con sugerencias de consulta. Cuando esta opción está configurada para ignorar, el servidor ignora las sugerencias que utilizan la cláusula OPTION (...) para especificar los aspectos del procesamiento de consultas. Algunos ejemplos incluyen SELECT FROM ... OPTION(MERGE JOIN HASH, MAXRECURSION 10)).

ignore

escape_hatch_rowversion

Controla el comportamiento de los tipos de datos ROWVERSION y TIMESTAMP. Para obtener más información, consulte Uso de las características de Babelfish con implementación limitada.

strict

escape_hatch_schemabinding_function

Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER FUNCTION.

ignore

escape_hatch_schemabinding_procedure

Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER PROCEDURE.

ignore

escape_hatch_rowguidcol_column

Controla el comportamiento de Babelfish relacionado con la cláusula ROWGUIDCOL cuando se crea o modifica una tabla.

strict

escape_hatch_schemabinding_trigger

Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER TRIGGER.

ignore

escape_hatch_schemabinding_view

Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER VIEW.

ignore

escape_hatch_session_settings

Controla el comportamiento de Babelfish en relación con las instrucciones SET de nivel de sesión no admitidas.

ignore

escape_hatch_showplan_all

Controla el comportamiento de Babelfish relacionado con SET SHOWPLAN_ALL y SET STATISTICS PROFILE. Cuando se configuran en ignore, se comportan como SET BABELFISH_SHOWPLAN_ALL y SET BABELFISH_STATISTICS PROFILE; cuando se configuran en strict, se ignoran silenciosamente.

strict

escape_hatch_storage_on_partition

Controla el comportamiento de Babelfish relacionado con la cláusula ON partition_scheme column cuando se define la partición. Babelfish actualmente no implementa particiones.

strict

escape_hatch_storage_options

Escotilla de escape en cualquier opción de almacenamiento utilizada en CREATE, ALTER DATABASE, TABLE, INDEX. Esto incluye las cláusulas (LOG) ON, TEXTIMAGE_ON, FILESTREAM_ON que definen las ubicaciones de almacenamiento (particiones, grupos de archivos) para tablas, índices y restricciones, así como para una base de datos. Esta configuración de escotilla de escape se aplica a todas estas cláusulas (incluidas ON [PRIMARY] y ON "DEFAULT"). La excepción se produce cuando se especifica una partición para una tabla o índice con ON partition_scheme (columna).

ignore

escape_hatch_table_hints

Controla el comportamiento de las sugerencias de tabla especificadas mediante la cláusula WITH (...).

ignore

escape_hatch_unique_constraint

Cuando se establece en un nivel estricto, una diferencia semántica desconocida entre SQL Server y PostgreSQL en el manejo de valores NULL en columnas indexadas puede generar errores. La diferencia semántica solo surge en casos de uso poco realistas, por lo que puede configurar esta escotilla de escape para que se «ignore» y evitar ver el error.

strict