sql >> Database >  >> RDS >> Database

Problemen oplossen Tabel niet gevonden fouten

Onlangs ondervond een van onze klanten problemen bij het invoegen van Oracle®-gegevens in een SQL Server-tabel. Het invoegen is mislukt omdat de doeltabel in de SQL Server-instantie niet aanwezig was in de database waarmee de klant verbinding maakte.

Uiteindelijk was de oplossing voor dit probleem de eenvoudigste. Deze probleemoplosser bevat deze en andere oplossingen in een poging een lijst met mogelijke oplossingen voor het probleem in logische volgorde te presenteren. Hoewel de probleemoplosser is gebaseerd op een Easysoft ODBC-stuurprogramma dat SQL Server als doeldatabase gebruikt, zijn veel van de stappen van toepassing op andere op UnixODBC gebaseerde stuurprogramma's voor andere databases.

  1. Controleer uw gegevensbron (DSN) voor uw doeldatabase.

    Dit wordt meestal gedefinieerd in /etc/odbc.ini.

    Belangrijk Sla deze stappen niet over omdat uw DSN een kopie is van een werkende installatie op een andere computer. Vooral als die werkende setup op een ander platform staat en/of een andere versie van de driver gebruikt. Verschillende versies van een ODBC-stuurprogramma kunnen het bestand odbc.ini op een andere manier ontleden. Sommige gebruiken bijvoorbeeld de laatste versie van een DSN- of DSN-kenmerk dat ze vinden als er duplicaten zijn, andere gebruiken de laatste. Bovendien kan een ander stuurprogramma op een ander platform stoppen met het ontleden van het odbc.ini-bestand als er een probleemteken in het bestand staat, zoals een regelterugloop.

    • Controleer of er slechts één kopie van de gegevensbron is. Als er meerdere versies van de gegevensbron zijn, hernoem ze dan of verwijder andere versies. Dat wil zeggen, u wilt dit:
      [MYDSN]
      Database=MYDB
      

      —Of—

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

      Niet

      [MYDSN]
      Database=MYDB
      
      [MYDSN]
      Database=MYDB
      
    • Als u zeker weet dat u slechts één exemplaar van de DSN hebt, controleert u of de DSN alleen een regel heeft die de doeldatabase aangeeft. Dat wil zeggen, u wilt dit:
      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      .
      .
      .
      [ANOTHERDSN]
      

      Niet

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

      —Of—

      [MYDSN]
      Database=MYDB
      Server=MYMACHINE
      Database=
      .
      .
      .
      [ANOTHERDSN]
      
  2. Als u niet expliciet een database specificeert, controleer dan bij uw DBA of de standaarddatabase voor uw gebruiker degene is die u denkt dat het is. In SQL Server is het bijvoorbeeld mogelijk om een ​​login te configureren om verbinding te maken met een bepaalde database, dus in:
    [MYDSN]
    Database=MYDB
    Server=MYMACHINE
    User=MYUSER.
    .
    .
    [ANOTHERDSN]
    

    MYUSER kan in eerste instantie verbinding maken met bijvoorbeeld AdventureWorks als de login is geconfigureerd voor een bepaalde database, of de hoofddatabase als dat niet het geval is.

  3. Controleer of u verbinding maakt met de DSN die u denkt te zijn. Zelfs als je je DSN hebt toegevoegd aan een reeds bestaande versie van, bijvoorbeeld /etc/odbc.ini, betekent dit niet dat je drivermanager in dit bestand kijkt. Afhankelijk van hoe de driver manager is gebouwd of de omgeving is ingesteld, kan deze op een andere locatie worden gezocht. Om dit te controleren, kunt u proberen commentaar te geven op het kenmerk Driver in de gegevensbron. Als u nog steeds verbinding kunt maken, gebruikt u een andere versie van de DSN. Gebruik een programma zoals strace of truss om erachter te komen welk odbc.ini-bestand wordt gebruikt. Bijvoorbeeld:
    $ 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
    

    Als u een DSN van een andere computer hebt gekopieerd, probeer dan dit proces op die computer te herhalen om de locatie van de bron-DSN te verifiëren.

  4. Controleer of u verbinding maakt met het DBMS dat u denkt te zijn. Als het bijvoorbeeld niet te storend is, kunt u de doelinstantie/-service voor het DBMS onderbreken/stoppen. Als u nog steeds verbinding kunt maken, maakt u verbinding met een DBMS op een andere computer. Misschien is uw netwerk zo geconfigureerd dat het lijkt alsof een andere machine hetzelfde IP-adres heeft als het adres dat is opgegeven in de DSN.
  5. Typ in isql "help". Welke databasenaam wordt weergegeven in de lijst met geretourneerde tabellen? Is het degene die je verwacht? Zo niet, wat gebeurt er als u typt:
    use database
    

    Vervang database met de naam van de doeldatabase. Als u de database niet kunt wijzigen, controleert u bij uw DBA of er een aanmeldingstrigger is die de toegang tot databases per IP-adres regelt. In SQL Server Management Studio staan ​​aanmeldingstriggers onder INSTANCE> Serverobjecten> Triggers.


  1. In plaats van trigger in SQL Server verliest SCOPE_IDENTITY?

  2. Android SQLite-databasetabel wordt niet gemaakt

  3. Query vergelijken van datums in SQL

  4. Hoe u een kolomverklaring voor alle tabellen in een database in SQL Server kunt genereren - SQL Server / T-SQL-zelfstudie, deel 49