Gerenciar o tratamento de erros do Babelfish com hatches de escape - Amazon Aurora

Gerenciar o tratamento de erros do Babelfish com hatches de escape

O Babelfish imita o comportamento do SQL para fluxo de controle e estado de transações sempre que possível. Quando o Babelfish encontra um erro, ele retorna um código de erro semelhante ao código de erro do SQL Server. Se o Babelfish não conseguir mapear o erro para um código do SQL Server, ele retornará um código de erro fixo (33557097) e realizará ações específicas com base no tipo de erro, da seguinte forma:

  • Se for um erro de tempo de compilação, o Babelfish reverterá a transação.

  • No caso de erros de tempo de execução, o Babelfish encerrará o lote e reverterá a transação.

  • Para um erro de protocolo entre o cliente e o servidor, a transação não será revertida.

Se um código de erro não puder ser mapeado para um código equivalente, e o código de um erro semelhante estiver disponível, o código do erro será mapeado para esse código alternativo. Por exemplo, os comportamentos que causam os códigos 8143 e 8144 do SQL Server são ambos mapeados para 8143.

Erros que não podem ser mapeados não respeitam uma construção TRY... CATCH.

Você pode usar @@ERROR para retornar um código de erro do SQL Server ou a função @@PGERROR para retornar um código de erro do PostgreSQL. Também pode utilizar a função fn_mapped_system_error_list para retornar uma lista de códigos de erro mapeados. Para obter informações sobre códigos de erro do PostgreSQL, consulte o site do PostgreSQL.

Modificar as configurações do hatch de escape do Babelfish

Para lidar com instruções que podem falhar, o Babelfish define certas opções denominadas hatches de escape. Um hatch de escape é uma opção que especifica o comportamento do Babelfish quando ele se depara com um recurso ou uma sintaxe sem suporte.

Você pode utilizar o procedimento armazenado sp_babelfish_configure para controlar as configurações de um hatch de escape. Use o script para definir o hatch de escape como ignore ou strict. Se estiver definido como strict, o Babelfish retornará um erro que você precisará corrigir antes de continuar.

Para aplicar as alterações à sessão atual e no nível do cluster, inclua a palavra-chave server.

O uso é o seguinte:

  • Para listar todos os hatches de escape e seu status, além de informações de uso, execute sp_babelfish_configure.

  • Para listar os hatches de escape nomeados e seus valores, seja para a sessão atual ou em todo o cluster, execute o comando sp_babelfish_configure 'hatch_name', em que hatch_name é o identificador de um ou mais hatches de escape. hatch_name pode utilizar curingas SQL, como "%".

  • Para definir um ou mais hatches de escape para o valor especificado, execute sp_babelfish_configure ['hatch_name' [, 'strict'|'ignore' [, 'server']]. Para tornar as configurações permanentes em todo o cluster, inclua a palavra-chave server, conforme mostrado a seguir:

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

    Para configurá-las apenas para a sessão atual, não use server.

  • Para redefinir todos os hatches de escape para seus valores padrão, execute sp_babelfish_configure 'default' (Babelfish 1.2.0 e posterior).

A string que identifica o hatch (ou os hatches) pode conter curingas SQL. Por exemplo, o seguinte define todos os hatches de escape de sintaxe como ignore para o cluster do Aurora PostgreSQL.

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

Na tabela a seguir, você pode encontrar descrições e valores padrão para os hatches de escape predefinidos do Babelfish.

Hatch de escape Descrição Padrão
escape_hatch_checkpoint

Permite o uso da instrução CHECKPOINT no código processual, mas a instrução CHECKPOINT não está implementada no momento.

ignorar

escape_hatch_constraint_name_for_default

Controla o comportamento do Babelfish relacionado a nomes de restrições padrão.

ignorar

escape_hatch_database_misc_options

Controla o comportamento do Babelfish relacionado às seguintes opções em CREATE ou ALTER DATABASE: CONTAINMENT, DB_CHAINING, TRUSTWORTHY, PERSISTENT_LOG_BUFFER.

ignorar

escape_hatch_for_replication

Controla o comportamento do Babelfish relacionado à cláusula [NOT] FOR REPLICATION ao criar ou modificar uma tabela.

strict

escape_hatch_fulltext

Controla o comportamento do Babelfish relacionado a recursos FULLTEXT, como DEFAULT_FULLTEXT_LANGUAGE in CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX ou sp_fulltext_database.

ignorar

escape_hatch_ignore_dup_key

Controla o comportamento do Babelfish relacionado a CREATE/ALTER TABLE e CREATE INDEX. Quando IGNORE_DUP_KEY=ON, é gerado um erro quando definido como strict (o padrão) ou o erro é ignorado quando definido como ignore (Babelfish versão 1.2.0 e posterior).

strict

escape_hatch_index_clustering

Controla o comportamento do Babelfish relacionado às palavras-chave CLUSTERED ou NONCLUSTERED para índices e restrições PRIMARY KEY ou UNIQUE. Quando CLUSTERED é ignorado, o índice ou a restrição ainda é criado como se NONCLUSTERED tivesse sido especificada.

ignorar

escape_hatch_index_columnstore

Controla o comportamento do Babelfish relacionado à cláusula COLUMNSTORE. Se você especificar ignore, o Babelfish criará um índice normal de árvore B.

strict

escape_hatch_join_hints

Controla o comportamento de palavras-chave em um operador JOIN: LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE.

ignorar

escape_hatch_language_non_english

Controla o comportamento do Babelfish relacionado a idiomas diferentes do inglês para mensagens na tela. No momento, o Babelfish oferece suporte apenas a us_english para mensagens na tela. SET LANGUAGE pode utilizar uma variável contendo o nome do idioma e, portanto, o idioma real que está sendo definido apenas pode ser detectado em tempo de execução.

strict

escape_hatch_login_hashed_password

Quando ignorada, suprime o erro para a palavra-chave HASHED para CREATE LOGIN e ALTER LOGIN.

strict

escape_hatch_login_misc_options

Quando ignorada, suprime o erro para outras palavras-chave além de HASHED, MUST_CHANGE, OLD_PASSWORD e UNLOCKpara CREATE LOGIN e ALTER LOGIN.

strict

escape_hatch_login_old_password

Quando ignorada, suprime o erro para a palavra-chave OLD_PASSWORD para CREATE LOGIN e ALTER LOGIN.

strict

escape_hatch_login_password_must_change

Quando ignorada, suprime o erro para a palavra-chave MUST_CHANGE para CREATE LOGIN e ALTER LOGIN.

strict

escape_hatch_login_password_unlock

Quando ignorada, suprime o erro para a palavra-chave UNLOCK para CREATE LOGIN e ALTER LOGIN.

strict

escape_hatch_nocheck_add_constraint

Controla o comportamento do Babelfish relacionado à cláusula WITH CHECK ou NOCHECK para restrições.

strict

escape_hatch_nocheck_existing_constraint

Controla o comportamento do Babelfish relacionado a restrições FOREIGN KEY ou CHECK.

strict

escape_hatch_query_hints

Controla o comportamento do Babelfish relacionado a dicas de consultas. Quando essa opção é definida como ignore, o servidor ignora as dicas que usam a cláusula OPTION (...) para especificar aspectos de processamento de consultas. Exemplos incluem SELECT FROM... OPTION(MERGE JOIN HASH, MAXRECURSION 10)).

