Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Banco de Dados SQL no Microsoft Fabric
Use este artigo para identificar a fase de falha de uma operação OLE DB, escolher a próxima verificação e encontrar instruções detalhadas de solução de problemas. A orientação utiliza o provedor atual, MSOLEDBSQL19. Para defeitos específicos de lançamento e mudanças de atualização, veja Problemas conhecidos e Diferenças principais de versão.
Identifique o sintoma
Capture a descrição completa do erro e todos os registros de erro disponíveis antes de alterar as configurações. Um nível HRESULTsuperior , como DB_E_ERRORSOCCURRED, não identifica a causa sozinha. Registre se a falha ocorre ao carregar o provedor, abrir uma conexão, executar um comando, buscar dados ou comprometer uma transação.
| Sintoma | Comece por aqui |
|---|---|
| O provedor não pode ser encontrado, ou a classe não está registrada. | Registro de provedores e arquitetura |
| O login falha, o acesso é negado ou a autenticação integrada falha. | Falhas de login e autenticação |
| A cadeia de certificados não é confiável ou o nome do certificado não corresponde. | Falhas no certificado TLS |
| Servidor ou instância não podem ser encontrados, ou a conexão é recusada. | Falhas de descoberta de rede e instâncias |
| Parâmetros falham, valores são truncados ou dados não podem ser convertidos. | Erros de parâmetros e conversão de dados |
| A conexão cai, a recuperação falha ou ocorre um timeout. | Perda de conexão e tempos de espera |
| Os detalhes do erro não estão disponíveis, ou você precisa de um rastreamento para o suporte. | Diagnóstico e rastreamento |
Para falhas de conexão, compare a aplicação com um teste de conexão Universal Data Link (UDL). Use o mesmo computador, provedor, arquitetura de processo, identidade de autenticação, servidor, banco de dados e configurações de criptografia. Um teste bem-sucedido com outro provedor ou identidade não comprova que a configuração da aplicação funciona.
Registro de provedores e arquitetura
Erros como Provider não pode ser encontrado ou REGDB_E_CLASSNOTREG (0x80040154, Classe não registrada) indicam o carregamento do provedor antes da autenticação do SQL Server.
- Verifique o provedor que a solicitação solicita.
MSOLEDBSQL19eMSOLEDBSQLidentificam diferentes versões principais. Instalar o driver atual não altera a escolha do provedor do aplicativo. Siga as etapas de migração caso a aplicação ainda solicite outro provedor. - Verifique a arquitetura do processo que hospeda a aplicação. Um aplicativo de 32 bits precisa do provedor de 32 bits, mesmo no Windows de 64 bits. Para um serviço ou tarefa agendada, verifique o executável e a conta que esse host usa, não apenas o seu ambiente de desenvolvimento.
- Instale ou repare o driver com o instalador suportado no computador que roda o aplicativo. O instalador x64 inclui binários de driver de 64 e 32 bits. Verifique as dependências necessárias em Instalar o Driver OLE DB e Requisitos do sistema. Não copie bibliotecas de drivers de outro computador como substituto da instalação.
- Repita o teste UDL com a arquitetura e o provedor correspondentes. Se funcionar, mas o aplicativo ainda não conseguir carregar o provedor, compare a seleção efetiva do provedor e a arquitetura do host do aplicativo com as do teste.
Se o erro mencionar especificamente adal.dll, verifique o problema conhecido da biblioteca de autenticação em vez de tratá-lo como um provedor do SQL Server ausente.
Falhas de login e autenticação
Distinga-se uma rejeição de login de servidor de uma falha em obter credenciais ou estabelecer uma conexão criptografada. Leia o texto completo do erro, incluindo qualquer erro do provedor aninhado.
- Para o erro 18456 do SQL Server, peça ao administrador do banco de dados que inspecione a entrada e o estado correspondentes do registro de erro do servidor. Verifique o modo de autenticação, status de login, banco de dados solicitado e acesso ao banco de dados usando MSSQLSERVER_18456. Não presuma que toda rejeição de login significa uma senha incorreta.
- Para autenticação integrada, confirme a identidade sob a qual a aplicação é executada. Uma conta de serviço ou conta de tarefas agendadas pode diferir do usuário que testou a conexão com sucesso. Se a mensagem incluir Não é possível gerar o contexto SSPI, siga a solução de problemas da Interface de Provedor de Suporte de Segurança (SSPI) e o suporte ao Nome da Entidade de Serviço (SPN).
- Para o Microsoft Entra ID, verifique se o método de autenticação selecionado se encaixa no ambiente de execução da aplicação e se sua identidade tem acesso ao banco de dados alvo. Revise as configurações específicas de cada método e as restrições de tokens de acesso no Use Microsoft Entra ID. Não combine um token de acesso com autenticação ou credenciais conflitantes.
- Compare as configurações efetivas com a tabela de palavras-chave correta da cadeia de conexão.
IDBInitialize::Initialize,IDataInitialize::GetDataSource, e ActiveX Data Objects (ADO) usam tabelas de palavras-chave diferentes. Verifique a tabela da interface que sua aplicação usa.
O texto O nome principal alvo está incorreto pode aparecer em diferentes contextos. Se isso acompanhar Não é possível gerar contexto SSPI, investigue a autenticação do Windows e os SPNs. Se o erro identificar o aperto de mão do certificado ou da criptografia, use a próxima seção.
Falhas no certificado TLS
Erros de Segurança da Camada de Transporte (TLS) podem ocorrer antes que um login chegue ao SQL Server. O driver atual permite a criptografia obrigatória por padrão, então uma atualização pode expor um problema de confiança de certificado ou nome que uma configuração de conexão mais antiga não detectou.
- Se a cadeia de certificados foi emitida por uma autoridade não confiável, verifique o certificado apresentado pelo SQL Server e a cadeia de certificação emissora na qual o computador cliente confia. Configure um certificado válido de servidor e instale os certificados root e intermediários confiáveis necessários através do processo de gerenciamento de certificados da sua organização.
- Em caso de incompatibilidade no nome do certificado, compare o nome do servidor ou listener que o aplicativo utiliza com os nomes presentes no certificado. Use um certificado que cubra o nome da conexão pretendido. Se a aplicação usar intencionalmente um nome de conexão diferente, revise a propriedade documentada HostNameInCertificate antes de configurar o nome esperado do certificado.
- Verifique as configurações de criptografia e validação efetivas, incluindo as configurações do registro. Revise as tabelas de criptografia e validação de certificados para verificar precedência e
Strictcomportamento. No modoStrict, o driver valida o certificado independentemente da configuração de confiar no certificado do servidor. - Se a falha começou durante a migração, verifique a solução de problemas de versão principal, incluindo o tipo de valor da propriedade de criptografia e a restrição ao uso de
ServerCertificatefora do modoStrict.
Use requisitos de certificado para o SQL Server e solução de problemas de cadeia de certificados não confiável para verificações detalhadas. Mantenha a criptografia e validação de certificados ativadas na produção. Desativar qualquer um dos dois não resolve um problema de implantação de certificados.
Falhas de descoberta de rede e instâncias
Para servidor não encontrado, erro ao localizar o servidor/a instância especificado(a) ou erros de conexão recusada, identifique o endpoint que a aplicação está tentando acessar.
- Verifique o nome do servidor, nome da instância e a porta de escuta configurada com o administrador do banco de dados. Confirme que o serviço de banco de dados está em execução e que o protocolo e o ouvinte pretendidos estão ativados. Não presuma que toda instância está escutando na porta 1433.
- Para uma conexão TCP remota, teste o endpoint conhecido usando o formato de nome de servidor do driver
tcp:<server>,<port>. Mantenha as mesmas configurações de autenticação, banco de dados e criptografia. Consulte Palavras-chave da cadeia de conexão para a palavra-chave de servidor aplicável à sua interface. - Se o host explícito e a porta funcionarem, mas a instância nomeada não, investigue o SQL Server Browser e a descoberta de instâncias. Verifique o serviço do navegador e o caminho da porta 1434 do Protocolo de Datagramas do Usuário (UDP) onde a descoberta do navegador é usada.
- Se o endpoint explícito também falhar, verifique a resolução do Sistema de Nomes de Domínio (DNS), o roteamento e o acesso ao firewall à porta real de escuta a partir do host da aplicação. Trate erros de conexão relacionados à rede ou específicos da instância, em vez de alterar várias configurações de conexão ao mesmo tempo.
Para um ouvinte de grupo de disponibilidade, também revise o suporte de alta disponibilidade e recuperação de desastres. Para o LocalDB, use o suporte ao LocalDB para verificar a instância local e o contexto do usuário, em vez de seguir etapas de descoberta remota via TCP.
Erros de parâmetros e conversão de dados
Se a conexão abrir, mas a execução de comandos ou a recuperação de dados falharem, reduza a reprodução para o comando e valor que falham. Preserve o tipo de dado original, comprimento, status nulo e codificação de caracteres ao substituir dados sensíveis.
- Compare cada
?marcador de parâmetro com seu ordinal de ligação, direção e metadados. Quando você usarICommandWithParameters::SetParameterInfo, faça corresponder o tipo de origem SQL ao comando ou ao procedimento armazenado. Não presuma que os metadados dos parâmetros são sempre derivados automaticamente. Revise os parâmetros do comando para restrições de derivação e comportamento dos parâmetros de saída. - Inspecione os status de vinculação do acessório e o status e comprimento de cada valor retornado, não apenas o valor geral
HRESULT. Em caso de falhas ao definir propriedades, inspecione odwStatusde cada propriedade. Um retorno com sucesso parcial, comoDB_S_ERRORSOCCURREDpode exigir inspeção de array de status mesmo quando nenhum objeto de erro está disponível. Consulte os códigos de retorno. - Em caso de conversão ou truncamento, compare o tipo e o tamanho do buffer do consumidor com os metadados reais da coluna ou do parâmetro. Verifique a precisão e a escala para valores numéricos, intervalos válidos e frações de segundo para valores de data/hora, e comprimentos de bytes para buffers de caracteres. Investigue
DBSTATUS_E_CANTCONVERTVALUEe não trateDBSTATUS_S_TRUNCATEDcomo um valor completo. Use mapeamento de tipos de dados, busca de linhas e conversões de data e hora para as regras aplicáveis. - Se parâmetros de saída limitados aparecerem faltando, esgote os conjuntos de linhas retornados antes de lê-los. Consulte Use IMultipleResults para processar múltiplos conjuntos de resultados. Para parâmetros de saída transmitidos, consuma ou libere fluxos pendentes antes de solicitar o próximo resultado, conforme descrito no suporte de streaming para parâmetros de saída.
Para mapeamentos específicos do ADO, consulte Usar o ADO com o Driver OLE DB e as restrições de autenticação em DataTypeCompatibility, em Usar o Microsoft Entra ID. Não adicione uma configuração de compatibilidade sem verificar os dois.
Para strings estreitas corrompidas em uma coluna sql_variant após uma atualização do driver, revise o problema conhecido e o procedimento de recuperação existente do SSVARIANT antes de modificar os dados armazenados.
Perda de conexão e tempos de espera
Registre quando a conexão funcionou pela última vez, qual operação falhou e quanto tempo essa operação durou. Distinga esses casos antes de mudar as configurações de tentativa ou tempo de expiração.
| Estágio de falha | Verificações e orientações detalhadas |
|---|---|
| Abrindo uma conexão. | Inspecione primeiro os erros do provedor, rede, autenticação e TLS. Verifique a DBPROP_INIT_TIMEOUT em vigor ou a palavra-chave de conexão correspondente. Veja Solução de problemas de tempo limite de conexão. |
| Executando um comando. | Verifique DBPROP_COMMANDTIMEOUT ou a configuração de tempo limite de comando do aplicativo. Investigue bloqueios e o desempenho das consultas com a solução de problemas de tempo limite de consulta. Aumentar o tempo de espera da conexão não altera o tempo de espera do comando. |
| Reutilizando uma conexão ociosa. | Verifique as condições de recuperação, as configurações de retentativa e os erros esperados em Resiliência de conexão ociosa. A recuperação pode falhar quando o tempo limite do comando expira antes da conclusão da reconexão. |
| Perda de conexão durante a execução ou o commit. | Correlacione eventos de cliente e servidor para verificar interrupção de rede, reinício do servidor ou failover. Estabeleça o resultado da operação antes de decidir se é seguro tentar novamente. |
A resiliência de conexão ociosa não oferece tentativas iniciais de conexão nem reprodução automática de comandos e transações arbitrárias. Para uma falha transitória confirmada, use retentativas limitadas da aplicação com um intervalo entre elas e registre cada tentativa. Não tente repetidamente erros de carregamento do provedor, credenciais rejeitadas ou falhas na validação de certificados sem corrigir a causa.
Caution
Se uma conexão cair durante uma gravação ou confirmação, o cliente pode não saber se o SQL Server confirmou a transação. Não reproduza a operação às cegas. Verifique seu resultado ou use um design de aplicação que previna efeitos duplicados antes de tentar novamente.
Diagnóstico e rastreamento
Colete diagnósticos no ponto da falha, antes que chamadas de provedores não relacionadas substituam as informações de erro.
- Capture a operação que falhou, a data e hora, o fuso horário, o tempo decorrido e
HRESULT. Para consumidores nativos de OLE DB, recupere todos os registros disponíveis por meio deIErrorInfoeIErrorRecords, não apenas a primeira descrição. IncluaSQLSTATEe o número de erro nativo do SQL Server, quando disponível por meio deISQLErrorInfo. Veja Recuperar informações de erro e detalhes de erro do SQL Server. Para ADO, capture a coleção da conexãoErrors. - Colete status por propriedade, por vinculação e por valor para métodos que reportam erros dessa forma. Um objeto de erro ausente não torna seguro ignorar um resultado de sucesso parcial.
- Correlacione a falha do cliente com o log de erros do servidor ou Eventos Estendidos. Quando disponível, registre
ClientConnectionIDeActivityID. Uma falha antes do pré-login pode ocorrer sem um identificador de conexão do cliente. - Se os registros de erro não forem suficientes, use as informações de diagnóstico de acesso no registro de Eventos Estendidos para rastreamento de drivers e configuração de correlação. Colete uma trilha limitada ao redor da reprodução e pare de traçar depois.
Quando você escalar, inclua a versão do driver, o provedor solicitado, a arquitetura da aplicação e do processo, a versão do servidor, o método de autenticação, as configurações de conexão eficaz, o estágio de falha, os registros de erro e uma reprodução mínima. Indique se o teste UDL correspondente foi bem-sucedido e se o problema afeta um host ou múltiplos hosts.
Remova senhas, tokens de acesso e outros segredos das configurações de conexão e logs. Revise os rastros para texto de consulta e dados sensíveis, armazene-os com acesso restrito e compartilhe-os apenas por meio de um canal de suporte aprovado.