安裝 Oracle 10g (10.2.0.1) 於 Linux x86-64 時,`make` 階段報錯:
INFO: undefined reference to `ldxnbeg'
INFO: undefined reference to `ldxdtd'
...
collect2: ld returned 1 exit status
make[1]: *** [/app/oracle/product/10/db_1/sysman/lib/e2eme] Error 1
Exception Name: MakefileException
Exception String: Error in invoking target 'agent nmo nmb' of makefile '/app/oracle/product/10/db_1/sysman/lib/ins_sysman.mk'
核心原因:32 位元函式庫(`libnls10.a`、`libunls10.a`)中缺少 64 位元編譯所需的符號定義,導致 `e2eme`(Enterprise Manager 代理元件)連結失敗。
rpm -q binutils compat-db control-center gcc gcc-c++ glibc glibc-common \
gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver libaio openmotif21
缺漏請用 `yum install` 或掛載安裝光碟補裝。
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
執行 /sbin/sysctl -p 生效。
# /etc/selinux/config
SELINUX=disabled
修改後需重啟作業系統。
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10/db_1; export ORACLE_HOME
ORACLE_SID=RAC1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
若上述環境均正確仍報錯,通常是 10.2.0.1 版本已知 Bug(Bug 5191623)。解決方式:
$ORACLE_HOME/sysman/lib/ins_sysman.mk,在 `e2eme` 連結行加入 `-ldl` 旗標:# 修改前
e2eme: $(E2EME_OBJS) ...
$(LD) $(LDFLAGS) -o $@ $(E2EME_OBJS) $(SYSMANLIBS) $(LINKLDLIBS)
# 修改後
e2eme: $(E2EME_OBJS) ...
$(LD) $(LDFLAGS) -o $@ $(E2EME_OBJS) $(SYSMANLIBS) $(LINKLDLIBS) -ldl
存檔後重新執行安裝程式的「Retry」或手動 `make -f ins_sysman.mk e2eme`。
sqlplus / as sysdba
SQL> SELECT * FROM v$version;
確認版號為 10.2.0.x,Enterprise Manager 可正常啟動(emctl status dbconsole)。
Linux 64 位元安裝 Oracle 10g 最常見阻礙在於 32/64 位元函式庫相容性與缺漏 RPM。建議直接部署 10.2.0.4 或 11g R2 以上版本,避開早期版本已知連結器 Bug,並嚴格遵循 Oracle 安裝前檢查清單(CVU)。