Oracle 11g監聽的故障排查

虛機數據庫服務器oracle11G的監聽意外停止,報錯以下
Oracle 11g監聽的故障排查
在虛機上執行lsnrctl start,問題解決。
一、當鏈接異常時,能夠經過分析監聽日誌來查找線索
〜[test]$ find $ORACLE_HOME -name listener.log
/opt/64bit/oracle/11.2.0/log/diag/tnslsnr/sinrndvud062/listener/trace/listener .logsql

〜[DBCHC] $ vim /opt/64bit/oracle/11.2.0/log/diag/tnslsnr/sinrndvud062/listener/trace/listener.log
110856 Fri Oct 21 17:00:31 2018
110857 21-OCT-2018 17:00:31 (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = DBCHC)(CID =(PROGRAM = sqlplus)(HOST = sinrndvud062)(USER = ora112)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160.164.131)(PORT = 47405)) 創建 DBCHC 12514
110858 TNS-12514:TNS:監聽器當前不知道鏈接中請求的服務描述符
110859 Fri Oct 21 17:02:47 2018
110860 21-OCT-2018 17:02:47
service_update OSMSRDB 0
110861 21-OCT-2018 17:02:53 service_update OSMSRDB 0
110862 21-OCT- 2018 17:02:54
(CONNECT_DATA =(SID = OSMSRDB)(CID =(PROGRAM = JDBC瘦客戶端)(HOST = jdbc )(USER = linqus)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160) .164.132)(PORT = 32823))創建 OSMSRDB 0
110863 21-OCT-2018 17:02:56 service_update OSMSRDB 0
110864 Fri Oct 21 17:03:07 2018
110865 21-OCT-2018 17:03:07
service_update XSONGDB 0
110866 21-OCT-2018 17:03:08 (CONNECT_DATA =(SID = OSMSRDB)(CID =(PROGRAM = JDBC瘦客戶端)(HOST = jdbc )(USER = linqus)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160。 164.132)(PORT = 32835))創建 OSMSRDB 0
110867 21-OCT-2018 17:03:08
service_update OSMSRDB 0
110868 Fri Oct 21 17:06:19 2018
110869 21-OCT-2018 17:06 :19 service_update XSONGDB 0
110870 21-OCT-2018 17:06:21
(CONNECT_DATA =(SID = XSONGDB)(CID =(PROGRAM = JDBC瘦客戶端)(HOST = jdbc )(USER = linqus))) (ADDRESS =(PROTOCOL = tcp)(HOST = 10.160.164.200)(PORT = 60498))創建 XSONGDB 0
110871 21-OCT-2018 17:06:22 service_update XSONGDB 0
110872 21-OCT-2018 17:06:24
(CONNECT_DATA =(SID = XSONGDB)(CID =(PROGRAM = JDBC瘦客戶端)(HOST = jdbc )(USER = linqus)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160.164.200)(PORT = 60502))創建 XSONGDB 0
110873 21-OCT-2018 17:06:25 service_update XSONGDB * 0數據庫

在RAC環境中,須要切換到網格用戶來查詢監聽日誌
test #su - grid
/ home / ora11grid [FRWK]:找到$ find ORACLE_HOME -name listener.log
查找:/ opt / ora11grid / crf / admin / run / crflogd':權限被拒絕<br/>查找:/ opt / ora11grid / crf / admin / run / crfmond':權限被拒絕
/opt/ora11grid/log/diag/tnslsnr/vgerndpud852/listener/trace/listener.log vim

/ home / ora11grid [ FRWK]:lsnrctl bash

LSNRCTL for Linux:版本11.2.0.3.0 - 生產於17-NOV-2018 04:28:53 服務器

版權全部(c)1991,2011 ,Oracle。版權全部。網絡

歡迎來到LSNRCTL,輸入「幫助」獲取信息。oracle

LSNRCTL> show
show
asterisk(*)表示修飾符或擴展命令後可使用如下操做:tcp

rawmode displaymode
rules trc_file
trc_directory trc_level
log_file log_directory
log_status current_listener
inbound_connect_timeout startup_waittime
snmp_visible save_config_on_stop
dynamic_registration enable_global_dynamic_endpoint
oracle_home pid
connection_rate_limit ide

