Oracle的網路三大配置檔案(sqlnet.ora、tnsnames.ora、listener.ora)

lhrbest發表於2015-02-02

Oracle的網路三大配置檔案(sqlnet.ora、tnsnames.ora、listener.ora)

 

blog文件結構圖:

image


1  說明

為了使得外部程式能夠訪問Oracle 資料庫必須配置Oracle 網路伺服器環境配置 Oracle 網路伺服器環境是通過配置listener.ora sqlnet.ora tnsnames.ora 共三個檔案來進行的由於oracle資料庫是一個客戶端伺服器的軟體,所以,首先需要接收來自客戶端的連線請求,伺服器就必須配置監聽器;其次,客戶端要連線到某個制定的伺服器,就必須配置到伺服器的tns服務名。

有關oracle三個網路配置檔案分別為 listener.ora、sqlnet.oratnsnames.ora 無論linux還是windows下,都是放在$ORACLE_HOME\network\admin目錄下。

 

 

2   sqlnet.ora

sqlnet.ora作用類似於linux或者其他unixnsswitch.conf檔案,通過這個檔案來決定怎麼樣找一個連線中出現的連線字串

 

例如我們客戶端輸入

sqlplus sys/oracle@orcl

假如我的sqlnet.ora是下面這個樣子

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)

那麼,客戶端就會首先在tnsnames.ora檔案中找orcl的記錄.如果沒有相應的記錄則嘗試把orcl當作一個主機名,通過網路的途徑去解析它的 ip地址然後去連線這個ipGLOBAL_DBNAME=orcl這個例項,當然我這裡orcl並不是一個主機名

如果我是這個樣子

NAMES.DIRECTORY_PATH= (TNSNAMES)

那麼客戶端就只會從tnsnames.ora查詢orcl的記錄,括號中還有其他選項,如LDAP等並不常用。

 

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

 

2.1  引數官方文件說明

http://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm#NETRF182

 

 

2.2  EZCONNECT方式連線資料庫

如果對tnsnames.ora檔案沒有做充分的配置,也可以使用OracleEasy Connect Naming Method方法測試資料庫是否可以訪問。

username/password@host[:port][/service_name][/instance_name]
username/password@[//]host[:port][/service_name]

 

注意:如果想要使用Easy Connect Naming Method方法測試資料庫的連通性,需要在sqlnet.ora檔案中增加“NAMES.DIRECTORY_PATH= (EZCONNECT)”資訊,否則該功能將無法使用,一般配置如下:

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

 

 

例如:

listner配置TCP協議,使用主機名,埠為1521,service_names=orclasm.lhr.com

 

連線:

C:\Users\Administrator>sqlplus lhr/lhr@192.168.59.130:1521/orclasm.lhr.com

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 22 10:35:52 2015

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

 

連線到:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

 

SQL>


測試連通性:
C:\Users\Administrator>tnsping 192.168.59.130:1521/orclasm.lhr.com

 

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 02-2月 -2015 10:39:03

 

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

 

已使用的引數檔案:

D:\Program files\app\oracle\product\11.2.0.1\dbhome_1\NETWORK\ADMIN\sqlnet.ora

 

已使用 EZCONNECT 介面卡來解析別名

嘗試連線 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orclasm.lhr.com))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.130)(PORT=1521)))

OK (0 毫秒)

 

C:\Users\Administrator>

 

 

plsql developer 連線: 填寫:192.168.59.130:1521/orclasm.lhr.com

wps6658.tmp 

登入後看到:

wps6669.tmp 

2.3  SQLNET.AUTHENTICATION_SERVICES引數說明

 一、官方文件說明

作用

Use the parameter SQLNET.AUTHENTICATION_SERVICES to enable one or more authentication services.

If authentication has been installed,

it is recommended that this parameter be set to either none or to one of the authentication methods.

 

預設值

None

 

一般可選值

NONEforno authentication methods. A valid username and password can be used to access the database.

ALLforall authentication methods

NTSforWindows NT native authentication(An authentication method that enables

a client single login access to a Windows NT server and a database running on the server)

 

為了加深對這幾個引數的理解,通過實驗證明,這幾個引數在不同的系統中的作用

二、win系統

Microsoft Windows [版本 6.1.7601]

版權所有 (c) 2009 Microsoft Corporation。保留所有權利。

 

