監聽配置詳解

pwz1688發表於2014-04-27
監聽作用:一般來說本機不需要配置監聽,只有遠端客戶端連線資料庫時才需要伺服器端配置監聽,客戶端配置TNS,一旦連線建立,監聽就完成了使命。
一、配置監聽
監聽配置檔案所在目錄為$ORACLE_HOME/network/admin
[oracle@gc1 ~]$ cd $ORACLE_HOME/network/admin
[oracle@gc1 admin]$ ls
listener.ora samples shrept.lst tnsnames.ora
[oracle@gc1 admin]$ rm *.ora
複雜版場景:
     配置兩個監聽,其中listener使用預設埠1521,並服務於PROD和EMPEP兩個例項;另一個監聽LSNR2使用1526埠,該監聽用於動態例項註冊。
[oracle@gc1 ~]$ cd $ORACLE_HOME/network/admin
[oracle@gc1 admin]$ ls
listener.ora samples shrept.lst tnsnames.ora
簡單版場景:
     配置一個監聽,其中listener使用預設埠1521,該監聽用於動態例項註冊。這是資料庫預設的監聽配置方式。
第一種方式,可通過圖形畫介面配置監聽(實現簡單版場景)
--root使用者啟用圖形畫介面
監聽配置詳解
--oracle使用者執行netca命令
監聽配置詳解
--進入圖形畫介面配置監聽
監聽配置詳解
一步一步按預設往下點,就可以,總共有7步。配置好後,進入監聽檔案目錄,檢視listener.ora與tnsnames.ora資訊
[oracle@gc1 admin]$ ls
listener.ora samples shrept.lst tnsnames.ora
[oracle@gc1 admin]$ more listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = gc1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
listener.ora內容如預設監聽配置,監聽名為LISTENER,埠為1521,且屬於動態監聽。
[oracle@gc1 admin]$ more tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
tnsnames.ora沒有做相關的配置,因為它是屬於客戶端要配置的檔案。
第二種方式:手動配置監聽,即手工建立listener.ora檔案(實現複雜版場景)。
--先刪除之前圖形畫介面配置的監聽與tns
查閱官方文件,獲取10g R2配置監聽示例如下:
監聽配置詳解
修改host,埠及oracle_home相關資訊即可,    如下示(紅色字型部分):
LSNR2=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=gc1)(PORT=1526))
      (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))
    )
  )
SID_LIST_LSNR2=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=plsextproc)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM=extproc)
    )
  )
以上是動態監聽,因為SID_NAME=plsextproc表示為外部程式起作用,下面再配置一個靜態監聽,如下
LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=gc1)(PORT=1521))
    )
  )
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=PROD)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (GLOBAL_DBNAME=PROD)
    )
  (SID_DESC=
      (SID_NAME=EMREP)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (GLOBAL_DBNAME=EMREP)
    ) 
  )
注意:
1、靜態監聽list中的的sid_name對應於資料庫例項名,可以配多個庫,下面的GLOBAL_DBNAME可以隨意起名(主要供客戶端連線使用,在動態監聽中這項為PROGRAM=extproc且是預設設定不需修改);
2、配有多個監聽時,必須配一個監聽名為LISTENER的。
3、同時配有靜態和動態監聽時,靜態監聽中的“程式通訊 (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))”需刪除。
4、配置多個監聽時,最好只配一個動態,多個靜態。
所有配置好後,內容顯示如下:
監聽配置詳解

--檢視主機名方式有三種如下:
[oracle@gc1 admin]$ hostname
gc1
[oracle@gc1 admin]$ more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 node1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.188.116 gc1
192.168.8.115 gc2
[oracle@gc1 admin]$ more /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=gc1
注意,若這三個地方,主機名不一樣,則以/etc/hosts的內容為準,另外hostname引數是不區分大小寫的。
二、配置tns
--檢視初始化引數檔案中監聽引數資訊,配置相應的監聽,如下圖紅色標識所示:
監聽配置詳解

注意:這裡的local_listener='lsnr2'不是監聽的名字,而是tns名字,因此我們需要配置名為lsnr2的tns。
--檢視官方文件配置tns例子
監聽配置詳解
需修改tns名稱,host、port及service_name,若為靜態監聽,則service_name對應於listener中的global_name,若為動態監聽,則service_name為show parameter service引數值。下面配置一個靜態prod和一個動態prod_s。如下:
[oracle@gc1 admin]$ vi tnsnames.ora
監聽配置詳解
再配一個連外部資料庫的emrep及初始化引數檔案預設的動態監聽lsnr2,如下:
監聽配置詳解
再配一個rac的tns,如下:
監聽配置詳解
注意:以上host是對應vip,也可以寫host name,但因可能存在許可權問題(無root使用者,無法讀寫etc/hosts裡面配置資訊),最好使用ip地址。
另外給以上監聽設定共享或專用連線方式,除prod_s為共享外,其它都是專用模式。
tnsnames.ora的最終內容如下示:
監聽配置詳解
三、啟動關閉監聽、檢視監聽狀態
啟動與關閉監聽的語法:
啟動:lsnrctl START [listener_name]
關閉:lsnrctl STOP [listener_name]
where listener_name is the name of the listener defined in the listener.ora file. It is not necessary to identify the listener if you are using the default listener, named LISTENER.
--啟動監聽
監聽配置詳解
說明:實際啟動監聽過程中出現了tns-12560與tns-00530錯誤,解決過程詳見下篇文章“啟監聽時,報TNS-12560、TNS-00530錯誤”。
注意:閱讀上面的啟動資訊可知,listener.ora中配了二個監聽,實際只啟動了靜態監聽listener,動態監聽lsnr2需再啟動一下。
--再次啟動lsnr2動態監聽
監聽配置詳解
檢視監聽狀態語法:
lsnrctl STATUS [listener_name]
where listener_name is the name of the listener defined in the listener.ora file. It is not necessary to identify the listener if you are using the default listener, named LISTENER.
如檢視預設監聽狀態
監聽配置詳解
--檢視指定監聽狀態
監聽配置詳解
注意:lsnr2啟動最初狀態也是unknown的,實際這是動態註冊的過程,過幾分鐘後再檢視會發現狀態有變化,如下示:監聽配置詳解


