Oracle Partitioned Table:exchange的利用

Karsus發表於2008-09-17

週末作了一天的Partitioned Table舊有資料的歸檔。

主要是用Partitioned TableExchange功能。

[@more@]

基本步驟:

1. 構造能用來做exchangetable A

2. 進行exchange

3. segments從物理上轉移到歸檔用的tablespace.

4. Drop exchange出的Partition

5. drop PartitionTablespace—drop

6. Rebuild A中被mark unusableIndex.

ExchangePartitioned Table 技術中一個非常有用的功能,尤其是當需要將舊資料進行歸檔的時侯。

Exchange的限制:

Range-Hashßà hash

Range-Listßà List

Range/HASH/LIST ßànon-partitioned table

.. .. ..

以上是9i administrator guides 歸類出來的,簡而言之,就是Partitioned Table中要用來做exchangePartition的型別必須和所交換的Table(Partition)一致。

所以在第一步構造用來做exchangeTable的時侯,型別的一致很重要。

比如,如果是Range-Hash Partitioned table要把一個Range Partition exchange出來,那用來交換的Table必須和這個Range Partition 型別一致。

也就是說這個Table必須是Hash Partitioned Table.

進行Exchange的語法:

Illustrate:

alter table Part_table exchange partition Part_0710

with table Part_arch0710

including indexes without validation update global indexes;

幾個重點

1. Including indexes: 表明將Local indexes 一同exchange出來。此選項需要用來與之exchangetable 有建立一樣的Index.

2. Without validation: with validation是驗證是否rows被正確的Mapping. Without validation則是跳過此驗證,在這種情況下,exchange 只做data dictionary的更新(這也是exchange快的原因,因為它根本上只是在data dictionary裡將segments的歸屬作了變更)。這裡有一個例外,如果在exchange中的tablePK或者unique constraint,是會強制作with validation,不管有沒有指定without validation,這樣做是為了保證constraint的完整性。如果要避免這個問題,可以在exchange之前先disable相關的constraint,在完成後再enable

3. Update global indexes:使用此選項可避免Partitioned tableglobal indexexchange後被mark unusable。用這種方式在功能上不會影響到正常業務,但其過程中產生的額外loading會對業務效能的表現產生影響。如果不使用此選項,則必須在exchange後對global index進行rebuild。不過這個選項只會updateexchangePartitiontableglobal index。如上的例子,表Aglobal index是不會被update,所以如果接下來exchange出的Partition的資料還要用的話,依然需要rebuild,但這已經不影響正常業務。

4. Drop exchange出來的Partition所在的Tablespace之前,注意把segments從物理上移動到歸檔Table A所在的Tablespace。上文提到了exchange只是在data dictionary裡對segments的歸屬作了改變。

5. Exchange空的Partition可以直接DROP,無須帶update global index

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10856805/viewspace-1010724/,如需轉載,請註明出處,否則將追究法律責任。

相關文章