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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ORACLE HANDBOOK系列之十一:分区(Partition)

發(fā)布時(shí)間:2023/12/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE HANDBOOK系列之十一:分区(Partition) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Partitioning enables you to decompose very large tables and indexes into smaller and more manageable pieces called partitions. Each partition is an independent object with its own name and optionally its own storage characteristics.

Oracle允許用戶將大表以及大的索引拆分成小塊,每一塊都是一個(gè)單獨(dú)的對象,稱為分區(qū),分區(qū)技術(shù)可以用于提高查詢及DML性能、以及更便捷地管理數(shù)據(jù)。

?

1. ?分區(qū)表

1.1. ?分區(qū)表主要包括三種:

Range Partitioning

List Partitioning

Hash partitioning

?

1.2.?分區(qū)表創(chuàng)建語法示例(Range分區(qū)):

CREATE TABLE tab_part_0309(val DATE, val2 VARCHAR2(200))
PARTITION BY RANGE(val)
(
PARTITION p1 VALUES LESS THAN (TO_DATE('20120308','yyyymmdd'))
);

?

1.3.?ORA-14400錯(cuò)誤

如果在插入數(shù)據(jù)時(shí)Oracle無法找到合適的分區(qū),就會(huì)產(chǎn)生ORA-14400錯(cuò)誤,”inserted partition key does not map to any partition”。例如(假設(shè)當(dāng)前為2012-03-09):

INSERT INTO tab_part_0309 VALUES(SYSDATE,'abrownfox');

?

1.4.?如何添加分區(qū)

ALTER TABLE tab_part_0309 ADD PARTITION p2 VALUES LESS THAN (TO_DATE('20120309','yyyymmdd'));
ALTER TABLE tab_part_0309 ADD PARTITION p3 VALUES LESS THAN (TO_DATE('20120310','yyyymmdd'));

?

1.5.?查詢

SELECT * FROM tab_part_0309 PARTITION(p3);

查詢時(shí)我們可以指定分區(qū)。不過更常見的是Oracle自動(dòng)的Partition Pruning,即如果查詢時(shí)Where子句中包括用于分區(qū)的列(示例中的val列),Oracle會(huì)自動(dòng)定位分區(qū),而不用我們手工指定分區(qū)。

?

1.6.?刪除分區(qū)

ALTER TABLE tab_part_0309 DROP PARTITION p3;

?

1.7.?MAXVALUE

一些情況下,我們會(huì)通過定時(shí)任務(wù)(Scheduler)來定期創(chuàng)建分區(qū),這時(shí)候我們需要考慮一個(gè)問題,如果定時(shí)任務(wù)失敗了導(dǎo)致分區(qū)沒有建立, 那么后斯的數(shù)據(jù)插入就會(huì)遇到ORA-14400錯(cuò)誤。有一種方法可以避免這種錯(cuò)誤,使用MAXVALUE:

CREATE TABLE tab_part_0309_2(val DATE, val2 VARCHAR2(200))
PARTITION BY RANGE(val)
(
PARTITION p1 VALUES LESS THAN (TO_DATE('20120308','yyyymmdd')),
PARTITION pm VALUES LESS THAN (MAXVALUE)
);

使用MAXVALUE后,無法再添加新的分區(qū):

ALTER TABLE tab_part_0309_2 ADD PARTITION p2 VALUES LESS THAN (TO_DATE('20120310','yyyymmdd'))
ORA-14074, partition bound must be collate higher than that of the last partition

但是我們可以從pm分區(qū)中進(jìn)行拆分:

ALTER TABLE tab_part_0309_2
SPLIT PARTITION pm AT (TO_DATE('20120310','yyyymmdd'))
INTO (PARTITION p2, PARTITION pm)

這樣的好處是,即便執(zhí)行拆分的定時(shí)任務(wù)失敗了,數(shù)據(jù)仍然可以正常插入(只不過進(jìn)入了pm分區(qū))。同時(shí),發(fā)現(xiàn)錯(cuò)誤后,我們可以進(jìn)行補(bǔ)救,手工拆分出一個(gè)分區(qū),這樣,pm中符合新分區(qū)條件的數(shù)據(jù),會(huì)自動(dòng)進(jìn)行新的分區(qū)。

?

1.8.?Interval partitioning

