oracle 監聽器配置
一、監聽器配置概念
監聽器是執行在ORACLE資料庫伺服器端的一個重要程式,主要用於監聽來自遠端的客戶端請求。為什麼說是監聽來自遠端的請求呢?因為登入數據庫有一下三種常見方式:
(1)sqlplus / as sysdba 這是典型的作業系統認證,不需要listener程式,只要引數檔案pfile和spfile設定正確即可。
(2)sqlplus username/password 在資料庫所在作業系統上登入本機資料庫,不需要listener程式,資料庫例項啟動即可。
(3)sqlplus username/password@tnsname需要listener程式,最常見的遠端登入模式,需要啟動資料庫例項和listener程式。
由上可知,監聽器的主要工作就是時刻監聽著來自遠端的請求,充當著客戶端請求和資料庫伺服器程式的中間人。當經過監聽器的中轉,客戶端成功與資料庫伺服器程式連線上後,監聽器的工作就結束了,即使監聽器被停止,也不會影響到已經建立的連線。
二、監聽器配置相關重要檔案
監聽器的配置過程中,主要用到伺服器端的listener.ora檔案。當然客戶端想要成功發起請求,在客戶端需要配置好tnsnames.ora檔案和sqlnet.ora檔案。下面分別介紹這三個檔案:
1. sqlnet.ora-----透過這個檔案來決定怎麼樣找一個連線中出現的連線字串。
例如我們客戶端輸入
sqlplus sys/oracle@ora
假如我的sqlnet.ora是下面這個樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那麼,客戶端就會首先在tnsnames.ora檔案中找ora的記錄.如果沒有相應的記錄則嘗試把ora當作一個主機名,透過網路的途徑去解析它的 ip地址然後去連線這個ip上GLOBAL_DBNAME=ora這個例項。注意,如果在客戶端中該檔案沒有設定該值,則預設為根據TNSNAME和HOSTNAME來進行解析。
如果設定為:NAMES.DIRECTORY_PATH= (TNSNAMES)
那麼客戶端就只會從tnsnames.ora查詢ora的記錄,括號中還有其他選項,如LDAP等並不常用。
2. tnsnames.ora------這個檔案類似於unix 的hosts檔案,提供的tnsname到主機名或者ip的對應。
只有當sqlnet.ora中類似NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連線字串的順序中有TNSNAMES是,才會嘗試使用這個檔案。
例子:
ORA_TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
)
ORA_TEST:客戶端連線伺服器端使用的服務別名。注意一定要頂行書寫,否則會無法識別服務別名。
PROTOCOL:客戶端與伺服器端通訊的協議,一般為TCP,該內容一般不用改。
HOST:ORACLE伺服器端IP地址或者hostname。確保伺服器端的監聽啟動正常且本機/etc/hosts能夠正常解析hostname主機名。
PORT:資料庫偵聽正在偵聽的埠,可以察看伺服器端的listener.ora檔案或在資料庫偵聽所在的機器的命令提示符下透過lnsrctl status [listener name]命令察看。此處Port的值一定要與資料庫偵聽正在偵聽的埠一樣。
SERVICE_NAME:在伺服器端,用system使用者登陸後,sqlplus> show parameter service_name命令檢視。
3. listener.ora------listener監聽器程式的配置檔案
關於listener程式就不多說了,接受遠端對資料庫的接入申請並轉交給oracle的伺服器程式。所以如果不是使用的遠端的連線,listener程式就不是必需的,同樣的如果關閉listener程式並不會影響已經存在的資料庫連線。
例子:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)
(SID_NAME = ora)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
LISTENER :監聽名稱,可以配置多個監聽,多個監聽的埠號要區分開來。
GLOBAL_DBNAME :全域性資料庫名。透過select * from global_name; 查詢得出
ORACLE_HOME :oracle軟體的跟目錄
SID_NAME :伺服器端(本機)的SID
PROTOCOL:監聽協議,一般都使用TCP
HOST:本機IP地址,雙機時候使用浮動IP
PORT:監聽的埠號,使用netstat –an 檢查該埠不被佔用。
三、SQL*PLUS遠端連線資料庫過程
當你輸入sqlplus sys/oracle@orcl的時候
1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME
2. 查詢tnsnames.ora檔案,從裡邊找orcl的記錄,並且找到主機名,埠和service_name
3. 如果listener程式沒有問題且能正常解析主機名的話,建立與listener程式的連線。
4. 根據不同的伺服器模式如專用伺服器模式或者共享伺服器模式,listener採取接下去的動作。預設是專用伺服器模式,沒有問題的話客戶端就連線上了資料庫的server process。
5. 這時候網路連線已經建立,listener程式的工作也就完成了。
四、配置監聽器常見錯誤一例
在使用者輸入sqlplus system/manager@test後,sqlplus程式會自動到sqlnet.ora檔案中找NAMES.DEFAULT_DOMAIN引數,假如該引數存在,則將該引數中的值取出,加到網路服務名的後面,即此例中你的輸入由sqlplus system/manager@test自動變為sqlplus
system/manager@test.server.com ,然後再到tnsnames.ora檔案中找test.server.com網路服務名,這當然找不到了,因為該檔案中只有test網絡服務名,所以報錯。解決的辦法就是將sqlnet.ora檔案中的NAMES.DEFAULT_DOMAIN引數註釋掉即可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN引數不存在,則sqlplus程式會直接到tnsnames.ora檔案中找 test網路服務名,然後取出其中的host ,port,tcp,service_name,利用這些資訊將連線請求傳送到正確的資料庫伺服器上。
資料整理參考:
http://blog.csdn.net/aten_xie/article/details/6174069
http://blog.csdn.net/chunhua_love/article/details/13505239
監聽器是執行在ORACLE資料庫伺服器端的一個重要程式,主要用於監聽來自遠端的客戶端請求。為什麼說是監聽來自遠端的請求呢?因為登入數據庫有一下三種常見方式:
(1)sqlplus / as sysdba 這是典型的作業系統認證,不需要listener程式,只要引數檔案pfile和spfile設定正確即可。
(2)sqlplus username/password 在資料庫所在作業系統上登入本機資料庫,不需要listener程式,資料庫例項啟動即可。
(3)sqlplus username/password@tnsname需要listener程式,最常見的遠端登入模式,需要啟動資料庫例項和listener程式。
由上可知,監聽器的主要工作就是時刻監聽著來自遠端的請求,充當著客戶端請求和資料庫伺服器程式的中間人。當經過監聽器的中轉,客戶端成功與資料庫伺服器程式連線上後,監聽器的工作就結束了,即使監聽器被停止,也不會影響到已經建立的連線。
二、監聽器配置相關重要檔案
監聽器的配置過程中,主要用到伺服器端的listener.ora檔案。當然客戶端想要成功發起請求,在客戶端需要配置好tnsnames.ora檔案和sqlnet.ora檔案。下面分別介紹這三個檔案:
1. sqlnet.ora-----透過這個檔案來決定怎麼樣找一個連線中出現的連線字串。
例如我們客戶端輸入
sqlplus sys/oracle@ora
假如我的sqlnet.ora是下面這個樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那麼,客戶端就會首先在tnsnames.ora檔案中找ora的記錄.如果沒有相應的記錄則嘗試把ora當作一個主機名,透過網路的途徑去解析它的 ip地址然後去連線這個ip上GLOBAL_DBNAME=ora這個例項。注意,如果在客戶端中該檔案沒有設定該值,則預設為根據TNSNAME和HOSTNAME來進行解析。
如果設定為:NAMES.DIRECTORY_PATH= (TNSNAMES)
那麼客戶端就只會從tnsnames.ora查詢ora的記錄,括號中還有其他選項,如LDAP等並不常用。
2. tnsnames.ora------這個檔案類似於unix 的hosts檔案,提供的tnsname到主機名或者ip的對應。
只有當sqlnet.ora中類似NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連線字串的順序中有TNSNAMES是,才會嘗試使用這個檔案。
例子:
ORA_TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
)
ORA_TEST:客戶端連線伺服器端使用的服務別名。注意一定要頂行書寫,否則會無法識別服務別名。
PROTOCOL:客戶端與伺服器端通訊的協議,一般為TCP,該內容一般不用改。
HOST:ORACLE伺服器端IP地址或者hostname。確保伺服器端的監聽啟動正常且本機/etc/hosts能夠正常解析hostname主機名。
PORT:資料庫偵聽正在偵聽的埠,可以察看伺服器端的listener.ora檔案或在資料庫偵聽所在的機器的命令提示符下透過lnsrctl status [listener name]命令察看。此處Port的值一定要與資料庫偵聽正在偵聽的埠一樣。
SERVICE_NAME:在伺服器端,用system使用者登陸後,sqlplus> show parameter service_name命令檢視。
3. listener.ora------listener監聽器程式的配置檔案
關於listener程式就不多說了,接受遠端對資料庫的接入申請並轉交給oracle的伺服器程式。所以如果不是使用的遠端的連線,listener程式就不是必需的,同樣的如果關閉listener程式並不會影響已經存在的資料庫連線。
例子:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)
(SID_NAME = ora)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
LISTENER :監聽名稱,可以配置多個監聽,多個監聽的埠號要區分開來。
GLOBAL_DBNAME :全域性資料庫名。透過select * from global_name; 查詢得出
ORACLE_HOME :oracle軟體的跟目錄
SID_NAME :伺服器端(本機)的SID
PROTOCOL:監聽協議,一般都使用TCP
HOST:本機IP地址,雙機時候使用浮動IP
PORT:監聽的埠號,使用netstat –an 檢查該埠不被佔用。
三、SQL*PLUS遠端連線資料庫過程
當你輸入sqlplus sys/oracle@orcl的時候
1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME
2. 查詢tnsnames.ora檔案,從裡邊找orcl的記錄,並且找到主機名,埠和service_name
3. 如果listener程式沒有問題且能正常解析主機名的話,建立與listener程式的連線。
4. 根據不同的伺服器模式如專用伺服器模式或者共享伺服器模式,listener採取接下去的動作。預設是專用伺服器模式,沒有問題的話客戶端就連線上了資料庫的server process。
5. 這時候網路連線已經建立,listener程式的工作也就完成了。
四、配置監聽器常見錯誤一例
在使用者輸入sqlplus system/manager@test後,sqlplus程式會自動到sqlnet.ora檔案中找NAMES.DEFAULT_DOMAIN引數,假如該引數存在,則將該引數中的值取出,加到網路服務名的後面,即此例中你的輸入由sqlplus system/manager@test自動變為sqlplus
system/manager@test.server.com ,然後再到tnsnames.ora檔案中找test.server.com網路服務名,這當然找不到了,因為該檔案中只有test網絡服務名,所以報錯。解決的辦法就是將sqlnet.ora檔案中的NAMES.DEFAULT_DOMAIN引數註釋掉即可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN引數不存在,則sqlplus程式會直接到tnsnames.ora檔案中找 test網路服務名,然後取出其中的host ,port,tcp,service_name,利用這些資訊將連線請求傳送到正確的資料庫伺服器上。
資料整理參考:
http://blog.csdn.net/aten_xie/article/details/6174069
http://blog.csdn.net/chunhua_love/article/details/13505239
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30167136/viewspace-1469656/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 監聽器日誌配置與管理Oracle
- Oracle 監聽配置詳解Oracle
- Oracle 動態監聽配置Oracle
- 伺服器端監聽器配置伺服器
- oracle 監聽配置多個埠Oracle
- oracle 監聽器學習Oracle
- 說說Oracle監聽器(一)Oracle
- 說說Oracle監聽器(二)Oracle
- Oracle 監聽器日誌解析Oracle
- oracle例項和監聽器Oracle
- 2.5.2. 監聽程式(listener)配置——2.5.2.3. 手工編輯監聽器配置檔案
- oracle 11g tns和監聽配置Oracle
- CUUG《Oracle 監聽和TNS配置》- 筆記Oracle筆記
- Oracle 11g/12c 監聽器白名單的配置Oracle
- 配置solaris10 oracle10g的監聽器密碼Oracle密碼
- Spring框架(一):配置&注入&監聽器Spring框架
- 如何配置多個監聽器不同埠
- Oracle 監聽器日誌解析(續)Oracle
- 【Oracle】修改scan監聽器埠號Oracle
- 如何更改oracle監聽器的埠Oracle
- Oracle 監聽Oracle
- 【DBA】Windows 下Oracle 監聽配置注意事項WindowsOracle
- 設定 Oracle 監聽器密碼(LISTENER)Oracle密碼
- 監聽配置詳解
- Oracle監聽(1)Oracle
- ORACLE動態監聽與靜態監聽Oracle
- oracle靜態監聽和動態監聽Oracle
- 【oracle】動態監聽與靜態監聽Oracle
- Oracle 10g RAC客戶端配置監聽Oracle 10g客戶端
- 同時配置動態監聽與靜態監聽
- 【Oracle】修改oracle監聽埠Oracle
- 2 Day DBA-檢視監聽器配置-練習:使用Database Control檢視監聽器資訊Database
- oracle靜態監聽Oracle
- JMS監聽Oracle AQOracle
- Oracle監聽的作用Oracle
- ORACLE監聽簡介Oracle
- oracle 監聽重啟Oracle
- Oracle監聽配置(ora-12514錯誤)Oracle