Baru-baru ini, seorang pelanggan yang menggunakan driver ODBC SQL Server kami untuk menghubungkan Oracle ke SQL Server, melaporkan kesalahan berikut kepada kami:
ORA-28545: error diagnosed by Net8 when connecting to an agent Unable to retrieve text of NETWORK/NCR message 65535 ORA-02063: preceding 2 lines from SQLSERVERLINK
Kesalahan "menangkap" ini dapat terjadi jika:
- Lingkungan tidak disetel dengan benar (misalnya LD_LIBRARY_PATH tidak menunjuk ke direktori perpustakaan unixODBC, atau ODBCSYSINI tidak menunjuk ke direktori yang berisi salinan odbc.ini tempat target ODBC DSN ditentukan.)
- Library DG4ODBC 64-bit sedang digunakan dengan library ODBC 32-bit dan sebaliknya.
- SID yang ditentukan dalam konfigurasi DG4ODBC Anda tidak berjalan pada host yang ditentukan di tnsnames.ora.
Namun setelah diselidiki tidak satu pun dari masalah ini diterapkan. Kami menduga penyebabnya adalah masalah kesalahan konfigurasi Oracle, karena meskipun debugging DG4ODBC diaktifkan, tidak ada file debug DG4ODBC yang dihasilkan, misalnya Oracle tidak sampai sejauh memuat pustaka DG4ODBC.
Dalam kasus seperti itu, kami meminta file konfigurasi Oracle pelanggan, sehingga kami dapat mereproduksi pengaturannya, karena sulit untuk menemukan braket yang hilang atau salah tempat dalam file .ora.
Kami tidak dapat mereproduksi kesalahan pelanggan, file konfigurasi yang disediakan bekerja dengan sempurna untuk kami.
Langkah selanjutnya adalah menggunakan strace
untuk melihat "di bawah tenda" pada file konfigurasi apa yang sedang dimuat ketika pendengar Oracle sedang dimulai. Untuk melakukan ini, kami meminta pelanggan untuk:
- Mulai dua sesi shell sebagai pengguna Oracle.
- Di shell 1, hentikan pendengar Oracle.
- Mulai pendengar dengan perintah ini:
strace -f -o /tmp/easysoft.log -s 512 lsnrctl start
- Di shell 2, mulai SQL*PLus dan jalankan pernyataan SQL terhadap link database DG4ODBC / SQL Server.
- Di shell 2, hentikan pendengar Oracle.
Log strace, /tmp/easysoft.log, mengungkap masalah mendasar. Awalnya, pendengar Oracle dapat memuat dan membaca listener.ora:
53049 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = 3 53049 read(3, "#/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora Network Configuration File: \n# Generated by Oracle configuration tools.\n\nLISTENER =\n (DESCRIPTION_LIST =\n (DESCRIPTION =\n (ADDRESS = (PROTOCOL = TCP)..., 4096) = 577
Namun, pengaturan Oracle pelanggan adalah:pengguna A memulai pendengar, yang menjadi pengguna B. Apa yang terungkap adalah bahwa pengguna B tidak memiliki izin akses yang memadai untuk memuat file .ora itu:
53051 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = -1 EACCES (Permission denied)
Pada akhirnya, inilah penyebab "ORA 02063" pelanggan.