Oracle 監聽配置詳解

xz43發表於2011-01-14
    使用ORACLE的SQL*Net V.2連線客戶機和伺服器,需配置每個客戶機和伺服器。在伺服器上需配置的檔案有:listener.ora、/etc/services,在客戶機上需配置tnsnames.ora檔案。
 
    客戶端不需要知道資料庫名字和例項名字,只需要知道資料庫對外提供的服務名(service_name)就可以申請連線到資料庫。這個服務名字可以設定成和例項名字一樣,也可以根據業務需求設計。在資料庫啟動過程,oracle會向監聽程式註冊相應的服務,任意的一個資料庫都會有兩條資訊註冊到監聽器中:oracle對應的instance_name和service_name。

    客戶端是透過監聽程式連線到資料庫伺服器的,監聽中記錄著相應的oracle service,而客戶端只需要在tnsnames中提供正確的服務名就可以建立和資料庫伺服器的連線。

   以下為伺服器上的listener.ora檔案(linux:/oracle/product/10g/network/admin;windows:D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN)內容:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /oracle/product/10g)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = testserver3)(PORT = 1521))
    )
  )

其中,LISTENER是伺服器中監聽程式的名稱;

PROTOCOL  表明所使用的網路協議,若是TCP/IP協議,則該值必須為“TCP”;

HOST  表示伺服器的網路地址,為伺服器的IP或者網內的機器名;

PORT  指TCP/IP協議在主機中所佔用埠號,ORACLE預設使用1521,是在安裝ORACLE資料庫時定義的,在安裝時可以改變,安裝完成後不能改變此值;

SID_NAME  指伺服器上執行的ORACLE資料庫名稱,該值應與.bash_profile檔案中的環境變數ORACLE_SID相同(一般情況下此檔案為預設值“PLSExtProc”);

ORACLE_HOME  是指ORACLE資料庫的主目錄,該值也應與. bash_profile檔案中的環境變數ORACLE_HOME相同。

   

    客戶機為了和伺服器連線,必須先和伺服器上的監聽程式聯絡。ORACLE透過tnsnames.ora檔案中的連線描述符來說明連線資訊。一般tnsnames.ora 是建立在客戶機上的。如果是客戶機/伺服器結構,整個網路上只有一臺機器安裝了ORACLE資料庫伺服器,那麼只需在每個要訪問ORACLE伺服器的客戶機上定義該檔案,在伺服器上無需定義。但是,如果網路上有多臺機器均安裝了ORACLE資料庫伺服器,並且伺服器之間有資料共享的要求,那麼在每臺伺服器上都必須定義該檔案。

以下是客戶端tnsnames.ora內容:

ORCL_18 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.18)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

其中,ADDRESS_LIST  表示該客戶機要經由多種協議與一臺或多臺伺服器連線。在該樣式檔案中就表示該客戶機要用TCP/IP協議來和伺服器相連。

PROTOCOL 指明要連線使用的協議。

SERVICE_NAME  “SERVICE_NAME”就是“Global Database Name”,ORACLE8i資料庫使用“Global Database Name”來唯一標識自己,通常的格式為“name.domain”,此處的值為“ora817.huawei.com”。

HOST  是TCP/IP協議使用的伺服器IP地址或者機器名稱。

PORT  是TCP/IP使用的埠地址。

SID  指定要連線的伺服器上ORACLE資料庫的ORACLE_SID。

SERVER=DEDICATED 表示用專用伺服器連線ORACLE資料庫,該選項在伺服器上的tnsnames.ora檔案中會出現。

 

Lsnrctl命令綜述  

  Lsnrctl命令用來管理Oracle監聽器,是一個命令列介面。想呼叫這個命令列工具,在命令列鍵入lsnrctl即可。可以在LSNRCTL>提示符下鍵入help來顯示這些命令的一份清單。

  Services 列舉出服務的一個彙總表及為每個協議服務處理程式所建立和拒絕的連線資訊個數

  Start listener 啟動指定的監聽器

  Status listener顯示指定監聽器的狀態

  Stop listener 關閉指定的監聽器

  Trace 開啟監聽器的跟蹤特性

  Version 顯示Oracle Net軟體與協議介面卡的版本

  Change_password 允許使用者修改關閉監聽器所需要的密碼

  Reload 重新讀取listener.ora檔案,但不關閉監聽器。如果該檔案發生了變化,重新重新整理監聽器。

  Save_config 當從lsnrctl工具中對listener.ora檔案進行了修改時,複製一個叫做listener.bak的listener.ora檔案

  Exit 退出lsnrctl實用工具

  Quit 執行和exit相同的功能

  C:\>lsnrctl services

 

附錄:

RAC某個節點上的listener.ora 和 tnsnames.ora

# listener.ora.dbsv2 Network Configuration File: /oracle/product/10.2/database/network/admin/listener.ora.dbsv2
# Generated by Oracle configuration tools.

SID_LIST_LISTENER_DBSV2 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /oracle/product/10.2/database)
      (PROGRAM = extproc)
    )
  )

LISTENER_DBSV2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbsv2-vip)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521)(IP = FIRST))
    )
  )


# tnsnames.ora Network Configuration File: /oracle/product/10.2/database/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbsv1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbsv2-vip)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

ORCL2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbsv2-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
      (INSTANCE_NAME = orcl2)
    )
  )

ORCL1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbsv1-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
      (INSTANCE_NAME = orcl1)
    )
  )

LISTENERS_ORCL =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521))
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

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

相關文章