非分割槽錶轉換為分割槽表和partition index
非分割槽錶轉換為分割槽表
1).檢測是否可以轉換
SQL> exec dbms_redefinition.can_redef_table('scott','test')
已順利完成 PL/SQL 程式.
2).建立臨時表並化分割槽
create table test_temp
(owner varchar2(30) not null,
object_name varchar2(30) not null,
object_id number not null,
object_type varchar2(30)
)
partition by range(object_id)
(partition p1 values less than (400) tablespace users,
partition p2 values less than (950) tablespace test,
partition p3 values less than (maxvalue) tablespace users
)
3).開始重定義表
SQL> exec dbms_redefinition.start_redef_table('scott','test','test_temp')
已順利完成 PL/SQL 程式.
4).建立索引限制及觸發器
SQL> var v_num number
SQL> exec dbms_redefinition.copy_table_dependents('scott','test','test_temp',dbms_redefinition.cons_orig_params,true,true,true,true,:v_num,true);
已順利完成 PL/SQL 程式.
http://yangtingkun.itpub.net/post/468/494878 (其中遇見問題參考)
5).同步表內容
如果同步的資料很大,則可以考慮透過prebuilt table的方法建立物化檢視
Exec dbms_redefinition.sync_interim_table(‘scott’,’test’,’test_temp’)
6).結束轉換過程
SQL> exec dbms_redefinition.finish_redef_table('scott','test','test_temp')
已順利完成 PL/SQL 程式.
7).刪除臨時表test_temp
Drop table test_temp
其中可以使用dbms_redefinition.abort_redef_table(‘scott’,’test’,’test_temp’)中途退出該過程。
Index
Local index:
l 本地索引一定是分割槽索引,分割槽鍵等同於表的分割槽鍵,分割槽數等同於表的分割槽數目,本地索引的分割槽機制和表的分割槽機制一樣。
l 如果本地索引的的索引列伊分割槽鍵開頭,則稱之為字首索引
l 如果本地索引的索引列不是以分割槽鍵開頭,不包含分割槽鍵之,稱之為非字首索引
l 點陣圖索引只能為本地分割槽索引
l 本地所有多應用於資料倉儲環境中olap。
l 本地所有隻支援分割槽內的唯一性,無法支援表上的唯一性,如果要使用本地索引給表做唯一性約束,則約束中必須要包括分割槽鍵列。
create index test_index on test(object_id)
local
(
partition p1 tablespace users,
partition p2 tablespace test,
partition p3 tablespace tbs
)
alter table test add primary key(object_Id) using index test_index
或者:
create index test_index1 on test(object_id) local
select dbms_metadata.get_ddl('INDEX','TEST_INDEX1','SCOTT') from dual
create index test_index2 on test(object_type) local
非字首索引,索引中不包含分割槽鍵
select dbms_metadata.get_ddl('INDEX','TEST_INDEX2','SCOTT') from dual
SQL> select index_name,table_name,partitioning_type,locality,alignment from user_part_indexes where table_name='TEST';
INDEX_NAME TABLE_NAME PARTITIONING_T LOCALITY ALIGNMENT
--------------- -------------------- -------------- ------------ ------------------------
TEST_INDEX1 TEST RANGE LOCAL PREFIXED
TEST_INDEX2 TEST RANGE LOCAL NON_PREFIXED
Global index:
l 全域性索引的分割槽鍵和分割槽數和表的分割槽鍵和分割槽數可能都不相同,表和全域性索引的分割槽機制不一樣。
l 全域性索引可以分割槽,也可以不分割槽索引。全域性索引必須是字首索引,即全域性索引的索引列必須是一索引分割槽鍵作為前幾列。
l 全域性分割槽索引的索引條目可能指向若干個分割槽,因此,對於全域性分割槽索引,即使只截斷一個分割槽中的資料,都需要rebuild若干個分割槽甚至是整個索引。
l 全域性索引多用於oltp系統中。
l 全域性分割槽索引只按範圍或者雜湊hash分割槽,hash分割槽是10g以後才支援。
l 9i後對分割槽表組move或者truncate時可以用update global indexes語句來同步更新全域性分割槽索引,用消耗一定資源來換可用性。
l 全域性分割槽索引只能是B樹索引,而且只能是字首索引。
Eg:
create table test1
(id int,
name varchar2(20),
desc1 varchar2(20)
)
partition by range(id)
(
partition p1 values less than (1000) tablespace users,
partition p2 values less than (5000) tablespace test,
partition p3 values less than (maxvalue) tablespace tbs
)
建立索引:
create index test1_global_index on test1(id) global
partition by range(id)
(partition p1 values less than (4000) tablespace users,
partition p2 values less than (maxvalue) tablespace test
)
SQL> alter table test1 drop partition p3;
已更改表格.
索引的狀態發生變化
SQL> select index_name,partition_name,status from user_ind_partitions where index_name='TEST1_GLOBAL_INDEX';
INDEX_NAME PARTITION_ STATUS
-------------------- ---------- ----------------
TEST1_GLOBAL_INDEX P1 UNUSABLE
TEST1_GLOBAL_INDEX P2 UNUSABLE
必須加上前置碼
SQL> l
1 create index test1_global_index1 on test1(object_type) global
2 partition by range(id)
3 (partition p1 values less than (4000),
4 paritition p2 less than (maxvalues)
5* )
SQL> /
partition by range(id)
*
ERROR 在行 2:
ORA-14038: GLOBAL 分割索引必須加上前置碼
不能和點陣圖索引使用
SQL> l
1 create bitmap index test1_global_index1 on test1(object_type) global
2 partition by range(id)
3 (partition p1 values less than (4000),
4 paritition p2 less than (maxvalues)
5* )
SQL> /
create bitmap index test1_global_index1 on test1(object_type) global
*
ERROR 在行 1:
ORA-25113: GLOBAL 可能無法與點陣圖索引一起使用
操作索引部分
|
索引型別 |
range |
hash/list |
組合 |
刪除索引分割槽 |
global |
drop partition |
||
local |
|
|
|
|
重建索引分割槽 |
global |
rebuild partition |
||
local |
rebuild partition |
rebuild partition |
rebuild subpartition |
|
重新命名索引分割槽 |
global |
rename partition |
||
local |
rename partition |
ename partition |
rename subpartition |
|
分割索引分割槽 |
global |
split partition |
||
local |
|
|
|
SQL> alter index test1_global_index drop partition p1;
已更改索引.
SQL> alter index test1_global_index rebuild partition p2;
已更改索引.
SQL> alter index test1_global_index rename partition p2 to p1;
已更改索引.
user_part_tables 分割槽表資訊
user_tab_partitions 分割槽分層資訊
user_tab_subpartitions 子分割槽分層資訊
user_part_key_columns 分割槽表的分割槽鍵列
user_subpart_key_columns 組合分割槽表的子分割槽鍵列
表的分割槽的列統計資訊和直方圖
user_part_col_statistics
user_part_histograms 表的分割槽上的直方圖的直方圖的直方圖資料
user_subpart_histograms
user_part_indexes 分割槽索引的分割槽資訊
user_ind_partitions 分割槽層次的分割槽資訊,分割槽的儲存引數
user_ind_subpartitions
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24237320/viewspace-1058717/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將非分割槽錶轉換為分割槽表
- 將mysql非分割槽錶轉換為分割槽表MySql
- 非分割槽錶轉換成分割槽表
- 將一個非分割槽錶轉換為分割槽表
- 普通錶轉換為分割槽表
- 【分割槽】如何將一個普通錶轉換為分割槽表
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- 將普通錶轉換為分割槽表
- 【實驗】【PARTITION】RANGE分割槽表重新命名錶分割槽(Rename Partition)
- Oracle 將普通錶轉換為分割槽表Oracle
- 堆錶轉換成分割槽表
- 非分割槽錶轉換成分割槽表以及注意事項
- 分割槽表PARTITION table(轉)
- ORACLE 11g 範圍分割槽錶轉換INTERVAL分割槽表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】RANGE分割槽表截斷表分割槽(Truncate Partition)
- 【實驗】【PARTITION】RANGE分割槽表移動表分割槽(Move Partition)
- 分割槽表PARTITION table
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- 【實驗】【PARTITION】RANGE分割槽表合併分割槽
- 【實驗】【PARTITION】RANGE分割槽表增加分割槽
- 【實驗】【PARTITION】RANGE分割槽表刪除分割槽
- 使用dbms_redefinition包線上把大資料量非分割槽錶轉換為分割槽表大資料
- 分割槽Partition
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- 批次轉換分割槽表為普通表
- 批量轉換分割槽表為普通表
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- Oracle分割槽表(Partition Table)Oracle
- oracle partition分割槽_分割槽列為空測試(一)Oracle
- ORACLE普通錶轉換成分割槽表的操作Oracle
- 普通錶轉換分割槽表-線上重定義
- oracle分割槽表和分割槽表exchangeOracle
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- 聊聊分割槽Partition——我們為什麼要分割槽(下)