Oracle 提供多層次命名機制,支援單機到分散式環境。本文系統梳理五大核心名稱的定義、關係、預設值與常見配置錯誤 (ORA-12154)。
| 名稱 | 定義與用途 | 組成/預設值 | 修改方式 |
|---|---|---|---|
| DB_NAME | 資料庫唯一標識 (8 字元內,字母/數字/_/#/$) | 建庫時指定 | 重建資料庫或 NID 工具 |
| DB_DOMAIN | 邏輯網域名稱,供分散式管理區分同名資料庫,無關 DNS | 參數 db_domain | 修改參數檔 + 重啟 |
| GLOBAL_NAME | DB_NAME.DB_DOMAIN,全域唯一標識,建議作為資料庫正式名稱 | 預設 = DB_NAME.DB_DOMAIN | ALTER DATABASE RENAME GLOBAL_NAME TO new_name |
| SERVICE_NAME | 8i 新增,對應一個資料庫 (非實例),支援 RAC 多實例單一服務名,預設 = GLOBAL_NAME | 參數 service_names (可多值) | 動態修改 ALTER SYSTEM SET SERVICE_NAMES |
| NET SERVICE NAME | 客戶端連線別名 (TNS Alias),屏蔽連線細節,記錄於 tnsnames.ora | 自訂字串 | 編輯 tnsnames.ora |
DB_NAME + DB_DOMAIN → GLOBAL_NAME (預設) GLOBAL_NAME → SERVICE_NAME (預設,可多對一) NET SERVICE NAME → (DESCRIPTION → ADDRESS + CONNECT_DATA (SERVICE_NAME|SID))
-- tnsnames.ora
HZUAT = (DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=10.18.1.102)(PORT=1521))
(CONNECT_DATA = (SERVICE_NAME=hzuat)))
-- sqlnet.ora
NAMES.DEFAULT_DOMAIN = staff.ebao.com
客戶端執行 sqlplus user/pwd@HZUAT 報 ORA-12154。
sqlplus 讀取 sqlnet.ora 的 NAMES.DEFAULT_DOMAIN,自動將 HZUAT 擴展為 HZUAT.staff.ebao.com,導致在 tnsnames.ora 找不到對應條目。
sqlnet.ora 的 NAMES.DEFAULT_DOMAIN。tnsnames.ora 中將條目命名為 HZUAT.staff.ebao.com (含網域)。理解命名體系,能快速診斷連線問題,並在 RAC/Data Guard/分散式環境中正確規劃服務名與別名。