Oracle の listener.ora の GLOBAL_DBNAME と SID_NAME はなんのために使われているのか調べてみた。
GLOBAL_DBNAME がクライアントとのインタフェースに、SID_NAME がインスタンスとのインタフェースに使われているっぽい。つまり、GLOBAL_DBNAME は tnsnames.ora の SERVICE_NAME と、SID_NAME は接続するインスタンス名と一致しないといけない。
[実験結果]
- listener.ora
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.45.101)(PORT=1522))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl)
(ORACLE_HOME=/export/home/oracle/product/10.2.0/db_1)
(SID_NAME=matrix)))
- tnsnames.ora
orcl=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.45.101)(PORT=1522))
(CONNECT_DATA=
(SERVICE_NAME=orcl)))
$ sqlplus system/manager@orcl SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- matrix
- orcl というサービス名で待受けて、matrix インスタンスに接続するようになってるっぽい。
$ lsnrctl status (中略) Service "orcl" has 1 instance(s). Instance "matrix", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully