王淑平, 劉杉
(湖北省腫瘤醫院,武漢 430079)
Oracle數據庫是甲骨文公司研發的一款優秀的關系型數據庫產品,在國內政府機關、企事業單位、醫療機構中被廣泛應用。Oracle數據庫具有性能穩定、功能強大、移植性好等特點,適用于多種環境,能夠滿足不同的數據處理和業務需求。在Oracle數據庫使用過程,需要做好Oracle數據庫日常維護工作,從而保證Oracle數據庫正常高效地運行。
Oracle 數據庫經過多年的不斷完善,現在已經成為較為成熟的產品,Oracle 數據庫的體系結構如圖1所示。

圖1 Oracle 數據庫的體系結構
Oracle數據庫的日常維護內容包括六個方面。(1)運行狀態檢查,通過檢查服務、進程、監聽、定時作業等運行狀態,及時發現數據庫是否處于正常工作狀態。(2)實時性能監測,對服務器參數(如CPU占用率、I/O情況等)、數據庫性能(如session數、cache命中率、鎖情況等)進行實時監控,時刻掌握數據庫的性能狀況。(3)空間使用情況,主要是表空間、本地存儲和共享存儲的剩余情況,保證足夠的磁盤空間。(4)日志文件檢查,通過監控警告日志文件alert_〈SID〉.log,捕獲數據庫運行過程中的異常,及時處理解決。(5)用戶及權限監管,關注每個用戶的狀態和權限分配,管理好權限傳遞和角色,確保數據的正常產生和不被非法操作。(6)備份與恢復管理,靈活應用邏輯備份和物理備份方式做好數據的備份工作,通過RMAN工具,以自動化腳本的方式,定期對數據庫備份,通過數據泵expdp/impdp工具,結合業務的實際需要,快速導入導出指定數據。此外,還要定期檢查備份的有效性,保證備份能夠正常使用。
作為數據庫管理員,應當首要關注數據庫的整體運行狀態。Oracle數據庫的運行狀態檢查主要包括服務狀態、進程狀態、監聽狀態、數據庫狀態、定時作業JOB情況等。數據庫服務的開啟和關閉一定要按照正確的順序進行,錯誤的操作順序可能會導致服務的異常。Oracle的進程需要重點檢查名字以ora_開頭進程,檢查進程狀態是否正常。監聽的正常與否,直接影響到用戶是否能遠程或者通過應用程序連接到數據庫,用戶端的TNS提示可以判斷監聽服務的異常。數據庫正常連接后可以通過SQL*plus檢查數據庫實例、文件、配置參數的情況。定時作業JOB是為解決某些特定需求而定時執行的任務,具有自動性,數據庫管理人員需要檢查確保JOB的有效性和執行產生的結果。
在日常維護中,分析Oracle數據庫的性能是一件非常重要的工作,通常可以通過AWR和Statspack報告來進行分析,獲得數據庫歷史狀態。AWR和Statspack報告是通過收集歷史數據進行事后分析,具有時間滯后性,不能及時發現問題,因此進行實時性能監測能及時發現問題,做出應對之策。
Oracle數據庫的實時性能監測需要綜合多項運行參數進行綜合評判。在運維實踐中,一般會對服務器關鍵參數和數據庫核心性能進行實時監測。服務器關鍵參數,如進程數量和CPU的占用率、內存使用情況、I/O讀寫效率以及磁盤的占用率等參數進行實時觀察,尤其是其使用峰值及其持續時間是判斷的重要依據,比如長時間占用CPU通常推斷出有大事務SQL在執行,再配合AWR報告可以進行查看。數據庫核心性能,如session數、cache命中率、鎖情況等進行實時監測,及時動態調整參數或人工干預,比如出現死鎖等待時,要及時進行殺死相關進程以解除死鎖,保證數據庫的可用性。
Oracle數據庫系統的存儲日常檢查維護主要包括表空間、本地存儲、共享存儲等。其中,表空間是Oracle數據庫的邏輯劃分,用以存邏輯存放數據文件,本地存儲通常為Oracle服務器的本地磁盤,用來安裝數據庫軟件等,共享存儲一般在集群中用來物理存放數據文件、歸檔日志文件以及備份文件等。
表空間的日常維護主要是檢查表空間的使用情況,尤其是表空間的剩余容量,表空間不足會造成數據庫性能下降,表空間已滿會造成數據無法正常寫入。數據庫管理人員應當定期關注表空間的剩余情況和表空間的數據增長情況,根據“二八”原則,表空間剩余低于20%時,應該重點關注,表空間剩余空間低于10%時,要及時采取措施,如擴展表空間等。本地存儲和共享存儲是物理存放Oracle系統及各種文件的地方,需要定期檢查存儲的空間使用情況,根據文件的增長率,適時擴容。
Oracle警告日志文件alert_〈SID〉.log是數據庫運維過程中的一類特殊的跟蹤文件,按時間順序記錄了message和錯誤信息。在日常運維過程中,警告日志十分重要,是數據庫遇到問題時候首要檢查的文件。
Oracle數據庫管理人員應當重視警告日志文件,了解日志的存放位置、日志包括的內容,能通過專門的工具,如Linux中grep工具或外部表的方式,時刻監控日志中出現的各種提示,及時了解數據庫的狀態。日志中需要重點檢查警告提示,如“Error”、“ORA-錯誤(如內部錯誤ORA-600)”、“Failed”等報錯信息;管理操作,如數據庫的啟動、關閉等信息,內部參數調整等信息,表空間的創建、刪除等操作;checkpoint事件的執行等。數據大部分的異常運行信息提示都會在警告日志中所有反應,Oracle 數據庫管理人員應該及時檢查alert_〈SID〉.log,根據報錯提示解決問題。
一個完整的數據庫系統中通常擁有很多用戶,這些用戶以不同權限對數據庫進行各種操作,是數據的產生者和管理者。Oracle數據庫通過授權管理和角色管理對用戶的權限進行分配和管理。數據庫管理人員要隨時關注每個用戶的狀態和權限分配,管理好權限傳遞和角色,以保證數據的正常產生和不被非法操作。用戶權限分配應該遵循“最小權限原則”。數據庫管理人員要重點關注高權限用戶和臨時用戶,高權限用戶應該做好操作日志記錄,接受安全審計;臨時用戶通常是因為某些臨時或短期需求而產生的用戶,使用完后應該及時停止或刪除用戶,以保證安全。在運維中,經常使用profile文件對用戶的密碼進行管理,常見的方法包括登錄限制鎖定機制和強制密碼過期修改,如高權限用戶連續3次嘗試登錄失敗后,則該用戶被限制登錄進入鎖狀態,不允許再繼續嘗登錄。
數據庫備份是為了在數據出現故障(如數據丟失、損壞等)時,能快速地實現數據恢復,從而起到數據保護作用。通常數據庫的備份分為邏輯備份和物理備份,邏輯備份是以數據文件為基本單位導出數據內容的映像,只能用于數據的邏輯恢復;物理備份是以磁盤塊為基本單位進行數據拷貝,能夠將數據按照原來的存儲特征進行物理恢復。物理備份包括冷備份和熱備份。Oracle數據庫的備份方式,如圖2所示。

