FUNCTION: DB2 UDB, oper system services, sqloEDUCodeTrapHandler, probe:10
MESSAGE: ADM0503C An unexpected internal processing error has occurred.
ALL DB2 PROCESSES ASSOCIATED WITH THIS INSTANCE HAVE BEEN SHUTDOWN.
RDS UCINTFC: pStatementText = CREATE NICKNAME DB2INST1.ORALOCAL FOR TSH1.DB2INST1."LOCAL"
# Trap 文件 t19883.000 呼叫堆疊
-FRAME-- --CODE-- --LOCATION--
BFFE8E70 83C4286A 0x0083 + A_SHAFinalCommon (/opt/IBM/db2/V8.1/lib/libdb2e.so.1)
BFFE8F00 8B55E48D 0x00ae + A_X931RandomUpdate (/home/Oracle/OraHome1/lib/libclntsh.so.9.0)
BFFE8F60 83C40CEB 0x00d0 + ztcrseed3 (/home/Oracle/OraHome1/lib/libclntsh.so.9.0)
DB2 II V8.2 與 Oracle 9i/10g 客戶端庫 (libclntsh.so) 符號解析衝突,屬已知相容性缺陷。
# 1. 備份原文件
cp $ORACLE_HOME/lib/libclntsh.so $ORACLE_HOME/lib/libclntsh.so.bak
cp $ORACLE_HOME/bin/genclntsh $ORACLE_HOME/bin/genclntsh.bak
# 2. 修改 genclntsh 連結行,加入 -Wl,-Bsymbolic
# 原行類似:
# LD="gcc -shared -Wl,-relax -L${ORACLE_HOME}/lib"
# 改為:
LD="gcc -shared -Wl,-relax -L${ORACLE_HOME}/lib -Wl,-Bsymbolic"
# 3. 重新生成 libclntsh.so
$ORACLE_HOME/bin/genclntsh
# 4. 重新鏈接 DB2 Oracle 驅動
djxlinkOracle
# 5. 重啟實例
db2stop && db2start
# 1. 備份
cp $ORACLE_HOME/bin/genclntsh $ORACLE_HOME/bin/genclntsh.bak
cp $ORACLE_HOME/lib/libclntsh.so.10.1 $ORACLE_HOME/lib/libclntsh.so.10.1.bak
cp $ORACLE_HOME/lib32/libclntsh.so.10.1 $ORACLE_HOME/lib32/libclntsh.so.10.1.bak
# 2. 移除 libnnz10.so (強制靜態鏈接其符號)
cd $ORACLE_HOME/lib
mv libnnz10.so libnnz10.so.orig
# 3. 修改 genclntsh 兩處
# a) 連結行加 -Wl,-Bsymbolic (注意逗號後無空格)
LD="gcc -shared -Wl,-relax -L${ORACLE_HOME}/lib -Wl,-Bsymbolic"
# b) 將 libnnz10.so 改為 libnnz10.a
# 找到類似:*-r ${OLIB}/libnnz10.so* && LNZ="-lnnz10"
# 改為:*-r ${OLIB}/libnnz10.a* && LNZ="-lnnz10"
# 4. 重新生成
$ORACLE_HOME/bin/genclntsh
# 5. 重新鏈接 DB2
djxlinkOracle
# 6. 重啟實例
db2stop && db2start
重啟後再次執行 CREATE NICKNAME ...,實例不再 Crash,Nickname 成功建立,後續查詢正常。
-Wl,-Bsymbolic:強制共享庫內部符號綁定,避免運行時被主程式 (db2sysc) 覆蓋libnnz10.so 含加密隨機數生成符號 (ztcrseed3, A_X931RandomUpdate) 與 DB2 同名不同實現,移除 .so 改靜態鏈接 .a 徹底隔離符號空間djxlinkOracle:DB2 提供的腳本,將 Oracle 客戶端庫正確鏈接到 DB2 運行環境此類「跨產品共享庫符號衝突」在異構聯邦場景偶發,掌握 ldd/nm 定位衝突符號、-Bsymbolic/靜態鏈接隔離、廠商腳本重鏈接三板斧,可應對大多數類似 Crash。