單一資料庫伺服器支援多個 SID(如 KKMAN、ORCL)時,監聽器可採用多埠(每個 SID 獨立埠)或單埠多實例(共用 1521,透過 SERVICE_NAME 路由)兩種架構。本文提供完整 listener.ora 與 tnsnames.ora 配置範本。
| 維度 | 多埠監聽 | 單埠多實例 |
|---|---|---|
| 監聽埠 | 1521 (ORCL), 1522 (KKMAN) | 1521 共用 |
| 防火牆規則 | 需開放多埠 | 僅開放 1521 |
| 客戶端連線 | PORT 指定對應埠 | SERVICE_NAME 路由 |
| 隔離性 | 網路層級隔離 | 邏輯隔離 |
| 管理複雜度 | 較高 | 較低 |
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(SID_NAME = ORCL)
)
(SID_DESC =
(GLOBAL_DBNAME = KKMAN)
(SID_NAME = KKMAN)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac02)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac02)(PORT = 1522))
)
)
KKMAN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = KKMAN)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(SID_NAME = ORCL)
)
(SID_DESC =
(GLOBAL_DBNAME = KKMAN)
(SID_NAME = KKMAN)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac02)(PORT = 1521))
)
)
KKMAN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = KKMAN)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
$ lsnrctl stop
$ lsnrctl start
# 或熱重載(不中斷現有連線)
$ lsnrctl reload
$ tnsping KKMAN
$ tnsping ORCL
$ sqlplus user/pass@KKMAN
$ sqlplus user/pass@ORCL
SERVICE_NAMES、INSTANCE_NAMESID_LIST(除非需啟動前連線/外部程序)lsnrctl services