摘要:針對(duì)oracle數(shù)據(jù)庫(kù)健康檢查,文章提出了一套較為科學(xué)全面的健康檢查方案,并分別給出了相關(guān)建議。通過(guò)對(duì)oracle數(shù)據(jù)庫(kù)運(yùn)行狀況進(jìn)行全面徹底檢查和分析,保障其健康運(yùn)行。
關(guān)鍵詞:oracle數(shù)據(jù)庫(kù);健康檢查;醫(yī)院管理管理信息系統(tǒng)
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-2374(2009)10-0016-02
醫(yī)院管理管理信息系統(tǒng)(HIS)在醫(yī)院日常工作“扮演”著越來(lái)越重要的角色。數(shù)據(jù)庫(kù)理所當(dāng)然的成為了重中之重。在我院信息系統(tǒng)日常管理維護(hù)過(guò)程中,對(duì)Oracle數(shù)據(jù)庫(kù)的管理工作特別重要。Oracle數(shù)據(jù)庫(kù)健康檢查的重點(diǎn)是醫(yī)院信息系統(tǒng)后臺(tái)使用的數(shù)據(jù)庫(kù)服務(wù)器。檢查中發(fā)現(xiàn)了一些Oracle數(shù)據(jù)庫(kù)存在一些問(wèn)題,突出的是操作系統(tǒng)版本和補(bǔ)丁不一致,數(shù)據(jù)庫(kù)補(bǔ)丁不全面,用戶(hù)數(shù)據(jù)和系統(tǒng)數(shù)據(jù)共用系統(tǒng)表空間,數(shù)據(jù)庫(kù)用戶(hù)不正確授予DBA權(quán)限,存在無(wú)效對(duì)象等。這次數(shù)據(jù)庫(kù)健康檢查,發(fā)現(xiàn)并現(xiàn)場(chǎng)解決了一些問(wèn)題,避免了隱患變?yōu)楣收?保證了數(shù)據(jù)庫(kù)的正常運(yùn)行,取得了較好的效果。
下面簡(jiǎn)要介紹有關(guān)oracle數(shù)據(jù)庫(kù)健康檢查的相關(guān)內(nèi)容,以供DBA日常管理參考之用。
一、數(shù)據(jù)庫(kù)健康檢查的現(xiàn)實(shí)意義
數(shù)據(jù)庫(kù)健康檢查是采用一套規(guī)范、科學(xué)的方法,通過(guò)分析數(shù)據(jù)庫(kù)產(chǎn)生的日志文件、Trace文件、參數(shù)文件以及通過(guò)數(shù)據(jù)采集產(chǎn)生的Report文件,對(duì)數(shù)據(jù)庫(kù)本身的運(yùn)行狀況進(jìn)行全面徹底檢查和分析,發(fā)現(xiàn)潛在風(fēng)險(xiǎn),及時(shí)提供相應(yīng)的修補(bǔ)方案,防患于未然。
二、健康檢查的常用工具
1.UTLBSTAT/UTLESTAT.
2.STATSPACK.
3.第三方專(zhuān)業(yè)工具:Quest、VERITAS Precise產(chǎn)品、CA……
三、數(shù)據(jù)庫(kù)健康檢查的主要內(nèi)容
對(duì)數(shù)據(jù)庫(kù)健康檢查,可以從以下幾個(gè)方面進(jìn)行:(1)基礎(chǔ)信息檢查;(2)數(shù)據(jù)庫(kù)總體設(shè)計(jì)與規(guī)劃?rùn)z查;(3)重要參數(shù)的配置檢查;(4)日志文件檢查;(5)數(shù)據(jù)庫(kù)備份檢查。
(一)基礎(chǔ)信息檢查
檢查的內(nèi)容主要包括數(shù)據(jù)庫(kù)服務(wù)器硬件配置狀況(CPU數(shù)目、內(nèi)存大小等)、存儲(chǔ)(IO Controller數(shù)目、RAID、HD數(shù)目及大小等)、操作系統(tǒng)及版本信息、相關(guān)文件系統(tǒng)、Oracle數(shù)據(jù)庫(kù)版本信息等。相關(guān)建議:
1.常用檢查系統(tǒng)Unix/Linux命令為:Vmstat/Top/Iostat/Sar等。
2.峰值時(shí)內(nèi)存使用,CPU利用率,磁盤(pán)I0都是非常重要的檢查監(jiān)控內(nèi)容。
(二)數(shù)據(jù)庫(kù)總體設(shè)計(jì)與規(guī)劃?rùn)z查
數(shù)據(jù)庫(kù)的總體設(shè)計(jì)與規(guī)劃是系統(tǒng)維護(hù)和性能優(yōu)化的基礎(chǔ),也是健康檢查的一個(gè)重點(diǎn)。檢查的主要內(nèi)容包括以下幾方面:
1.數(shù)據(jù)庫(kù)的規(guī)劃?rùn)z查內(nèi)容。主要是對(duì)Oracle安裝文件,控制文件,重做日志文件,歸檔日志文件,回滾段。相關(guān)建議:(1)為了安全一般建議創(chuàng)建多個(gè)控制文件,且分布在不同的硬盤(pán)上;(2)為了使系統(tǒng)性能更好可以創(chuàng)建多重做日志文件組,并建議重做日志文件最好放在最快的單獨(dú)磁盤(pán)上,以提高性能;(3)建議將數(shù)據(jù)文件、日志文件和控制文件的安置路徑與數(shù)據(jù)庫(kù)系統(tǒng)存放在不同的路徑上;(4)根據(jù)硬件設(shè)備具體情況,建議做到頻繁讀寫(xiě)的文件和其他關(guān)鍵文件的負(fù)載平衡。
2.表空間和數(shù)據(jù)文件的相關(guān)檢查內(nèi)容:主要檢查以下幾方面的內(nèi)容:(1)System,Rollback,Temporary,Data,Index,Undo(針對(duì)9i)的表空間和數(shù)據(jù)文件的分布,利用率等情況;(2)表空間的碎片率;(3)數(shù)據(jù)文件的Corrupted Block(壞塊)檢查;(4)數(shù)據(jù)文件的I/O分布。
相關(guān)建議:(1)除系統(tǒng)之外的應(yīng)用不要放在System表空間中。每個(gè)應(yīng)用系統(tǒng)用戶(hù)都應(yīng)該有自己的表空間;(2)所有的ORACLE用戶(hù)指定同一個(gè)Temporary Tablespace;(3)如有必要,可定時(shí)進(jìn)行碎片合并工作。
3.表和索引的相關(guān)檢查內(nèi)容。主要檢查以下幾方面的內(nèi)容:(1)Table/Index的Pctfree,Pctused,Mintrans,Maxtrans參數(shù)是否設(shè)置;(2)Table/Index的Storage參數(shù)是否規(guī)劃;(3)大數(shù)據(jù)量的Table/Index是否做分區(qū)管理;(4)Table/Index的Analyze和Rebuild;(5)Chaining Row和Migration Row檢查;(6)Table/Index的Corrupted Block(壞塊)檢查。
相關(guān)建議:(1)Initial Extent應(yīng)設(shè)計(jì)的足夠大,盡量能存放該表的所有數(shù)據(jù);對(duì)于數(shù)據(jù)量大的表,Next Extent也要設(shè)計(jì)的足夠大,以降低Oracle對(duì)空間的動(dòng)態(tài)管理;(2)對(duì)于更新和插入操作頻繁的表,注意索引的創(chuàng)建和Initial值的設(shè)置;(3)對(duì)于頻繁使用的表,在數(shù)據(jù)量允許的條件下,可以考慮將其駐留內(nèi)存,以提高對(duì)該表的訪(fǎng)問(wèn)效率;(4)對(duì)INSERT比較頻繁的表,注意設(shè)置正確的freelists值;如果采用OPS數(shù)據(jù)庫(kù),還需考慮freelist group的設(shè)置;(5)對(duì)于數(shù)據(jù)量很大的表,盡量采用表分區(qū)的技術(shù);(6)選擇合理的索引字段,盡量避免用大字段建立索引;(7)均衡表上的索引數(shù)量,不要在表上創(chuàng)建太多的索引,避免Oracle大量維護(hù)索引數(shù)據(jù);(8)合理的使用索引,有些情況應(yīng)避免使用索引,如對(duì)表中的數(shù)據(jù)量掃描超過(guò)10%。
4.Oracle其它對(duì)象檢查。Oracle數(shù)據(jù)庫(kù)中存儲(chǔ)的是各種對(duì)象,檢查數(shù)據(jù)對(duì)象的狀態(tài)在數(shù)據(jù)庫(kù)檢查維護(hù)中占有很高比例。需要檢查的對(duì)象主要有以下幾類(lèi):(1)Sequence檢查;(2)Trigger/ StoredProcedure Function、Package/View的狀態(tài)檢查;(3)Oracle User/Schema檢查;(4)DB Link檢查;(5)檢查失效的約束(dba_constraints)。
相關(guān)建議:(1)可以在視圖all_objects,dba_objects或user_objects中找出無(wú)效對(duì)象的信息。從all_errors視圖上也能看到狀態(tài)為”INVALID”(無(wú)效)的對(duì)象的詳細(xì)錯(cuò)誤信息;(2)如果一個(gè)包或過(guò)程無(wú)效,下一次調(diào)用將拋出錯(cuò)誤。通過(guò)運(yùn)行$Oracle_home/rdbms/admin目錄下的utlrp.sql可以防止(解決)此類(lèi)問(wèn)題的發(fā)生。utlrp.sql腳本在Oracle8i和Oracle9i已經(jīng)有了實(shí)質(zhì)的變化,執(zhí)行前請(qǐng)閱讀該腳本;(3)針對(duì)以上Oracle對(duì)象主要通過(guò)dba_users、dba_objects,dba_triggers、dba_jobs、dba_db_links、dba_constraints等字典視圖查詢(xún)。
(三)重要參數(shù)的配置檢查
重點(diǎn)關(guān)注以下參數(shù):
log_buffer、 db_block_buffers、shared_pool_size 、db_cache_size(oracle 9i) 、sort_area_size 、hash_area_size
相關(guān)建議:(1)綜合考慮操作系統(tǒng),應(yīng)用系統(tǒng),oracle內(nèi)存空間分配,OLAP應(yīng)用與OLTP應(yīng)用初始化參數(shù)設(shè)置有很大區(qū)別;(2)在對(duì)Oracle內(nèi)存設(shè)置調(diào)整時(shí),可參考Statspack報(bào)告信息v$system_event、v$sysstat、v$sesstat、v$latch等視圖信息;(3)share_pool_size大小要適當(dāng),使用率應(yīng)該穩(wěn)定在75%~90%間。如果發(fā)現(xiàn)該共享池命中率不高可以適當(dāng)?shù)脑黾觭hred_pool_size;(4)log_buffer通常幾百K至1M大小。
(四)警告日志檢查
當(dāng)數(shù)據(jù)庫(kù)內(nèi)部操作出現(xiàn)錯(cuò)誤,Oracle數(shù)據(jù)庫(kù)將通過(guò)警告日志提醒用戶(hù),結(jié)合相關(guān)的跟蹤文件來(lái)監(jiān)控?cái)?shù)據(jù)庫(kù)。
主要是對(duì)alert_sid.log、sqlnet.log、listener.log等日志文件和Trace文件進(jìn)行檢查,查看數(shù)據(jù)庫(kù)運(yùn)行期間的狀況報(bào)告,檢查和清理應(yīng)用數(shù)據(jù)庫(kù)警報(bào)日志文件(alert_sid.log),檢查是否存在數(shù)據(jù)庫(kù)系統(tǒng)錯(cuò)誤提示信息。
此外還有對(duì)Net及SQL*Net產(chǎn)生的Log檢查,以及對(duì)產(chǎn)生的Trace文件分析。相關(guān)建議:(1)啟動(dòng)日志監(jiān)控和警告日志的通告是所有數(shù)據(jù)庫(kù)管理員任務(wù)的重中之重;(2)可以通過(guò)Unix或Linux下的corn程序創(chuàng)建一個(gè)shell腳本來(lái)檢查錯(cuò)誤日志文件。此外,Oracle的外部表特性也允許直接使用SQL來(lái)查詢(xún)警告日志;(3)值得注意的是,警告日志文件將會(huì)變的越來(lái)越大,建議將其保持一個(gè)易于管理的大小,可以通過(guò)重命名文件來(lái)備份當(dāng)前版本,下一次要寫(xiě)日志將導(dǎo)致創(chuàng)建一個(gè)新的警告日志;(4)對(duì)于日志文件中記錄的錯(cuò)誤信息給予記錄和分析。
(五)數(shù)據(jù)庫(kù)備份檢查
主要是針對(duì)備份方案的技術(shù)審查,檢查方案整體的可行性??陀^(guān)條件允許的情況下,應(yīng)該進(jìn)行完整的備份恢復(fù)測(cè)試,以保證數(shù)據(jù)庫(kù)能在系統(tǒng)發(fā)生故障的情況下可以順利恢復(fù)。相關(guān)建議:
1.針對(duì)生產(chǎn)數(shù)據(jù)庫(kù),根據(jù)設(shè)備的情況和各局的數(shù)據(jù)量(包括庫(kù)的大小和每天產(chǎn)生歸檔日志文件的多少)來(lái)決定備份的頻率。
2.建議數(shù)據(jù)量大的每周兩次數(shù)據(jù)庫(kù)全備份,每日兩次歸檔日志的備份,數(shù)據(jù)量小的每周一次數(shù)據(jù)庫(kù)全備份,每日一次歸檔日志的備份。備份的頻率主要從恢復(fù)的時(shí)間來(lái)考慮,歸檔日志太多恢復(fù)時(shí)間會(huì)比較長(zhǎng)。有了全備份,在某個(gè)表空間被損壞的情況下,也可以進(jìn)行單個(gè)表空間的恢復(fù)。
3.如果條件允許,定期校驗(yàn)備份,比如恢復(fù)測(cè)試倒測(cè)試環(huán)境。
除了以上列述的項(xiàng)是數(shù)據(jù)庫(kù)健康檢查的主要方面外,還應(yīng)對(duì)oracle的主要補(bǔ)丁;RAC環(huán)境下負(fù)載分配、接管;第三方軟件等情況進(jìn)行安全檢查。
四、結(jié)語(yǔ)
Oracle數(shù)據(jù)庫(kù)在醫(yī)療衛(wèi)生行業(yè)(醫(yī)院管理信息系統(tǒng))中應(yīng)用非常廣泛,健康穩(wěn)定的Oracle數(shù)據(jù)庫(kù)是醫(yī)療衛(wèi)生單位信息系統(tǒng)穩(wěn)定高效運(yùn)轉(zhuǎn)的基礎(chǔ)條件。健康檢查是數(shù)據(jù)庫(kù)維護(hù)工作的基礎(chǔ),應(yīng)定期對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行健康檢查工作,保障醫(yī)院信息系統(tǒng)安全穩(wěn)定。
參考文獻(xiàn)
[1]April Wells著,孫楊譯.Oracle DBA日常管理[M].清華大學(xué)出版社,2007.
[2]蓋國(guó)強(qiáng),馮春培,葉梁,馮大輝.Oracle數(shù)據(jù)庫(kù)性能優(yōu)化[M].人民郵電出版社,2005.
作者簡(jiǎn)介:翟油華(1974-),男,江蘇興化人,南京醫(yī)科大學(xué)第二附屬醫(yī)院信息科工程師,研究方向:軟件工程。