Pessoal, conseguem me auxiliar referente a este erro quando tento realizar um dbt debug em um projeto criado como uv.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.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/python-brasil/CANy812Brhjn7Vn82CBua7dL%2BAVT9Te29oppP4mxusdMdLLTJvQ%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/python-brasil/CAOdJJ2dAACED2PAFMKa85hoc_nMJYPkLawgBtzrSQ1nT24tLhQ%40mail.gmail.com.
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?python-oracledb (Driver de Conexão): O dbt-oracle utiliza a biblioteca python-oracledb para se comunicar com o seu banco de dados Oracle.
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.
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.
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 ClientVocê precisa baixar e disponibilizar as bibliotecas do Oracle Instant Client para a sua máquina.
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.
Página de Downloads: Oracle Instant Client Downloads
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.
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: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.
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.
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
).
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.
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.
Atualize sua aplicação: Após executar o comando, atualize sua aplicação Python com a nova senha.
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.
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.
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()
:
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 ^^.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/python-brasil/CAEzgTQzrwFCEBeu0_F%2B8oVtU67dukufCz0tze%2BowPEFu%2BUT1ug%40mail.gmail.com.