Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-database in Microsoft Fabric
Gebruik dit artikel om de faalfase van een OLE DB-operatie te identificeren, kies de volgende controle en vind gedetailleerde instructies voor probleemoplossing. De richtlijn gebruikt de huidige aanbieder, MSOLEDBSQL19. Voor release-specifieke defecten en upgradewijzigingen, zie Bekende problemen en grote versieverschillen.
Identificeer het symptoom
Verzamel de volledige foutbeschrijving en alle beschikbare foutrecords voordat je instellingen verandert. Een topniveau HRESULT, zoals DB_E_ERRORSOCCURRED, identificeert de oorzaak niet op zichzelf. Noteer of de storing optreedt bij het laden van de provider, het openen van een verbinding, het uitvoeren van een commando, het ophalen van gegevens of het uitvoeren van een transactie.
| Symptoom | Begin hier |
|---|---|
| De aanbieder is niet te vinden, of de klasse is niet geregistreerd. | Registratie en architectuur van providers |
| Login mislukt, toegang wordt geweigerd of geïntegreerde authenticatie faalt. | Inlog- en authenticatiefouten |
| De certificaatketen is niet vertrouwd, of de naam van het certificaat komt niet overeen. | TLS-certificaatfouten |
| Server of instantie kan niet worden gevonden, of de verbinding wordt geweigerd. | Netwerk- en instantieontdekkingstoringen |
| Parameters falen, waarden worden afgekapt, of data kan niet worden omgezet. | Parameter- en gegevensconversiefouten |
| Verbinding valt weg, herstel mislukt of een time-out verloopt. | Verbindingsverlies en time-outs |
| Foutgegevens ontbreken, of je hebt een trace nodig voor ondersteuning. | Diagnostiek en tracering |
Voor verbindingsstoringen vergelijk je de applicatie met een Universal Data Link (UDL) verbindingstest. Gebruik dezelfde computer, provider, procesarchitectuur, authenticatie-identiteit, server, database en encryptie-instellingen. Een succesvolle test met een andere provider of identiteit bewijst niet dat de configuratie van de applicatie werkt.
Registratie en architectuur van providers
Fouten zoals Provider kan niet worden gevonden of REGDB_E_CLASSNOTREG (0x80040154, Klasse niet geregistreerd) geven aan dat provider wordt geladen vóór SQL Server-authenticatie.
- Controleer welke provider de applicatie opvraagt.
MSOLEDBSQL19enMSOLEDBSQLidentificeer verschillende hoofdversies. Het installeren van de huidige driver verandert de providerkeuze van een applicatie niet. Volg de migratiestappen als de applicatie nog steeds een andere provider aanvraagt. - Controleer de architectuur van het proces dat de applicatie host. Een 32-bits applicatie heeft de 32-bit provider nodig, zelfs op 64-bit Windows. Controleer voor een service of geplande taak het uitvoerbare bestand en het account dat door die host wordt gebruikt, niet alleen je ontwikkelomgeving.
- Installeer of repareer de driver met de ondersteunde installer op de computer die de applicatie draait. Het x64-installatieprogramma bevat zowel 64-bits- als 32-bits-driverbinaries. Controleer de vereiste afhankelijkheden in Install the OLE DB Driver and System Requirements. Kopieer geen driverbibliotheken van een andere computer als vervanging voor installatie.
- Herhaal de UDL-test met de bijbehorende architectuur en provider. Als het werkt maar de applicatie de provider nog steeds niet kan laden, vergelijk dan de effectieve providerkeuze en hostarchitectuur van de applicatie met de test.
Als de fout specifiek de naam bevatadal.dll, controleer dan het bekende authenticatiebibliotheekprobleem in plaats van het te behandelen als een ontbrekende SQL Server-provider.
Inlog- en authenticatiefouten
Onderscheid een server-inlogafwijzing van het niet verkrijgen van inloggegevens of het niet tot stand brengen van een versleutelde verbinding. Lees de volledige foutmelding, inclusief eventuele geneste providerfouten.
- Voor SQL Server-fout 18456 vraag je de databasebeheerder om de bijbehorende serverfoutlogboekvermelding en status te inspecteren. Controleer de authenticatiemodus, inlogstatus, aangevraagde database en databasetoegang met MSSQLSERVER_18456. Ga er niet vanuit dat elke afwijzing van inlogen betekent dat je een verkeerd wachtwoord hebt.
- Voor geïntegreerde authenticatie bevestig de identiteit waaronder de applicatie draait. Een serviceaccount of een account voor een geplande taak kan anders zijn dan de gebruiker die de verbinding met succes heeft getest. Als het bericht Kan geen SSPI-context genereren bevat, volg dan Security Support Provider Interface (SSPI) probleemoplossing en Service Principal Name (SPN) ondersteuning.
- Controleer voor Microsoft Entra ID of de geselecteerde authenticatiemethode past bij de uitvoeringsomgeving van de applicatie en dat de identiteit toegang heeft tot de doeldatabase. Bekijk de methode-specifieke instellingen en toegangstokenbeperkingen in Use Microsoft Entra ID. Combineer geen toegangstoken met conflicterende authenticatie- of credentialeigenschappen.
- Vergelijk de effectieve instellingen met de juiste verbindingsreeks trefwoordtabel.
IDBInitialize::Initialize,IDataInitialize::GetDataSource, en ActiveX Data Objects (ADO) gebruiken verschillende trefwoordtabellen. Bekijk de tabel van de interface die je applicatie gebruikt.
De tekst De naam van de beoogde principal is onjuist kan in verschillende contexten voorkomen. Als het gepaard gaat met Kan geen SSPI-context genereren, onderzoek dan Windows authentication en SPN's. Als de fout het certificaat of de encryptiehandshake identificeert, gebruik dan de volgende sectie.
TLS-certificaatfouten
Transport Layer Security (TLS)-fouten kunnen optreden voordat een login SQL Server bereikt. De huidige driver maakt standaard verplichte encryptie mogelijk, waardoor een upgrade een certificaattrust- of naamprobleem kan blootleggen dat een oudere verbindingsconfiguratie niet heeft gedetecteerd.
- Voor De certificaatketen is uitgegeven door een niet vertrouwde autoriteit, controleer het certificaat dat SQL Server presenteert en de uitgevende certificaatketen die de clientcomputer vertrouwt. Configureer een geldig servercertificaat en installeer de vereiste vertrouwde root- en tussenliggende certificaten via het certificaatbeheerproces van uw organisatie.
- Voor een mismatch in certificaatnaam, vergelijk de server- of luisternaam die de applicatie gebruikt met de namen in het certificaat. Gebruik een certificaat dat de bedoelde verbindingsnaam omvat. Als de applicatie opzettelijk een andere verbindingsnaam gebruikt, bekijk dan de gedocumenteerde HostNameInCertificate-eigenschap voordat je de verwachte certificaatnaam configureert.
- Controleer de effectieve encryptie- en validatie-instellingen, inclusief registerinstellingen. Bekijk de encryptie- en certificaatvalidatietabellen op prioriteit en
Strictgedrag. In modusStrictvalideert de driver het certificaat, ongeacht de instelling trust-server-certificaat. - Als de storing tijdens de migratie is begonnen, controleer dan de probleemoplossing van de hoofdversie, inclusief het waardetype van de encryptie-eigenschap en de beperking op het gebruik
ServerCertificatevan de externeStrictmodus.
Gebruik Certificaatvereisten voor SQL Server en Probleemoplossing voor niet-vertrouwde certificaatketen voor gedetailleerde controles. Houd encryptie en certificaatvalidatie ingeschakeld in productie. Het uitschakelen van een van beide lost een probleem met de certificaatuitrol niet op.
Netwerk- en instantieontdekkingstoringen
Bij server niet gevonden, fout bij het vinden van de opgegeven server/instantie of verbindingsgeweigeringsfouten, bepaal met welk eindpunt de toepassing verbinding probeert te maken.
- Controleer de servernaam, instantienaam en geconfigureerde luisterpoort met de databasebeheerder. Bevestig dat de databaseservice draait en dat het bedoelde protocol en de luisteraar zijn ingeschakeld. Ga er niet van uit dat elke instantie op poort 1433 luistert.
- Voor een externe Transmission Control Protocol (TCP)-verbinding test je het bekende eindpunt door gebruik te maken van het
tcp:<server>,<port>servernaamformaat van de driver. Houd dezelfde authenticatie-, database- en encryptie-instellingen. Zie Connection string keywords voor het server-keyword dat van toepassing is op jouw interface. - Als de expliciete host en de poort werken, maar de genoemde instantie niet, onderzoek dan SQL Server Browser en de detectie van instanties. Controleer de Browser-service en het pad naar User Datagram Protocol (UDP)-poort 1434 wanneer Browser-detectie wordt gebruikt.
- Als het expliciete eindpunt ook faalt, controleer dan de resolutie, routering en firewalltoegang van het Domain Name System (DNS) tot de daadwerkelijke luisterpoort van de applicatiehost. Volg netwerkgerelateerde of instantie-specifieke verbindingsfouten in plaats van meerdere verbindingsinstellingen tegelijk te wijzigen.
Voor een listener van een beschikbaarheidsgroep raadpleeg je ook Ondersteuning voor hoge beschikbaarheid en herstel na noodgevallen. Voor LocalDB gebruik je LocalDB-ondersteuning om de lokale instantie en gebruikerscontext te controleren in plaats van remote TCP-ontdekkingsstappen toe te passen.
Parameter- en gegevensconversiefouten
Als de verbinding opent maar de uitvoering van het commando of het ophalen van gegevens mislukt, wordt de reproductie gereduceerd tot het falende commando en de waarde. Bebehoud het oorspronkelijke datatype, de lengte, nulstatus en tekencodering bij het vervangen van gevoelige gegevens.
- Vergelijk elke
?parametermarker met zijn bindingsordinaal, richting en metadata. Wanneer je gebruiktICommandWithParameters::SetParameterInfo, koppel het SQL-brontype aan het commando of de stored procedure. Ga er niet van uit dat parametermetadata altijd automatisch wordt afgeleid. Bekijk de commandoparameters op afleidingsbeperkingen en het gedrag van de outputparameters. - Inspecteer de accessor-bindingsstatus en de status en lengte van elke teruggegeven waarde, niet alleen de totale
HRESULT. Voor fouten bij het instellen van eigenschappen inspecteer je dedwStatusvan elke eigenschap. Een gedeeltelijke succesterugvoer, zoals zo'nDB_S_ERRORSOCCURREDkan statusarray-inspectie vereisen, zelfs als er geen foutobject beschikbaar is. Zie Retourcodes. - Voor conversie of afkapping vergelijk je het type en de grootte van de consumentbuffer met de daadwerkelijke kolom- of parametermetadata. Controleer de precisie en schaal voor numerieke waarden, geldige intervallen en fracties van een seconde bij datum-/tijdwaarden, en bytelengten voor tekenbuffers. Onderzoek
DBSTATUS_E_CANTCONVERTVALUE, en behandelDBSTATUS_S_TRUNCATEDhet niet als een volledige waarde. Gebruik Data Type Mapping, Fetching Rows en Date- en Time-conversies voor de toepasselijke regels. - Als gebonden uitgangsparameters ontbreken, put dan de teruggestuurde rijsets uit voordat je ze leest. Volg Use IMultipleResults om meerdere resultaatsets te verwerken. Voor gestreamde uitvoerparameters kunt u in actie zijnde stromen consumeren of vrijgeven voordat u het volgende resultaat aanvraagt, zoals beschreven in Streaming-ondersteuning voor uitvoerparameters.
Voor ADO-specifieke toewijzingen raadpleeg je ADO gebruiken met het OLE DB-stuurprogramma en de verificatiebeperkingen op in DataTypeCompatibility. Voeg geen compatibiliteitsinstelling toe zonder beide te controleren.
Voor beschadigde narrow strings in een kolom van het type sql_variant na een upgrade van een stuurprogramma, raadpleegt u eerst het bestaande bekende probleem en de herstelprocedure voor SSVARIANT voordat u opgeslagen gegevens wijzigt.
Verbindingsverlies en time-outs
Noteer wanneer de verbinding voor het laatst werkte, welke bewerking mislukte en hoe lang die bewerking duurde. Onderscheid deze gevallen voordat je de instellingen voor herkansen of time-out verandert.
| Mislukte fase | Controles en gedetailleerde richtlijnen |
|---|---|
| Een verbinding openen. | Inspecteer eerst de fouten van provider, netwerk, authenticatie en TLS. Controleer de daadwerkelijke DBPROP_INIT_TIMEOUT of het bijbehorende verbindingssleutelwoord. Zie Problemen met verbindingstime-outs oplossen. |
| Een opdracht uitvoeren. | Controleer DBPROP_COMMANDTIMEOUT de commando-timeout-instelling van de applicatie. Onderzoek blokkering en queryprestaties met Query timeout troubleshooting. Het verhogen van de verbindingstimeout verandert de commando-timeout niet. |
| Een idle verbinding hergebruiken. | Controleer de voorwaarden voor herstel, de instellingen voor opnieuw proberen en de verwachte fouten in tolerantie voor inactieve verbindingen. Herstel kan mislukken wanneer de commando-timeout verloopt voordat de herverbinding is voltooid. |
| Een verbinding verliezen tijdens uitvoering of commit. | Correleer client- en servergebeurtenissen om te controleren op netwerkonderbrekingen, serverherstart of failover. Bepaal het resultaat van de operatie voordat je beslist of het veilig is om het opnieuw te proberen. |
Idle-verbindingsveerkracht biedt geen herhalingen van de eerste verbinding of automatische herhaling van willekeurige commando's en transacties. Voor een bevestigde tijdelijke fout gebruik je begrensde applicatieherhalingen met vertraging en log je elke poging. Probeer niet herhaaldelijk fouten bij het laden van providers, afgewezen inloggegevens of fouten bij certificaatvalidatie zonder de oorzaak te corrigeren.
Caution
Als een verbinding verbreekt tijdens een write of commit, weet de client mogelijk niet of SQL Server de transactie heeft gecommitteerd. Speel de operatie niet blindelings opnieuw af. Controleer het resultaat of gebruik een applicatieontwerp dat dubbele effecten voorkomt voordat je het opnieuw probeert.
Diagnostiek en tracering
Verzamel diagnostiek op het punt van uitval, voordat niet-gerelateerde zorgverlenersgesprekken de foutinformatie vervangen.
- Leg de falende operatie vast, tijdstempel en tijdzone, verstreken tijd, en
HRESULT. Voor native OLE DB-gebruikers, haal alle beschikbare records op viaIErrorInfoenIErrorRecords, niet alleen de eerste beschrijving. VoegSQLSTATEtoe en het native SQL Server-foutnummer wanneer beschikbaar viaISQLErrorInfo. Zie Foutinformatie ophalen en SQL Server-foutdetails. Voor ADO, leg deErrorscollectie van de verbinding vast. - Verzamel per eigenschap, per binding en per waarde statussen voor methoden die fouten op die wijze melden. Een afwezig foutobject maakt een gedeeltelijk succesresultaat niet veilig om te negeren.
- Breng de clientfout in verband met het foutenlogboek van de server of Extended Events. Indien beschikbaar, registreer
ClientConnectionIDenActivityID. Een storing vóór het prelogin kan optreden zonder een client-verbindingsidentificatie. - Als foutregistraties niet voldoende zijn, gebruik dan de diagnostische informatie van Access in het Extended Events-logboek voor bestuurderstracering en correlatie-installatie. Verzamel een begrensde trace rond de reproductie en stop daarna met traceren.
Wanneer je escaleert, neem dan de driverversie, de gevraagde provider, applicatie- en procesarchitectuur, serverversie, authenticatiemethode, effectieve verbindingsinstellingen, faalfase, foutrecords en minimale reproductie op. Geef aan of de matching UDL-test slaagt en of het probleem één host of meerdere hosts treft.
Verwijder wachtwoorden, toegangstokens en andere geheimen uit verbindingsinstellingen en logboeken. Bekijk traces op querytekst en gevoelige gegevens, sla ze op met beperkte toegang en deel ze alleen via een goedgekeurd ondersteuningskanaal.