11G中引入了一個(gè)更為強(qiáng)大的分區(qū)機(jī)制:Interval partitioning,可以按一定條件自動(dòng)創(chuàng)建分區(qū)。創(chuàng)建語法是這樣的:

CREATE TABLE tab_part_0309_3(val DATE, val2 VARCHAR2(200))
PARTITION BY RANGE(val)
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
(
PARTITION p1 VALUES LESS THAN (TO_DATE('20120308','yyyymmdd'))
);

Interval分區(qū)表必須指定一個(gè)根分區(qū)(上例的p1),使用Interval指定分區(qū)的間隔,它使用了NumToYMInterval函數(shù),該函數(shù)第一個(gè)參數(shù)是number,后一個(gè)是單位,包括’MONTH’, ‘YEAR’,上例表示間隔為一個(gè)月,目前看一個(gè)月應(yīng)該是最小的間隔了,你可以指定0.5或者0.3,但最終的效果還是一個(gè)月。

假設(shè)當(dāng)前時(shí)間為2012-03-09,執(zhí)行下述語句

INSERT INTO tab_part_0309_3 VALUES(SYSDATE, 'abrownfox');

1)???????????? 導(dǎo)致自動(dòng)創(chuàng)建新分區(qū)

2)???????????? 分區(qū)字段值為2012-04-08,是從根分區(qū)往后的一個(gè)月時(shí)間。

3)???????????? 分區(qū)名稱自動(dòng)生成,如SYS_P21

4)???????????? 如果插入的時(shí)間在兩個(gè)月以后或者更久,則Oracle只生成必須的分區(qū),并不會(huì)生成連續(xù)分區(qū)。例如insert的時(shí)間是2012-06-01,則只會(huì)生成2012-06-08分區(qū),至于中間的2012-05-08,2012-04-08分區(qū)并不生成。

?

2.?分區(qū)索引

跟表一樣,索引也分為普通索引與文藝索引(就當(dāng)分區(qū)索引比較文藝一點(diǎn)吧)。可以為一張普通表創(chuàng)建分區(qū)索引(不過不能創(chuàng)建Local分區(qū)索引,后面解釋),也可以為一張分區(qū)表創(chuàng)建普通索引。

2.1.?分區(qū)索引分兩類

全局分區(qū)索引(global partitioning index)

本地分區(qū)索引(local partitioning index)

?

2.2.?全局分區(qū)索引

與表的分區(qū)沒有關(guān)系,創(chuàng)建索引時(shí)可以指定任意的列作為索引分區(qū)的Key,創(chuàng)建語法如下:

CREATE TABLE tab_part_0321_2(val DATE, val2 NUMBER)
PARTITION BY RANGE(val)
(
PARTITION p1 VALUES LESS THAN (TO_DATE('20120308','yyyymmdd'))
);


CREATE INDEX tab_part_0321_2_idx ON tab_part_0321_2 (val2)
GLOBAL PARTITION BY RANGE (val2)
(PARTITION p1 VALUES LESS THAN (2),
PARTITION p2 VALUES LESS THAN (3),
PARTITION p3 VALUES LESS THAN (MAXVALUE));

注意這里使用了global關(guān)鍵字, 并且索引分區(qū)使用的Key是val2字段,而不是表分區(qū)使用的val字段。

那么是否可以在為字段val2創(chuàng)建索引但是使用val字段作為分區(qū)的key呢?

CREATE INDEX tab_part_0321_2_idx2 ON tab_part_0321_2 (val2)
GLOBAL PARTITION BY RANGE (val)
(PARTITION pa VALUES LESS THAN (to_date('20120308','yyyymmdd')),
PARTITION pb VALUES LESS THAN (to_date('20120408','yyyymmdd')),
PARTITION pc VALUES LESS THAN (MAXVALUE));
ORA-14038 global partitioned index must be prefixed.

Prefixed即“前綴索引”,指索引鍵與分區(qū)鍵是相同的,Oracle無法創(chuàng)建非前綴的全局分區(qū)索引。

?

2.3.?本地分區(qū)索引

只有分區(qū)表才能創(chuàng)建本地分區(qū)索引,本地分區(qū)索引始終使用與分區(qū)表相同的字段進(jìn)行分區(qū)(不需要partition by子句),因此索引的分區(qū)與表的分區(qū)是一一對應(yīng)的。我們看看語法:

