閱讀134 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【動手實踐】Oracle 12.2新特性:多列列表分區和外部表分區

Oracle 12.2版本中,增加了大量的分區新特性,這其中包括:

自動的列表分區創建

在線的普通表轉換分區表

支持隻讀分區和讀寫分區混合

以下介紹的三個特性同樣是12.2新增的:

多列列表分區、外部表分區、維護過濾


而對於多列列表分區的支持,也是大家關注已久的特性,先看一下腳本(在 livesql.oracle.com 測試執行,推薦動手實踐):

CREATE TABLE dba_by_db_in_yhem

 (dbalic           NUMBER, 

  username         VARCHAR2(20),

  dbcat            VARCHAR2(4),

  region           VARCHAR2(10)

 )

 PARTITION BY LIST (dbcat, region)

 (

  PARTITION north_part VALUES (('ORCL','BEIJING'), ('ORCL','TIANJIN')),

  PARTITION south_part VALUES (('DB2','SHENZHEN'), ('DB2','GUANGZHOU')),

  PARTITION west_part  VALUES (('SQL','CHENGDU'),('ORCL','CHENGDU'),('DB2','KUNMING')),

  PARTITION east_part  VALUES ('ORCL','SHANGHAI'),

  PARTITION rest VALUES (DEFAULT)

 );

insert into  dba_by_db_in_yhem values(1,'EYGLE','ORCL','BEIJING');

insert into  dba_by_db_in_yhem values(2,'KAMUS','ORCL','BEIJING');

insert into  dba_by_db_in_yhem values(3,'LAOXIONG','SQL','CHENGDU');

insert into  dba_by_db_in_yhem values(4,'ORA-600','DB2','GUANGZHOU');

insert into  dba_by_db_in_yhem values(5,'YANGTINGKUN','ALL','BEIJING');


select * from dba_by_db_in_yhem partition (north_part);

select * from dba_by_db_in_yhem partition (south_part);

select * from dba_by_db_in_yhem partition (west_part);

select * from dba_by_db_in_yhem partition (east_part);

select * from dba_by_db_in_yhem partition (rest);


現在Oracle支持通過多列定義列表分區,最多支持16個列值定義,這極大的豐富了列表分區的適用場景。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


為了簡化維護操作,12.2 增加了維護過濾特性 - Filtered Partition on Maintenance Operations,也就是說,在執行分區的Move、Split和Merge等操作時,可以選擇對數據進行過濾,通過一個 INCLUDING ROWS 進行限製。


繼續前麵的測試用例,當MOVE時指定保留分區中區域為「BEIJING」的數據後,『TIANJIN』的數據則被移除了:

insert into  dba_by_db_in_yhem values(6,'SECOOLER','ORCL','TIANJIN');

select * from dba_by_db_in_yhem partition (north_part);

ALTER TABLE dba_by_db_in_yhem MOVE PARTITION north_part

INCLUDING ROWS WHERE REGION = 'BEIJING';

select * from dba_by_db_in_yhem partition (north_part);

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

在12.2中,Oracle還支持外部表分區,類似如下的語法展示了這一特性的用途,對於一個統一的外部表,可以通過分區指向不同的外部文件,不同文件可以用於存儲已經分類的數據,從而更加靈活的使用外部表:

CREATE TABLE sales (loc_id number, prod_id number, cust_id number, amount_sold number, quantity_sold number)

 ORGANIZATION EXTERNAL

 (TYPE oracle_loader

  DEFAULT DIRECTORY load_d1

  ACCESS PARAMETERS

  ( RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII

    NOBADFILE

    LOGFILE log_dir:'sales.log'

    FIELDS TERMINATED BY ","

   )

 )

  REJECT LIMIT UNLIMITED

 PARTITION BY RANGE (loc_id)

 (PARTITION p1 VALUES LESS THAN (1000) LOCATION ('california.txt'),

  PARTITION p2 VALUES LESS THAN (2000) DEFAULT DIRECTORY load_d2 LOCATION ('washington.txt'),

  PARTITION p3 VALUES LESS THAN (3000))


了解了Oracle這些新的變化,將有助於我們深入和靈活的去使用Oracle數據庫。


文章轉自數據和雲公眾號,原文鏈接

最後更新:2017-07-18 10:33:04

  上一篇:go  【MySQL 5.7.17】從主從複製到Group Replication
  下一篇:go  MySQL row格式的兩個問題