圖2 Oracle數據庫的備份方式
Oracle數據庫的數據備份機制做的非常完善,備份方法和策略靈活。Oracle的邏輯備份工具,在Oracle 9i之前使用的是exp/imp,Oracle 10g以后的版本提供了新的導入導出工具,數據泵expdp/impdp,能夠更高效、靈活地進行數據的備份與恢復。在大型業務系統中,RMAN是Oracle數據庫最常使用的備份與恢復工具,功能強大,自動化程度很高。
在實際的運維過程中, Oracle 數據庫管理人員應當充分發揮備份工具,靈活應用邏輯備份和物理備份方式做好數據的備份工作。通過RMAN工具,以自動化腳本的方式,定期對數據庫的“四大文件”,即數據文件、控制文件、日志文件和參數文件進行備份。RMAN備份最好存放在與數據庫文件不同存儲設備上,以保證備份的獨立可用性。通過數據泵expdp/impdp工具,可以結合業務的實際需要,快速獲取指定需求數據。備份的有效性檢查在數據的備份與恢復管理是一項重要工作,一個完整有效的備份不僅要能做到數據的完全拷貝,更重要的是要能保證備份能夠使用,數據庫管理人員要定期檢查備份的有效性,通常生產庫需要時刻處于運行狀態,數據不能隨意改動,數據庫管理人員應該搭建專門的測試環境,在測試庫上驗證備份的可用性。
Oracle數據庫的正常運行離不開數據庫管理人員的日常運行維護,實際過程中往往以人工手動維護和自動化運維相結合的方式,全面高效地對數據庫進行日常維護。不同的運行環境,維護方式也有所不同。以下以Linux環境中Oracle數據庫維護演示。
在Linux操作系統環境中,通過df-h查看系統磁盤的使用情況,ps-ef |grep ora_查詢進程情況,top命令實時動態地顯示系統的整體運行情況,iostat顯示設備使用率(%until)、響應時間(await)等情況,free-m 以MB為單位顯示內存使用情況。
[root@hostname~]# top
[root@hostname~]# df -h
[root@hostname~]# free -m
[root@hostname~]# ps -ef |grep ora_
[root@hostname~]# iostat -d -k 1 10
在共享存儲命令行操作中,通過asmcmd命令,比如lsdg顯示存儲的使用情況,包括已使用量和剩余容量等。
[grid@hostname~]asmcmd
asmcmd>lsdg
在Oracle集群服務檢查中,crsctl check crs命令檢查整個集群的的健康狀態,crs_stat-t 用來檢查資源的運行情況,lsnrctl status命令反應了集群的監聽狀態。
[grid@hostname~]crsctl check crs
[grid@hostname~]crs_stat -
[grid@hostname~]lsnrctl status
在數據庫狀態中,vinstance記錄了數據庫實例狀態,vdatafil記錄了數據文件狀態,vcontrofile記錄了控制文件狀態,vlog記錄了日志文件狀態,統計vsession可以查看用戶會話的連接數量。
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;
除了使用命令外,還可以借助可視化工具進行維護,例如OEM(Oracle Enterprise manager),Grid Control等工具,或者第三方工具,例如toad,spotlight,ignite等。Toad 12.1 Database Monitor的監控實例圖,如圖3所示。


