Nedávno měl jeden z našich zákazníků problémy při pokusu vložit některá data Oracle® do tabulky serveru SQL Server. Vložení se nezdařilo, protože cílová tabulka v instanci SQL Server nebyla přítomna v databázi, ke které se zákazník připojoval.
Řešení tohoto problému bylo nakonec to nejjednodušší. Tento nástroj pro odstraňování problémů zahrnuje toto a další řešení ve snaze předložit seznam potenciálních oprav problému v logickém pořadí. I když je nástroj pro odstraňování problémů založen na ovladači Easysoft ODBC, který jako cílovou databázi používá SQL Server, mnohé z kroků lze použít i pro jiné ovladače založené na unixODBC pro jiné databáze.
- Zkontrolujte zdroj dat (DSN) pro cílovou databázi.
To bude obvykle definováno v /etc/odbc.ini.
Důležité Nevynechávejte tyto kroky jen proto, že vaše DSN je kopií z funkčního nastavení na jiném počítači. Zejména pokud je toto pracovní nastavení na jiné platformě a/nebo používá jinou verzi ovladače. Různé verze ovladače ODBC mohou analyzovat soubor odbc.ini odlišně, například některé mohou používat poslední verzi atributu DSN nebo DSN, které naleznou, když existují duplikáty, některé mohou používat poslední. Kromě toho může jiný ovladač na jiné platformě přestat analyzovat soubor odbc.ini, pokud je v souboru problémový znak, jako je návrat vozíku.
- Zkontrolujte, zda existuje pouze jedna kopie zdroje dat. Pokud existuje více verzí zdroje dat, přejmenujte je nebo odeberte jiné verze. To znamená, že chcete toto:
[MYDSN] Database=MYDB
—Nebo —
[MYDSN1] Database=MYDB1 [MYDSN2] Database=MYDB2
Ne
[MYDSN] Database=MYDB [MYDSN] Database=MYDB
- Když jste si jisti, že máte pouze jednu kopii DSN, zkontrolujte, že DSN obsahuje pouze řádek určující cílovou databázi. To znamená, že chcete toto:
[MYDSN] Database=MYDB Server=MYMACHINE . . . [ANOTHERDSN]
Ne
[MYDSN] Database=MYDB Server=MYMACHINE Database=MYDB2 . . . [ANOTHERDSN]
—Nebo —
[MYDSN] Database=MYDB Server=MYMACHINE Database= . . . [ANOTHERDSN]
- Zkontrolujte, zda existuje pouze jedna kopie zdroje dat. Pokud existuje více verzí zdroje dat, přejmenujte je nebo odeberte jiné verze. To znamená, že chcete toto:
- Pokud databázi explicitně neurčíte, ověřte si u svého správce dat, že výchozí databáze pro vašeho uživatele je ta, kterou si myslíte, že je. Například v SQL Serveru je možné nakonfigurovat přihlášení pro připojení ke konkrétní databázi, takže v:
[MYDSN] Database=MYDB Server=MYMACHINE User=MYUSER. . . [ANOTHERDSN]
MYUSER se může zpočátku připojit například k AdventureWorks, pokud bylo přihlášení nakonfigurováno do konkrétní databáze, nebo k hlavní databázi, pokud ne.
- Zkontrolujte, zda se připojujete k DSN, o kterém si myslíte, že jste. I když jste přidali své DSN do již existující verze, řekněme /etc/odbc.ini, neznamená to, že váš správce ovladačů hledá tento soubor. V závislosti na tom, jak je vytvořen správce ovladačů nebo jak je nastaveno prostředí, může hledat na jiném místě. Chcete-li to zkontrolovat, zkuste zakomentovat atribut Driver ve zdroji dat. Pokud se stále můžete připojit, používáte jinou verzi DSN. Pomocí programu, jako je strace nebo truss, zjistěte, který soubor odbc.ini je používán. Například:
$ 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
Pokud jste zkopírovali DSN z jiného počítače, zkuste tento proces zopakovat na tomto počítači, abyste ověřili umístění zdrojového DSN.
- Zkontrolujte, zda se připojujete k systému DBMS, o kterém si myslíte, že jste. Pokud to například není příliš rušivé, zkuste pozastavit / zastavit cílovou instanci / službu pro DBMS. Pokud se stále můžete připojit, připojujete se k DBMS na jiném počítači. Možná byla vaše síť nakonfigurována tak, že se může zdát, že jiný počítač má stejnou IP adresu jako ta zadaná v DSN.
- Do isql zadejte „help“. Jaký název databáze je zobrazen v seznamu vrácených tabulek? Je to ta, kterou očekáváte? Pokud ne, co se stane, když zadáte:
use database
Nahradit databázi s názvem cílové databáze. Pokud nemůžete změnit databázi, ověřte u svého správce dat, zda existuje spouštěč přihlášení, který řídí přístup k databázím podle IP adresy. V SQL Server Management Studio jsou spouštěče přihlášení pod INSTANCE> Objekty serveru> Spouštěče.