DBT debug modo Thin

60 views
Skip to first unread message

Wanheda

unread,
Jul 10, 2025, 5:31:32 AMJul 10
to Python Brasil
Pessoal, conseguem me auxiliar referente a este erro quando tento realizar um dbt debug em um projeto criado como uv.Dbtdebug.png
Tentei alterar para o modo Thick, mas sem sucesso

Alexandre Lambertini

unread,
Jul 10, 2025, 12:43:20 PMJul 10
to python...@googlegroups.com
Fala Wanheda tudo bem ? Não consigo te auxiliar nessa dúvida pois nunca mexi com o banco oracle, 
Porém posso te ajudar te indicando um grupo no telegram que é muito ativo, aqui é meio parado pelo que eu vejo.

Se quiser aparece https://t.me/pythonbr

Espero ter ajudado

Em qui., 10 de jul. de 2025 às 06:31, Wanheda <vanderlu...@gmail.com> escreveu:
Pessoal, conseguem me auxiliar referente a este erro quando tento realizar um dbt debug em um projeto criado como uv.Dbtdebug.png
Tentei alterar para o modo Thick, mas sem sucesso

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/python-brasil/fece8a98-177e-420d-a9a4-2054050d71c3n%40googlegroups.com.


--
Alexandre Lambertini
Arts Designer and Founder: Drupal br.
http://lambertini.com.br
http://lambertini.com.br/blog


Rodrigo Ferreira de Souza

unread,
Aug 7, 2025, 7:24:04 PMAug 7
to python-brasil
Salve,

Sinceramente é a primeira vez que ouço falar de DBT..

Mas fiquei curioso, pra que serve?

Atenciosamente,
Rodrigo Ferreira de Souza

python -c "n='H+6(13+zT5((51(9z65zG+% 9';s=len(n)-1;i=list(range(s+1))[::-1]+list(range(1,s+1));print('\n'.join([' '.join([chr(154-ord(n[(x if x > y else y)])) for y in i]) for x in i]))"


Marcos Thomaz

unread,
Aug 7, 2025, 8:47:11 PMAug 7
to python...@googlegroups.com
Na mensagem de erro diz que o tipo de autenticação não é suportado no modo thin. Acho que vale a pena dar uma olhada na URL sugerida. Esse erro parece ser o mesmo que ocorre quando tenta conectar em um banco MySQL ou PostgreSQL mais recente (sem mudar as configurações default) com versões mais antigas do Python (o algoritmo de criptografia é diferente,e a autenticação não funciona). 



--


Marcos Thomaz da Silva
Analista de Tecnologia da Informação

DANIEL LINHARES

unread,
Aug 14, 2025, 7:57:14 AMAug 14
to Python Brasil

O erro que você está vendo, DPY-3015: password verifier type 0x939 is not supported by python-oracledb in thin mode, é bastante específico e comum ao conectar-se a versões mais recentes de bancos de dados Oracle.

Vamos detalhar o que está acontecendo e como corrigir.

O Que Significa o Erro?

  1. python-oracledb (Driver de Conexão): O dbt-oracle utiliza a biblioteca python-oracledb para se comunicar com o seu banco de dados Oracle.

  2. thin mode vs thick mode: Esta biblioteca pode operar em dois modos:

    • Thin Mode (Padrão): É um modo "puro" em Python, que não requer a instalação de nenhum software cliente da Oracle na sua máquina. É mais simples de configurar, mas não suporta todos os recursos do Oracle.

    • Thick Mode: Este modo utiliza as bibliotecas do Oracle Instant Client. Ele é mais poderoso e compatível com mais funcionalidades, incluindo os métodos de autenticação mais recentes e seguros do Oracle.

  3. password verifier type 0x939: O seu banco de dados Oracle está configurado para usar um tipo de verificação de senha (associado ao Oracle Database 12c e versões posteriores) que não é compatível com o Thin Mode do driver.

Resumindo: O driver de conexão, em seu modo padrão, não consegue entender o tipo de senha que seu banco de dados está usando.


Como Corrigir (Solução Recomendada)

A solução mais direta e recomendada é configurar o dbt para usar o Thick Mode. Isso envolve dois passos:

Passo 1: Instalar o Oracle Instant Client

