sql >> Databasteknik >  >> RDS >> Database

Felsökningstabell hittades inte. Fel

Nyligen upplevde en av våra kunder problem när han försökte infoga Oracle®-data i en SQL Server-tabell. Insättningen misslyckades eftersom måltabellen i SQL Server-instansen inte fanns i databasen som kunden anslutit till.

I slutändan var lösningen på detta problem den enklaste. Den här felsökaren inkluderar den här lösningen och andra, i ett försök att presentera en lista över potentiella korrigeringar för problemet i logisk ordning. Även om felsökaren är baserad på en Easysoft ODBC-drivrutin som använder SQL Server som sin måldatabas, är många av stegen tillämpliga på andra unixODBC-baserade drivrutiner för andra databaser.

  1. Kontrollera din datakälla (DSN) för din måldatabas.

    Detta kommer vanligtvis att definieras i /etc/odbc.ini.

    Viktigt Gå inte förbi dessa steg bara för att din DSN är en kopia från en fungerande installation på en annan maskin. Särskilt om den fungerande installationen är på en annan plattform och/eller använder en annan version av drivrutinen. Olika versioner av en ODBC-drivrutin kan analysera filen odbc.ini på olika sätt, till exempel kan vissa använda den senaste versionen av ett DSN- eller DSN-attribut de hittar när det finns dubbletter, vissa kan använda den sista. Dessutom kan en annan drivrutin på en annan plattform sluta tolka filen odbc.ini om det finns ett problemtecken i filen, till exempel en vagnretur.

    • Kontrollera att det bara finns en kopia av datakällan. Om det finns flera versioner av datakällan, byt namn på dem eller ta bort andra versioner. Dvs du vill ha det här:
      [MYDSN]
      Database=MYDB
      

      —Eller—

      [MYDSN1]
      Database=MYDB1
      
      [MYDSN2]
      Database=MYDB2
      

      Inte

      [MYDSN]
      Database=MYDB
      
      [MYDSN]
      Database=MYDB
      
    • När du är säker på att du bara har en kopia av DSN, kontrollera att DSN bara har en rad som anger måldatabasen. Dvs du vill ha det här:
      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      .
      .
      .
      [ANOTHERDSN]
      

      Inte

      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      Database=MYDB2
      .
      .
      .
      [ANOTHERDSN]
      

      —Eller—

      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      Database=
      .
      .
      .
      [ANOTHERDSN]
      
  2. Om du inte uttryckligen anger en databas, kontrollera med din DBA att standarddatabasen för din användare är den du tror att den är. Till exempel, i SQL Server är det möjligt att konfigurera en inloggning för att ansluta till en viss databas, så i:
    [MYDSN]
    Database=MYDB
    Server=MYMACHINE
    User=MYUSER.
    .
    .
    [ANOTHERDSN]
    

    MYUSER kan initialt ansluta för att säga, AdventureWorks om inloggningen har konfigurerats till en viss databas, eller huvuddatabasen om den inte har gjort det.

  3. Kontrollera att du ansluter till det DSN som du tror att du är. Även om du har lagt till din DSN till en redan existerande version av, säg /etc/odbc.ini, betyder det inte att din drivrutinshanterare letar i den här filen. Beroende på hur förarhanteraren är byggd eller miljön är inställd, kan den leta på en annan plats. För att kontrollera det, försök att kommentera drivrutinsattributet i datakällan. Om du fortfarande kan ansluta använder du en annan version av DSN. Använd ett program som strace eller truss för att ta reda på vilken odbc.ini-fil som används. Till exempel:
    $ more /etc/odbc.ini
    [MYDSN]
    #Driver=Easysoft ODBC-SQL Server
    $ /usr/local/easysoft/unixODBC/bin/isql.sh -v MYDSN
    SQL>
    $ strace -o -f /tmp/odbc.log /usr/local/easysoft/unixODBC/bin/isql.sh -v MYDSN
    $ grep odbc.ini /tmp/odbc.log
    

    Om du har kopierat ett DSN från en annan dator, försök att upprepa denna process på den maskinen för att verifiera platsen för käll-DSN.

  4. Kontrollera att du ansluter till det DBMS du tror att du är. Till exempel, om det inte är för störande, försök att pausa / stoppa målinstansen / tjänsten för DBMS. Om du fortfarande kan ansluta ansluter du till ett DBMS på en annan dator. Kanske har ditt nätverk konfigurerats så att en annan maskin kan se ut att ha samma IP-adress som den som anges i DSN.
  5. I isql, skriv "hjälp". Vilket databasnamn visas i listan över returnerade tabeller? Är det den du förväntar dig? Om inte, vad händer om du skriver:
    use database
    

    Ersätt databas med namnet på måldatabasen. Om du inte kan ändra databas, kontrollera med din DBA om det finns en inloggningstrigger som styr åtkomst till databaser med IP-adress. I SQL Server Management Studio finns inloggningsutlösare under INSTANS> Serverobjekt> Utlösare.


  1. Hur man infogar en array i en enda MySQL Prepared statement med PHP och PDO

  2. visa flera poster med hjälp av resultatuppsättningen

  3. Skapa funktioner i phpMyAdmin - Fel:åtkomst nekad du behöver superprivilegiet för denna operation

  4. Installera Oracle Database 12c-programvaran på Windows