在使用 DB2 Information Integrator for Oracle (II4O,現稱 WebSphere II) 時,建立 Wrapper 與 User Mapping 皆正常,但執行 CREATE NICKNAME 指令瞬間導致 DB2 實例崩潰 (Crash)。此問題發生於 DB2 II V8.2 搭配 Oracle 9i/10g Client 的 Linux 環境,屬於已知的相容性問題。
在 db2diag.log 中可見嚴重錯誤 (Level: Severe),關鍵訊息如下:
libclntsh.so 內的 A_X931RandomUpdate、ztcrseed3 等函式,顯示為 Oracle 客戶端程式庫與 DB2 進程間的符號衝突導致 Segment Fault (Signal 11)。$ORACLE_HOME/lib/libclntsh.so 與 $ORACLE_HOME/bin/genclntsh。genclntsh,在連結器指令行加入 -Wl,-Bsymbolic 參數,例如:LD="gcc -shared -Wl,-relax -L${ORACLE_HOME}/lib -Wl,-Bsymbolic"genclntsh 重新產生 libclntsh.so。djxlinkOracle 腳本更新連結。db2stop; db2start)。$ORACLE_HOME/bin/genclntsh、$ORACLE_HOME/lib/libclntsh.so.10.1、$ORACLE_HOME/lib32/libclntsh.so.10.1。$ORACLE_HOME/lib/libnnz10.so 改名為 libnnz10.so.orig (若不存在則略過)。genclntsh:
-Wl,-Bsymbolic (注意逗號後無空格)。libnnz10.so 改為 libnnz10.a (靜態連結)。genclntsh 重建共享庫。djxlinkOracle 並重啟實例。此問題核心在於 Oracle Client 共享庫的符號可見性與 DB2 進程空間衝突。透過 -Bsymbolic 強制符號綁定至庫內部,並調整 libnnz10 連結方式,即可避免 Crash,恢復 Nickname 建立功能。