C:\Windows\system32>e:

 

E:\>cd E:\oracle\11_2_0\NETWORK\ADMIN

 

#sqlnet.ora檔案不存在情況

E:\oracle\11_2_0\NETWORK\ADMIN>dir sqlnet.ora

驅動器 E 中的卷沒有標籤。

卷的序列號是 38D0-2A35

 

E:\oracle\11_2_0\NETWORK\ADMIN 的目錄

 

找不到檔案

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:13:57 2011

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

ERROR:

ORA-01031: 許可權不足

 

 

請輸入使用者名稱:

 

#NTS情況

E:\oracle\11_2_0\NETWORK\ADMIN>more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(NTS)

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:16:20 2011

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

 

連線到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing options

 

#NONE情況

E:\oracle\11_2_0\NETWORK\ADMIN>more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(NONE)

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:17:18 2011

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

ERROR:

ORA-01031: 許可權不足

 

 

請輸入使用者名稱:

 

#ALL情況

E:\oracle\11_2_0\NETWORK\ADMIN>more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(ALL)

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:18:02 2011

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

ERROR:

ORA-12641: 驗證服務無法初始化

 

 

請輸入使用者名稱:

 

三、linux系統

 

[oracle@report ~]$cd/opt/oracle/product/10.2.0/db_1/network/admin/

#NTS情況

[oracle@report admin]$moresqlnet.ora

SQLNET.AUTHENTICATION_SERVICES = (NTS)

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:03:51 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

ERROR:

ORA-01031: insufficient privileges

 

 

Enter user-name:

 

#NONE情況

[oracle@report admin]$more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES = (NONE)

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:04:31 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

ERROR:

ORA-01031: insufficient privileges

 

 

Enter user-name:

 

#ALL情況

[oracle@report admin]$moresqlnet.ora

SQLNET.AUTHENTICATION_SERVICES = (ALL)

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:05:07 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

#不存在sqlnet.ora檔案情況

[oracle@report admin]$ ll sqlnet.ora

ls: sqlnet.ora: No suchfileor directory

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:05:41 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

四、補充說明
1、在win系統中使用nts,linux不寫該引數或者採用ALL
2
、當不存在sqlnet.ora檔案時,linux中可以正常登入,win中不能

 

 

3   tnsnames.ora

這個檔案類似於unix hosts檔案,提供的tnsname到主機名或者ip的對應,只有當sqlnet.ora中類似NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連線字串的順序中TNSNAMES時,才會嘗試使用這個檔案。

PROTOCOL:(讀作:['pr?ut?k?l],譯為協議)客戶端與伺服器端通訊的協議,一般為TCP,該內容一般不用改。

HOST:資料庫偵聽所在的機器的機器名或IP地址,資料庫偵聽一般與資料庫在同一個機器上,所以當我說資料庫偵聽所在的機器一般也是指資料庫所在的機器。在UNIXWINDOWS下,可以通過在資料庫偵聽所在的機器的命令提示符下使用hostname命令得到機器名,或通過ipconfig(for WINDOWS) or ifconfigfor UNIX)命令得到IP地址。需要注意的是,不管用機器名或IP地址,在客戶端一定要用ping命令ping通資料庫偵聽所在的機器的機器名,否則需要在 hosts檔案中加入資料庫偵聽所在的機器的機器名的解析。

PORT:資料庫偵聽正在偵聽的埠,可以察看伺服器端的listener.ora檔案或在資料庫偵聽所在的機器的命令提示符下通過lsnrctl status [listener name]命令察看。此處Port的值一定要與資料庫偵聽正在偵聽的埠一樣。

SERVICE_NAME:在伺服器端,用system使用者登陸後,sqlplus> show parameter service_name命令察看。

ORCL 對應的本機,SALES對應的另外一個IP地址,裡邊還定義了使用主用伺服器還是共享伺服器模式進行連線

 

一個例子:

ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = lhr)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

 

3.1  tnsnames連線過程

當你輸入sqlplus sys/oracle@orcl的時候

1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME

2. 則查詢tnsnames.ora檔案,從裡邊找orcl的記錄,並且找到主機名,埠和service_name

3. 如果listener程式沒有問題的話,建立與listener程式的連線。

4. 根據不同的伺服器模式如專用伺服器模式或者共享伺服器模式,listener採取接下去的動作。預設是專用伺服器模式,沒有問題的話客戶端就連線上了資料庫的server process

