字典托管轉(zhuǎn)到本地托管以提高Oracle數(shù)據(jù)庫性能
在Oracle數(shù)據(jù)庫中,其表空間管理主要有兩種模式,分別為“字典托管”模式和“本地托管”模式。這兩種模式雖然對于終端用戶來說,可能沒有明顯的差異。但是從數(shù)據(jù)庫工程師角度來講,其差異是非常巨大的。最重要的一點,如果采用本地托管模式的話,從性能上來講要優(yōu)于字典托管模式。在這篇文章中,筆者就給大家介紹一下,如何通過這個管理模式的轉(zhuǎn)變來提高Oracle數(shù)據(jù)庫的性能,以及轉(zhuǎn)換時注意的內(nèi)容。
一、轉(zhuǎn)換過程中的注意點及實現(xiàn)方法。
如上圖所示,Oracle數(shù)據(jù)庫中表空間可以分為系統(tǒng)System表空間和非系統(tǒng)表空間。這兩種表空間都支持字典托管模式和本地托管模式。但是由于系統(tǒng)表空間的特殊性,將其從字典托管模式轉(zhuǎn)換到本地托管模式時,有一些特別需要注意的內(nèi)容。筆者等一下會特別強調(diào)這一方面的事項。
根據(jù)經(jīng)驗,筆者發(fā)現(xiàn)在Oracle11G或者10G數(shù)據(jù)庫中執(zhí)行表空間的轉(zhuǎn)換,主要有“遷移”和“重建”兩種方法。不過筆者這里并不建議采用遷移的方案。因為通過遷移的方式將表空間從字典托管模式轉(zhuǎn)換為本地托管模式的時候,盤區(qū)映射將會移入到表空間的數(shù)據(jù)文件頭中。注意,此時系統(tǒng)是不能夠使用自動分配或者統(tǒng)一盤區(qū)尺寸管理。也就是說,無法使用本地托管模式的優(yōu)勢,無法有效的減少碎片。在這種情況下,還必須為表空間中的每個段指定存儲語句。不過遷移方法也并不是一無用處,其能夠在一定程度上帶來性能的提升。不過其提升的效果沒有“重建數(shù)據(jù)庫”的方法那么好。另外特別重要的是,數(shù)據(jù)庫系統(tǒng)將無法從遷移總獲得策略方面的優(yōu)勢。如無法像本地托管模式那樣對盤區(qū)進行有效的操作。
所以筆者這里建議大家采用的是“重建數(shù)據(jù)庫”法。雖然這個方法在操作上要比遷移方法復雜一點,但是最終帶來的效果還是蠻客觀的。這也就是說,產(chǎn)出要大于投入。其實這個重建數(shù)據(jù)庫的過程也就是四個步驟。
第一步:導出表空間中的段。在Oracle數(shù)據(jù)庫中,可以在命令行模式下使用Expdb等語句將數(shù)據(jù)庫中已有的段導出來。如果數(shù)據(jù)庫管理員對于命令行不熟悉的話,也可以借助其管理控制臺來導出所有的數(shù)據(jù)段。
第二步:刪除原有的表空間。如果數(shù)據(jù)庫管理員仍然需要用到原來的服務器,那么就需要將這個服務器上原有的表空間刪除。注意,這里采用的不是遷移方案。所以不是像操作系統(tǒng)升級一樣,在原版本的功能上進行升級。而是徹底的刪除之后,再重新安裝。為了減少文件碎片影響轉(zhuǎn)換后的效果,最好對相關(guān)的磁盤分區(qū)再采取格式化的操作。盡量提供一個干凈的環(huán)境。
第三步:重建建立表空間。在建立表空間的時候,可以采用關(guān)鍵字management local來說明要創(chuàng)建的是本地托管表空間。在重新創(chuàng)建表空間的時候,筆者有一個小小的建議。即在創(chuàng)建表空間之前,最好能夠先分析一下數(shù)據(jù)段的大小。然后盡可能的巴一個單獨的表空間分割成幾個不同大小的盤區(qū),以容納不同大小的段。這可以有效的減少碎片,從后提高數(shù)據(jù)庫的性能。雖然這個分析數(shù)據(jù)段的過程在這個轉(zhuǎn)換過程中并不是必需的。但是這個過程本來就是為了提高數(shù)據(jù)庫的性能,所以在這個過程中同時考慮數(shù)據(jù)段的大小,可以提到1加1大于2的效果。所以筆者還是非常推薦這么做的。
第四步:重新導入段。表空間建立好之后,再將剛才導出的段再導入到數(shù)據(jù)庫中。這種重建的方法就相當于一開始采用的就是本地托管表空間。為此可以避免因為“字典托管”模式而造成的不兼容現(xiàn)象。也就是說,可以將本地托管模式的優(yōu)勢發(fā)揮到最有效的狀況。
|
|