CREATE INDEX tab_part_0321_2_idx3 ON tab_part_0321_2 (val) LOCAL

嘗試:

CREATE INDEX tab_part_0321_2_idx4 ON tab_part_0321_2 (val2) LOCAL
ORA-01408 such column list already indexed

這是因?yàn)樵谇耙恍」?jié)我們在這個(gè)列上創(chuàng)建過索引了,我們回去把tab_part_0321_2_idx移除,重新執(zhí)行上面的語句便可創(chuàng)建成功,這說明跟global分區(qū)索引不同,local分區(qū)索引允許創(chuàng)建“非前綴索引”。

?

注:關(guān)于前面提到的本地前綴索引(local prefixed index)與本地非前綴索引(local non-prefixed index)的概念,有興趣的可以看看OTN的一些討論帖子,比如:https://forums.oracle.com/forums/thread.jspa?threadID=2150455&start=0&tstart=0

??

轉(zhuǎn)載于:https://www.cnblogs.com/morvenhuang/archive/2012/03/22/2411861.html

總結(jié)

以上是生活随笔為你收集整理的ORACLE HANDBOOK系列之十一:分区(Partition)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产成人精品综合 | 成人拍拍拍 | 日本wwww视频 | 国产91在线播放九色 | 在线成年人视频 | 亚洲欧美中文字幕5发布 | 亚洲国产精品suv | 最新av免费在线观看 | 成人综合一区 | 一级一级黄色片 | 日本精品视频在线观看 | 精品人妻一区二区三区四区在线 | 国产91综合一区在线观看 | 欧美亚洲激情视频 | 老司机午夜精品视频 | 不卡一二区 | 波多野结衣视频观看 | 亚洲一区在线不卡 | 丁香六月婷婷激情 | 熟妇无码乱子成人精品 | 成人免费看片98欧美 | 中文字幕.com | 午夜影院免费体验区 | av生活片 | 国产成人精品一区二区三区无码熬 | 成人性生交生交视频 | 麻豆免费在线播放 | 免费三级网 | 丝袜性爱视频 | 国产一级特黄毛片 | 中文字幕精品无码一区二区 | 一级片观看 | 亚洲免费一级 | 国产午夜精品一区二区 | 久久精品人妻一区二区 | 五月天综合 | 色婷婷一区 | 美女高潮视频在线观看 | 色爽黄 | 国产乱码精品一区二三赶尸艳谈 | 亚洲论理 | 亚洲午夜电影网 | 激情777| 国产剧情在线一区 | 高潮一区二区三区 | 国产100页| 国产乱码一区二区三区在线观看 | 久久成人国产精品入口 | 国产xxxxxxxxx| 男女视频免费观看 | 日本小视频网站 | 国产欧美精品国产国产专区 | 国产午夜亚洲精品午夜鲁丝片 | 日产电影一区二区三区 | 亚洲精选一区 | 主播一区二区 | 色七七久久 | 激情五月综合色婷婷一区二区 | 做爰视频毛片视频 | 亚洲av无码精品色午夜果冻不卡 | 欧美888| 男女操操视频 | 最新最近中文字幕 | 男女插插插网站 | www.久久av| 国产成人精品影视 | 超碰丝袜 | 六月丁香啪啪 | 曰批免费视频播放免费 | 亚洲深夜福利视频 | 五月天激情国产综合婷婷婷 | 蜜臀av无码一区二区三区 | 精品人妻一区二区三区四区不卡 | 久久午夜视频 | 真实新婚偷拍xxxxx | 四虎一区二区 | 国产激情久久久久久熟女老人av | 精品人伦一区二区三区 | 亚洲va欧美va| 一本av在线 | 国产精品变态另类虐交 | 欧美粗大猛烈 | 三级欧美韩日大片在线看 | a v在线视频| 丁香六月婷婷激情 | 美国爱爱视频 | xxxwww国产| 羞羞羞网站 | 美女试爆场恐怖电影在线观看 | 五月天爱爱 | 午夜视频免费观看 | 午夜影片 | 5级黄色片| 亚洲黄色在线网站 | 深夜激情影院 | 免费人妻一区二区三区 | 欧美一区二区成人 | 国产免费av电影 | 亚洲综合久久婷婷 |