listener.ora の GLOBAL_DBNAME と SID_NAME

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