ORACLE數(shù)據(jù)庫表空間的監(jiān)控和維護 摘 要:通過ORACLE數(shù)據(jù)庫內(nèi)部管理表和視圖加強數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)表空間的監(jiān)控和維護。 關(guān)鍵字:數(shù)據(jù)庫 表空間 監(jiān)控 ORACLE數(shù)據(jù)庫在系統(tǒng)性能,安全性以及可靠性方面都有相當(dāng)優(yōu)越的表現(xiàn),在大型數(shù)據(jù)管理系統(tǒng)中有很好的應(yīng)用和卓越的表現(xiàn)。但是該數(shù)據(jù)庫系統(tǒng)對數(shù)據(jù)庫管理的要求也有了較高的要求。 數(shù)據(jù)庫系統(tǒng)的管理,在一般意義上,可能可以通過應(yīng)用系統(tǒng)使用中的一些信息或者數(shù)據(jù)庫系統(tǒng)的告警信息來發(fā)現(xiàn)數(shù)據(jù)庫的異常情況,包括數(shù)據(jù)庫表空間不夠,數(shù)據(jù)表或者索引不能擴展,或者會滾段不能擴展,數(shù)據(jù)快照太舊等等,管理員就可以依據(jù)這些錯誤和告警信息來發(fā)現(xiàn)問題,并作相應(yīng)的處理,這樣的一種模式常常會因為問題的突發(fā)性,或者因為管理員不能及時處理,而導(dǎo)致應(yīng)用和業(yè)務(wù)系統(tǒng)的中斷,給企業(yè)帶來一定的損失,有時帶來的損失可能是難以估量的。這就要求我們加強監(jiān)控,防患于未燃,在問題還沒有出現(xiàn)之前就做一些工作,將問題扼殺在搖籃之中,從而保證系統(tǒng)的正常運行。在ORACLE數(shù)據(jù)庫內(nèi)部,有一些管理表和視圖,可以提供給數(shù)據(jù)庫自身或者管理員來使用,這些表和視圖可以及時的反映當(dāng)前系統(tǒng)資源的利用情況,以及系統(tǒng)性能方面的一些參數(shù)和指標(biāo),ORACLE和一些外圍廠商,依據(jù)這些表和視圖也開發(fā)了一些數(shù)據(jù)庫開發(fā)和管理的工具。有經(jīng)驗的數(shù)據(jù)庫管理員也可以編寫一些腳本,來加強數(shù)據(jù)庫系統(tǒng)的監(jiān)控和維護。以下就數(shù)據(jù)表空間的監(jiān)控和維護的一個簡單流程來談?wù)剬@些表和視圖的使用: 在ORACLE數(shù)據(jù)庫中,涉及到數(shù)據(jù)表空間的大小和空間利用情況的系統(tǒng)表主要有DBA_DATA_FILES,DBA_TABLESPACES,DBA_FREE_SPACES等等,涉及到數(shù)據(jù)表或索引段的擴展特征和空間使用情況的主要有DBA_INDEXES,DBA_TABLES,DBA_SEGMENTS,DBA_EXTENTSE等等,這些表和視圖的具體意義可以在ORACLE的相關(guān)資料中去查找,這里將僅僅介紹本文要用到的部分字段的意義: DBA_DATA_FILES: TABLESPACE_NAME 表空間名 BYTES 文件大?。ㄗ止?jié)數(shù)) FILE_ID 文件編號 DBA_FREE_SPACE: TABLESPACE_NAME 表空間名 BYTES 文件中碎片大小(字節(jié)數(shù)) FILE_ID 文件編號 DBA_SEGMENTS: TABLESPACE_NAME 表空間名 SEGMENT_NAME 段名 SEGMENT_TAPE 段類型 BYTES 段大?。ㄗ止?jié)數(shù)) NEXT_EXTENT 下一擴展段大小(字節(jié)數(shù)) PCT_INCREASE 擴展增長比例 EXTENTS 擴展段數(shù)量 MAX_EXTENTS 最大擴展段數(shù)量 在數(shù)據(jù)庫表空間的監(jiān)控和維護中,需要保證數(shù)據(jù)庫系統(tǒng)在正常業(yè)務(wù)下,表空間可以自由擴展,數(shù)據(jù)表不會因為表空間不夠,擴展段太大,或者最大擴展段過小而導(dǎo)致的業(yè)務(wù)中斷,相應(yīng)的我們就要建立這些指標(biāo),在一定的時間間隔里,定期檢查這些指標(biāo),并作相應(yīng)的處理: a. 檢查數(shù)據(jù)庫表空間的使用率,對使用率超過85%的活動表空間實施進一步檢查, 需要的情況下,給表空間增加數(shù)據(jù)文件或者裸設(shè)備; set pagesize 6000 linesize 100 heading on feed off ver off column 表空間名 format a9 column 〝表空間大?。?span lang="EN-US">M)〞format99999 column 〝表空間使用比例%〞format99.9 spool tablespace.txt prompt 以下將列出帳務(wù)數(shù)據(jù)庫各個表空間的利用情況,對使用率超過85%的活動表空間需關(guān)注 select a.tablespace_name as 表空間名, sum(a.bytes)/1024/1024 as〝表空間大?。?span lang="EN-US">M)〞, round((sum(a.bytes)/1024/1024-sum(b.bytes)/1024/1024)) as〝已使用空間(M)〞, round(1000*(sum(a.bytes)/1024/1024-sum(b.bytes)/1024/1024)/ (sum(a.bytes)/1024/1024))/10 as〝表空間使用比例%〞 from dba_data_files a, (select tablespace_name,file_id,sum(bytes)bytes from dba_free_space group by tablespace_name,file_id)b where a.tablespace_name=b.tablespace-name(+) and a.file_id=b.file_id(+)groud by a.tablespace_name order by 4 desc; spool off; 該腳本查詢視圖DBA_DATA_FILES來計算各個表空間的實際大小,同時查詢DBA_FREE_SPACE來計算表空間的剩余碎片空間,二者的差值就是該表空間已使用的數(shù)據(jù)空間,由此也可以就可以計算表空間的使用率。連接數(shù)據(jù)庫,運行以上的腳本,將產(chǎn)生名為tablespace.txt的文件,該文件將顯示數(shù)據(jù)庫中所有表空間的名稱,大小,已使用空間以及表空間的使用率,需要對使用率超過85%的表空間作進一步的檢查,如果需要,應(yīng)使用命令: alter tablespace cw_data add datafile d:\oradata\cw05.ora size 來給表空間增加數(shù)據(jù)文件或裸文件,以防止表空間不能擴展; b. 檢查數(shù)據(jù)表及索引的下一個擴展段的大小,因為如果表空間的碎片情況較嚴(yán)重, 即使表空間尚有大量的剩余空間,但是碎片空間太小,表或索引也同樣不可以擴展; set pagesize 6000linesize 100 heading on feed off ver off term off column 表空間名 format a9 column 〝擴展大?。?span lang="EN-US">M)〞 format 99999 column 〝段大小(M)〞 format 99999 column 段名 format a30 column 類型 format a15 column 〝碎片(M)〞 format 99999 column 〝碎片數(shù)〞 format 99999 column 〝最大碎片〞 format 99999999999 column 〝最小碎片〞 format 99999999999 column 〝總碎片大小〞 format 9999999 spool ZW_&1..txt prompt prompt以下列出表空間中各個表的下一個擴展空間的大小 prompt select tablespace_name as 表空間名, segment_name as 段名, segment_tape as 類型, round(bytes/1024/1024)as〝段大?。?span lang="EN-US">M)〞, round(next_extent*(pct_increase/100+1)/1024/1024)as〝擴展大?。?span lang="EN-US">M)〞 from dba_segments where tablespace_name=upper(ˊ&1ˊ)and bytes>10*1024*1024 order by 5; prompt prompt以下列出表空間中碎片和剩余空間的狀況 prompt select tablespace_name as 表空間名, round(bytes/1024/1024)as〝碎片(M)〞, count(*)as〝碎片數(shù)〞, max(bytes)as〝最大碎片〞, min(bytes)as〝最小碎片〞, sum(bytes)/1024/1024 as〝總碎片大小〞 from dba_free_space where tablespace_name=upper(ˊ&1ˊ) group by tablespace_name,round(bytes/1024/1024) order by tablespace_name; prompt prompt以下列出可能因max_extents太小,不能擴展的表或索引 prompt select segment-name as 段名, segment_type as 類型, tablespace_name as 表空間名, extents當(dāng)前擴展數(shù), max_extents as 最大擴展數(shù) from dba_segments where tablespace_name=upper(ˊ &1ˊ)and max_extents-extents<20; spool off 該腳本通過查詢DBA_SEGMENTS,檢查相應(yīng)表空間中各個表或索引的名稱,類型,占用空間大小,同時根據(jù)段的第二個擴展段的大小和擴展段增長率來計算段下一下擴展段的大小;通過查詢DBA_FREE_SPACE來計算每個表空間里的剩余空間塊的大小,因為碎片的大小可能是連續(xù)的,為了簡單化,這里以兆為單位將這些碎片分類,列表中會顯示以兆為單位的碎片的數(shù)量,最大、最小碎片的大小,以及該大小碎片的空間總和,由此我們就可以綜合段的擴展參數(shù)和表空間的碎片分布情況來考慮,一則可以增加表空間的大小,增加可以滿足段擴展的碎片空間的數(shù)量;二則可以調(diào)整表或索引的段擴展參數(shù),調(diào)小擴展段增長率,第二個擴展段的大小,使得段可以在表空間中自由地擴展。 c. 檢查表空間碎片情況以及最大可用擴展段大小 d. 檢查數(shù)據(jù)表的最大擴展段數(shù)目以及當(dāng)前已用的擴展段數(shù),一般要保證最大擴展段 與當(dāng)前擴展段的差值>20 影響段擴展的重要參數(shù)還有一個就是最大擴展段數(shù)-MAX_EXTENTS,只有當(dāng)段的擴展段數(shù)小于最大擴展段數(shù),段才可以自由地擴展,也就是說,即使數(shù)據(jù)表空間的剩余空間足夠,并且碎片的大小也大于段的擴展段大小,段也可能不能擴展,因此在日常的維護工作中還必須檢驗這一指標(biāo),為了確保數(shù)據(jù)段的正常擴展,通??梢詫⒆畲髷U展段數(shù)與當(dāng)前段的擴展段數(shù)的差值小于20的表或索引都顯示出來,然后具體的分析,一則可以調(diào)高表或索引的最大擴展段數(shù);一則可以參照前面的方法,將段的下一個擴展空間調(diào)大,那么段就不需要擴展那么多了,事實上,應(yīng)該可以根據(jù)表或索引中存放數(shù)據(jù)的增長特性,來考慮這些參數(shù) |