sql >> Database >  >> RDS >> Database

Een ORA 028513 DG4ODBC-fout onderzoeken

Het verbinden van Oracle met SQL Server is een van de meest voorkomende gebruiksscenario's voor het Easysoft SQL Server ODBC-stuurprogramma. Het ondersteunen van deze combinatie omvat niet alleen het assisteren bij het instellen van onze chauffeur. Het betekent ook helpen bij het oplossen van Oracle-configuratieproblemen die voorkomen dat Oracle Heterogene Services zo ver komt als het laden van onze driver.

Onlangs meldde een klant van een SQL Server ODBC-stuurprogramma de volgende fout aan ons:

ORA-28513: internal error in heterogeneous remote agent

De klant kon ons een DG4ODBC-traceerlogboek bezorgen, dat ons twee dingen vertelde:

  1. De Oracle-configuratiebestanden (.ora) waren correct ingesteld. Als deze bestanden een fout bevatten (bijvoorbeeld een ontbrekende of vreemde haak), wordt er geen DG4ODBC-traceerlogboek gegenereerd.
  2. DG4ODBC probeerde niet eens de unixODBC Driver Manager te laden.

In situaties als deze waarin het Oracle DG4ODBC-logboek het probleem niet identificeert (het zal normaal altijd meer informatie bevatten dan de ORA-NNNNN-fout die door de applicatie wordt gerapporteerd), en ODBC-logboekregistratie nog niet mogelijk is, grijpen we naar strace of truss . Bijvoorbeeld:

  1. Start twee shell-sessies als de Oracle-gebruiker.
  2. In shell 1 stop je de Oracle-luisteraar.
  3. Start de luisteraar met dit commando:
    strace -f -o /tmp/easysoft.log -s 512 lsnrctl start

    —Of—

    truss -wall -rall -o /tmp/easysoft.log lsnrctl start
  4. Start in shell 2 SQL*PLus en voer een SQL-statement uit tegen de DG4ODBC/SQL Server-databaselink.
  5. Stop in shell 2 de Oracle-luisteraar.

Maar de tool voor het traceren van de systeembibliotheek (truss in het geval van de klant) heeft de oorzaak van het probleem nog steeds niet onthuld.

Uiteindelijk bleek dat de klant de ORA_NLS10 . aan het instellen was omgevingsvariabele, en een neveneffect hiervan was om te voorkomen dat DG4ODBC werkte. Omdat de variabele niet op deze machine hoefde te worden ingesteld, was het uitschakelen en verwijderen uit een profielbestand de oplossing voor het probleem van de klant.


  1. PDO::fetchAll vs. PDO::fetch in a loop

  2. PostgreSql:Json Array naar rijen met behulp van Lateral Join

  3. SQL-query om het N-de hoogste salaris uit een salaristabel te vinden

  4. MySQL - ORDER BY-waarden binnen IN()