【動手實踐】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個列值定義,這極大的豐富了列表分區的適用場景。
為了簡化維護操作,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);
在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