摘要:Oracle數(shù)據(jù)庫作為市場(chǎng)占比最高的商業(yè)數(shù)據(jù)庫,該系統(tǒng)功能強(qiáng)大,同時(shí)也具有一定的復(fù)雜性,Oracle的監(jiān)聽服務(wù)是客戶端連接到數(shù)據(jù)庫的必經(jīng)之路,遠(yuǎn)程客戶端進(jìn)程只有通過服務(wù)端的監(jiān)聽認(rèn)證、轉(zhuǎn)發(fā)才能連接到數(shù)據(jù)庫。本文首先分析了Oracle監(jiān)聽服務(wù)的工作模式,在此基礎(chǔ)上分別研究了通過配置工具與配置文件實(shí)現(xiàn)Oracle客戶端與Oracle服務(wù)器連接的方法,最后以常見的兩例客戶端連接故障為例,分析故障的原因并給出了故障解決方法。
關(guān)鍵詞:Oracle數(shù)據(jù)庫;監(jiān)聽服務(wù);故障解決
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)20-0040-02
1引言
Oracle數(shù)據(jù)庫是甲骨文公司的關(guān)系數(shù)據(jù)庫管理系統(tǒng),它在數(shù)據(jù)庫領(lǐng)域一直處于領(lǐng)先的地位,可以說Oracle數(shù)據(jù)庫系統(tǒng)是目前世界上最流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng),系統(tǒng)移植性好、使用方便、功能強(qiáng)大,適用于各類大、中、小、微機(jī)環(huán)境[1]。它是一種高效率、可靠性好、適應(yīng)高吞吐量的數(shù)據(jù)庫方案,是各個(gè)領(lǐng)域企業(yè)級(jí)開發(fā)的首選。
Oracle是C/S(客戶端/服務(wù)器)結(jié)構(gòu)的數(shù)據(jù)庫系統(tǒng),其主要由客戶端應(yīng)用程序和數(shù)據(jù)庫服務(wù)器進(jìn)程組成。這種結(jié)構(gòu)的優(yōu)點(diǎn)是可將大量的數(shù)據(jù)處理工作在客戶端完成,減少服務(wù)器的負(fù)載與網(wǎng)絡(luò)通信的負(fù)載需求,但同時(shí)由于在客戶端與服務(wù)器之間的通信,使得系統(tǒng)在遠(yuǎn)程認(rèn)證與連接方面有一定的復(fù)雜性,在用戶使用過程中,客戶端的連接問題成為一個(gè)高發(fā)率的故障點(diǎn)[2]。本文闡述了Oracle數(shù)據(jù)庫的監(jiān)聽服務(wù)工作模式及幾種配置方法,并以常見的兩例客戶端連接故障為例,分析了故障的原因,給出了故障解決方法。
2Oracle通信方式
Oracle的客戶端與服務(wù)端之間有兩種通信方式,進(jìn)程通信與網(wǎng)絡(luò)通信,進(jìn)程通信只適用于客戶端與服務(wù)端位于同一服務(wù)器,當(dāng)客戶端和服務(wù)端位于不同的服務(wù)器上,只可采用網(wǎng)絡(luò)通信的方式。目前大部分的應(yīng)用系統(tǒng)部署方式是數(shù)據(jù)庫與服務(wù)器分別獨(dú)立部署,這樣可分解服務(wù)器的負(fù)載和壓力,提高系統(tǒng)的安全性[3],本文主要描述網(wǎng)絡(luò)通信的配置與管理。
當(dāng)客戶端與服務(wù)端采用網(wǎng)絡(luò)通信的方式連接時(shí),Oracle監(jiān)聽成為客戶端連接到數(shù)據(jù)庫的必經(jīng)之路,遠(yuǎn)程客戶端進(jìn)程只有通過服務(wù)端的監(jiān)聽認(rèn)證、轉(zhuǎn)發(fā)才能連接到數(shù)據(jù)庫。數(shù)據(jù)庫的連接方式有多種,如Easy ConneCt、Local naming、DireCtory naming、External naming,Local Naming(本地命名)是常用的數(shù)據(jù)庫連接方式,也就是使用位于客戶端的配置文件tnsnames.ora連接,本文主要分析的是Local Naming連接方式。
3Oracle監(jiān)聽配置與管理
3.1監(jiān)聽配置模板
采用LoCal Naming方式下的監(jiān)聽相關(guān)配置文件主要有3個(gè):listener.ora、sqlnet.ora、tnsnames.ora,其中tnsnames.ora位于客戶端,listener.ora與sqlnet.ora通常位于服務(wù)端。默認(rèn)位置為ORACLE HOME\NETWORK\ADMIN.
listener.ora主要用于配置監(jiān)聽服務(wù)[4]。sqlnet.ora既可以位于Oracle服務(wù)端,也可以位于Oracle客戶端,主要用于控制客戶端和服務(wù)端Oracle Net Services的行為,例如設(shè)置會(huì)話跟蹤級(jí)別和控制客戶端連接等,tnsnames.ora位于客戶端,主要是對(duì)連接描述符進(jìn)行定義。典型的listener.ora配置文件模板如下:
SID_LIST_LISTENER=
(SIDLIST=
(SIDDESC=
(GLOBAL_DBNAME=tns)
(SID_NAME=tns)
)
)
LISTENER=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.110)(PORT=1521》
)
ADR BASE LISTENER=*****
該配置文件包含三部分:LISTENER、SID LIST_ LISTENER與ADR BASE LISTENER。LISTENER用于設(shè)置監(jiān)聽基本配置信息,包含監(jiān)聽名字、連接協(xié)議、監(jiān)聽主機(jī)與監(jiān)聽端口。第二部分SID_LIST_LISTENER用于配置監(jiān)聽的靜態(tài)注冊(cè)特性,主要包含數(shù)據(jù)庫服務(wù)名、實(shí)例名等信息。第三部分ADR_BASE_LIS-TENER指定數(shù)據(jù)庫服務(wù)的路徑。
其中,CLOBAL NAME指的是監(jiān)聽處理的數(shù)據(jù)庫的服務(wù)名,SID_NAME指監(jiān)聽處理的數(shù)據(jù)庫實(shí)例名,HOST表示監(jiān)聽運(yùn)行的數(shù)據(jù)庫服務(wù)器,HOST的值可以用IP地址、主機(jī)名、IP地址解析名表示,建議使用IP地址,清晰明了。PORT表示連接的端口號(hào),默認(rèn)為1521,需保證此端口號(hào)沒有被其他程序占用。
sqlnet.ora文件指明客戶端以何種方法連接數(shù)據(jù)庫。在訪問方式文件中指明客戶端采用的Local Naming的方式,關(guān)鍵字為TNSNAMES。
tnsnames.ora文件主要是對(duì)連接描述符進(jìn)行定義,與listen-er.ora中的配置相對(duì)應(yīng),配置文件模板如下:
TNS=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP) (HOST =192.168.1.110)(PORT=1521)
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=tns)
)
)
其中訪問協(xié)議(PROTOCOL)、數(shù)據(jù)庫主機(jī)名(HOST),訪問端口(PORT),這三項(xiàng)參數(shù)只需與前面的監(jiān)聽服務(wù)配置文件參數(shù)保持一致。數(shù)據(jù)庫服務(wù)名(SERVICENAME)要與ORACLE參數(shù)文件中定義的服務(wù)名保持一致。
3.2Local Naming下的監(jiān)聽配置
可以采用兩種方式來創(chuàng)建與修改配置文件,一種是可視化配置工具,如Net Configuration Assistant與Net Manager,另一種是使用文本編輯工具手動(dòng)編輯配置文件[5]。
本文以Net Configuration Assistant為例,該工具可完成lis-tener.ora與tnsnames.ora的配置。sqlnet.ora需手動(dòng)完成??梢暬ぞ叩膬?yōu)點(diǎn)是系統(tǒng)性強(qiáng),不會(huì)出現(xiàn)語法、關(guān)鍵字錯(cuò)誤。建議使用可視化工具完成監(jiān)聽配置。
Oracle的監(jiān)聽服務(wù)由server與listener共同控制。
新建服務(wù)命名:
(1)選中服務(wù)命名,點(diǎn)擊左邊的綠色新建按鈕,如圖1所示;
(2)在后面的對(duì)話框中,依次填寫網(wǎng)路服務(wù)名:tns,協(xié)議選擇TCP/IP,主機(jī)名填寫數(shù)據(jù)庫服務(wù)器地址(192.168.1.110),填寫端口號(hào)(默認(rèn)1521),填寫服務(wù)名:tns(全局?jǐn)?shù)據(jù)庫名)。此對(duì)話框中無保存按鈕,需通過關(guān)閉對(duì)話框來保存設(shè)置,至此,完成服務(wù)命名的創(chuàng)建。
建立LISTENER監(jiān)聽程序:
(a)重新打開Net Manager,選中監(jiān)聽程序,點(diǎn)擊左邊的綠色新建按鈕,如圖1所示;
(b)填寫監(jiān)聽程序名稱:LISTENER;
(c)點(diǎn)擊“添加地址”,在網(wǎng)絡(luò)地址填寫:“主機(jī):192.168.1.110(數(shù)據(jù)庫服務(wù)器地址),端口:1521”,端口號(hào)與服務(wù)命名中的端口號(hào)保持一致,最后保存設(shè)置。
4Oracle連接常見故障
本文以O(shè)racle常見的兩例客戶端連接故障為例,分析故障的原因,給出故障解決方法,其中Oracle的版本為11.2.0。
1)無監(jiān)聽程序故障
數(shù)據(jù)庫服務(wù)器在非正常關(guān)機(jī)或者其他異常情況下,出現(xiàn)數(shù)據(jù)庫連接失敗,使用PISqlDeveloper連接數(shù)據(jù)庫,報(bào)TNS:無監(jiān)聽程序,錯(cuò)誤代碼1521,使用命令查看監(jiān)聽服務(wù)的狀態(tài):lsnrctlstatus,同樣報(bào)錯(cuò):無監(jiān)聽程序。
解決方法:修改監(jiān)聽配置文件,將listener.ora與tnsnames.ora文件中的localhost字段,皆修改為數(shù)據(jù)庫服務(wù)器的IP地址。重啟監(jiān)聽服務(wù)(在cmd命令行下使用lsnrctl stop&&lsnrCtl start重啟),使用PISqIDeveloper連接數(shù)據(jù)庫,連接正常。
2)服務(wù)命名注冊(cè)故障
此故障是在配置完監(jiān)聽服務(wù)的基礎(chǔ)上發(fā)生的,按照3.2完成監(jiān)聽服務(wù)的配置,重啟服務(wù)后需要等待幾分鐘,服務(wù)命名才會(huì)被注冊(cè)成功。但有時(shí)服務(wù)命名無法正常完成靜態(tài)注冊(cè),導(dǎo)致監(jiān)聽程序正常,但沒有對(duì)應(yīng)的服務(wù)。此時(shí)需要使用動(dòng)態(tài)注冊(cè)的方式完成服務(wù)命名的注冊(cè)。具體步驟如下:
(1)在命令行中使用管理員登陸oracle:sqlplus/as sysdba;
(2) show parameter service_names查看service_names,如果不是tns,進(jìn)入第三步,如果是,進(jìn)去第四步;
(3)使用set ORACLE SID=tns,切換數(shù)據(jù)庫實(shí)例;
(4)退出sql,在CMD命令行下,使用alter system register動(dòng)態(tài)注冊(cè)。
最后,查看監(jiān)聽狀態(tài),lsnrctl status,顯示服務(wù)”tns”包含1個(gè)實(shí)例,則監(jiān)聽正常工作。
5結(jié)論
本文首先分析了Oracle監(jiān)聽服務(wù)的工作模式,在此基礎(chǔ)上分別研究了通過配置工具與配置文件實(shí)現(xiàn)Oracle客戶端與服務(wù)器連接的方式,介紹了在Local Naming下Oracle監(jiān)聽服務(wù)的可視化配置步驟,最后以常見的兩例客戶端連接故障為例,分析故障的原因并給出了故障解決方法,為技術(shù)人員解決Oracle連接故障提供了理論知識(shí)與參考方法。
參考文獻(xiàn):
[1]周亮.Oracle DBA實(shí)戰(zhàn)攻略[M].機(jī)械工業(yè)出版社,2013.
[2]許戈.Oracle數(shù)據(jù)庫網(wǎng)絡(luò)安全訪問機(jī)制構(gòu)建策略分析[J].江蘇科技信息,2017(29).
[3]周文瓊,王樂球,鄭述招.Oracle網(wǎng)絡(luò)的配置與管理[J].計(jì)算機(jī)與數(shù)字工程,2014,42(12):2350-2353+2368.
[4]劉恩海,聶俊嵐,韓煥平,等.Web與數(shù)據(jù)庫的連接[J].河北科技大學(xué)學(xué)報(bào),2001(4):30-33+38.
[5]王廷任.Oracle數(shù)據(jù)庫日常維護(hù)與優(yōu)化建議[J].數(shù)字通信世界,2019(6):93.
【通聯(lián)編輯:王力】
收稿日期:2020-04-17
基金項(xiàng)目:中航工業(yè)技術(shù)創(chuàng)新基金(2013A62302R)
作者簡(jiǎn)介:弓曉波(1987-),男,工程師,研究方向?yàn)橛?jì)算機(jī)應(yīng)用與數(shù)據(jù)管理技術(shù)。