在線對DB2表頁大小的轉(zhuǎn)換操作
為了滿足DB2用戶創(chuàng)建的表在大小、字段數(shù)或行長度上的新需求,時會有改變現(xiàn)有表的頁大小。下面將為您介紹如何在線對在線對DB2表頁大小的轉(zhuǎn)換操作,供您參考,希望對您有所幫助。
產(chǎn)品:DB2 UDB
平臺:跨平臺
版本:v8.1,v8.2
對于DB2的而言,其表的***大小,可包含的最多字段數(shù)及其每行記錄的***長度與表的頁大小有關(guān)。
所有創(chuàng)建在表空間中的表必須具有與表空間相同的頁大小,而DB2的緩沖池或表空間的頁大小可有4K、8K、16K和32K四種選擇,相對應(yīng)的字段數(shù)、行長和表大小如下:
4K頁大小 8K頁大小 16K頁大小 32K頁大小
表的最多字段數(shù) 500 1012 1012 1012
表每行***長度 4005 8101 16293 32677
表的***大小 64G 128G 256G 512G
由于這一原因,用戶有時會有改變現(xiàn)有表的頁大小以滿足表在大小、字段數(shù)或行長度上的新需求。因為表在創(chuàng)建之后頁大小就無法改變了,所以必須重新創(chuàng)建符合頁大小要求的新表。
如果所使用的數(shù)據(jù)庫系統(tǒng)不允許由于刪除原表,再重建新表所造成的長時間不能訪問表中數(shù)據(jù)的結(jié)果,可采用這里介紹的方法,對表實現(xiàn)“在線”頁大小的轉(zhuǎn)換操作。
為實現(xiàn)在對表的頁大小進行改變的過程中,表中的數(shù)據(jù)仍然能被訪問的這種“在線”頁大小的轉(zhuǎn)換,可按如下步驟進行操作:
1)如果沒有需要使用的頁大小的表空間或緩沖池存在,應(yīng)首先創(chuàng)建所需頁大小的緩沖池和表空間。
2)可使用DB2LOOK工具獲取創(chuàng)建表的DDL語句,如:
db2look -d <數(shù)據(jù)庫名> -e -tw <表名> -o <輸出文件名>
修改輸出文件,以便將一個表名不同于原表的新表創(chuàng)建在具有所需頁大小的表空間中。
3)利用修改后的 DDL 腳本創(chuàng)建一個與原表相同的新表。
4)使用如下語句將原表中的數(shù)據(jù)插入到新表中:
db2 "insert into <新表表名> (select * from <原表表名>)"
5)刪除原表:
db2 "drop table <原表表名>"
此操作后,應(yīng)用對表中數(shù)據(jù)暫時無法訪問。
6)將新表表名更名為原表表名:
db2 "rename table <新表表名> to <原表表名>"
7)恢復(fù)應(yīng)用對表中數(shù)據(jù)的訪問。
此時更名為原表名的新表的頁大小已從原來的頁大小轉(zhuǎn)換為所需頁大小,從而滿足了用戶對該表大小上的新需求。表數(shù)據(jù)僅在整個過程的步驟4)到5)的瞬間不可訪問,其它時間表中的數(shù)據(jù)均處于可訪問的“在線”狀態(tài)。
應(yīng)注意的是,上述步驟僅適用于數(shù)據(jù)庫中不存在依賴于該表的對象的情況,如果數(shù)據(jù)庫中存在有依賴于該表的對象,應(yīng)在保存有這些對象的DDL語句后,首先除去這些依賴關(guān)系,再進行原表的刪除和新表更名操作,然后重建這些依賴關(guān)系。