Baru-baru ini, salah satu pelanggan kami mengalami masalah saat mencoba memasukkan beberapa data Oracle® ke dalam tabel SQL Server. Penyisipan gagal karena tabel target dalam contoh SQL Server tidak ada dalam database yang disambungkan pelanggan.
Pada akhirnya, solusi untuk masalah ini adalah yang paling sederhana. Pemecah masalah ini mencakup solusi ini dan lainnya, dalam upaya untuk menyajikan daftar perbaikan potensial untuk masalah dalam urutan logis. Meskipun pemecah masalah didasarkan pada pengandar ODBC Easysoft yang menggunakan SQL Server sebagai basis data targetnya, banyak langkah yang dapat diterapkan ke pengandar berbasis unixODBC lain untuk basis data lain.
- Periksa sumber data Anda (DSN) untuk database target Anda.
Ini biasanya akan didefinisikan di /etc/odbc.ini.
Penting Jangan mengabaikan langkah-langkah ini hanya karena DSN Anda adalah salinan dari penyiapan yang berfungsi di komputer lain. Terutama jika pengaturan yang berfungsi itu ada di platform lain dan/atau menggunakan versi driver yang berbeda. Versi pengandar ODBC yang berbeda dapat menguraikan berkas odbc.ini secara berbeda, misalnya, beberapa mungkin menggunakan versi terakhir dari atribut DSN atau DSN yang mereka temukan ketika ada duplikat, beberapa mungkin menggunakan yang terakhir. Selain itu, pengandar yang berbeda pada platform yang berbeda dapat berhenti menguraikan file odbc.ini jika ada karakter masalah dalam file seperti carriage return.
- Periksa bahwa hanya ada satu salinan sumber data. Jika ada beberapa versi sumber data, ganti namanya atau hapus versi lain. Yaitu, Anda menginginkan ini:
[MYDSN] Database=MYDB
—Atau—
[MYDSN1] Database=MYDB1 [MYDSN2] Database=MYDB2
Tidak
[MYDSN] Database=MYDB [MYDSN] Database=MYDB
- Bila Anda yakin bahwa Anda hanya memiliki satu salinan DSN, periksa apakah DSN hanya memiliki baris yang menentukan database target. Yaitu, Anda menginginkan ini:
[MYDSN] Database=MYDB Server=MYMACHINE . . . [ANOTHERDSN]
Tidak
[MYDSN] Database=MYDB Server=MYMACHINE Database=MYDB2 . . . [ANOTHERDSN]
—Atau—
[MYDSN] Database=MYDB Server=MYMACHINE Database= . . . [ANOTHERDSN]
- Periksa bahwa hanya ada satu salinan sumber data. Jika ada beberapa versi sumber data, ganti namanya atau hapus versi lain. Yaitu, Anda menginginkan ini:
- Jika Anda tidak secara eksplisit menentukan database, periksa dengan DBA Anda bahwa database default untuk pengguna Anda adalah yang Anda pikirkan. Misalnya, di SQL Server dimungkinkan untuk mengonfigurasi login untuk terhubung ke database tertentu, jadi di:
[MYDSN] Database=MYDB Server=MYMACHINE User=MYUSER. . . [ANOTHERDSN]
MYUSER mungkin awalnya terhubung untuk mengatakan, AdventureWorks jika login telah dikonfigurasi ke database tertentu, atau database Master jika belum.
- Periksa apakah Anda terhubung ke DSN yang Anda pikirkan. Bahkan jika Anda telah menambahkan DSN Anda ke versi yang sudah ada sebelumnya, misalnya /etc/odbc.ini, itu tidak berarti manajer driver Anda sedang mencari di file ini. Tergantung pada bagaimana manajer driver dibangun atau lingkungan diatur, itu bisa mencari di lokasi yang berbeda. Untuk memeriksa, coba komentari atribut Driver di sumber data. Jika Anda masih dapat terhubung, Anda menggunakan versi DSN yang berbeda. Gunakan program seperti strace atau truss untuk mengetahui file odbc.ini mana yang digunakan. Misalnya:
$ 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
Jika Anda telah menyalin DSN dari komputer lain, coba ulangi proses ini pada mesin tersebut untuk memverifikasi lokasi sumber DSN.
- Periksa apakah Anda terhubung ke DBMS yang Anda pikirkan. Misalnya, jika tidak terlalu mengganggu, coba jeda/hentikan instance/layanan target untuk DBMS. Jika Anda masih dapat terhubung, Anda terhubung ke DBMS di komputer lain. Mungkin jaringan Anda telah dikonfigurasi sedemikian rupa sehingga komputer lain dapat terlihat memiliki alamat IP yang sama dengan yang ditentukan di DSN.
- Di isql, ketik "bantuan". Dalam daftar tabel yang dikembalikan, nama database apa yang ditampilkan? Apakah itu yang Anda harapkan? Jika tidak, apa yang terjadi jika Anda mengetik:
use database
Ganti database dengan nama database target. Jika Anda tidak dapat mengubah database, periksa dengan DBA Anda apakah ada pemicu logon yang mengontrol akses ke database berdasarkan alamat IP. Di SQL Server Management Studio, pemicu masuk berada di bawah INSTANCE> Objek Server> Pemicu.