--在gc2上手工配置一個簡單版監聽,如下:
[oracle@gc2 ~]$ cd $ORACLE_HOME/network/admin
[oracle@gc2 admin]$ more listener.ora
LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=gc2)(PORT=1521))
      (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))
    )
  )
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=plsextproc)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM=extproc)
    )
  )
[oracle@gc2 admin]$ more tnsnames.ora
prod=
 (DESCRIPTION=
  (ADDRESS= (PROTOCOL=tcp)(HOST=gc1)(PORT=1521))
  (CONNECT_DATA=
     (SERVICE_NAME=PROD)
     (SERVER=dedicated)
  )
 )
emrep=
 (DESCRIPTION=
  (ADDRESS= (PROTOCOL=tcp)(HOST=gc2)(PORT=1521))
  (CONNECT_DATA=
     (SERVICE_NAME=EMREP)
     (SERVER=dedicated)
  )
 )
--啟動監聽
[oracle@gc2 ~]$ lsnrctl start
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 28-FEB-2014 07:52:46
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gc2)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gc2)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 28-FEB-2014 07:52:48
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gc2)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "plsextproc" has 1 instance(s).
  Instance "plsextproc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
四、建立密碼檔案
要遠端sysdba使用者登入資料庫,必須建立sys使用者密碼檔案
--以本地sysdba許可權登入並修改sys使用者密碼
[oracle@gc2 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Feb 28 08:11:16 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 71304784 bytes
Database Buffers 209715200 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> alter user sys identified by oracle ; 
User altered.
--刪除原有密碼檔案,以sys使用者的sysdba許可權登入遠端資料庫
[oracle@gc2 ~]$ cd $ORACLE_HOME/dbs
[oracle@gc2 dbs]$ ls
hc_EMREP.dat hc_oms.dat initdw.ora init.ora lkEMREP lkOMS orapwEMREP orapwoms spfileEMREP.ora spfileoms.ora
[oracle@gc2 dbs]$ rm orapwEMREP
[oracle@gc2 dbs]$ sqlplus sys/oracle@emrep as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Feb 28 09:20:52 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
--建立密碼檔案,並遠端以sysdba使用者登入資料庫
[oracle@gc2 dbs]$ pwd
/u01/app/oracle/product/10.2.0/db_1/dbs
--密碼檔案建立方法,可通過orapwd命令檢視
[oracle@gc2 dbs]$ orapwd
Usage: orapwd file= password= entries= force=
  where
    file - name of password file (mand),
    password - password for SYS (mand),
    entries - maximum number of distinct DBA and force - whether to overwrite existing file (opt),
OPERs (opt),
  There are no spaces around the equal-to (=) character.
[oracle@gc2 dbs]$ orapwd file=orapwemrep1 password=oracle entries=3 force=y
[oracle@gc2 dbs]$ sqlplus sys/oracle@emrep as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Feb 28 09:22:42 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
注意:雖然建立了密碼檔案,但登入仍失敗,因為密碼檔案指定名稱不對,密碼檔案命名方式為orapw
--重新命名密碼檔案
[oracle@gc2 dbs]$ ls
hc_EMREP.dat hc_oms.dat initdw.ora init.ora lkEMREP lkOMS orapwemrep1 orapwoms spfileEMREP.ora spfileoms.ora
[oracle@gc2 dbs]$ mv orapwemrep1 orapwemrep
[oracle@gc2 dbs]$ sqlplus sys/oracle@emrep as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Feb 28 09:23:35 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
注意:ORACLE_SID區分大小寫。
--再次重新命名密碼檔案
[oracle@gc2 dbs]$ echo $ORACLE_SID
EMREP
[oracle@gc2 dbs]$ mv orapwemrep orapwEMREP
[oracle@gc2 dbs]$ sqlplus sys/oracle@emrep as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Feb 28 09:24:02 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With he Partitioning, OLAP and Data Mining options
SQL> 
建立密碼檔案注意事項: 
1、密碼檔案存放路徑必須為$ORACLE_HOME/dbs
2、可通過orapwd命令檢視密碼檔案建立語法。如下:
[oracle@gc2 dbs]$ orapwd
Usage: orapwd file= password= entries= force=
  where
    file - name of password file (mand),
    password - password for SYS (mand),
    entries - maximum number of distinct DBA and force - whether to overwrite existing file (opt),
OPERs (opt),
  There are no spaces around the equal-to (=) character.
其中file為密碼檔名;password為sys使用者密碼;entries為使用者連線數;force為若已有此密碼檔案,是否覆蓋,預設不填此項或為force=n
2、密碼檔案命名方式必須為orapw,並注意區分大小寫。
另外需注意:若可遠端連線靜態監聽,卻不能連動態監聽(listener的server=shared共享模式),需檢視service與dispatchers引數資訊。且配置要如下:
監聽配置詳解
注意紅色字型部分引數值設定。
若配置如上,還是連線不上,需檢視資料庫防火牆是否啟用,若啟用了,需設定動態監聽的埠。

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

相關文章