共享伺服器預設向 Listener 動態註冊 (PMON 定期註冊)。若需透過靜態服務名 (SID_LIST_LISTENER) 讓共享伺服器被連線,必須在 DISPATCHERS 參數中明確指定 SERVICE 屬性包含該靜態服務名。
PROD3PROD3PROD3.ORACLE.COM (在 LISTENER.ORA 定義)SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PROD3.ORACLE.COM) -- 靜態服務名
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = PROD3)
)
...
)
啟用共享伺服器後,LSNRCTL SERVICES 顯示靜態服務 PROD3.ORACLE.COM 下只有 DEDICATED 處理程序,缺少 DISPATCHER,導致以 SERVER=SHARED 連線時出現 ORA-12523。
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=3)(SERVICE=PROD3,PROD3.ORACLE.COM)' SCOPE=BOTH;
SERVICE 列出需註冊的服務名,可多個以逗號分隔。LSNRCTL SERVICES 將在 PROD3.ORACLE.COM 下顯示 D000、D001 等 Dispatcher。-- TNSNAMES.ORA
PROD3_SHARED =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=server1)(PORT=1521))
(CONNECT_DATA = (SERVER=SHARED)(SERVICE_NAME=PROD3.ORACLE.COM))
)
-- 測試
SQLPLUS SYS/ORACLE@PROD3_SHARED AS SYSDBA
-- Connected successfully.
| 項目 | 說明 |
|---|---|
| 動態註冊 | PMON 自動向 LISTENER 註冊 SERVICE_NAMES 參數值 |
| 靜態註冊 | LISTENER.ORA SID_LIST 定義 GLOBAL_DBNAME |
| 共享伺服器需求 | Dispatcher 必須向同一服務名註冊,否則 SHARED 連線找不到 Dispatcher |
| 設定參數 | DISPATCHERS 加 SERVICE=動態名,靜態名 |