張文峰,帥海濤,彭小斌
南京軍區(qū)福州總醫(yī)院476臨床部信息科,福建 福州 350002
作為全球最大的關(guān)系型數(shù)據(jù)庫產(chǎn)品ORACLE以其出色的數(shù)據(jù)庫管理、超強(qiáng)的穩(wěn)定性、良好的并發(fā)訪問能力而聞名[1]。ORACLE數(shù)據(jù)庫管理員在日常的管理維護(hù)中責(zé)任重大,需要對數(shù)據(jù)庫的數(shù)據(jù)安全、性能提升、權(quán)限管理等進(jìn)行全方位地管理和監(jiān)控。尤為重要的是為應(yīng)對某些入侵者的非法訪問和惡意攻擊,數(shù)據(jù)管理員(DBA)需要對用戶的數(shù)據(jù)庫操作進(jìn)行定期審計(jì)和實(shí)時(shí)跟蹤。ORACLE在數(shù)據(jù)庫跟蹤技術(shù)方面提供了強(qiáng)大的支持,完全滿足DBA對數(shù)據(jù)庫用戶操作展開全面實(shí)時(shí)監(jiān)控的需求。
ORACLE系統(tǒng)通過設(shè)置可以實(shí)現(xiàn)對數(shù)據(jù)庫操作在線跟蹤。ORACLE跟蹤有兩種方法,即后臺進(jìn)程跟蹤和用戶SQL語句跟蹤[2]。后臺進(jìn)程跟蹤,是通過啟動ORACLE數(shù)據(jù)庫的后臺進(jìn)程,對系統(tǒng)及用戶進(jìn)行跟蹤。系統(tǒng)跟蹤主要記錄數(shù)據(jù)庫結(jié)構(gòu)的修改信息。啟動跟蹤后,系統(tǒng)把對于數(shù)據(jù)庫結(jié)構(gòu)的修改時(shí)間、結(jié)果、執(zhí)行的命令等自動記錄下來,存儲在數(shù)據(jù)跟蹤文件中。用戶SQL語句跟蹤,是通過啟用SQL_TRACE對用戶的SQL語句進(jìn)行跟蹤,ORACLE將把用戶所執(zhí)行的SQL語句存儲下來,便于DBA對用戶的SQL操作進(jìn)行審查。
在ORACLE數(shù)據(jù)庫中,跟蹤文件的存儲目錄可以在參數(shù)文件initsid.ora中設(shè)置(sid表示數(shù)據(jù)庫實(shí)例名),系統(tǒng)跟蹤文件存儲目錄由background_dump_dest參數(shù)決定,用戶信息跟蹤文件由user_dump_dest參數(shù)確定[3]。以O(shè)RACLE8.17版本為例,在d:oracleadminorclpfile(假設(shè)ORACLE安裝在d盤,數(shù)據(jù)庫實(shí)例名為ORCL)中打開initorcl.ora參數(shù)文件,若參數(shù)background_dump_dest為空,則ORACLE自動選取系統(tǒng)默認(rèn)路徑d:oracleadminorcldumporclalrt.log。此處我們可以設(shè)置為background_dump_dest = D:oracleadminORCLdump,user_dump_dest =D:oracleadminORCLudump,設(shè)置完跟蹤文件存儲路徑參數(shù)后,要重新啟動ORACLE數(shù)據(jù)庫參數(shù)才能起作用。
上述目錄設(shè)置完成后,在數(shù)據(jù)庫運(yùn)行過程中,系統(tǒng)自動將相關(guān)信息存儲到指定的目錄,產(chǎn)生以trc為擴(kuò)展名的一系列文件。以用戶跟蹤文件為例,其文件內(nèi)容必須使用跟蹤文件整理命令TKPROF來整理方可閱讀,其語法格式為:TKPROF TRACEFILE OUTPUTFILE,其中 TRACEFILE 為跟蹤文件名,OUTPUTFILE為整理后輸出的文件名。執(zhí)行完該命令后用戶即可打開生成的整理文件進(jìn)行閱讀和解析。
除了對進(jìn)程可以設(shè)置跟蹤外,還可以對用戶SQL語句進(jìn)行跟蹤[4],即通過對數(shù)據(jù)庫參數(shù)設(shè)置可以將用戶執(zhí)行的SQL語句存儲下來,供管理員進(jìn)行分析維護(hù)。在SQLPLUS界面中輸入“show parameter sql_trace”如果該參數(shù)值為FALSE,要在參數(shù)文件initorcl.ora文件中手工添加一行:sql_trace=true,然后重新啟動數(shù)據(jù)庫新參數(shù)即可生效。另一種方法是在線修改跟蹤參數(shù),在SQLPLUS界面中輸入alter session set sql_trace=true,然后運(yùn)行想要執(zhí)行的SQL語句,系統(tǒng)也會對這些SQL語句進(jìn)行自動跟蹤,但這種在線修改跟蹤參數(shù)只對當(dāng)前數(shù)據(jù)庫會話有效,數(shù)據(jù)庫重新啟動后參數(shù)將失效。
以下通過一個(gè)實(shí)例操作來對SQL語句進(jìn)行跟蹤文件分析。SCOTT用戶執(zhí)行以下SQL命令:“SQL>select *from tab;SQL>update emp set sal=sal + 1000;SQL>select * from emp”,執(zhí)行后在D:ORACLEADMINORCLUDUMP目錄中檢測到跟蹤文件ORA01288.TRC。打開新生成的跟蹤文件,可以看到如下信息(這里只截取第二條語句對應(yīng)的跟蹤文件部分內(nèi)容):
PARSING IN CURSOR #16 len=132 dep=2 uid=0 oct=3 lid=0 tim=0 hv=1428100621 ad='548c760'
Update emp set sal=sal + 1000
END OF STMT
PARSE #16:c=0,e=0,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=4,tim=0
EXEC #16:c=0,e=0,p=1,cr=1,cu=20,mis=0,r=14,dep=0,og=4,tim=0
FETCH #16:c=0,e=0,p=1,cr=5,cu=0,mis=0,r=1,dep=2,og=4,tim=0
STAT #16 id=1 cnt=1 pid=0 pos=0 obj=67 op='UPDATE EMP'
STAT #16 id=2 cnt=1 pid=1 pos=1 obj=112 op='TABLE ACCESS FULL EMP '
對新產(chǎn)生的跟蹤文件信息進(jìn)行整理,D:ORACLEADMINORCLUDUMP >TKPROF ORA01288.TRC ORA01288.TXT,整理后打開ORA01288.TXT文件,得到的信息如下:

