如何在 Oracle 异构服务环境中调试 ODBC 驱动程序?

How to debug ODBC driver in an Oracle Heterogeneous Services environment?

Oracle 异构服务是 Oracle DB 的一项功能,它允许数据库通过非 Oracle DB 的 ODBC 驱动程序与其通信。

使用 isql 等 ODBC 客户端工具调试 ODBC 驱动程序相当简单。

使用 isql - 我可以在初始命令提示符下输入驱动程序信息。 isql 和类似工具接受 ODBC DSN 名称并直接加载驱动程序。因此,当我在 GDB 命令提示符下键入:info sharedlibrary 时,我看到加载了我对调试感兴趣的 ODBC 共享库。

如何使用 sqlplus 或其他 Oracle 客户端工具执行相同的操作? 但是,使用 sqlplus 时无法得知驱动程序何时加载。

如何使用 Oracle 异构服务调试 ODBC 驱动程序 ("dynamically loaded library")?

环境:Linux 调试器:GDB Oracle 异构服务:https://docs.oracle.com/cd/A81042_01/DOC/server.816/a76960/hs_conce.htm

sqlplus (CLI) 或 sqldeveloper (GUI) 是对 Oracle 数据库执行查询的纯接口。在 Oracle HS 上下文中,工具本身不加载 ODBC 驱动程序。通过dg4odbc间接加载ODBC驱动的是Oracle数据库。我花了一些时间才发现这个事实。要使用 gdb 进行调试,请按以下步骤进行:

# Connect to Oracle DB:
sqlplus system/oracle@0.0.0.0:1521/orcl12c

# After connecting, dg4odbc is still not activated
# Run a single query for Oracle DB to load the ODBC driver
# After, initial query dg4odbc is active
[oracle@oracle_vm ~]$ ps aux|grep dg4odbc
oracle   17905 17.5  1.0 497392 63244 ? Ssl  13:56   0:01 dg4odbcNORTHWIND_MYSQL (LOCAL=NO)

# Use the PID from above process to debug in GDB
[oracle@oracle_vm ~]$ gdb dg4odbc 17905

# You can now debug the ODBC driver which is loaded by dg4odbc
# You can check by running "info sharedlibrary" at the GDB prompt
# Happy Debugging :)