動態監聽與靜態監聽

leon830216發表於2014-03-15
支援資料庫版本:10gR2、11gR2

1. 自動註冊的監聽


1-1. 資料庫例項自動註冊監聽
$ cat $ORACLE_HOME/network/log/listener.log
17-JUL-2012 15:36:24 * service_register * insname * 0

# 其中 insname 是資料庫初始化引數的 instance_name 的值
# 資料庫啟動後, 由 PMON 程式自動註冊, 需要 1 分鐘左右的時間


1-2. 自動註冊後監聽器狀態
$ lsnrctl status
Service "dbname.mydomain" has 1 instance(s).
  Instance "insname", status READY, has 1 handler(s) for this service...

# dbname.mydomain 是監聽對外提供的服務名, 要設定成全域性資料庫名或引數 service_names 的值
# dbname 是資料庫初始化引數 db_name 的值
# mydomain 是資料庫初始化引數的 db_domain 的值
# insname 是資料庫初始化引數的 instance_name 的值
# READY 狀態表示是自動註冊的監聽

$ cat $ORACLE_HOME/network/admin/listener.ora
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )


1-3. 客戶端 tnsname.ora
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
MY_TNS_NAME =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = srvname)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbname.mydomain)
    )
  )

# HOST 是資料庫伺服器主機名或 IP 地址, 在伺服器上可透過 netstat -tulnp|grep 1521 檢視
# MY_TNS_NAME 是連線資料庫時的連線字串別名
# SERVICE_NAME 與 1-2 中監聽對外提供的服務名相同

1-4. 連線

1-4-1. 本地連線, 不經過監聽器
sqlplus hr/hr

1-4-2. 經過監聽器並使用客戶端 tnsname.ora 檔案解析
sqlplus hr/hr@my_tns_name

1-4-3. 簡易連線方式, 經過監聽但不使用客戶端 tnsname.ora 檔案
sqlplus hr/hr@srvname:1521/dbname.mydomain

2. 靜態註冊的監聽
# 為了解決動態註冊不穩定的情況

2-1. 配置監聽器並重啟監聽
$ cat $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (global_dbname = dbname.mydomain)
      (oracle_home = D:\oracle\product\10.2.0\db_1)
      (sid_name = go)
    )
  )

# global_dbname 設定為全域性資料庫名, 或引數 service_names 的值
# sid_name 設定為引數 instance_name 的值

2-2. 監聽器狀態
$ lsnrctl status
Service "dbname.mydomain" has 1 instance(s).
  Instance "insname", status UNKNOWN, has 1 handler(s) for this service...

2-3. 客戶端設定
# 與動態註冊監聽時設定相同

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22558114/viewspace-1122420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章