Solução de problemas¶
Este tópico fornece diretrizes para a solução de problemas com o Snowflake Native SDK for Connectors. Se você quiser descobrir a causa de um erro específico, precisará de ferramentas apropriadas que facilitem o processo de solução de problemas. Por essa razão o Snowflake Native SDK for Connectors fornece alguns procedimentos, exibições e outros métodos para solucionar problemas do conector de forma eficaz.
Respostas de procedimento¶
Normalmente, quando algo errado acontece com o conector, ou mesmo quando o usuário não consegue executar o procedimento específico com sucesso devido ao estado do conector, a primeira fonte de dados de solução de problemas deve ser a resposta do procedimento. No Snowflake Native SDK for Connectors, a resposta de erro do procedimento é padronizada. A resposta é retornada como um VARIANT
com dois campos, que estão sempre presentes:
response_code
- o valor deste campo, em caso de resposta de erro, é um código de erro, por exemploINVALID_CONNECTOR_STATUS
message
- o valor deste campo é uma mensagem que fornece mais informações sobre o erro ocorrido
Estrutura de uma resposta de erro:
{ "response_code": "<ERROR_CODE>", "message": "<error message>" }
Objetos de banco de dados¶
O Snowflake Native SDK for Connectors fornece algumas exibições e procedimentos que ajudam a verificar o estado real do conector.
Exibições:
PUBLIC.CONNECTOR_CONFIGURATION
(consulte Referência de configurações de conexão)PUBLIC.SYNC_STATUS
(consulte Referência do status de sincronização)PUBLIC.CONNECTOR_STATS
(consulte Referência de estatísticas do conector)PUBLIC.AGGREGATED_CONNECTOR_STATS
(consulte Referência de estatísticas do conector)
Procedimentos:
PUBLIC.GET_CONNECTOR_STATUS()
(consulte Referência de SQL essencial)PUBLIC.GET_CONNECTION_CONFIGURATION()
(consulte Referência de configurações de conexão)
Tabela de eventos¶
Por padrão, os procedimentos fornecidos pelo SDK que são implementados em Java usam ConnectorErrorHelper
para encapsular exceções lançadas durante a execução de um procedimento específico. Além de encapsular a exceção lançada e mapeá-la para ConnectorResponse
com um código de erro, a implementação padrão de ConnectorErrorHelper
registra eventos com base nas exceções geradas na Tabela de Eventos, se ela estiver configurada na conta do cliente. Se você quiser saber mais sobre o uso da Tabela de eventos, consulte Registro, rastreamento e métricas.
Existe a possibilidade de filtrar os logs gerados pelo Snowflake Native SDK for Connectors da tabela de eventos conhecendo apenas o nome da instância do aplicativo. Além disso, também existe a possibilidade de filtrar logs de erros que ocorreram nas partes mais comuns do conector.
Consulta de exemplo:
SELECT * FROM PLATFORM_CI_TOOLS.PUBLIC.EVENTS
WHERE RESOURCE_ATTRIBUTES:"snow.database.name" LIKE '<INSTANCE_NAME>'
[AND SCOPE:"name" LIKE '<ERROR_CODE>']
[ORDER BY timestamp DESC];
Possíveis códigos de erro:
CONFIGURE_CONNECTOR_FAILED
- ocorre quando a etapa de configuração do conector do assistente falhouSET_CONNECTION_CONFIGURATION_FAILED
- ocorre quando a etapa de definição de configuração da conexão do assistente falhouFINALIZE_CONNECTOR_CONFIGURATION_FAILED
- ocorre quando a etapa de finalização de configuração do conector do assistente falhouPAUSE_CONNECTOR_FAILED
- ocorre quando o processo de pausa do conector falhouRESUME_CONNECTOR_FAILED
- ocorre quando o processo de retomada do conector falhou
Recuperação do estado do conector¶
Se ocorrer um erro não detectado durante a pausa ou a retomada do processo, o que faz com que o conector não reverta o processo e falhe inesperadamente, um status do conector ERROR
poderá ser definido. Além disso, se por algum motivo esses processos forem encerrados repentinamente, o conector poderá ficar «preso» em um status de conector STARTING
ou PAUSING
.
Esses problemas devem ser diagnosticados usando os métodos mencionados acima e deve-se tentar fazer um reparo adequado. Em muitos casos, pode ser necessária uma reinstalação completa do conector, mas se o reparo foi bem-sucedido e o único problema restante é o status do conector «preso», há algumas soluções possíveis:
Se o conector estiver «preso» no status
STARTING
, outra chamada do procedimentoPUBLIC.RESUME_CONNECTOR()
poderá corrigir o problema de statusSe o conector estiver «preso» no status
PAUSING
, outra chamada do procedimentoPUBLIC.PAUSE_CONNECTOR()
poderá corrigir o problema de statusSe os métodos mencionados anteriormente falharem, ou se o conector estiver no status
ERROR
, o procedimentoPUBLIC.RECOVER_CONNECTOR_STATE(STRING)
poderá ser usado para forçar a mudança de status (consulte Referência de SQL essencial). É recomendável forçar a alteração para o statusPAUSED
e tentar reiniciar o conector usando o procedimentoPUBLIC.RESUME_CONNECTOR()