ignorar

escape_hatch_rowversion

Controla o comportamento dos tipos de dados ROWVERSION e TIMESTAMP. Para ter mais informações, consulte Usar recursos do Babelfish com implementação limitada.

strict

escape_hatch_schemabinding_function

Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER FUNCTION.

ignorar

escape_hatch_schemabinding_procedure

Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER PROCEDURE.

ignorar

escape_hatch_rowguidcol_column

Controla o comportamento do Babelfish relacionado à cláusula ROWGUIDCOL ao criar ou modificar uma tabela.

strict

escape_hatch_schemabinding_trigger

Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER TRIGGER.

ignorar

escape_hatch_schemabinding_view

Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER VIEW.

ignorar

escape_hatch_session_settings

Controla o comportamento do Babelfish em relação a instruções SET em nível de sessão incompatíveis.

ignorar

escape_hatch_showplan_all

Controla o comportamento do Babelfish com relação a SET SHOWPLAN_ALL e SET STATISTICS PROFILE. Quando definidos para serem ignorados, eles se comportam como SET BABELFISH_SHOWPLAN_ALL e SET BABELFISH_STATISTICS PROFILE; quando definidos para serem estritos, são ignorados silenciosamente.

strict

escape_hatch_storage_on_partition

Controla o comportamento do Babelfish relacionado à cláusula ON partition_scheme column ao definir o particionamento. Atualmente, o Babelfish não implementa particionamento.

strict

escape_hatch_storage_options

Hatch de escape em qualquer opção de armazenamento utilizada em CREATE, ALTER DATABASE, TABLE, INDEX. Isso inclui cláusulas (LOG) ON, TEXTIMAGE_ON e FILESTREAM_ON que definem locais de armazenamento (partições e grupos de arquivos) para tabelas, índices e restrições e também para um banco de dados. Essa configuração de hatch de escape aplica-se a todas essas cláusulas (incluindo ON [PRIMARY] e ON “DEFAULT”). A exceção é quando uma partição é especificada para uma tabela ou um índice com ON partition_scheme (coluna).

ignorar

escape_hatch_table_hints

Controla o comportamento de dicas de tabelas especificadas utilizando a cláusula WITH (...).

ignorar

escape_hatch_unique_constraint

Quando definido como estrito, uma diferença semântica obscura entre o SQL Server e o PostgreSQL no tratamento de valores NULL em colunas indexadas pode gerar erros. A diferença semântica só surge em casos de uso não realistas, para que você possa definir esse hatch de escape como “ignorar” para evitar ver o erro.

strict