oracle 監聽器學習

regonly1發表於2009-09-02


關於Oracle動態註冊和靜態註冊的一些實驗:
實驗平臺:oracle 10.2.0.1
據目前所知Oracle 8i(含)以後都推薦使用service_name而不是sid來連線資料庫了。
透過service_name連線有幾個好處:
1、同個例項可透過多個不同的service_name來連線。而不是像sid一樣只能唯一的指定了。
2、可以最大指定255個字元的名稱,而不是sid的8個字元限制。

首先說下標準配置下的動態註冊過程:
1、Oracle啟動例項;
2、監聽器啟動(lsnrctl start);
3、由pmon程式向監聽器進行註冊。
      註冊的名稱從service_names從取出來,然後註冊到監聽器的hostname:1521上面。
註冊的結果就是我們在不用對listener.ora做任何設定的情況下就可以直接登入資料庫了。


實驗:
顯示service_names列表:
> show parameter service_names;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      orcl,dyndb

> host lsnrctl service

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-9月 -2009 14:58:07

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
  例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
    處理程式:
      "DEDICATED" 已建立:0 已被拒絕:0
         LOCAL SERVER
服務 "dyndb" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
    處理程式:
      "DEDICATED" 已建立:10 已拒絕:0 狀態:ready
         LOCAL SERVER
服務 "orcl" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
    處理程式:
      "DEDICATED" 已建立:10 已拒絕:0 狀態:ready
         LOCAL SERVER
....
命令執行成功

以上服務列表中列出了所有已經註冊的服務。
可以看到其中有dyndb和orcl列個服務,目前狀態是ready的。
由於動態註冊是由資料庫主動發起到監聽器的註冊,因此其狀態是可以的,所以顯示的狀態是ready的。
而靜態註冊是直接配置到listener.ora中的,實際上並不知道此時資料庫的狀態,所以監聽器對該伺服器的狀態顯示是unknown的。

服務在監聽器端註冊好後,客戶端即可透過tnsname.ora到監聽器中取對應的service name
以上註冊的兩個service name可同時使用:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dyndb)
    )
  )
  或者
  HSCUSTOMER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

  現在如果要新增一個service name,則使用如下命令即可:
alter system set service_names='orcl,dyndb,testdb' scope=memory;
配置完成後,即可用lsnrctl service或lsnrctl status檢查狀態:
> host lsnrctl status
........
服務 "testdb" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
命令執行成功


但是,如果監聽器的監聽埠不是預設的,資料庫就不能註冊。
> host lsnrctl service

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-9月 -2009 15:37:45

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
  例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
    處理程式:
      "DEDICATED" 已建立:0 已被拒絕:0
         LOCAL SERVER
命令執行成功

沒有出現前面配置好的監聽服務。

所以就要顯式的註冊了,這次需要用到local_listenter引數。
alter system set local_listenter = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=8888)))';
然後手動處罰pmon到監聽器去註冊:
alter system register;

再次檢視,發現註冊成功:
> host lsnrctl status

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-9月 -2009 15:39:17

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
別名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
啟動日期                  02-9月 -2009 15:33:31
正常執行時間              0 天 0 小時 5 分 46 秒
跟蹤級別                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
監聽程式引數檔案          e:\oracle\product\10.2.0\db_1\network\admin\listener.ora
監聽程式日誌檔案          e:\oracle\product\10.2.0\db_1\network\log\listener.log
監聽端點概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8888)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
  例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "dyndb" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "orcl" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "orclXDB" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "orcl_XPT" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "testdb" 包含 1 個例程。
  例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
命令執行成功

參考文章:

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

相關文章