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


【動手實踐】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的錯誤提示:

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

讀寫分區可以自有的進行數據變更:

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

最後可以查詢這些分區的數據:

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

分區的屬性可以通過modify語句進行在線修改。

alter table YHEM_ODS modify partition q2_2016 read write;


SELECT PARTITION_NAME, READ_ONLY FROM USER_TAB_PARTITIONS;

通過分區表增加的『Read_Only』字段可以查看哪些分區被設置為隻讀狀態:

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

在官方手冊上有如下的範例,對表、分區和子分區都做出了設置,初始狀態全表設置為讀寫,部分分區設置為隻讀狀態:

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

  上一篇:go  MySQL Group Replication 學習筆記
  下一篇:go  【MySQL 5.7.17】從主從複製到Group Replication