圖3 Toad 12.1 Database Monitor的監控實例圖
自動化維護通常需要提前制定好運維策略,通過sql腳本等方式自動執行,如表空間的使用情況是日常運維中需要經常關注的,可以提前編制腳本觀察表空間名字、使用大小(MB)、文件數、使用率(%)等信息。
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 數據庫管理人員_Data_Files
Group By Tablespace_Name) a,
(Select Tablespace_Name, To_Number(Sum(Bytes) / 1024 / 1024) Free From 數據庫管理人員_Free_Space Group By Tablespace_Name) b
Where a.Tablespace_Name = b.Tablespace_Name
Order By a.Tablespace_Name
自動化運維中最典型的操作就是數據庫自動備份。Oracle數據庫為數據庫管理人員提供了靈活強大的備份方式,RMAN備份和邏輯備份相結合是常見的最備份方式之一。RMAN增量備份與邏輯備份結合備份策略,如表1所示。

表1 RMAN增量備份與邏輯備份結合備份策略
在Linux環境中,可以通過crontab命令定期性執行備份腳本文件,根據表1的策略,可以通過提前編制rman_level0.sh、rman_level1.sh和rman_archive.sh腳本的方式實現自動備份。
[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數據庫的日常維護可以保障數據庫高效地運行,對業務系統的正常運作和提高生產效率有著非常重要的意義。數據庫管理人員應當充分發揮人工手動維護和自動化運維相結合的方式,不斷實踐、不斷總結,加強數據庫的日常維護,保障數據庫的正常運行。