分割槽表UNUSED列後的EXCHANGE PARTITION操作
碰到一個有意思的問題,如果分割槽表執行過SET UNUSED操作,那麼是否還可以進行分割槽的EXCHANGE操作。
一個簡單的測試就可以說明這個問題:
SQL>
create table t_part_unused
2
(id number, name varchar2(30), other varchar2(30))
3
partition by range (id)
4
(partition p1 values less than (10),
5
partition pmax values less than (maxvalue));
Table created.
SQL>
insert into t_part_unused
2
select rownum, table_name, 'abc'
3
from user_tables;
48 rows created.
SQL> commit;
Commit complete.
SQL> alter table t_part_unused set unused (other);
Table altered.
SQL>
desc t_part_unused
Name Null? Type
----------------------------------------
-------- ------------------------
ID NUMBER
NAME VARCHAR2(30)
SQL>
create table t_temp_unused as
2
select *
3
from t_part_unused
4
where 1 = 2;
Table created.
SQL>
desc t_temp_unused
Name Null? Type
----------------------------------------
-------- ------------------------
ID NUMBER
NAME VARCHAR2(30)
SQL>
alter table t_part_unused
2
exchange partition p1
3
with table t_temp_unused;
with table t_temp_unused
*
ERROR at line 3:
ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION
SQL> alter table t_temp_unused add (other varchar2(30));
Table altered.
SQL>
alter table t_part_unused
2
exchange partition p1
3
with table t_temp_unused;
with table t_temp_unused
*
ERROR at line 3:
ORA-14096: tables in ALTER TABLE EXCHANGE PARTITION must have the same number
of columns
SQL> alter table t_temp_unused set unused (other);
Table altered.
SQL>
alter table t_part_unused
2
exchange partition p1
3
with table t_temp_unused;
Table altered.
很明顯執行了SET UNUSED操作後的表,和普通的表是存在區別的,這種區別導致要求進行EXCHANGE的表必須同樣執行SET UNUSED操作,否則就無法執行EXCHANGE的操作。
當目標表中不包含SETE UNUSED的列時,EXCHANGE操作會出現ORA-14097的錯誤,而如果把列新增到目標表,則會報錯ORA-14096,必須在目標表同樣對列執行SET UNUSED操作,才能透過EXCHANGE之前的檢查。
其實這也不難理解,執行SET UNUSED命令後,資料字典雖然發生了改變,但是表上的資料並沒有刪除,而EXCHANGE操作只是將兩個段的資料字典進行互換,因此如果目標表上缺少SET UNUSED列,是無法執行EXCHANGE操作的。
解決問題的方法有兩個,第一個就是例子中展示的可以在目標表上建立列然後同樣的執行SET UNUSED操作;另外的一個方法就是對於SET UNUSED列執行DROP COLUMN操作,徹底刪除該列。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-739879/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Exchange partition分割槽結構的“乾坤挪移”
- oracle分割槽表和分割槽表exchangeOracle
- oracle分割槽表和非分割槽表exchangeOracle
- 【實驗】【PARTITION】RANGE分割槽表截斷表分割槽(Truncate Partition)
- 【實驗】【PARTITION】RANGE分割槽表移動表分割槽(Move Partition)
- 分割槽表PARTITION table
- Oracle分割槽表(Partition Table)Oracle
- 分割槽表PARTITION table(轉)
- 【實驗】【PARTITION】RANGE分割槽表重新命名錶分割槽(Rename Partition)
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- 【實驗】【PARTITION】RANGE分割槽表合併分割槽
- 【實驗】【PARTITION】RANGE分割槽表增加分割槽
- 【實驗】【PARTITION】RANGE分割槽表刪除分割槽
- oracle partition分割槽_分割槽列為空測試(一)Oracle
- partition 分割槽表重新命名
- 分割槽Partition
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- 非分割槽錶轉換為分割槽表和partition indexIndex
- INTERVAL分割槽表鎖分割槽操作
- 分割槽表的常用操作
- oracle hash partition雜湊分割槽(二)_操作限制Oracle
- partition 分割槽表移動到其他表空間
- oracle實用sql(14)--查詢分割槽表的分割槽列和子分割槽列OracleSQL
- 關於分割槽表的操作
- Oracle Interval Partition 自動分割槽表-實驗Oracle
- ORACLE 範圍分割槽 partition-range分割槽Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- 【實驗】【PARTITION】交換分割槽時分割槽表有主鍵目標表亦需有主鍵
- Spark操作Hive分割槽表SparkHive
- 分割槽表attach detach操作
- Oracle12c分割槽新特性之TRUNCATEPARTITION和EXCHANGE PARTITION級聯功能Oracle
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- 關於分割槽表的move操作
- ORACLE分割槽表的概念及操作Oracle