5. 這時候網路連線已經建立,listener程式的歷史使命也就完成了。

 

4   listener.ora

關於listener程式就不多說了,接受遠端對資料庫的接入申請並轉交給oracle的伺服器程式。所以如果不是使用的遠端的連線,listener程式就不是必需的,同樣的如果關閉listener程式並不會影響已經存在的資料庫連線(OCP曾經考過的一個知識點)

 

4.1  動態註冊和靜態註冊

註冊就是將資料庫作為一個服務註冊到監聽程式。客戶端不需要知道資料庫名和例項名,只需要知道該資料庫對外提供的服務名就可以申請連線到資料庫。這個服務名可能與例項名一樣,也有可能不一樣。  在資料庫伺服器啟動過程中,資料庫伺服器會向監聽程式註冊相應的服務(無論何時啟動一個資料庫,預設地都有兩條資訊註冊到監聽器中:資料庫伺服器對應的例項和服務。)  相當於是這樣:在資料庫伺服器和客戶端之間有一監聽程式(Listener),在監聽程式中,會記錄相應資料庫對應的服務名(一個資料庫可能對應有多個服務名),當客戶端需要連線資料庫時,只需要提供服務名,就可以建立客戶端和伺服器之間的連線。

4.1.1  動態註冊

什麼叫做動態註冊呢?

    意思是監聽先啟動,然後如果例項啟動,則註冊到監聽當中,提供服務

注意:動態註冊預設埠在資料庫啟動後大約1分鐘之後才可以查詢(lsnrct status

 

動態註冊是在instance啟動的時候PMON程式根據(spfilepfile,以下簡稱init.ora)中的instance_name,service_names兩個引數將例項和服務動態註冊到listener中。  首先要在init.ora中指定instance_name,service_names兩個引數的值。在sqlplus下通過show parameter service_names show parameter instance_name可以檢視這兩個引數的值。  註冊到監聽器中的例項值從init.ora檔案中的instance_name引數取得。如果該引數沒有設定值,那麼它將取init.ora檔案中的db_name的值。如果在RAC中配置,您必須將叢集中每個例項的instance_name引數設定為一個唯一的值。

註冊到監聽器中的服務值從init.ora檔案中的引數service_names取得。如果該引數沒有設定值,資料庫將拼接init.ora檔案中的 db_namedb_domain的值來註冊自己。如果選擇提供service_names值,您可以使用完全限定的名稱(比如 orcl.oracle.com)或縮寫的名稱(比如orcl)。如果選擇縮寫的名稱並設定了db_domain引數,註冊到監聽器中的服務將是 service_name值和db_domain值的拼接。例如下面的設定將導致服務orcl.oracle.com被註冊到監聽器中:db_domain=oracle.comservice_names=orcl ;  採取動態註冊方法時,listener.ora中的內容如下:SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = D:/oracle/product/10.2.0/db_1)(PROGRAM = extproc)))  可選擇的是,您可以在service_names引數中指定多個服務值,值之間用逗號格開,這對於共享伺服器配置是很有用的。  動態註冊預設只註冊到預設的監聽器上(名稱是LISTENER、埠是1521、協議是TCP),因為pmon只會動態註冊port等於1521的監聽,否則pmon不能動態註冊listener,如果需要向非預設監聽註冊,則需要配置local_listener引數!

 

一、 動態註冊預設埠:

   1、監聽的名字必須叫LISTENER

   2、埠一定要是1521

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.129)(PORT = 1521))

    )

  )

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)

      (PROGRAM = extproc)

  )

 

 

以上是動態監聽,因為SID_NAME=plsextproc表示為外部程式起作用預設安裝時,會安裝一個PL/SQL外部程式(ExtProc)條目在listener.ora中,是oracle為呼叫外部程式預設配置的監聽,它的名字通常是ExtProcPLSExtProc,但一般不會使用它,可以直接從listener.ora中將這項移除,因為對ExtProc已經有多種攻擊手段了,在不使用外部程式時,oracle也是建議刪除的。
PLSExtPro pl/sql   external  procdure 的意思,就是在pl/sql中呼叫外部語句,如c,java寫的過程。
現在,Oracle已經全面支援JAVA了,這東西也就過時了,之所以繼續保留是考慮到相容以前老版本的資料庫例項。

二、 動態註冊非預設埠:

   1、監聽的名字必須叫LISTENER

   2、埠使用1526其它未佔用埠亦可

   3、配置一個tns假設名字為ORCL_LISTENER,使用1526

   4、配置資料庫的local_listener引數為ORCL_LISTENER alter system set local_listener = ORCL_LISTENER ;

第一步:listener.ora檔案:

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.129)(PORT = 1526))

    )

  )

第二步:tnsnames.ora檔案:

ORCL_LISTENER =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.129)(PORT = 1526))

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

  )

第三步:sqlplus / as sysdba

alter system set local_listener = ORCL_LISTENER ;

 

   注意: 這裡的變數必須一致,不然報錯:

   SQL> alter system set local_listener = LSNR_ORCL;

alter system set local_listener = LSNR_ORCL

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00119: invalid specification for system parameter LOCAL_LISTENER

ORA-00132: syntax error or unresolved network name 'LSNR_ORCL'

 

4.1.2  靜態註冊

    什麼叫做靜態註冊呢?意思是監聽一啟動,不管例項啟動了沒有,例項的名字已經註冊到監聽中,主要用於dba遠端啟動資料庫例項

    設定方法:

    1、設定GLOBAL_DBNAME=orcl.lhr.com

    2、SID_NAME=orcl

    注意:靜態註冊的監聽status永遠為UNKNOWN,靜態註冊即:悄悄的啟動(遠端啟動),不知道的

 

SQL> show parameter instance_name

 

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

instance_name      string orcl

SQL> show parameter service_name

 

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

service_names      string orcl.lhr.com

SQL>

 

 

例子:

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = orcl.lhr.com)

      (SID_NAME = orcl)

      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = rman.lhr.com)

      (SID_NAME = rman)

      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)

    )

  )

 

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rhel6.5)(PORT=1521)))

Services Summary...

Service "orcl.lhr.com" has 1 instance(s).

  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...

Service "rman.lhr.com" has 1 instance(s).

  Instance "rman", status UNKNOWN, has 1 handler(s) for this service...

 

 

4.1.3  查詢某服務是靜態註冊還是動態註冊  

可以使用命令lsnrctl status來檢視某服務是靜態註冊還是動態註冊。  例項狀態為UNKNOWN值時表明此服務是靜態註冊的設定。這時監聽器用來表明它不知道關於該例項的任何資訊,只有當客戶發出連線請求時,它才檢查該例項是否存在。  動態註冊的資料庫通過狀態資訊中的狀態READY或狀態BLOCKED(對於一個備用資料庫)來指明。不管何時關閉資料庫,動態註冊的資料庫都會動態地從監聽器登出,而與之相關的資訊將從狀態列表中消失。這樣,不管資料庫是在執行還是已經關閉,監聽器總是知道它的狀態。該資訊將被用於連線請求的回退(fallback)和負載平衡。

 

View the Exhibit and examine the output.

wps666A.tmp 

Which two statements are true regarding the LISTENER2 listener? (Choose two.)

A.The ORCL instance is registered dynamically with the listener.

B.The ORCL instance is registered statically in the listener.ora file.

C.The number of current client connections handled by the service handler is two.

D.The total number of client connections handled so far by the service handler is two.

Answer: BD

題目解答:unknown是靜態註冊,establicshed是累計總數,不是當前連線數

 

Which two statements are true regarding listeners? (Choose two.)

選項

A.Listeners use only the TCP/IP protocol.

B.Multiple listener processes can run simultaneously on a host.

C.Multiple database instances can be registered with a single listener .

D.The listener-related errors can be traced only at the administrative level.

E.Only one database instance canbe registered with a single listener at any time.

Correct  Answers: B C

 


 

 





About Me

...............................................................................................................................

● 本文作者:小麥苗,只專注於資料庫的技術,更注重技術的運用

● 本文在itpub(http://blog.itpub.net/26736162)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 聯絡我請加QQ好友(646634621),註明新增緣由

● 於 2017-06-02 09:00 ~ 2017-06-30 22:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

...............................................................................................................................

拿起手機使用微信客戶端掃描下邊的左邊圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的資料庫技術。

Oracle的網路三大配置檔案(sqlnet.ora、tnsnames.ora、listener.ora)
DBA筆試面試講解
歡迎與我聯絡

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

相關文章