深入理解監聽
今天上班第二天,發現一個很奇怪的問題。主管發給了我一個tnsname.ora檔案,
我用pl/sq developer可以登入 。但使用IP不能連線遠端資料庫,只能使用連線串。
sqlplus user/4567@10.10.143.148:1521/crmbcv4
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 8月 31 16:36:06 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS: 無法解析指定的連線識別符號
在群裡問了一下,小路講使用這種格式可用
sqlplus username/password@連線串
試了一下,解決了。
小頑童猜測他們的tnsname.ora設定裡面沒有我機器的IP地址。所以你用IP地址的方式連不上去。
最後查了一些資料,把筆記裡的資料重新整理了一下。如下:
sqlnet.ora,tnsnames.ora,另外還有listener.ora,都是放在$ORALCE_HOME\network\admin目錄下。
sqlnet.ora 用在oracle client端,用於配置連線服務端oracle的相關引數.
tnsnames.ora 用在oracle client端,使用者配置連線資料庫的別名引數
listener.ora 用在oracle server端,配置oracle服務端程式的監聽引數
sqlnet.ora 類似於作業系統的/etc/netsvc.conf檔案,裡面對解析的優先順序進行編排
tnsname.ora類似於作業系統的/etc/hosts檔案,本地將TNS名解析為目標IP地址及Service-Name
listener.ora類似於作業系統的/etc/services檔案,裡面定義了監聽的埠、服務名等
1.1.1. sqlnet.ora(客戶端)
通過這個檔案來決定怎樣找一個連線中出現的連線字串。例如我們客戶端鍵入
sqlplus test/test@orcl,如果sqlnet.ora是下面這樣:
NAMES.DEFAULT_DOMAIN = localdomain
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
& 說明
NAMES.DEFAULT_DOMAIN 指定網路域名。
NAMES.DIRECTORY_PATH指定當解析客戶端連線識別符號時命名方法(naming metthods)採用的優先順序從左至右遞減在 CAMS 應用中。
這兩個引數採用上述所示的系統預設值。
示例檔案:
# sqlnet.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME, ONAMES)
SQLNET.AUTHENTICATION_SERVICES= (NTS)
這個表示採用OS認證,在資料庫伺服器上,可以利用sqlplus / as sysdba。
一般這個配置在windows上是ok的,在unix環境下可能會有問題,一般在unix下可以去掉這個配置。
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)
表示將首先利用tnsnames進行解析;如果tnsnames解析不到,將使用hostname通過網路的途徑解析IP;如果hostname解析不到,將採用onames進行解析;例如我們客戶端輸入:sqlplus test1/test1@test ,那麼,客戶端就會首先在tnsnames.ora檔案中找orcl的記錄.
如果沒有相應的記錄則嘗試把orcl當作一個主機名,通過網路的途徑去解析它的IP地址然後去連線這個IP上global_name=test這個例項,當然我這裡orcl並不是一個主機名。
在10g下NAMES.DIRECTORY_PATH增加了EZCONNECT。使用EZCONNECT必須滿足以下要求:
1.oracle net servieces 10g必須安裝在客戶端
2.客戶端以及伺服器必須支援TCP/IP,並啟用
3.不允許高階連線描述特性,如:連線池
方法示例:connect scott/tiger@hostname:port/servicename
ORA-12514一個很常見的原因是NAMES.DIRECTORY_PATH漏了TNSNAMES,可能是Oracle Net Configuration 時少選了Oracle Names選項。
1.1.2. Tnsnames.ora 客戶端
這個檔案放在客戶端機器上,記錄客戶端訪問資料庫的本地配置,其實就是定義網路服務,只有當sqlnet.ora中有"NAMES.DIRECTORY_PATH= (TNSNAMES)"這樣的字樣時,也就是客戶端解析連線字串的順序中有TNSNAMES時,才會嘗試使用這個檔案。
示例檔案:
# TNSNAMES.ORA Network Configuration File: D:\oracle\fullOracle\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
test_link = //網路服務名
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 108.108.108.108)(PORT = 1521))
//訪問資料庫使用的協議,資料庫計算機的主機名或IP地址,資料庫的埠號
)
(CONNECT_DATA =
(SID = test) //資料庫例項名
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
protocol一般為TCP,HOST可以為IP,可以是可Ping的通的主機名,Service_Name = orcl 是伺服器的SID,Server = ? 可分為共享伺服器和專用伺服器兩種體系結構。共享伺服器依靠排程程式服務處理來自客戶端的連線請求,單個排程程式可以同時為多個客戶機連線提供服務。而專用伺服器程式不要求客戶端共享任何資源,一個session啟動一個process。
1.1.3. listener.ora(伺服器端)
它是listener監聽器程式的配置檔案。關於listener程式就不多說了,接受遠端對資料庫的接入申請並轉交給oracle的伺服器程式。所以如果不是使用的遠端的連線,listener程式就不是必需的,同樣的如果關閉listener程式並不會影響已經存在的資料庫連線。
Listener.ora檔案的例子
#listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
#下面定義LISTENER程式為哪個例項提供服務
#這裡是ORCL,並且它對應的ORACLE_HOME和GLOBAL_DBNAME
#其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做資料庫連線
SID_LIST_LISTENER =
(SID_LIST = //這裡定義LISTENER程式為哪個例項提供服務
(SID_DESC =
(GLOBAL_DBNAME = boway)
(ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)
(SID_NAME = ORCL)
)
)
#監聽器的名字,一臺資料庫可以有不止一個監聽器
#再向下面是監聽器監聽的協議,ip,埠等,這裡使用的tcp1521埠,並且使#用的是主機名
LISTENER =
(DESCRIPTION =
ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521)) //監聽器監聽的協議,IP,埠等
)
上面的例子是一個最簡單的例子,但也是最普遍的。一個listener程式為一個instance(SID)提供服務。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22957140/viewspace-706371/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入理解 Getter和Setter 對物件的屬性監聽物件
- 【監聽】ADR_BASE_listenername理解
- 【監聽】tnsname.ora檔案理解
- 【監聽】listener.ora檔案理解
- 深入理解前端效能監控前端
- 深入理解Spring原始碼之IOC 擴充套件原理BeanFactoryPostProcessor和事件監聽ApplicationListenerSpring原始碼套件Bean事件APP
- 深入理解JVM(七)——效能監控工具JVM
- 監聽 watch props物件屬性監聽 或深度監聽物件
- 動態監聽與靜態監聽
- 動態監聽和靜態監聽
- 深入理解JVM:效能分析與監控工具JVM
- 【監聽】兩庫互配靜態監聽
- ORACLE動態監聽與靜態監聽Oracle
- oracle靜態監聽和動態監聽Oracle
- 【oracle】動態監聽與靜態監聽Oracle
- 事件監聽事件
- Oracle 監聽Oracle
- SESSION監聽Session
- 動態和靜態監聽註冊-小魚的理解
- 理解Oracle9i中的監聽動態註冊Oracle
- swift 訊息監聽和鍵值監聽(kvo)Swift
- 同時配置動態監聽與靜態監聽
- 理解Oracle9i中的監聽動態註冊(zt)Oracle
- Flutter事件監聽Flutter事件
- jQuery事件監聽jQuery事件
- 監聽滑鼠事件事件
- Oracle監聽(1)Oracle
- session的監聽Session
- JavaScript 事件監聽JavaScript事件
- 時間監聽
- js 監聽事件JS事件
- 7、listener監聽
- listener監聽監控指令碼指令碼
- java鍵盤監聽之視窗監聽的實現Java
- 【listener】oracle靜態監聽和動態監聽 【轉載】Oracle
- 【監聽】配置服務端靜態(動態)監聽/修改監聽埠及引數local_listener作用服務端
- Vue3.0的遞迴監聽和非遞迴監聽Vue遞迴
- 為監聽設定密碼防止遠端關閉監聽密碼