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

Oracle 連線架構全解析:本地 vs 遠程、專用/共享服務器、監聽器靜態註冊、SYS/AS SYSDBA 特權機制

     編輯:Oracle 教學

Oracle 連線架構全解析:本地 vs 遠程、專用/共享服務器、監聽器靜態註冊、SYS/AS SYSDBA 特權機制

Oracle 連線不僅是「用戶名/密碼@IP:PORT/SERVICE」,背後涉及進程架構、環境變量、監聽器動態/靜態註冊、密碼文件驗證、特權用戶機制。本文從底層原理到實戰場景完整拆解。

1. 兩大連線類別

類別定義關鍵特徵
本地連線 (Bequeath/Beq)Client 與 Server 同機無需 Listener,sqlplus 直接 fork 專用服務器進程,靠 $ORACLE_HOME + $ORACLE_SID 定位 Instance
遠程連線 (Network)Client 與 Server 異機需 Listener (tnslsnr) 監聽,由 Listener 啟動專用/共享服務器,靠 Service Name 解析到 SID

2. 本地連線深度剖析

2.1 連線到已啟動的 Instance

$ env | grep ORACLE
ORACLE_SID=orcl12c
ORACLE_HOME=/opt/app/oracle/product/12.1.0/dbhome_1

$ sqlplus / as sysdba
-- OS 用戶 oracle 屬於 OSDBA 組 -> 無需密碼直接以 SYS 登入
-- "as sysdba" 強制以 SYS 身份,忽略命令列提供的用戶名/密碼
關鍵點: 本地連線時 as sysdba 會完全忽略命令列的用戶名密碼,只要 OS 驗證通過即以 SYS 登入。即使輸入 sqlplus fake/wrong as sysdba 也能成功 (前提是 OS 用戶正確)。

2.2 Instance 未啟動時的連線 (Idle Instance)

$ sqlplus / as sysdba
Connected to an idle instance.

-- 非 OSDBA 用戶 (如 root) 需密碼文件驗證
$ sqlplus sys/syspwd as sysdba
Connected to an idle instance.

此時 Listener 甚至未啟動,sqlplus 直接啟動專用服務器進程掛載 SGA,密碼驗證靠 $ORACLE_HOME/dbs/orapw 密碼文件 (僅含 SYS)。

3. 遠程連線與 Listener 靜態註冊

3.1 動態註冊限制

Instance 啟動後會向 Listener 動態註冊 Service (如 orcl12c.xy.com)。但Instance 未啟動時無法動態註冊,導致遠程連線報 ORA-12514: TNS:listener does not currently know of service requested。

3.2 靜態註冊解決方案 (listener.ora)

# $ORACLE_HOME/network/admin/listener.ora
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /opt/app/oracle/product/12.1.0/dbhome_1)
      (SID_NAME = orcl12c)
    )
  )

重啟 Listener:lsnrctl stop; lsnrctl start。lsnrctl status 會顯示 Service "orcl12c" ... Instance "orcl12c", status UNKNOWN,即可在 Instance 關閉時遠程以 SYSDBA 連線啟動庫。

4. 連線對比總結表

維度本地連線遠程連線
服務器進程由誰產生sqlplus 直接 forkListener (tnslsnr) spawn
如何定位 Instance$ORACLE_HOME + $ORACLE_SIDClient 提供 Service Name → Listener 解析
用戶驗證方式1. OS 認證 (OSDBA 組) 2. 密碼文件 3. 資料庫內部1. 密碼文件 (Instance 下) 2. 資料庫內部
特權連線as sysdba 忽略用戶名密碼as sysdba 需正確 SYS 密碼 (除非配置 SSL/外部認證)

5. SYS / AS SYSDBA 核心規則

  • AS SYSDBA 意味著必須以 SYS 身份登入,反之 SYS 可用 NORMAL/AS SYSOPER 登入。
  • 密碼文件 (orapw) 控制遠程特權連線,REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE/SHARED 參數控制共享。
  • 本地 OS 認證優先於密碼文件:OSDBA 組用戶免密以 SYSDBA 登入。

6. 實戰檢查清單

  1. 本地連不上?檢查 ORACLE_SID、ORACLE_HOME、OS 群組、sqlnet.ora SQLNET.AUTHENTICATION_SERVICES=(NTS)。
  2. 遠程 ORA-12514?Listener 未註冊該 Service → 檢查 listener.ora 靜態註冊或 Instance 是否啟動動態註冊。
  3. 遠程 ORA-12541?Listener 未啟動或 Port 防火牆攔截。
  4. 特權連線失敗?確認密碼文件存在、REMOTE_LOGIN_PASSWORDFILE 非 NONE、SYS 密碼正確。
  5. EZCONNECT 簡易連線:sqlplus user/pwd@host:port/service_name (需 10g+ Client)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved