首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Linux 64位安裝 Oracle 10g 遇 e2eme 連結錯誤完整排查方案

     編輯:Oracle 資料庫基礎

錯誤現象

安裝 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 代理元件)連結失敗。

系統先決條件檢查清單

1. 必要 RPM 套件完整安裝

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` 或掛載安裝光碟補裝。

2. 核心參數設定(/etc/sysctl.conf)

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 生效。

3. 關閉 SELinux

# /etc/selinux/config
SELINUX=disabled

修改後需重啟作業系統。

4. Oracle 使用者環境變數(~/.bash_profile)

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

針對 e2eme 連結錯誤的專項修正

若上述環境均正確仍報錯,通常是 10.2.0.1 版本已知 Bug(Bug 5191623)。解決方式:

  1. 下載並套用 Patch 5191623(或升級至 10.2.0.4+ / 11g)。
  2. 或手動修補 $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)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved