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

Linux 下 Oracle 啟動 TNS 錯誤完整排查指南:環境變數、監聽器與實例啟動

     編輯:Oracle 資料庫基礎

問題現象

在 Linux 環境下以 sqlplus 啟動資料庫時,遭遇錯誤:

ORA-12154: TNS:could not resolve the connect identifier specified
或
ORA-12541: TNS:no listener

核心原因通常是 環境變數未正確載入,導致 ORACLE_SID、ORACLE_HOME 未設定,或監聽器未啟動。

標準排查與修復流程(10 步驟)

1. 切換至 oracle 使用者

$ su - oracle

使用 su -(帶減號)可載入使用者的登入環境(.bash_profile/.profile)。

2. 驗證 ORACLE_SID

$ echo $ORACLE_SID

若無輸出或顯示錯誤 SID,表示環境變數未設定或未載入。

3. 進入 oracle 家目錄並載入環境設定檔

$ cd ~
$ source .bash_profile

或直接執行 . .bash_profile。

4. 再次驗證關鍵環境變數

$ echo $ORACLE_SID
$ echo $ORACLE_HOME
$ echo $PATH | grep $ORACLE_HOME

確認三者皆正確顯示。若仍異常,編輯 .bash_profile 手動補齊:

export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

5. 啟動監聽器

$ lsnrctl start

成功訊息:

LSNRCTL for Linux: Version 19.0.0.0.0 - Production
Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
...
The listener supports no services
The command completed successfully

註:資料庫實例啟動後,PMON 會自動向監聽器註冊服務。

6. 以無登入模式進入 SQL*Plus

$ sqlplus /nolog

7. 以 SYSDBA 身分連線

SQL> CONNECT / AS SYSDBA

8. 啟動資料庫實例

SQL> STARTUP

正常輸出:

ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size		    8896512 bytes
Variable Size		  520093696 bytes
Database Buffers	 1073741824 bytes
Redo Buffers		   7880704 bytes
Database mounted.
Database opened.

9. 驗證服務註冊

$ lsnrctl status

確認輸出包含 Service "orcl" has 1 instance(s)。

10. 測試應用連線

$ sqlplus scott/tiger@//localhost:1521/orcl

常見變體情況

情況原因處理
ORA-01031: insufficient privileges非 dba 群組用戶執行 startup確認用戶屬於 dba 群組:groups oracle
ORA-00845: MEMORY_TARGET not supported/dev/shm 空間不足掛載較大 tmpfs 或改用 SGA_TARGET
監聽器啟動失敗Port 1521 衝突或權限不足netstat -an | grep 1521 排查;root 啟動或調整防火牆
環境變數每次登入皆遺失.bash_profile 未正確設定編輯 ~/.bash_profile 永久生效

自動化建議

將上述流程封裝為 Shell 腳本 start_oracle.sh,並納入系統開機啟動(systemd 或 /etc/rc.local),實現無人值守啟動。

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