| 方法 | 適用場景 | 優點 | 缺點 | 關鍵配置 |
|---|---|---|---|---|
| Oracle Internet Directory (OID) | 大型企業、集中管理數百服務名 | 單一管理點、LDAP 標準、支援 ACL | 架構複雜、需額外 LDAP 伺服器 | ldap.ora、sqlnet.ora NAMES.DIRECTORY_PATH=(LDAP) |
| External Naming (NDS/DNS) | 已有 NDS/DNS 基礎設施 | 利用現有目錄服務 | 非 Oracle 原生、除錯困難 | sqlnet.ora NAMES.DIRECTORY_PATH=(CDS/NIS) |
| Host Naming | 簡單環境、服務名=主機名、無 SID/Service Name 區分 | 零配置、無 tnsnames.ora | 僅支援 TCP/IP、預設埠 1521、無負載均衡/故障轉移 | sqlnet.ora NAMES.DIRECTORY_PATH=(TNSNAMES, HOSTNAME)、listener.ora GLOBAL_DBNAME=主機名 |
| Easy Connect (EZCONNECT) | 10g+、臨時連線、開發測試、無 tnsnames.ora 權限 | 連線字串自含主機/埠/服務名、無需客戶端配置 | 不支援進階特性 (負載均衡、連線池、外部程序) | sqlnet.ora NAMES.DIRECTORY_PATH=(EZCONNECT, TNSNAMES) |
| Local Naming (tnsnames.ora) | 生產環境標準、支援完整特性 | 功能最完整、支援負載均衡/故障轉移/多協定 | 需維護每台客戶端 tnsnames.ora | NetCA/Net Manager 圖形化編輯 tnsnames.ora |
# sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LinuxOracle)(PORT = 1521))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = LinuxOracle) # 必須等於主機名
(ORACLE_HOME = /u01/app/oracle/product/9.2.0)
(SID_NAME = dg1)
)
)
關鍵:GLOBAL_DBNAME = 主機名,否則報 ORA-12514。
C:\Windows\System32\drivers\etc\hosts
192.168.1.61 LinuxOracle
sqlplus system/password@LinuxOracle
-- 成功連線
NAMES.DIRECTORY_PATH = (EZCONNECT, TNSNAMES)
-- 完整語法
sqlplus user/pwd@//host:port/service_name
-- 簡化 (預設埠 1521)
sqlplus user/pwd@host/service_name
-- IPv6
sqlplus user/pwd@[2001:db8::1]/service_name
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dg1)
)
)
# TEST = Net Service Name (本地別名)
# SERVICE_NAME = Oracle 服務名 (GLOBAL_DBNAME)