Você precisa baixar e disponibilizar as bibliotecas do Oracle Instant Client para a sua máquina.

  1. Download: Baixe o pacote "Basic" ou "Basic Light" do Oracle Instant Client. Certifique-se de que a arquitetura (64-bit ou 32-bit) é a mesma da sua instalação do Python.

  2. Instalação/Configuração:

    • Descompacte o arquivo baixado em um diretório permanente na sua máquina (por exemplo, C:\oracle\instantclient_21_13 no Windows ou /opt/oracle/instantclient_21_13 no Linux/macOS).

    • Importante: Adicione o caminho deste diretório à sua variável de ambiente PATH. Isso permite que o dbt e o Python encontrem os arquivos necessários.

Passo 2: Habilitar o Thick Mode no profiles.yml

Agora, você precisa instruir o dbt para usar o modo que acabamos de configurar.

Abra o seu arquivo profiles.yml (localizado geralmente em ~/.dbt/) e adicione a linha driver_mode: 'Thick' na configuração do seu target.

O seu perfil deve ficar parecido com este exemplo:

seu_projeto_dbt:
  target: dev
  outputs:
    dev:
      type: oracle
      # ... suas outras configurações como user, password, host, etc.
      user: T1...
      password: "{{ env_var('DBT_PASSWORD') }}" # ou sua senha diretamente
      host: oracledb...
      port: 1521
      service: PRD
     
      # --- ADICIONE ESTA LINHA ---
      driver_mode: 'Thick'
      # ---------------------------

      threads: 4
      # ... outras configurações




Se encontrar algum problema, a causa mais comum é o dbt não conseguir encontrar as bibliotecas do Instant Client. Verifique se o caminho na variável PATH está correto e reinicie o seu terminal ou editor de código para que ele reconheça a nova variável de ambiente.

Jhonatan Piffer Siqueira

unread,
Aug 14, 2025, 7:57:17 AMAug 14
to python...@googlegroups.com

Bom dia vanderluce,
Para corrigir o erro DPY-3015: password verifier Type 0X939 is not supported by python-oracledb in thin mode, você precisa configurar o banco de dados Oracle para usar um verificador de senha compatível.

O erro indica que o tipo de verificador de senha 0X939 (que corresponde ao verificador SHA-256) não é suportado pelo python-oracledb quando ele roda em modo fino (thin mode). Isso acontece porque o modo fino é uma implementação pura em Python e não usa as bibliotecas do Oracle Client, que seriam responsáveis por lidar com esses verificadores.


Solução: Atualizar o Verificador de Senha

A solução mais comum é alterar o verificador de senha do usuário para um tipo suportado pelo modo fino, como os verificadores 11G ou 12C. Você pode fazer isso alterando o usuário no banco de dados Oracle.

  1. Conecte-se ao Banco de Dados: Faça login no seu banco de dados Oracle como um usuário com privilégios de ALTER USER (por exemplo, SYS ou SYSTEM).

  2. Execute o comando ALTER USER: Use o seguinte comando SQL para alterar a senha do usuário. Isso irá gerar um novo verificador compatível.

    SQL
    ALTER USER seu_usuario IDENTIFIED BY sua_nova_senha;
    

    Observação: Você precisa usar uma nova senha, pois apenas re-inserir a senha antiga não irá regenerar o verificador.

  3. Atualize sua aplicação: Após executar o comando, atualize sua aplicação Python com a nova senha.


Alternativa: Usar o Modo Espesso (Thick Mode)

Se você não pode alterar o verificador de senha no banco de dados, a alternativa é mudar sua aplicação Python para usar o modo espesso (thick mode). O modo espesso utiliza as bibliotecas do Oracle Client, que suportam o verificador SHA-256.

  1. Instale o Oracle Instant Client: Baixe e instale o Oracle Instant Client para seu sistema operacional. Certifique-se de que a versão é compatível com seu Oracle Database.

  2. Inicialize o Modo Espesso: No seu script Python, você deve inicializar o modo espesso antes de qualquer tentativa de conexão. Você pode fazer isso chamando oracledb.init_oracle_client():

    Python
    import oracledb
    
    # Inicializa o modo espesso
    # Forneça o caminho para o Instant Client se ele não estiver no PATH do sistema
    # oracledb.init_oracle_client(lib_dir="/caminho/para/instantclient")
    oracledb.init_oracle_client()
    
    # Agora você pode criar a conexão
    connection = oracledb.connect(user="seu_usuario", password="sua_senha", dsn="seu_dsn")
    

    O uso do modo espesso adiciona uma dependência externa (o Oracle Client), mas resolve o problema de compatibilidade do verificador sem exigir alterações no banco de dados.

    By gemini ^^. 

Jhonatan Piffer Siqueira
Cursou Bacharelado em Ciência da Computação na
Universidade Federal Do Paraná


Reply all
Reply to author
Forward
0 new messages