中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle分區表 Partition Table的創建及管理是怎么樣的

發布時間:2021-11-05 18:20:59 來源:億速云 閱讀:192 作者:柒染 欄目:建站服務器

Oracle分區表 Partition Table的創建及管理是怎么樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

一、創建分區表
分區表分為四類:1、范圍分區表 2、列表分區表 3、哈希分區表 4、組合分區表

下面分別創建四類分區表。
1、范圍分區表

CREATE TABLE range_example(
     range_key_column DATE,
     DATA VARCHAR2(20),
     ID integer
 ) PARTITION BY RANGE(range_key_column)
 (
     PARTITION part01 VALUES LESS THAN (TO_DATE('2008-07-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs01,
     PARTITION part02 VALUES LESS THAN (TO_DATE('2008-08-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs02,
     PARTITION part03 VALUES LESS THAN (TO_DATE('2008-09-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs03
);

2、列表分區表

CREATE TABLE list_example(
     dname VARCHAR2(10),
     DATA VARCHAR2(20)
)PARTITION BY LIST(dname)
(
      PARTITION part01 VALUES('ME','PE','QC','RD'),
      PARTITION part02 VALUES('SMT','SALE')
);

3、哈希分區表

CREATE TABLE hash_example(
      hash_key_column DATE,
      DATA VARCHAR2(20)
) PARTITION BY HASH(hash_key_cloumn)
(
     PARTITION part01 ,
     PARTITION part02
);

4、組合分區表

CREATE TABLE range_hash_example(
 range_column_key DATE,
 hash_column_key INT,
 DATA VARCHAR2(20)
)
PARTITION BY RANGE(range_column_key)
SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2
(
   PARTITION part_1 VALUES LESS THAN (TO_DATE('2008-08-01','yyyy-mm-dd'))(
      SUBPARTITION part_1_sub_1,
      SUBPARTITION part_1_sub_2,
      SUBPARTITION part_1_sub_3
   ),
   PARTITION part_2 VALUES LESS THAN (TO_DATE('2008-09-01','yyyy-mm-dd'))(
      SUBPARTITION part_2_sub_1,
      SUBPARTITION part_2_sub_2
   )
);


--注 subpartitions 2 并不是指定subpartition的個數一定為2,實際上每個分區的子分區個數可以不同。subpartitions 關鍵字的作用到底是什么?如果不指定subpartition的具體明細,則系統按照subpartitions的值指定subpartition的個數生成子分區,名稱由系統定義 。

二、增加分區

-- range partitioned table
ALTER TABLE range_example ADD PARTITION part04 VALUES LESS THAN (TO_DATE('2008-10-1 00:00:00','yyyy-mm-dd hh34:mi:ss'));

--list partitioned table
ALTER TABLE list_example ADD PARTITION part04 VALUES ('TE');

--Adding Values for a List Partition
ALTER TABLE  list_example MODIFY PARTITION part04 ADD VALUES('MIS');

--Dropping Values from a List Partition
ALTER TABLE  list_example MODIFY PARTITION part04 DROP VALUES('MIS');

--hash partitioned table
ALTER TABLE hash_example ADD PARTITION part03;

--增加subpartition
ALTER TABLE range_hash_exampleMODIFYPARTITION
part_1 ADD SUBPARTITION part_1_sub_4;

注:hash partitioned table 新增partition時,現有表的中所有data都有重新計算hash值,然后重新分配到分區中。所以被重新分配的分區的 indexes需要rebuild 。
     
三、刪除分區
       You can drop partitions from range, list, or composite range-list partitioned tables.

ALTER TABLE ... DROP PARTITION part_name;

For hash-partitioned tables, or hash subpartitions of range-hash partitioned tables, you must perform. a coalesce operation instead.

-- 減少hash 分區的個數,一次減少一個。不能指定減少partition的名稱。
ALTER TABLE hash_example COALESCE PARTITION ;
--subpartition 的語法對于如下
ALTER TABLE divingMODIFYPARTITION us_locations
     COALESCE SUBPARTITION;

四、 分區合并
1. 合并父分區 

ALTER TABLE range_example
MERGE PARTITIONS part01_1,part01_2 INTO PARTITION part01
UPDATE INDEXES;


         如果省略update indexes子句的話,必須重建受影響的分區的index 。 ALTER TABLE range_example MODIFY PARTITION part02 REBUILD UNUSABLE LOCAL INDEXES;

2. 合并子分區

ALTER TABLE composite_example
MERGE SUBPARTITIONS part_1_sub_2,part_1_sub_3 INTO SUBPARTITION part_1_sub_2
UPDATE INDEXES;         

五、分割分區 hash partitions or subpartitions不能分割。如果指定的分割分區包含任何的數據時,對應的indexes可以被標識為UNUSABLE 。如果是一般的Heap Table,新的分區indexes為UNUSABLE ,所有gloabl indexes被標識為UNUSABLE 。如果是Index-organized table 新分區的indexes 為UNUSABLE,global indexes 仍然為USABLE。
1、range類型分區的分割 

ALTER  TABLE range_example
SPLIT PARTITION part01
         AT (TO_DATE('2008-06-01 00:00:00','yyyy-mm-dd hh34:mi:ss'))
 INTO ( PARTITION part01_1,PARTITION part01_2
);


           一個分區一次性只能分割成兩個分區,at關鍵字后面指定的值為第一個分區的range范圍,默認為less than 。

 2、list類型分區的分割

ALTER  TABLE list_example
SPLIT PARTITION part01 VALUES('ME','PE')
INTO ( PARTITION part01_1, PARTITION part01_2
);

3、Range_Hash類型分區的分割 新分區會對原有分區的subpartition做rehash的動作。如果在分割是指定subpartition的個數,則按新規則rehash subpartition,如果沒有指定則保留原有subpartition的個數不變。

ALTER  TABLE range_hash_example SPLIT PARTITION part_1
 AT (TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh34:mi:ss')) INTO (
  PARTITION part_1_1 SUBPARTITIONS 2 STORE IN (tbs01,tbs02),
  PARTITION part_1_2
);

     subpartitions 2 -- 指定新分區的subpartition的個數,store in 子句指定subpartition存儲的tablespace 。

六、Exchanging Partitions

可以將分區表轉換成非分區表,或者幾種不同分區表之間的轉換。
如下:

CREATE TABLE hash_part02 AS SELECT * FROM hash_example WHERE 1=2;
ALTER TABLE hash_example EXCHANGE PARTITION part02 WITH TABLE hash_part02;

這時,分區表hash_example中的part02分區的資料將被轉移到hash_part02這個非分區表中。

七、索引
      在分區表上可以建立三種類型的索引:1、和普通表一樣的全局索引。2、全局分區索引。3、本地分區索引。
它們之間的區別如下圖示。

Oracle分區表 Partition Table的創建及管理是怎么樣的

Oracle分區表 Partition Table的創建及管理是怎么樣的

Oracle分區表 Partition Table的創建及管理是怎么樣的

以表range_example為例。
1.建立普通的索引
create index com_index_range_example_id on range_example(id);

2.建立本地分區索引
create index  local_index_range_example_id on range_example(id)local;

3.建立全局分區索引
create index gidx_range_exampel_id on range_example(id)
GLOBAL  partition by  range(id)
(
  part_01 values less than(1000),
  part_02 values less than(MAXVALUE)
);

對于分區索引的刪除,local index 不能指定分區名稱,單獨的刪除分區索引。local index 對應的分區會伴隨著data分區的刪除而一起被刪除。
global partition index 可以指定分區名稱,刪除某一分區。但是有一點要注意,如果該分區不為空,則會導致更高一級的索引分區被置為UNUSABLE 。
 ALTER INDEX  gidx_range_exampel_id drop partition part_01  ; 此句將導致part_02 狀態為UNUSABLE 。 

看完上述內容,你們掌握Oracle分區表 Partition Table的創建及管理是怎么樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通海县| 永顺县| 图们市| 西和县| 革吉县| 静安区| 琼中| 吉安市| 石泉县| 青浦区| 贡山| 呼和浩特市| 厦门市| 扬州市| 东丰县| 即墨市| 无为县| 铜山县| 宽城| 清水河县| 昌江| 东平县| 蚌埠市| 保德县| 木里| 仙桃市| 开远市| 高密市| 靖远县| 社旗县| 武鸣县| 霍城县| 洪洞县| 托克托县| 桓台县| 沈丘县| 台南市| 和平区| 迁西县| 满城县| 荃湾区|