摘要:隨著集裝箱碼頭業務量的增長,在碼頭TOS(Tape Operating System)數據庫應用中,經常會有一些幾十GB,上百GB的數據表。年吞吐量越大的碼頭,TOS系統的數據增長量越大。這些大數據量表的設計,維護及其備份都是TOS系統數據庫管理中的重點及其難點。本文就從設計、維護及其備份方面探討一下大數據量表的管理,并利用Oracle11g的最新特性,為碼頭用戶提供更加智能、高效的大數據清理及轉儲解決方案。
關鍵詞:TOS數據倉庫數據清理數據轉儲
1.引言
隨著集裝箱碼頭生產系統生產數據的增長,系統的運行速度會隨之下降。數據量的增長,會降低數據庫檢索及插入新數據的效率。對于數據清理及轉儲的傳統方式,首先我們需要先把歷史數據先備份下來,然后在刪除對應的數據庫表記錄。為了保證數據的一致性,我們在做數據清理前還需要將數據庫的表空間進行鎖定;同時還要將需要清理及轉儲的表對應的觸發器禁止掉。集裝箱碼頭是24小時運營的。停產將導致給碼頭帶來一定的經濟損失。那么如何保證在不中斷用戶業務的前提下,能夠將軟件系統的歷史數據進行清理并保證數據可恢復呢?用戶對數據清理及轉儲的需求是什么?基于Oracle11g的轉儲原理,能給用戶帶來什么樣的好處?本文將圍繞這些問題進行討論,并介紹采用這種方式后,數據轉儲的整個過程。
2.數據轉儲原理及方式
Oracle8i以后推出了分區選項。分區將表分離在若干不同的表空間上,用分而治之的方法來支撐元先膨脹的大表,組大表在物理一級的可管理性.將大表分割成較小的分區可以改善表的維護、備份、恢復、事務及查詢性能。采用表分區將數據按時間隔離。然后根據時間段,對歷史數據進行清理。當表中的數據量不斷增大,查詢數據的速度就會變慢,應用程序的性能就會下降,這時就該考慮對表進行分區。對表進行分區之后,在邏輯上表仍然是一張完整的表,只是將表中的數據在物理上存放到多個表空間上,這樣查詢數據時,不至于每次都掃描整張表。因此,我們只需要按表記錄時間做分區。清理及轉儲時,只需要將不需要的歷史數據按年進行drop即可。執行的時間快,而且不需要對表空間進行鎖定和禁止表觸發器。用戶完全體驗不到數據庫有任何變化。用戶也無需中斷當前生產作業。
我們在數據清理和轉儲前可以有選擇的對將被清理的數據進行數據備份。本文建議可以采用以下2種方式:(1)將數據備份到磁帶機上或對應的其它存儲設備上。在需要的時候,導入到臨時數據庫。(2)將需要轉儲數據遷移到數據倉庫。用戶可對數據倉庫的數據查詢、數據的挖掘、處理。(3)可以自動化、智能化的對數據進行清理及轉儲。對于非關鍵數據和關鍵數據,可以分別根據月份、年份清理相關的數據。
3.數據分區
3.1 分區的依據
單表輸入容量超過2GB的情況下應該進行分區;對包含歷史數據輸入的表應該進行分區,所謂包含歷史數據是指新的數據將會被放到最新的分區里面。一個典型的例子是一個表只有當前月份的數據可以更新,但是其余月份的處于只讀狀態。
3.2 分區的好處
增強可用性:如果表的一個分區由于系統故障而不能使用,表的其余分區可以使用;減少關閉時間:如果系統故障只影響表的一部分分區,那么只有這部分分區需要修復,可能比整個大表修復花的時間更少;維護輕松:如果需要得建表,獨產管理每個公區比管理單個大表要輕松得多;均衡I/O:可以把表的不同分區分配到不同的磁盤來平衡I/O改善性能;改善性能:對大表的查詢、增加、修改等操作可以分解到表的不同分區來并行執行,可使運行速度更快,在數據倉庫的TP查詢特別有用;分區對用戶透明:最終用戶感覺不到分區的存在。
3.3 分區的方法
分區類型分區依據應用范圍范圍分區使用數據表中某列或某幾列的值域作為分區條件。根據某個值的范圍,決定將該數據存儲在哪個分區上。有明顯值域劃分的應用。由于每個分區值域范圍的限定,每個分區的數據命中率可能不盡相同。列表分區使用表中某列或某幾列的值作為分區條件。每個分區的值等于一個或多個特定的離散值。適用于無明顯排序規律,但可根據某離散值進行分組的應用Hash分區將存儲的數據對某列或某幾列進行條帶化分割,按照哈希算法將數據打散,使其均勻地分布在若干個存儲分區中,優化存儲。用在既無明顯排序規律,又無離散值分組規律,但又希望使用分區技術特性的應用。復合分區用兩個數據分布辦法來創建分區,首先通過第一個數據分布辦法進行初始化分區,然后每個分區再通過第二個辦法分成子分區典型的復合分區包括:范圍-哈希,范圍-列表,范圍-范圍,列表-范圍,列表-列表,列表-哈希4.TOS歷史數據的清理及轉儲過程
TOS歷史數據的清理及轉儲過程分為四步:(1)選擇需要轉儲的數據。可以按年或按月進行清理。非關鍵數據建議按月進行清理,關鍵生產數據建議按年進行清理。比如:當前是2014年1月份。用戶希望碼頭生產系統只保留12個月的數據。因此,我們可以把時間小于2013年01月之前的數據清除掉。(2)導出轉儲數據在刪除前,使用oracle自帶的expdp和exp工具導出對應的數據。如果出現誤操作或用戶希望對清理后的數據查詢時,對數據進行恢復。(3)數據清理(4)數據恢復,用戶如果希望對轉儲后的數據進行查詢,可以利用oracle數據庫自帶的工具Impdp和Imp,在服務端或客戶端兩種方式將備份出來的數據導入指定數據庫進行數據恢復。
參考文獻:
[1]Jujay.一個利用傳輸表空間和分區交換技術進行數據遷移的案例.ATAGURE.2012,(12).
[2]Luocs.Oracle分區擴展-3分區表的索引維護.LuocusTechnologyBlog.2013,(1).
[3]Karen Reliford.Oracle Database11gNew Features for Table Partitioning.Database Journal.2010,(1).