日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网

發(fā)布時間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

范圍分區(qū)允許用戶根據(jù)分區(qū)鍵列值的范圍創(chuàng)建分區(qū)。下面是一個按范圍分區(qū)表的示例:

create table sales6

(

sales_id number,

sales_dt date

)

partition by range (sales_dt)

(

partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd')),

partition p0702 values less than (to_date('2007-03-01','yyyy-mm-dd'))

);

假如在此處僅針對2007年1月和2007年2月定義了分區(qū),如果表中插入一條sales_dt在2007年3月的記錄,會發(fā)生什么情況?插入將失敗,并顯示以下錯誤:

ORA-14400: inserted partition key does not map to any partition

顯然,需要針對2007年3月添加一個分區(qū),然后才能插入一條記錄。但通常說起來容易做起來難。通常無法容忍事先創(chuàng)建大量分區(qū),但其中很少一部分可能會產(chǎn)生此錯誤。

如果Oracle以某種方式自動察覺到對新分區(qū)的需要,然后創(chuàng)建它們,這樣不是更好嗎?Oracle 11g可以,它可以使用一個稱為間隔分區(qū)的特性。此時,不必定義分區(qū)及它們的邊界,只需定義一個定義了每個分區(qū)邊界的間隔。下面是使用間隔分區(qū)的示例:

create table sales6

(

sales_id number,

sales_dt date

)

partition by range (sales_dt)

interval (numtoyminterval(1,'MONTH'))

(

partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))

);

注意子句interval后面跟著時間間隔,在此處指示Oracle為每個月份創(chuàng)建一個時間間隔。已經(jīng)為2007年1月的數(shù)據(jù)創(chuàng)建了名為p0701的初始分區(qū)。現(xiàn)在,假設(shè)插入了一條包括2007年6月數(shù)據(jù)的記錄:

SQL> insert into sales6 values (1,'01-jun-07');

1 row created.

Oracle不會返回錯誤,而是成功執(zhí)行該語句。那么這條記錄將轉(zhuǎn)向何處?p0701 分區(qū)不能包括該記錄,因?yàn)闆]有為2007年6月定義分區(qū)。但此時,如果檢查該表的分區(qū):

SQL> select partition_name, high_value

2 from user_tab_partitions

3 where table_name = 'SALES6';

PARTITioN_NAME HIGH_VALUE

----------------------------------------------------------------

P0701 TO_DATE(' 2007-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_C

ALENDAR=GREGORIA

SYS_P41 TO_DATE(' 2007-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_C

ALENDAR=GREGORIA

注意名為SYS_P1、HIGH_VALUE為2007年7月1日分區(qū),它最多可以容納到6月底的數(shù)據(jù)。該分區(qū)是由Oracle動態(tài)創(chuàng)建的,并具有一個系統(tǒng)生成的名稱。

現(xiàn)在,假設(shè)輸入一個小于HIGH_VALUE的值,如2007年5月1日。在理想情況下,它應(yīng)該具有自己的分區(qū),因?yàn)榉謪^(qū)時間間隔是一個月。

SQL> insert into sales6 values (1,'01-may-07');

1 row created.

SQL> select partition_name, high_value

2 from user_tab_partitions

3 where table_name = 'SALES6';

PARTITioN_NAME HIGH_VALUE

----------------------------------------------------------------

P0701 TO_DATE(' 2007-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_C

ALENDAR=GREGORIA

SYS_P41 TO_DATE(' 2007-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_C

ALENDAR=GREGORIA

SYS_P42 TO_DATE(' 2007-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_C

ALENDAR=GREGORIA

注意新分區(qū)SYS_P42,其上限為6月1日,因此該分區(qū)可以保留2006年5月的數(shù)據(jù)。該分區(qū)是通過拆分SYS_P41分區(qū)創(chuàng)建的(針對6月份)。因此,當(dāng)定義一個間隔分區(qū)方案時,Oracle會自動創(chuàng)建和維護(hù)分區(qū)。

如果希望將分區(qū)存儲在特定表空間中,可以使用store in子句執(zhí)行該操作:

interval (numtoyminterval(1,'MONTH'))

store in (TS1,TS2,TS3)

該子句以循環(huán)方式將分區(qū)存儲在表空間TS1、TS2和TS3中。

應(yīng)用程序開發(fā)人員如何定位特定分區(qū)?一種方法是知道名稱,這種方法可能不可行,即使知道名稱,這種方法也非常容易出錯。為了便于訪問特定分區(qū),Oracle 11g為分區(qū)SQL提供了一個新語法:

SQL> select * from sales6 partition for (to_date('15-may-2007','dd-mon-yyyy'));

SALES_ID SALES_DT

---------- ---------

1 01-MAY-07

注意新子句for(值),它允許用戶直接引用分區(qū),而不必通過它們的準(zhǔn)確名稱進(jìn)行顯式調(diào)用。如果希望截?cái)嗷騽h除一個分區(qū),可以調(diào)用這個擴(kuò)展的分段語法。

以此方式創(chuàng)建表之后,DBA_PART_TABLES 視圖中的 PARTITIONING_TYPE 列會顯示時間間隔

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。