ORACLE11G分區(qū)表新特性

1.引用分區(qū)表

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括安陸網(wǎng)站建設(shè)、安陸網(wǎng)站制作、安陸網(wǎng)頁制作以及安陸網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,安陸網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到安陸省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

使子表使用父表的分區(qū)條件進(jìn)行分區(qū),而無需在子表中額外添加用于分區(qū)的列,造成數(shù)據(jù)逆規(guī)范化,造成空間浪費(fèi)等問題。

參考實(shí)例:

(1).創(chuàng)建主表

CREATE TABLE orders
(
   order#       NUMBER PRIMARY KEY,
   order_date   DATE NOT NULL,
   data         VARCHAR2 (30)
)
PARTITION BY RANGE
   (order_date)
   (
      PARTITION
         part_2016 VALUES LESS THAN (TO_DATE ('01-01-2017', 'dd-mm-yyyy')),
      PARTITION
         part_2017 VALUES LESS THAN (TO_DATE ('01-01-2018', 'dd-mm-yyyy')))
/

insert into orders values ( 1, to_date( '01-01-2017', 'dd-mm-yyyy' ), 'xxx' );
insert into orders values ( 2, to_date( '01-01-2016', 'dd-mm-yyyy' ), 'yyy' );

commit;

(2).創(chuàng)建子表

