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