Misses in library cache during parse: 1
Optimizer goal:CHOOSE
Parsing user id: 32
ROWS ROW SOURCE OPERATION
跟蹤文件的內(nèi)容是對每一個(gè)SQL語句執(zhí)行過程的分析,其中count表示Parse(語法分析)、execut(執(zhí)行)、fetch(取數(shù)據(jù))調(diào)用的執(zhí)行次數(shù),cpu表示實(shí)際使用CPU的時(shí)間,單位為s,elapsed表示操作實(shí)際運(yùn)行時(shí)間,應(yīng)≥CPU時(shí)間。disk表示從數(shù)據(jù)文件讀入內(nèi)存的數(shù)據(jù)塊數(shù)。Query表示一次性訪問。Current表示在當(dāng)前方式下,緩沖區(qū)讀數(shù)據(jù)塊數(shù)。Rows表示該語句所訪問的行數(shù)。根據(jù)這些信息,DBA可以很清楚地知道SQL語句的實(shí)際執(zhí)行情況,可以根據(jù)跟蹤文件信息排除SQL語句運(yùn)行失敗的故障,決定是否需要對用戶進(jìn)行限制、擴(kuò)大用戶的資源使用范圍、調(diào)整數(shù)據(jù)庫參數(shù)等。
綜上所述,通過對ORACLE系統(tǒng)參數(shù)的設(shè)置,可以實(shí)現(xiàn)對進(jìn)程和用戶會話的跟蹤,通過進(jìn)一步分析跟蹤文件的相關(guān)數(shù)據(jù),我們可以得到系統(tǒng)和用戶進(jìn)程以及每一個(gè)SQL語句執(zhí)行過程的具體信息[5],數(shù)據(jù)庫管理員可以根據(jù)這些信息對數(shù)據(jù)庫性能參數(shù)進(jìn)行調(diào)整和配置,從而達(dá)到優(yōu)化數(shù)據(jù)庫性能[6-7]的目的。
[1]韓思捷.ORACLE數(shù)據(jù)庫技術(shù)實(shí)用詳解:教你如何成為10gOCP[M].北京:電子工業(yè)出版社,2008.
[2]劉光霆,何宏.ORACLE中SQL執(zhí)行原理與性能優(yōu)化研究[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(6):149-151.
[3]嚴(yán)灼.ORACLE數(shù)據(jù)庫安全性探討[J].電腦知識與技術(shù),2009,5(25):7088-7089.
[4]胡怡之,陳源.基于SQL和ORACLE數(shù)據(jù)庫安全分析[J].計(jì)算機(jī)與現(xiàn)代化,2004,(12):150-152.
[5]劉鳳龍.ORACLE監(jiān)控處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,35(10):54-56.
[6]馬錫坤.基于Oracle的在線式應(yīng)用容災(zāi)系統(tǒng)的建立[J].中國醫(yī)療設(shè)備,2012,27(2):38-40.
[7]張紅強(qiáng),李淑娣.自治特性在Oracle數(shù)據(jù)庫管理系統(tǒng)中的應(yīng)用[J].煤炭技術(shù),2011,(5):193-195.