胡琪
摘?要文章主要分析了大型數(shù)據(jù)庫Oracle的主動維護和按需維護的一般方法,重點探討了維護過程中的安全性、門閂鎖與排隊鎖的競爭以及如果周期性監(jiān)測并解決鎖沖突的問題,最后總結(jié)了通用例程維護過程中,需要注意的問題。
關(guān)鍵詞Oracle;維護
中圖分類號TP文獻標識碼A文章編號1673-9671-(2011)071-0102-01
數(shù)據(jù)庫的維護工作在整個數(shù)據(jù)庫的使用過程中都要進行。由于Oracle的RDBMS 非常嚴謹,所以它在相當長的使用周期中都不會崩潰。但是,這一嚴謹性要求諸多組成部分之間相互協(xié)作。這樣,就需要時常維護此數(shù)據(jù)庫系統(tǒng),使其不僅能夠正常運轉(zhuǎn)而且要保證可接受的響應時間和吞吐率,而且要對額外的負載保證其可擴展性。如果考慮到數(shù)據(jù)庫的功能需要有多個組成部分來實現(xiàn),以及不斷增長的數(shù)據(jù)處理需求,就可以理解數(shù)據(jù)庫維護工作的必要性。這些維護工作包括:補丁/版本升級、初始化參數(shù)的改變、分段、索引重構(gòu)、計算段統(tǒng)計信息、錯誤檢測及修正,以及在管理權(quán)限下的其他各種維護任務,這些都是必須的。
1主動維護和按需維護
維護可以是主動維護和按需維護。按需維護一般是針對當時出現(xiàn)的問題,盡快采取正確措施,通常是立刻進行。相反,主動維護包括預見到一些一般或非一般問題并采取措施防止其發(fā)生。在任何情況下,為保證及時發(fā)現(xiàn)出現(xiàn)的問題并作出相應處理,必須進行經(jīng)常性的監(jiān)測。通常情況下,按需維護可能需要立即停工以防止將來不得不進行更長時間的停工維護。而主動維護也可能需要停工,因為沒有急待處理的問題,可以在非數(shù)據(jù)庫訪問高峰期再來進行需要停工才能進行的維護工作。而且,對于主動維護有了一定的熟悉之后,可以盡量避免按需維護,防止在數(shù)據(jù)庫訪問的高峰期進行長時間的停工維護。
1.1在所有可能級上實現(xiàn)健壯的安全性
在數(shù)據(jù)庫環(huán)境中,一項最重要的維護任務是增強安全性。對于任何支持關(guān)鍵任務的環(huán)境,
健壯的安全性都是必不可少的。缺少安全性會直接影響可用性:①由于用戶或管理員的誤操作而破壞數(shù)據(jù)庫的安全性;②由于暴露了數(shù)據(jù)庫及相關(guān)組成部分(硬件、軟件和網(wǎng)絡),而易受到惡意的攻擊。
為了使用戶錯誤所造成的損失最小并可能防止受到惡意攻擊的傷害,必須面向數(shù)據(jù)庫及其擴展構(gòu)件如網(wǎng)絡和來實現(xiàn)安全性。一個重要的維護是要關(guān)注安全錯誤信號并采取措施更正。這一技巧廣泛應用于與數(shù)據(jù)庫相關(guān)的安全性中。同時,Oracle8和第三方還提供了各種各樣的終端用戶認證方法。除了終端用戶認證,客戶服務器機器也要被認證。特別是,如果客戶通過互聯(lián)網(wǎng)絡輸入數(shù)據(jù)庫請求,為了防止數(shù)據(jù)庫被侵犯必須進行這種認證。有多種機制支持客戶/服務器認證。
1.2理解、防止并解決門閂鎖和排隊鎖的競爭
Oracle服務器利用幾種機制,如門閂鎖、排隊鎖、分布鎖和全局鎖來控制SGA(緩沖區(qū)cache、行cache、庫函數(shù)cache等)內(nèi)對內(nèi)部數(shù)據(jù)結(jié)構(gòu)的共享訪問。然而,這些內(nèi)部的加鎖機制在許多時候也引起競爭,直接影響性能并限制吞吐量和可用性。因此,需要對這些內(nèi)部鎖的機制以及如何檢測競爭有一個全面的了解,采取適當?shù)牟僮骷记伞?/p>
首先來了解兩種最常用的內(nèi)部鎖機制:門閂鎖和排隊鎖。門閂鎖是復雜的細粒度串行化構(gòu)件,用來控制對SGA內(nèi)部結(jié)構(gòu)的訪問;排隊鎖與門閂鎖類似,保護特定的結(jié)構(gòu),但是它們在實現(xiàn)上更高級,除了依賴互斥策略,排隊鎖允許資源在多個級別共享。根據(jù)鎖的類型的不同,解決鎖競爭的方法也有多種,如:重作分配和重作拷貝數(shù);對于行Cache對象鎖,減少這種鎖的競爭的方法之一是增大SHAREDPOOL初始化參數(shù)的大小等??傊匾氖且A先主動地通過調(diào)解所有的SQL資源,之后再采用上面的方法來解決這些問題。
1.3周期性地監(jiān)測并解決鎖沖突
任何多用戶的數(shù)據(jù)庫都需要鎖,因此很容易引起鎖沖突。對于Oracle,沖突一般很少,但確實也有時發(fā)生。當鎖沖突發(fā)生時可能嚴重影響其他各種運行的會話,就會使常規(guī)的操作混亂—除非鎖問題成為DBA監(jiān)測數(shù)據(jù)庫時所必須警覺的事情,這樣可以采取措施來解決潛在的問題。Oracle提供了許多工具來監(jiān)測鎖問題,如Oracle和第三方工具、特定的SQL訪問、使用catblock.sql和utllockt.sql腳本文件等。但是,有時這些常規(guī)的方法并不能確定鎖沖突問題。例如,某些運行時間長的關(guān)鍵作業(yè)可能會受到影響而沒有被殺死,或者許多進程受到影響,使得整個程序掛起。解決這種情況需要使用某些OS和數(shù)據(jù)庫調(diào)試工具(如oradbx或orad ebug及truss)來獲得進程狀態(tài)或系統(tǒng)狀態(tài),跟蹤發(fā)布的SQL調(diào)用等。
2通用維護例程需要注意的問題
這里列出一些別的可能出現(xiàn)問題的情形,DBA需要監(jiān)測這些情形作為其通常管理例程的一部分,并在需要時解決。
1)除了常規(guī)的鎖沖突以外,要顯式地警惕死鎖。
2)警惕效率低下的應用S Q L代碼,并在需要時調(diào)試代碼監(jiān)測各種各樣應用程序?qū)ο到y(tǒng)/數(shù)據(jù)庫資源的使用,保證這些資源在任何級都被要刪除。特別是帶有選項,如并行訪問選項(Parallel Query Option,PQO)和SORTAREASIZE動態(tài)設置,用戶/應用程序可能會使系統(tǒng)飽和,會影響性能和可用性。
3)同時,要熟悉應用程序使用的特定數(shù)據(jù)庫選項,保證這些選項被最優(yōu)地配置。例如,如果應用程序頻繁地執(zhí)行Hash操作,要保證HASH_AREA_SIZE和HASH_MULTIBLOCK_IO_COUNT設置為相等,否則,可能會使系統(tǒng)資源很快用光。
4)顯式地編寫監(jiān)測腳本,檢查某些潛在的危機(如段數(shù)達到了MAXEXTENTS、足夠的自由空間供段擴展等待),以便采取正確的措施。
3結(jié)語
總之,Oracle數(shù)據(jù)庫雖然功能齊全、操作靈活,但在維護過程中也需要有很強的技巧性。需要使用各種各樣的進程去防止、監(jiān)測、查找、解決引起數(shù)據(jù)庫故障的各種因素,如果忽略了周期性的維護工作,有可能發(fā)生數(shù)據(jù)庫崩潰。因此,必須預先做好這些工作以保障數(shù)據(jù)庫正常運行。
參考文獻
[1]王海翔.Oracle數(shù)據(jù)庫軟件研究[J].現(xiàn)代商貿(mào)工業(yè),2010.
[2]巢子杰.Oracle數(shù)據(jù)庫優(yōu)化探究[J].軟件導刊,2010.