【動手實踐】Oracle 12.2 新特性:隻讀分區的使用和維護
12.2的分區新特性中引入了隻讀分區的特性,可以幫助我們將某些分區的數據進行靜態化保護。
這一特性通過將表或者分區設置為READ ONLY或者READ WRITE來進行控製,以下是一個測試Demo(可以在 https://livesql.oracle.com )網站驗證體驗。
以下測試首先將數據表置為READ ONLY模式,對部分分區設置為READ WRITE的讀寫模式:
drop table YHEM_ODS;
CREATE TABLE YHEM_ODS
(oid number,
odate DATE,
omount number
) read only
PARTITION BY RANGE(odate)
(partition q1_2016 values less than (to_date('2016-04-01','yyyy-mm-dd')),
partition q2_2016 values less than (to_date('2016-07-01','yyyy-mm-dd')),
partition q3_2016 values less than (to_date('2016-10-01','yyyy-mm-dd')) read write,
partition q4_2016 values less than (to_date('2017-01-01','yyyy-mm-dd')) read write)
/
insert into YHEM_ODS values(1,to_date('2016-01-20','yyyy-mm-dd'),100);
insert into YHEM_ODS values(1,to_date('2016-10-20','yyyy-mm-dd'),100);
insert into YHEM_ODS values(1,to_date('2016-12-20','yyyy-mm-dd'),100);
select * from yhem_ods;
select * from user_tab_partitions;
alter table YHEM_ODS modify partition q2_2016 read write;
如果向著隻讀分區插入數據,則會收到ORA-14466的錯誤提示:
讀寫分區可以自有的進行數據變更:
最後可以查詢這些分區的數據:
分區的屬性可以通過modify語句進行在線修改。
alter table YHEM_ODS modify partition q2_2016 read write;
SELECT PARTITION_NAME, READ_ONLY FROM USER_TAB_PARTITIONS;
通過分區表增加的『Read_Only』字段可以查看哪些分區被設置為隻讀狀態:
在官方手冊上有如下的範例,對表、分區和子分區都做出了設置,初始狀態全表設置為讀寫,部分分區設置為隻讀狀態:
CREATE TABLE orders_read_write_only (
order_id NUMBER (12),
order_date DATE CONSTRAINT order_date_nn NOT NULL,
state VARCHAR2(2)
) READ WRITE
PARTITION BY RANGE (order_date)
SUBPARTITION BY LIST (state)
( PARTITION order_p1 VALUES LESS THAN (TO_DATE ('01-DEC-2015','DD-MON-YYYY')) READ ONLY
( SUBPARTITION order_p1_northwest VALUES ('OR', 'WA'),
SUBPARTITION order_p1_southwest VALUES ('AZ', 'UT', 'NM') ),
PARTITION order_p2 VALUES LESS THAN (TO_DATE ('01-MAR-2016','DD-MON-YYYY'))
( SUBPARTITION order_p2_northwest VALUES ('OR', 'WA'),
SUBPARTITION order_p2_southwest VALUES ('AZ', 'UT', 'NM') READ ONLY),
PARTITION order_p3 VALUES LESS THAN (TO_DATE ('01-JUL-2016','DD-MON-YYYY'))
( SUBPARTITION order_p3_northwest VALUES ('OR', 'WA') READ ONLY,
SUBPARTITION order_p3_southwest VALUES ('AZ', 'UT', 'NM') ) );
SELECT PARTITION_NAME, READ_ONLY FROM USER_TAB_PARTITIONS WHERE TABLE_NAME ='ORDERS_READ_WRITE_ONLY';
SELECT PARTITION_NAME, SUBPARTITION_NAME, READ_ONLY FROM USER_TAB_SUBPARTITIONS WHERE TABLE_NAME ='ORDERS_READ_WRITE_ONLY';
了解了Oracle這些新的變化,將有助於我們深入和靈活的去使用Oracle數據庫。
文章轉自數據和雲公眾號,原文鏈接
最後更新:2017-07-18 10:33:08