create table order_line_items
    ( 
      order#      number NOT NULL,
      line#      number NOT NULL,
      data      varchar2(30),
      constraint c1_pk primary key(order#,line#),
      constraint c1_fk_p foreign key(order#) references orders
    )
    enable row movement
   partition by reference(c1_fk_p)
   /

insert into order_line_items values  ( 1, 1, 'yyy' );
insert into order_line_items values  ( 2, 1, 'yyy' );

  SELECT table_name, partition_name
    FROM user_tab_partitions
   WHERE table_name IN ('ORDERS', 'ORDER_LINE_ITEMS')
ORDER BY table_name, partition_name;

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS               PART_2016
ORDERS               PART_2017
ORDER_LINE_ITEMS     PART_2016
ORDER_LINE_ITEMS     PART_2017

(3).刪除父表partition,可以級聯(lián)刪除子表分區(qū)

alter table orders drop partition part_2016 update global indexes;

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS               PART_2017
ORDER_LINE_ITEMS     PART_2017

(4).添加父表partition,可以級聯(lián)添加子表分區(qū)

alter table orders add partition part_2018 values less than (to_date( '01-01-2019', 'dd-mm-yyyy' ));

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS               PART_2017
ORDERS               PART_2018
ORDER_LINE_ITEMS     PART_2017
ORDER_LINE_ITEMS     PART_2018

(5).刪除子表partition,報(bào)錯

alter table order_line_items drop partition PART_2017 update global indexes;

ORA-14255: table is not partitioned by Range, List, Composite Range or Composite List method

(6).truncate子表partition,可行。

alter table admin.order_line_items truncate partition PART_2017;

2.間隔分區(qū)表

定義分區(qū)規(guī)則,當(dāng)有符合條件的數(shù)據(jù)插入時自動創(chuàng)建分區(qū)。

可以使用alter命令將現(xiàn)有的區(qū)間分區(qū)表修改為間隔分區(qū),也可以使用create創(chuàng)建一個間隔分區(qū)。

interval分區(qū)的特點(diǎn)
-由range分區(qū)派生而來
-以定長寬度創(chuàng)建分區(qū)(比如年、月、具體的數(shù)字(比如100、500等))
-分區(qū)字段必須是number或date類型
-必須至少指定一個range分區(qū)(永久分區(qū))
-當(dāng)有記錄插入時,系統(tǒng)根據(jù)需要自動創(chuàng)建新的分區(qū)和本地索引
-已有的范圍分區(qū)可被轉(zhuǎn)換成間隔分區(qū)(通過ALTER TABLE SET INTERVAL選項(xiàng)完成)
-Interval Partitioning不支持支持索引組織表
-在Interval Partitioning表上不能創(chuàng)建domain index

參考示例:

- 創(chuàng)建間隔分區(qū)表

CREATE TABLE admin.orders2
(
   order#       NUMBER PRIMARY KEY,
   order_date   DATE NOT NULL
)
PARTITION BY RANGE
   (order_date)
   INTERVAL ( NUMTOYMINTERVAL (1, 'month') )
   (
      PARTITION
         p201612 VALUES LESS THAN (TO_DATE ('01-01-2017', 'dd-mm-yyyy')));

- 插入數(shù)據(jù)

insert into admin.orders2 values(1,TO_DATE ('01-12-2016', 'dd-mm-yyyy'));
insert into admin.orders2 values(2,TO_DATE ('02-01-2017', 'dd-mm-yyyy'));
insert into admin.orders2 values(3,TO_DATE ('02-02-2017', 'dd-mm-yyyy'));

查看自動生成分區(qū)

  SELECT table_name, partition_name
    FROM user_tab_partitions
   WHERE table_name IN ('ORDERS2')
ORDER BY table_name, partition_name;

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS2              P201612
ORDERS2              SYS_P121
ORDERS2              SYS_P122

- 刪除數(shù)據(jù)已生成的分區(qū)不變

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS2              P201612
ORDERS2              SYS_P121
ORDERS2              SYS_P122

- 將原有的range分區(qū)表變更為interval分區(qū)表

ALTER TABLE admin.orders SET INTERVAL(1000000);
ALTER TABLE admin.orders SET INTERVAL (NUMTODSINTERVAL(1,'DAY')); --NUMTODSINTERVAL常用的單位有 ('day','hour','minute','second')
ALTER TABLE admin.orders SET INTERVAL (numtoyminterval(1,'month')); --numtoyminterval常用的單位有'year','month'

- 將interval分區(qū)表轉(zhuǎn)為range分區(qū)表

ALTER TABLE admin.orders3 SET INTERVAL();

3.虛擬列分區(qū)

以下內(nèi)容來自https://www.cnblogs.com/moonandstar08/p/5100567.html

(1).只能在堆組織表(普通表)上創(chuàng)建虛擬列
(2).虛擬列不能是LOB或者RAW類型;
(3).虛擬列的值并不是真實(shí)存在的,只有用到時,才根據(jù)表達(dá)式計(jì)算出虛擬列的值,磁盤上并不存放。
(4).可把虛擬列當(dāng)做分區(qū)關(guān)鍵字建立分區(qū)表,這是ORACLE 11g的另一新特性--虛擬列分區(qū)
創(chuàng)建帶有虛擬列的分區(qū)表:
   create table test(n1 number, c1 varchar2(80), n2 number generated always as (n1*0.8)) ---創(chuàng)建帶有虛擬列的分區(qū)
   create table test1(n1 number,
                 c1 varchar2(80),
                 v1 varchar2(2) generated always as (substr(c1,1,1))
                 )
   partition by list (v1)
    (partition v11 values('I'),
     partition v12 values('O'),
     partition v13 values('E'),
     partition v15 values(default)
    );
查詢:select * from test1 partition(v11);
(5).可在虛擬列上建立索引
   create index inx_test on test1(v1);
(6).如果在已經(jīng)創(chuàng)建的表中增加虛擬列時,若沒有指定虛擬列的字段類型;
ORACLE會根據(jù) generated always as 后面的表達(dá)式計(jì)算的結(jié)果自動設(shè)置該字段的類型
(7).虛擬列的值由ORACLE根據(jù)表達(dá)式自動計(jì)算得出,不可以做UPDATE和INSERT操作, 可以對虛擬列做 DELETE 操作
(8).表達(dá)式中的所有列必須在同一張表
(9).表達(dá)式不能使用其他虛擬列

4.系統(tǒng)分區(qū)表

- 系統(tǒng)自動生成分區(qū),無分區(qū)條件

- 數(shù)據(jù)和分區(qū)沒有關(guān)系

- 不能建立local index

- 插入數(shù)據(jù)時要指明分區(qū)

CREATE TABLE admin.order4
(
   col1   NUMBER,
   name   VARCHAR2 (100)
)
PARTITION BY SYSTEM
(PARTITION p1,
 PARTITION p2,
 PARTITION p3,
 PARTITION p4);

 insert into admin.order4 partition(p2) select col1,name from admin.order4;

5.完全組合分區(qū)

(1).范圍分區(qū)(range)
(2).哈希分區(qū)(hash)
(3).列表分區(qū)(list)
(4).范圍-哈希復(fù)合分區(qū)(range-hash)
(5).范圍-列表復(fù)合分區(qū)(range-list)
oracle11g 新增
range-range,list-range,list-list,list-hash

網(wǎng)站欄目:ORACLE11G分區(qū)表新特性
網(wǎng)站網(wǎng)址:http://muchs.cn/article4/ighjoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、移動網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、靜態(tài)網(wǎng)站電子商務(wù)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)