首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle ASM PRCR-1079 監聽啟動失敗:LD_LIBRARY_PATH 缺失排查實錄

     編輯:Oracle 資料庫相關知識

Grid 使用者啟動 Listener 時拋出 PRCR-1079: Failed to start resource ora.LISTENER.lsnr,伴隨 CRS-5016、TNS-12541、Linux Error: 111 Connection refused。根因是 oraagent.bin 找不到共享庫 libocr11.so,源於環境變數 LD_LIBRARY_PATH 未設定。

一、錯誤現場

[grid@rolequery ~]$ srvctl start listener
PRCR-1079 : Failed to start resource ora.LISTENER.lsnr
CRS-5016: Process "/home/U01/app/grid/11.2.3/bin/lsnrctl" spawned by agent
"/home/U01/app/grid/11.2.3/bin/oraagent.bin" for action "start" failed...
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
Linux Error: 111: Connection refused

二、日誌深度分析

檢視 $GRID_HOME/log/<host>/agent/ohasd/oraagent_grid/oraagent_grid.log:

[ora.LISTENER.lsnr] ... Listener failed to start.
[ AGENT] ... UserErrorException: Locale is
clsnUtils::error Exception type=2 string= CRS-5016: ...
oraagent.bin: error while loading shared libraries: libocr11.so: cannot open shared object file

三、驗證庫檔案存在但未被載入

[grid@rolequery ~]$ ls -l /home/U01/app/grid/11.2.3/lib/libocr11.so
-rw-r----- 1 grid oinstall 1590995 Sep 3 2011 /home/U01/app/grid/11.2.3/lib/libocr11.so
[grid@rolequery ~]$ echo $LD_LIBRARY_PATH
# 輸出為空,未設定

四、解決方案:設定 LD_LIBRARY_PATH

  1. 編輯 Grid 使用者環境設定檔(~/.bash_profile 或 ~/.asmprofile):
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
  2. 重新載入環境:
    source ~/.bash_profile
  3. 再次啟動 Listener 驗證:
    [grid@rolequery ~]$ srvctl start listener
    [grid@rolequery ~]$ srvctl status listener
    Listener LISTENER is enabled
    Listener LISTENER is running on node(s): rolequery

五、根因總結

  • oraagent.bin 是 Clusterware 代理程式,啟動資源時需載入 $ORACLE_HOME/lib 下的共享庫(libocr11.so、libclntsh.so 等)。
  • Grid 使用者登入環境若缺少 LD_LIBRARY_PATH,動態連結器找不到庫,導致 oraagent.bin 執行失敗,進而無法啟動 Listener 等資源。
  • 此問題常見於手動建立 Grid 使用者、未執行 oracleasm 設定腳本、或環境變數被覆寫的場景。

六、永久修正建議

  1. 在 $GRID_HOME/crs/install/crsconfig_params 或 ~/.bash_profile 統一設定 LD_LIBRARY_PATH。
  2. 使用 crsctl setenv res ora.LISTENER.lsnr -env "LD_LIBRARY_PATH=..." 針對資源設定(不推薦,維護成本高)。
  3. 部署自動化腳本(Ansible/Shell)統一配置所有叢集節點環境變數。
  4. 驗證指令:ldd $ORACLE_HOME/bin/oraagent.bin 確認所有依賴庫均找到(無 not found)。

七、相關指令速查

操作指令
檢查 Library 依賴ldd $ORACLE_HOME/bin/oraagent.bin
查看 Agent 日誌tail -f $GRID_HOME/log/<host>/agent/ohasd/oraagent_grid/oraagent_grid.log
設定資源環境變數crsctl setenv res ora.LISTENER.lsnr -env "LD_LIBRARY_PATH=..."
啟動 Listenersrvctl start listener
查看 Listener 狀態srvctl status listener
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved