我的java天地

          全面學(xué)習(xí)分區(qū)表及分區(qū)索引(10)--交換分區(qū)

          直白的說就是遷移數(shù)據(jù)。遷移數(shù)據(jù)的方式很多,為什么要使用exchange?partition的方式呢,表急,聽三思慢慢道來。

          Exchange?partition提供了一種方式,讓你在表與表或分區(qū)與分區(qū)之間遷移數(shù)據(jù),注意不是將表轉(zhuǎn)換成分區(qū)或非分區(qū)的形式,而僅只是遷移表中數(shù)據(jù)(互相遷移),由于其號稱是采用了更改數(shù)據(jù)字典的方式,因此效率最高(幾乎不涉及io操作)。Exchange?partition適用于所有分區(qū)格式,你可以將數(shù)據(jù)從分區(qū)表遷移到非分區(qū)表,也可以從非分區(qū)表遷移至分區(qū)表,或者從hash?partition到range?partition諸如此類吧。

          其語法很簡單:alter?table?tbname1?exchange?partition/subpartition?ptname?with?table?tbname2;

          Exchange?partition遷移的方式也很有意思,言語表達(dá)怕大家聽不明白,下面直接通過示例來表達(dá):

          借用前文中創(chuàng)建的空分區(qū)表:t_partition_range,并插入幾條記錄

          JSSWEB>?create?table?t_partition_range?(id?number,name?varchar2(50))

          ??2???partition?by?range(id)(

          ??3???partition?t_range_p1?values?less?than?(10)?tablespace?tbspart01,

          ??4???partition?t_range_p2?values?less?than?(20)?tablespace?tbspart02,

          ??5???partition?t_range_p3?values?less?than?(30)?tablespace?tbspart03,

          ??6???partition?t_range_pmax?values?less?than?(maxvalue)?tablespace?tbspart04

          ??7???);

          表已創(chuàng)建。

          JSSWEB>?insert?into?t_partition_range?values?(11,'a');

          已創(chuàng)建?1?行。

          JSSWEB>?insert?into?t_partition_range?values?(12,'b');

          已創(chuàng)建?1?行。

          JSSWEB>?insert?into?t_partition_range?values?(13,'c');

          已創(chuàng)建?1?行。

          JSSWEB>?commit;

          提交完成。

          再創(chuàng)建一個(gè)非分區(qū)表,結(jié)構(gòu)與t_partition_range相同

          JSSWEB>?create?table?t_partition_range_tmp?(id?number,name?varchar2(50));

          表已創(chuàng)建。

          執(zhí)行交換分區(qū)(我們知道剛插入到range分區(qū)表的數(shù)據(jù)都在分區(qū)t_range_p2中,因此這里指定交換該分區(qū))

          JSSWEB>?alter?table?t_partition_range?exchange?partition?t_range_p2

          ??2??with?table?t_partition_range_tmp;

          表已更改。

          看看效果如何

          JSSWEB>?select?*?from?t_partition_range?partition(t_range_p2);

          未選定行

          JSSWEB>?select?*?from?t_partition_range_tmp;

          ????????ID?NAME

          ----------?--------------------------------------------------

          ????????11?a

          ????????12?b

          ????????13?c

          記錄成功交換到未分區(qū)的表中。

          我們再執(zhí)行一次exchange?partition的命令,看看又會發(fā)生什么呢

          JSSWEB>?select?*from?t_partition_range?partition(t_range_p2);

          ????????ID?NAME

          ----------?--------------------------------------------------

          ????????11?a

          ????????12?b

          ????????13?c

          JSSWEB>?select?*from?t_partition_range_tmp;

          未選定行

          又交換回來了,有點(diǎn)兒意思。

          再做個(gè)更加明確的測試,我們往未分區(qū)的表中加入一些記錄后再執(zhí)行exchange?partition,看看會發(fā)生什么呢:

          JSSWEB>?insert?into?t_partition_range_tmp?values?(15,'d');

          已創(chuàng)建?1?行。

          JSSWEB>?insert?into?t_partition_range_tmp?values?(16,'e');

          已創(chuàng)建?1?行。

          JSSWEB>?insert?into?t_partition_range_tmp?values?(1 7 ,'d');

          已創(chuàng)建?1?行。

          JSSWEB>?alter?table?t_partition_range?exchange?partition?t_range_p2

          ??2??with?table?t_partition_range_tmp;

          表已更改。

          JSSWEB>?select?*from?t_partition_range?partition(t_range_p2);

          ????????ID?NAME

          ----------?--------------------------------------------------

          ????????15?d

          ????????16?e

          ????????17?d

          JSSWEB>?select?*from?t_partition_range_tmp;

          ????????ID?NAME

          ----------?--------------------------------------------------

          ????????11?a

          ????????12?b

          ????????13?c

          這就是前面所說的,互相交換的意思~~

          注意:

          l? 涉及交換的兩表之間表結(jié)構(gòu)必須一致,除非附加with?validation子句;

          l? 如果是從非分區(qū)表向分區(qū)表做交換,非分區(qū)表中的數(shù)據(jù)必須符合分區(qū)表中指定分區(qū)的規(guī)則,除非附加without?validation子句;

          l? 如果從分區(qū)表向分區(qū)表做交換,被交換的分區(qū)的數(shù)據(jù)必須符合分區(qū)規(guī)則,除非附加without?validation子句;

          l? Global索引或涉及到數(shù)據(jù)改動了的global索引分區(qū)會被置為unusable,除非附加update?indexes子句。

          提示:

          一旦附加了without?validation子句,則表示不再驗(yàn)證數(shù)據(jù)有效性,因此指定該子句時(shí)務(wù)必慎重。

          例如:

          JSSWEB>?insert?into?t_partition_range_tmp?values?(8,'g');

          已創(chuàng)建?1?行。

          JSSWEB>?alter?table?t_partition_range?exchange?partition?t_range_p2

          ??2??with?table?t_partition_range_tmp?without?validation;

          表已更改。

          JSSWEB>?select?*from?t_partition_range?partition(t_range_p2);

          ????????ID?NAME

          ----------?--------------------------------------------------

          ????????11?a

          ????????12?b

          ????????13?c

          ?????????8?g

          雖然新插入的記錄并不符合t_range_p2分區(qū)的范圍值,但指定了without?validation后,數(shù)據(jù)仍然轉(zhuǎn)換成功。

          =====================================

          查看前面的連載:

          (9)--刪除表分區(qū)

          (8)--增加和收縮表分區(qū)

          (7)--怎樣管理

          (6)--創(chuàng)建range-list組合分區(qū)

          (5)--創(chuàng)建range-hash組合分區(qū)(1)

          (4)--創(chuàng)建list分區(qū)

          (3)--創(chuàng)建hash分區(qū)

          (2)--創(chuàng)建range分區(qū)

          (1)--前言

          posted on 2009-05-07 22:09 tobyxiong 閱讀(338) 評論(0)  編輯  收藏 所屬分類: DATABASES

          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(144)

          隨筆檔案(157)

          相冊

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南陵县| 凤冈县| 石泉县| 武义县| 葫芦岛市| 清苑县| 柳江县| 荣成市| 托克逊县| 山丹县| 龙岩市| 海晏县| 泊头市| 芦溪县| 诸暨市| 镇江市| 岱山县| 闻喜县| 阳泉市| 江源县| 赤城县| 青海省| 华容县| 南阳市| 铁岭县| 且末县| 天柱县| 博爱县| 丹东市| 玉溪市| 乐陵市| 股票| 宜城市| 泰顺县| 东乡族自治县| 宝山区| 吴川市| 昌宁县| 金川县| 前郭尔| 永吉县|