生產環境中 sqlplus 執行檔意外被清空(大小變 0 字節),導致 sqlplus / as sysdba 無任何回應。本文記錄從同平台同版本 Oracle Home 拷貝 sqlplus 執行檔修復全過程,並分析 SP2-1503 / SP2-0152 錯誤成因,驗證「同版本同平台二進制互換」可行性。
[oracle@lixora bin]# sqlplus / as sysdba [oracle@lixora bin]# ls -trl -rwxr-x--x 1 oracle oinstall 0 Dec 9 15:52 sqlplus <-- 文件被寫空
拷貝 sqlplus 至 $ORACLE_HOME/bin,修正權限 chmod 750 後測試:
[oracle@lixora ~]$ sqlplus / as sysdba SP2-1503: Unable to initialize Oracle call interface SP2-0152: ORACLE may not be functioning properly
錯誤解讀:sqlplus 無法正確載入動態庫(libclntsh.so 等),導致與 RDBMS 核心通訊失敗。雖然版本號一致,但編譯路徑、依賴庫路徑可能不同。
從同主機另一 Oracle Home(10.2.0.3)拷貝 sqlplus 覆蓋:
[oracle@lixora bin]# ls -trl -rwxr-x--x 1 oracle oinstall 7725 Dec 24 10:29 sqlplus [oracle@lixora bin]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.3.0 - Production Connected to an idle instance.
修復成功,後續 startup、startup force、查詢 v$database、dual 皆正常。
sqlplus 二進制檔可直接互換;跨版本(11g vs 10g)可能因依賴庫不兼容失敗。SP2-1503/SP2-0152 核心原因是動態庫載入失敗,優先檢查 LD_LIBRARY_PATH、ORACLE_HOME、libclntsh.so 符號鏈接。rman、dbca、netca 等)同理可嘗試同源替換修復。ls -l、ldd sqlplus 輸出便於事後審計。#!/bin/bash
# sqlplus_health_check.sh
ORACLE_HOME=${ORACLE_HOME:-/u01/app/oracle/product/11.2.0/dbhome_1}
$ORACLE_HOME/bin/sqlplus -v | head -1
ldd $ORACLE_HOME/bin/sqlplus | grep -i "not found" && echo "WARN: missing deps" || echo "OK: deps resolved"
$ORACLE_HOME/bin/sqlplus -s / as sysdba <