LSNRCTL> show log_status
鏈接到(DESCRIPTION =(ADDRESS =(PROTOCOL = IPC)(KEY = LISTENER)))
LISTENER參數「log_status」設置爲ON
命令已成功完成。性能

二、監聽異常停止解決方案

能夠將如下參數添加到listener.ora中
SUBSCRIBE_FOR_NODE_DOWNEVENT= OFF

以下:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER = OFF

編輯監聽監控腳本,當監聽異常停止後自動啓動監聽(每分鐘偵測一次)
腳本以下:

$ cat listener.sh
#!/bin/bash

ORACLE_HOME = / u01 / product / oracle / 11.2.0 / db_1; export ORACLE_HOME

pid =ps -ef | grep tnslsnr | grep -v grep | awk'{print $ 2}'

if [echo $ pid | awk -v bi = 1'{print($ 1&gt; bi)?「1」:「0」}'-eq「1」]
else
echo「監聽器運行正常」
else
echo「監聽器已經中止」
$ ORACLE_HOME / bin / lsnrctl start
exit

$ crontab -l

  • / 1 sh /data/run/listener.sh 1 >> / data / run / log / listener.log 2 >> / data / run / log / listener.bad

三、監聽日誌的按期清理
要對監聽日誌文件(listener.log)進行按期清理,若是不按期清理,會遇到下面一些麻煩:

1)監聽日誌文件(listener.log)變得愈來愈大,佔用額外的存儲空間。(固然如今存儲白菜價,不差那幾G的空間。可是咱們仍是要本着工匠情懷,精益求精)
2)監聽日誌文件(listener.log)變得太大會帶來一些問題:LISTENER.LOG日誌大小不能超過2GB,超過會致使LISTENER監聽器沒法處理新的鏈接。
3)監聽日誌文件(listener.log)變得太大,給寫入、查看帶來的一些性能問題、麻煩。

另:監聽日誌listener.log日誌放在了$ORACLE_BASE/diag/tnslsnr/機器名/listener/trace目錄下

四、三種文件的解析
1) sqlnet.ora-----經過這個文件來決定怎麼樣找一個鏈接中出現的鏈接字符串。
例如咱們客戶端輸入
sqlplus sys/oracle@ora
假如個人sqlnet.ora是下面這個樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME,EZCONNECT)
那麼,客戶端就會首先在tnsnames.ora文件中找ora的記錄.若是沒有相應的記錄則嘗試把ora看成一個主機名,經過網絡的途徑去解析它的 ip地址而後去鏈接這個ip上GLOBAL_DBNAME=ora這個實例,固然我這裏ora並非一個主機名

EZCONNECT表示:可使用簡單的方式鏈接Oracle例如:

1 CONNECT username/password@host[:port][/service_name][/instance_name]
2 CONNECT username/password@host[:port][/service_name]
3 sqlplus / as sysdba
4 sqlplus sys as sysdba/sys@127.0.0.1:1521

若是我是這個樣子

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 = LXL)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
)

ORA_TEST:客戶端鏈接服務器端使用的服務別名。注意必定要頂行書寫,不然會沒法識別服務別名。
PROTOCOL:客戶端與服務器端通信的協議,通常爲TCP,該內容通常不用改。
HOST:ORACLE服務器端IP地址或者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進程並不會影響已經存在的數據庫鏈接。
例子:
#listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora

Generated by Oracle configuration tools.

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 (用IP地址較好解析)
PORT:監聽的端口號,使用netstat –an 檢查該端口不被佔用。

當你輸入sqlplus sys/oracle@orcl的時候 1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME 2. 則查詢tnsnames.ora文件,從裏邊找orcl的記錄,而且找到主機名,端口和service_name 3. 若是listener進程沒有問題的話,創建與listener進程的鏈接。 4. 根據不一樣的服務器模式如專用服務器模式或者共享服務器模式,listener採起接下去的動做。默認是專用服務器模式,沒有問題的話客戶端就鏈接上了數據庫的server process。 5. 這時候網絡鏈接已經創建,listener進程的歷史使命也就完成了。

相關文章
相關標籤/搜索