【實驗】【PARTITION】交換分割槽時分割槽表有主鍵目標表亦需有主鍵

secooler發表於2009-07-29
違反規則實驗及問題分析處理過程如下:

1.建立一個含有主鍵的分割槽表tab_partition_range
create table tab_partition_range (id number primary key,name varchar2(50))
partition by range(id)(
partition t_range_p1 values less than (10),
partition t_range_p2 values less than (20),
partition t_range_p3 values less than (30)
);

2.每個分割槽初始化一條記錄
sec@sec> insert into tab_partition_range values (9,'Andy9')
sec@sec> insert into tab_partition_range values (19,'Andy19')
sec@sec> insert into tab_partition_range values (29,'Andy29')
sec@sec> select * from tab_partition_range;

        ID NAME
---------- --------------------------------------------------
         9 Andy9
        19 Andy19
        29 Andy29

3.建立一個不含主鍵的表tab_exchange
sec@sec> create table tab_exchange (id number, name varchar2(50));

4.以“將分割槽t_range_p2中的資料”與目標表tab_exchange交換為例,效果如下
sec@sec> alter table tab_partition_range exchange partition t_range_p2 with table tab_exchange;

Table altered.

sec@sec> select * from tab_exchange;

        ID NAME
---------- --------------------------------------------------
        19 Andy19

sec@sec> select * from tab_partition_range;

        ID NAME
---------- --------------------------------------------------
         9 Andy9
        29 Andy29

呵呵……,到這裡,您是不是要問了,這不是交換成功了麼,t_range_p2中的資料的確按照既定目標交換到了tab_exchange中。

不要著急,實驗繼續下去,我們原封不動的再執行一次而上面的交換命令,目標是:tab_exchange中的資料反向的交換回到分割槽表中。
註釋:交換分割槽的命令是可以互逆操作滴~~~~
sec@sec> alter table tab_partition_range exchange partition t_range_p2 with table tab_exchange;
alter table tab_partition_range exchange partition t_range_p2 with table tab_exchange
*
ERROR at line 1:
ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION

OK,看到報錯了吧,這也就是這個實驗要演示的一個效果。

如何處理,聰明的您一定知道,對頭,在目標表中新增主鍵!

Go on ...

5.在tab_exchange建立主鍵
sec@sec> alter table tab_exchange add primary key (id);

Table altered.

6.再次執行交換命令,成功了
sec@sec> alter table tab_partition_range exchange partition t_range_p2 with table tab_exchange;

Table altered.

sec@sec> select * from tab_exchange;

no rows selected

sec@sec> select * from tab_partition_range;

        ID NAME
---------- --------------------------------------------------
         9 Andy9
        19 Andy19
        29 Andy29

似乎什麼也沒有發生過一樣:)

7.最後再次強調一下結論
請大家注意:交換分割槽時分割槽表有主鍵目標表亦需有主鍵!

-- The End --

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

相關文章