王淑平, 劉杉
(湖北省腫瘤醫(yī)院,武漢 430079)
Oracle數(shù)據(jù)庫(kù)是甲骨文公司研發(fā)的一款優(yōu)秀的關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品,在國(guó)內(nèi)政府機(jī)關(guān)、企事業(yè)單位、醫(yī)療機(jī)構(gòu)中被廣泛應(yīng)用。Oracle數(shù)據(jù)庫(kù)具有性能穩(wěn)定、功能強(qiáng)大、移植性好等特點(diǎn),適用于多種環(huán)境,能夠滿足不同的數(shù)據(jù)處理和業(yè)務(wù)需求。在Oracle數(shù)據(jù)庫(kù)使用過程,需要做好Oracle數(shù)據(jù)庫(kù)日常維護(hù)工作,從而保證Oracle數(shù)據(jù)庫(kù)正常高效地運(yùn)行。
Oracle 數(shù)據(jù)庫(kù)經(jīng)過多年的不斷完善,現(xiàn)在已經(jīng)成為較為成熟的產(chǎn)品,Oracle 數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)如圖1所示。
圖1 Oracle 數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)
Oracle數(shù)據(jù)庫(kù)的日常維護(hù)內(nèi)容包括六個(gè)方面。(1)運(yùn)行狀態(tài)檢查,通過檢查服務(wù)、進(jìn)程、監(jiān)聽、定時(shí)作業(yè)等運(yùn)行狀態(tài),及時(shí)發(fā)現(xiàn)數(shù)據(jù)庫(kù)是否處于正常工作狀態(tài)。(2)實(shí)時(shí)性能監(jiān)測(cè),對(duì)服務(wù)器參數(shù)(如CPU占用率、I/O情況等)、數(shù)據(jù)庫(kù)性能(如session數(shù)、cache命中率、鎖情況等)進(jìn)行實(shí)時(shí)監(jiān)控,時(shí)刻掌握數(shù)據(jù)庫(kù)的性能狀況。(3)空間使用情況,主要是表空間、本地存儲(chǔ)和共享存儲(chǔ)的剩余情況,保證足夠的磁盤空間。(4)日志文件檢查,通過監(jiān)控警告日志文件alert_〈SID〉.log,捕獲數(shù)據(jù)庫(kù)運(yùn)行過程中的異常,及時(shí)處理解決。(5)用戶及權(quán)限監(jiān)管,關(guān)注每個(gè)用戶的狀態(tài)和權(quán)限分配,管理好權(quán)限傳遞和角色,確保數(shù)據(jù)的正常產(chǎn)生和不被非法操作。(6)備份與恢復(fù)管理,靈活應(yīng)用邏輯備份和物理備份方式做好數(shù)據(jù)的備份工作,通過RMAN工具,以自動(dòng)化腳本的方式,定期對(duì)數(shù)據(jù)庫(kù)備份,通過數(shù)據(jù)泵expdp/impdp工具,結(jié)合業(yè)務(wù)的實(shí)際需要,快速導(dǎo)入導(dǎo)出指定數(shù)據(jù)。此外,還要定期檢查備份的有效性,保證備份能夠正常使用。
作為數(shù)據(jù)庫(kù)管理員,應(yīng)當(dāng)首要關(guān)注數(shù)據(jù)庫(kù)的整體運(yùn)行狀態(tài)。Oracle數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)檢查主要包括服務(wù)狀態(tài)、進(jìn)程狀態(tài)、監(jiān)聽狀態(tài)、數(shù)據(jù)庫(kù)狀態(tài)、定時(shí)作業(yè)JOB情況等。數(shù)據(jù)庫(kù)服務(wù)的開啟和關(guān)閉一定要按照正確的順序進(jìn)行,錯(cuò)誤的操作順序可能會(huì)導(dǎo)致服務(wù)的異常。Oracle的進(jìn)程需要重點(diǎn)檢查名字以ora_開頭進(jìn)程,檢查進(jìn)程狀態(tài)是否正常。監(jiān)聽的正常與否,直接影響到用戶是否能遠(yuǎn)程或者通過應(yīng)用程序連接到數(shù)據(jù)庫(kù),用戶端的TNS提示可以判斷監(jiān)聽服務(wù)的異常。數(shù)據(jù)庫(kù)正常連接后可以通過SQL*plus檢查數(shù)據(jù)庫(kù)實(shí)例、文件、配置參數(shù)的情況。定時(shí)作業(yè)JOB是為解決某些特定需求而定時(shí)執(zhí)行的任務(wù),具有自動(dòng)性,數(shù)據(jù)庫(kù)管理人員需要檢查確保JOB的有效性和執(zhí)行產(chǎn)生的結(jié)果。
在日常維護(hù)中,分析Oracle數(shù)據(jù)庫(kù)的性能是一件非常重要的工作,通??梢酝ㄟ^AWR和Statspack報(bào)告來(lái)進(jìn)行分析,獲得數(shù)據(jù)庫(kù)歷史狀態(tài)。AWR和Statspack報(bào)告是通過收集歷史數(shù)據(jù)進(jìn)行事后分析,具有時(shí)間滯后性,不能及時(shí)發(fā)現(xiàn)問題,因此進(jìn)行實(shí)時(shí)性能監(jiān)測(cè)能及時(shí)發(fā)現(xiàn)問題,做出應(yīng)對(duì)之策。
Oracle數(shù)據(jù)庫(kù)的實(shí)時(shí)性能監(jiān)測(cè)需要綜合多項(xiàng)運(yùn)行參數(shù)進(jìn)行綜合評(píng)判。在運(yùn)維實(shí)踐中,一般會(huì)對(duì)服務(wù)器關(guān)鍵參數(shù)和數(shù)據(jù)庫(kù)核心性能進(jìn)行實(shí)時(shí)監(jiān)測(cè)。服務(wù)器關(guān)鍵參數(shù),如進(jìn)程數(shù)量和CPU的占用率、內(nèi)存使用情況、I/O讀寫效率以及磁盤的占用率等參數(shù)進(jìn)行實(shí)時(shí)觀察,尤其是其使用峰值及其持續(xù)時(shí)間是判斷的重要依據(jù),比如長(zhǎng)時(shí)間占用CPU通常推斷出有大事務(wù)SQL在執(zhí)行,再配合AWR報(bào)告可以進(jìn)行查看。數(shù)據(jù)庫(kù)核心性能,如session數(shù)、cache命中率、鎖情況等進(jìn)行實(shí)時(shí)監(jiān)測(cè),及時(shí)動(dòng)態(tài)調(diào)整參數(shù)或人工干預(yù),比如出現(xiàn)死鎖等待時(shí),要及時(shí)進(jìn)行殺死相關(guān)進(jìn)程以解除死鎖,保證數(shù)據(jù)庫(kù)的可用性。
Oracle數(shù)據(jù)庫(kù)系統(tǒng)的存儲(chǔ)日常檢查維護(hù)主要包括表空間、本地存儲(chǔ)、共享存儲(chǔ)等。其中,表空間是Oracle數(shù)據(jù)庫(kù)的邏輯劃分,用以存邏輯存放數(shù)據(jù)文件,本地存儲(chǔ)通常為Oracle服務(wù)器的本地磁盤,用來(lái)安裝數(shù)據(jù)庫(kù)軟件等,共享存儲(chǔ)一般在集群中用來(lái)物理存放數(shù)據(jù)文件、歸檔日志文件以及備份文件等。
表空間的日常維護(hù)主要是檢查表空間的使用情況,尤其是表空間的剩余容量,表空間不足會(huì)造成數(shù)據(jù)庫(kù)性能下降,表空間已滿會(huì)造成數(shù)據(jù)無(wú)法正常寫入。數(shù)據(jù)庫(kù)管理人員應(yīng)當(dāng)定期關(guān)注表空間的剩余情況和表空間的數(shù)據(jù)增長(zhǎng)情況,根據(jù)“二八”原則,表空間剩余低于20%時(shí),應(yīng)該重點(diǎn)關(guān)注,表空間剩余空間低于10%時(shí),要及時(shí)采取措施,如擴(kuò)展表空間等。本地存儲(chǔ)和共享存儲(chǔ)是物理存放Oracle系統(tǒng)及各種文件的地方,需要定期檢查存儲(chǔ)的空間使用情況,根據(jù)文件的增長(zhǎng)率,適時(shí)擴(kuò)容。
Oracle警告日志文件alert_〈SID〉.log是數(shù)據(jù)庫(kù)運(yùn)維過程中的一類特殊的跟蹤文件,按時(shí)間順序記錄了message和錯(cuò)誤信息。在日常運(yùn)維過程中,警告日志十分重要,是數(shù)據(jù)庫(kù)遇到問題時(shí)候首要檢查的文件。
Oracle數(shù)據(jù)庫(kù)管理人員應(yīng)當(dāng)重視警告日志文件,了解日志的存放位置、日志包括的內(nèi)容,能通過專門的工具,如Linux中g(shù)rep工具或外部表的方式,時(shí)刻監(jiān)控日志中出現(xiàn)的各種提示,及時(shí)了解數(shù)據(jù)庫(kù)的狀態(tài)。日志中需要重點(diǎn)檢查警告提示,如“Error”、“ORA-錯(cuò)誤(如內(nèi)部錯(cuò)誤ORA-600)”、“Failed”等報(bào)錯(cuò)信息;管理操作,如數(shù)據(jù)庫(kù)的啟動(dòng)、關(guān)閉等信息,內(nèi)部參數(shù)調(diào)整等信息,表空間的創(chuàng)建、刪除等操作;checkpoint事件的執(zhí)行等。數(shù)據(jù)大部分的異常運(yùn)行信息提示都會(huì)在警告日志中所有反應(yīng),Oracle 數(shù)據(jù)庫(kù)管理人員應(yīng)該及時(shí)檢查alert_〈SID〉.log,根據(jù)報(bào)錯(cuò)提示解決問題。
一個(gè)完整的數(shù)據(jù)庫(kù)系統(tǒng)中通常擁有很多用戶,這些用戶以不同權(quán)限對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作,是數(shù)據(jù)的產(chǎn)生者和管理者。Oracle數(shù)據(jù)庫(kù)通過授權(quán)管理和角色管理對(duì)用戶的權(quán)限進(jìn)行分配和管理。數(shù)據(jù)庫(kù)管理人員要隨時(shí)關(guān)注每個(gè)用戶的狀態(tài)和權(quán)限分配,管理好權(quán)限傳遞和角色,以保證數(shù)據(jù)的正常產(chǎn)生和不被非法操作。用戶權(quán)限分配應(yīng)該遵循“最小權(quán)限原則”。數(shù)據(jù)庫(kù)管理人員要重點(diǎn)關(guān)注高權(quán)限用戶和臨時(shí)用戶,高權(quán)限用戶應(yīng)該做好操作日志記錄,接受安全審計(jì);臨時(shí)用戶通常是因?yàn)槟承┡R時(shí)或短期需求而產(chǎn)生的用戶,使用完后應(yīng)該及時(shí)停止或刪除用戶,以保證安全。在運(yùn)維中,經(jīng)常使用profile文件對(duì)用戶的密碼進(jìn)行管理,常見的方法包括登錄限制鎖定機(jī)制和強(qiáng)制密碼過期修改,如高權(quán)限用戶連續(xù)3次嘗試登錄失敗后,則該用戶被限制登錄進(jìn)入鎖狀態(tài),不允許再繼續(xù)嘗登錄。
數(shù)據(jù)庫(kù)備份是為了在數(shù)據(jù)出現(xiàn)故障(如數(shù)據(jù)丟失、損壞等)時(shí),能快速地實(shí)現(xiàn)數(shù)據(jù)恢復(fù),從而起到數(shù)據(jù)保護(hù)作用。通常數(shù)據(jù)庫(kù)的備份分為邏輯備份和物理備份,邏輯備份是以數(shù)據(jù)文件為基本單位導(dǎo)出數(shù)據(jù)內(nèi)容的映像,只能用于數(shù)據(jù)的邏輯恢復(fù);物理備份是以磁盤塊為基本單位進(jìn)行數(shù)據(jù)拷貝,能夠?qū)?shù)據(jù)按照原來(lái)的存儲(chǔ)特征進(jìn)行物理恢復(fù)。物理備份包括冷備份和熱備份。Oracle數(shù)據(jù)庫(kù)的備份方式,如圖2所示。
圖2 Oracle數(shù)據(jù)庫(kù)的備份方式
Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)備份機(jī)制做的非常完善,備份方法和策略靈活。Oracle的邏輯備份工具,在Oracle 9i之前使用的是exp/imp,Oracle 10g以后的版本提供了新的導(dǎo)入導(dǎo)出工具,數(shù)據(jù)泵expdp/impdp,能夠更高效、靈活地進(jìn)行數(shù)據(jù)的備份與恢復(fù)。在大型業(yè)務(wù)系統(tǒng)中,RMAN是Oracle數(shù)據(jù)庫(kù)最常使用的備份與恢復(fù)工具,功能強(qiáng)大,自動(dòng)化程度很高。
在實(shí)際的運(yùn)維過程中, Oracle 數(shù)據(jù)庫(kù)管理人員應(yīng)當(dāng)充分發(fā)揮備份工具,靈活應(yīng)用邏輯備份和物理備份方式做好數(shù)據(jù)的備份工作。通過RMAN工具,以自動(dòng)化腳本的方式,定期對(duì)數(shù)據(jù)庫(kù)的“四大文件”,即數(shù)據(jù)文件、控制文件、日志文件和參數(shù)文件進(jìn)行備份。RMAN備份最好存放在與數(shù)據(jù)庫(kù)文件不同存儲(chǔ)設(shè)備上,以保證備份的獨(dú)立可用性。通過數(shù)據(jù)泵expdp/impdp工具,可以結(jié)合業(yè)務(wù)的實(shí)際需要,快速獲取指定需求數(shù)據(jù)。備份的有效性檢查在數(shù)據(jù)的備份與恢復(fù)管理是一項(xiàng)重要工作,一個(gè)完整有效的備份不僅要能做到數(shù)據(jù)的完全拷貝,更重要的是要能保證備份能夠使用,數(shù)據(jù)庫(kù)管理人員要定期檢查備份的有效性,通常生產(chǎn)庫(kù)需要時(shí)刻處于運(yùn)行狀態(tài),數(shù)據(jù)不能隨意改動(dòng),數(shù)據(jù)庫(kù)管理人員應(yīng)該搭建專門的測(cè)試環(huán)境,在測(cè)試庫(kù)上驗(yàn)證備份的可用性。
Oracle數(shù)據(jù)庫(kù)的正常運(yùn)行離不開數(shù)據(jù)庫(kù)管理人員的日常運(yùn)行維護(hù),實(shí)際過程中往往以人工手動(dòng)維護(hù)和自動(dòng)化運(yùn)維相結(jié)合的方式,全面高效地對(duì)數(shù)據(jù)庫(kù)進(jìn)行日常維護(hù)。不同的運(yùn)行環(huán)境,維護(hù)方式也有所不同。以下以Linux環(huán)境中Oracle數(shù)據(jù)庫(kù)維護(hù)演示。
在Linux操作系統(tǒng)環(huán)境中,通過df-h查看系統(tǒng)磁盤的使用情況,ps-ef |grep ora_查詢進(jìn)程情況,top命令實(shí)時(shí)動(dòng)態(tài)地顯示系統(tǒng)的整體運(yùn)行情況,iostat顯示設(shè)備使用率(%until)、響應(yīng)時(shí)間(await)等情況,free-m 以MB為單位顯示內(nèi)存使用情況。
[root@hostname~]# top
[root@hostname~]# df -h
[root@hostname~]# free -m
[root@hostname~]# ps -ef |grep ora_
[root@hostname~]# iostat -d -k 1 10
在共享存儲(chǔ)命令行操作中,通過asmcmd命令,比如lsdg顯示存儲(chǔ)的使用情況,包括已使用量和剩余容量等。
[grid@hostname~]asmcmd
asmcmd>lsdg
在Oracle集群服務(wù)檢查中,crsctl check crs命令檢查整個(gè)集群的的健康狀態(tài),crs_stat-t 用來(lái)檢查資源的運(yùn)行情況,lsnrctl status命令反應(yīng)了集群的監(jiān)聽狀態(tài)。
[grid@hostname~]crsctl check crs
[grid@hostname~]crs_stat -
[grid@hostname~]lsnrctl status
在數(shù)據(jù)庫(kù)狀態(tài)中,vinstance記錄了數(shù)據(jù)庫(kù)實(shí)例狀態(tài),vdatafil記錄了數(shù)據(jù)文件狀態(tài),vcontrofile記錄了控制文件狀態(tài),vlog記錄了日志文件狀態(tài),統(tǒng)計(jì)vsession可以查看用戶會(huì)話的連接數(shù)量。
SQL>select status from vinstance;
SQL >select name,status from vdatafile;
SQL >select name, status from vcontrofile;
SQL >select group#,members, aschiveg, status from v$log;
SQL >select count(*) from v$session;
除了使用命令外,還可以借助可視化工具進(jìn)行維護(hù),例如OEM(Oracle Enterprise manager),Grid Control等工具,或者第三方工具,例如toad,spotlight,ignite等。Toad 12.1 Database Monitor的監(jiān)控實(shí)例圖,如圖3所示。
圖3 Toad 12.1 Database Monitor的監(jiān)控實(shí)例圖
自動(dòng)化維護(hù)通常需要提前制定好運(yùn)維策略,通過sql腳本等方式自動(dòng)執(zhí)行,如表空間的使用情況是日常運(yùn)維中需要經(jīng)常關(guān)注的,可以提前編制腳本觀察表空間名字、使用大小(MB)、文件數(shù)、使用率(%)等信息。
Select a.Tablespace_Name, File_Nums, Total || 'M', Free || 'M', Round(To_Number(Total - Free) / To_Number(Total) * 100, 2) As Used_Ratio
From (Select Tablespace_Name, Sum(1) As File_Nums, To_Number(Sum(Bytes) / 1024 / 1024) Total, Round(To_Number(Sum(Maxbytes) / 1024 / 1024)) Max_t
From 數(shù)據(jù)庫(kù)管理人員_Data_Files
Group By Tablespace_Name) a,
(Select Tablespace_Name, To_Number(Sum(Bytes) / 1024 / 1024) Free From 數(shù)據(jù)庫(kù)管理人員_Free_Space Group By Tablespace_Name) b
Where a.Tablespace_Name = b.Tablespace_Name
Order By a.Tablespace_Name
自動(dòng)化運(yùn)維中最典型的操作就是數(shù)據(jù)庫(kù)自動(dòng)備份。Oracle數(shù)據(jù)庫(kù)為數(shù)據(jù)庫(kù)管理人員提供了靈活強(qiáng)大的備份方式,RMAN備份和邏輯備份相結(jié)合是常見的最備份方式之一。RMAN增量備份與邏輯備份結(jié)合備份策略,如表1所示。
表1 RMAN增量備份與邏輯備份結(jié)合備份策略
在Linux環(huán)境中,可以通過crontab命令定期性執(zhí)行備份腳本文件,根據(jù)表1的策略,可以通過提前編制rman_level0.sh、rman_level1.sh和rman_archive.sh腳本的方式實(shí)現(xiàn)自動(dòng)備份。
[root@ hostname~]# crontab -l
0 21 * * 5 su - Oracle -c " /script/rman_level0.sh"
0 21 * * 1,0,2,3,4,6 su - Oracle -c " /script/rman_level1.sh"
0 22 * * * su - Oracle -c " /script/rman_archive.sh"
Oracle數(shù)據(jù)庫(kù)的日常維護(hù)可以保障數(shù)據(jù)庫(kù)高效地運(yùn)行,對(duì)業(yè)務(wù)系統(tǒng)的正常運(yùn)作和提高生產(chǎn)效率有著非常重要的意義。數(shù)據(jù)庫(kù)管理人員應(yīng)當(dāng)充分發(fā)揮人工手動(dòng)維護(hù)和自動(dòng)化運(yùn)維相結(jié)合的方式,不斷實(shí)踐、不斷總結(jié),加強(qiáng)數(shù)據(jù)庫(kù)的日常維護(hù),保障數(shù)據(jù)庫(kù)的正常運(yùn)行。