Baru-baru ini, seorang pelanggan yang menggunakan driver ODBC SQL Server kami untuk menghubungkan Oracle ke SQL Server, mengalami masalah yang terbukti sulit untuk diselesaikan.
Pelanggan mendapatkan log ODBC Driver Manager setiap kali DG4ODBC digunakan, dengan hambatan yang dihasilkan pada kinerja — mencatat panggilan ODBC memiliki biaya kinerja. Pelanggan telah memeriksa file odbcinst.ini untuk entri yang mengaktifkan pencatatan; entri ini tidak ada.
Untuk membantu mengatasi masalah ini, kami menggunakan alat strace untuk menemukan apa yang terjadi "di balik layar" saat DG4ODBC digunakan.
Karena DG4ODBC adalah perpustakaan daripada aplikasi, kami harus melampirkan strace ke proses pendengar Oracle (aplikasi "induk" DG4ODBC) untuk melacak operasi yang terkait dengan DG4ODBC.
File jejak menunjukkan salinan odbcinst.ini mana yang mengaktifkan logging.
Ini adalah langkah-langkah yang kami ambil untuk melampirkan strace ke pendengar Oracle:
$ ps -aef | grep tns* oracle 16242 1 0 15:02 ? 00:00:00 /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr LISTENER -inherit $ sudo strace -p 16242 -f -o /tmp/mytracefile
(Di jendela terminal terpisah):
$ ./sqlplus / as sysdba $ select * from mytable@mylink;
Apa yang telah dilakukan Oracle "di bawah tenda" sekarang ditangkap di /tmp/mytracefile. Kami kemudian menggunakan ctrl-c untuk menghentikan strace dan mencari sql.log (file log ODBC Driver Manager) di /tmp/mytracefile. Dalam kasus kami, ini menunjukkan:
16436 open("/etc/odbcinst.ini", O_RDONLY) = 7 16436 fstat(7, {st_mode=S_IFREG|0644, st_size=1365, ...}) = 0 16436 read(7, "[ODBC]\nTrace=Yes\nTraceFile=/tmp/"..., 4096) = 1365 16436 read(7, "", 4096) = 0 16436 close(7) = 0 16436 open("/u01/app/oracle/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory) 16436 open("/tmp/sql.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 7