Oracle 是典型的網路資料庫,其通訊協議結構類似 OSI 參考模型,擁有自有分層機制。透過網路實現:資料共享、完整性控制、安全傳輸、跨平台互操作(Linux/Windows、多硬體平台)。
保障 Oracle 網路連通的三大核心要素:
1. 全域資料庫名 | 2. 監聽程式 | 3. 網路服務名
如同網域名 www.chinaitlab.com 由右至左層層遞歸:
.cn → 地理頂級域.com → 二級域chinaitlab → 實體域名Oracle 採用相同層級結構命名分散部署的資料庫:
全域資料庫名 = 資料庫名 + 域名
某企業總部在杭州,分支機構在寧波、舟山:
| 節點 | 資料庫名 | 域名 | 全域資料庫名 |
|---|---|---|---|
| 杭州總部 | ORAL | DTM | ORAL.DTM |
| 寧波分公司 | ORAL | NINGBO.DTM | ORAL.NINGBO.DTM |
| 舟山分公司 | ORAL | ZHOUZHAN.DTM | ORAL.ZHOUZHAN.DTM |
即使目前僅單一資料庫,**也應依全域命名規則命名**,為未來擴充與維護鋪路。
@ 後字串:conn system/passwd @tsh → tsh 即網路服務名客戶端 TNSNAMES.ORA 檔案
| 故障現象 | 可能原因 | 解決建議 |
|---|---|---|
| 非正常關機後無法連線,提示服務名錯誤 | TNSNAMES.ORA 損毀/遺失 | **獨立備份**此檔案,故障時直接還原 |
| 手工修改 TNSNAMES.ORA 導致格式錯誤 | 語法錯誤、編碼問題 | **禁止手工編輯**,使用 Net Configuration Assistant / Net Manager 圖形工具管理 |
| 無法解析全域資料庫名 | DNS/主機檔解析失敗 | 嘗試將 TNSNAMES.ORA 中 HOST 改為 **IP 位址** 繞過解析 |
| 防火牆阻擋連線 | Linux 預設開啟防火牆 | 學習環境暫時關閉防火牆;生產環境開放 1521 埠及監聽器動態埠範圍 |
TNSNAMES.ORA、LISTENER.ORA、SQLNET.ORA__ (如 ORCL_PROD_APP)LISTENER.ORA 設定是否匹配監聽程式 = 飯店門口保安
客戶端請求 = 客人到訪
驗證通過 = 開門放行
驗證失敗 = 攔截拒絕
伺服器端監聽程式未啟動 → 所有網路連線全部失敗(本地連線 BEQ 協定除外)
-- 狀態檢查
lsnrctl status
-- 啟動/停止
lsnrctl start
lsnrctl stop
-- 重新載入設定 (不中斷現有連線)
lsnrctl reload
-- 查看支援的服務
lsnrctl services
客戶端應用程式
│
▼ (1) 讀取 TNSNAMES.ORA 解析「網路服務名」
│ 取得:服務名(全域資料庫名) + 監聽器位址(IP:PORT)
▼
發起 TCP 連線至 監聽器 IP:PORT
│
▼ (2) 監聽器接收請求,驗證服務名是否在 LISTENER.ORA 註冊
│
├─ 驗證通過 → 啟動專用/共享伺服器進程 → 移交連線
│
└─ 驗證失敗 → 返回錯誤 (ORA-12514, ORA-12505 等)
│
▼ (3) 伺服器進程連接資料庫執行個體 (SGA+背景進程)
│
▼ (4) 執行個體掛載/開啟目標資料庫 (控制檔→資料檔)
│
▼ 完成連線,開始 SQL 交互
三駕馬車缺一不可:
掌握三者交互機制與常見故障排查,是 Oracle DBA 必備核心技能。