當前位置:首頁 » 操作系統 » oracle資料庫表分區

oracle資料庫表分區

發布時間: 2022-11-26 17:43:58

① oracle資料庫怎麼建分區

一般語法:

sql">createtablet_test(
pk_idnumber(30)notnull,
add_date_timeDATE,
constraintPK_T_TESTprimarykey(pk_id)
)
PARTITIONBYRANGE(add_date_time)
(
PARTITIONt_test_2013_lessVALUESLESSTHAN(TO_DATE('2013-01-0100:00:00','yyyy-mm-ddhh24:mi:ss'))TABLESPACETS_MISPS,
PARTITIONt_test_2013VALUESLESSTHAN(TO_DATE('2014-01-0100:00:00','yyyy-mm-ddhh24:mi:ss'))TABLESPACETS_MISPS,
PARTITIONt_test_2014VALUESLESSTHAN(TO_DATE('2015-01-0100:00:00','yyyy-mm-ddhh24:mi:ss'))TABLESPACETS_MISPS
);

② oracle表分區和索引分區

一 分區表技術概述

二 分區索引技術概述

⑴ 本地前綴分區索引

適用場景:
如果歷史數據整理非常頻繁、而且不能承受全局分區索引重建的長時間帶來的索引不可用
同時、日常交易性能尚能接受、則建議設計為本地非前綴分區索引

注意:本地分區索引不能保證唯一性(除非分區鍵是約束的一部分)

缺點:
主要體現在數據的高可用性方面
當DROP分區後、全局分區索引則全部INVALID、除非REBULID
但數據量越大、重建索引的時間越長
一般來講,如果需要將數據按照某個值邏輯聚集,多採用范圍分區。如基於時間數據的按「年」、「月」等分區就是很典型的例子。在許多情況下,范圍分區都能利用到分區消除特性( = >= <= between…and 等篩選條件下)。

如果在表裡無法找到一個合適的屬性來按這個屬性完成范圍分區,但你又想享受分區帶來的性能與可用性的提升,則可以考慮使用散列分區。(適合使用 = IN 等篩選條件)

如果數據中有一列或有一組離散值,且按這一列進行分區很有意義,則這樣的數據就很適合採用列表分區。

如果某些數據邏輯上可以進行范圍分區,但是得到的范圍分區還是太大,不能有效管理,則可以考慮使用組合分區(范圍分區+hash 或范圍分區+列表分區)。
create table procts_table
(
id number(2),
name varchar2(50),
sale_date date
)
partition by range(sale_date)
interval (numtoyminterval(1,'month'))
(
partition p_month_1 values less than (to_date(񟭐-01-01','yyyy-mm-dd'))
)

如圖,取 procts_table 中的 sale_date 列作為分區鍵創建按月自增分區;

所有銷售時間在 『2016-01-01』之前的記錄都會被放入 p_month_1 分區;

銷售時間在『2016-01-01』之後的記錄在插入時Oracle會自動創建記錄所屬月的分區;

比如當有銷售時間分別為 2016年1月20日 與 2016年2月20日 的兩條記錄插入時,Oracle會分別創建一個上限值為 『2016-01-31』的分區和一個上限值為『2016-02-29』的分區來存儲這兩條記錄
https://www.cnblogs.com/Dreamer-1/p/6132776.html

③ oracle分區表有什麼作用

Oracle的表分區功能通過改善可管理性、性能和可用性,從而為各式應用程序帶來了極大的好處,分區功能能夠將表、索引或索引組織表進一步細分為段,這些資料庫對象的段叫做分區。

④ oracle資料庫如何查看錶的表分區的信息(每個表分區的名字和所屬表空間)

這樣SELECT TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME
FROM USER_TAB_PARTITIONS

註:

USER_TAB_PARTITIONS:可查看分區表的名字、歸屬表空間以及表的詳細分區情況。

USER_PART_TABLES:可查看用戶所有的分區表,以及分區方式。

(4)oracle資料庫表分區擴展閱讀:

分區表的作用

Oracle的表分區功能通過改善可管理性、性能和可用性,從而為各式應用程序帶來了極大的好處。通常,分區可以使某些查詢以及維護操作的性能大大提高。此外分區還可以極大簡化常見的管理任務,分區是構建千兆位元組數據系統或超高可用性系統的關鍵工具。

分區功能能夠將表、索引或索引組織表進一步細分為段,這些資料庫對象的段叫做分區。每個分區有自己的名稱,還可以選擇自己的存儲特性。從資料庫管理員的角度來看,一個分區後的對象具有多個段,這些段既可進行集體管理,也可單獨管理,這就使資料庫管理員在管理分區後的對象時有相當大的靈活性。

但是,從應用程序的角度來看,分區後的表與非分區表完全相同,使用 SQL DML 命令訪問分區後的表時,無需任何修改。

⑤ oracle分區表有什麼作用

(1) 表空間及分區表的概念
表空間:
是一個或多個數據文件的集合,所有的數據對象都存放在指定的表空間中,但主要存放的是表, 所以稱作表空間。
分區表:
當表中的數據量不斷增大,查詢數據的速度就會變慢,應用程序的性能就會下降,這時就應該考慮對表進行分區。表進行分區後,邏輯上表仍然是一張完整的表,只是將表中的數據在物理上存放到多個「表空間」(物理文件上),這樣查詢數據時,不至於每次都掃描整張表而只是從當前的分區查到所要的數據大大提高了數據查詢的速度。

(2).表分區的具體作用
Oracle的表分區功能通過改善可管理性、性能和可用性,從而為各式應用程序帶來了極大的好處。通常,分區可以使某些查詢以及維護操作的性能大大提高。此外,分區還可以極大簡化常見的管理任務,分區是構建千兆位元組數據系統或超高可用性系統的關鍵工具。 分區功能能夠將表、索引或索引組織表進一步細分為段,這些資料庫對象的段叫做分區。每個分區有自己的名稱,還可以選擇自己的存儲特性。從資料庫管理員的角度來看,一個分區後的對象具有多個段,這些段既可進行集體管理,也可單獨管理,這就使資料庫管理員在管理分區後的對象時有相當大的靈活性。但是,從應用程序的角度來看,分區後的表與非分區表完全相同,使用 SQL DML 命令訪問分區後的表時,無需任何修改。
什麼時候使用分區表:
1、表的大小超過2GB。
2、表中包含歷史數據,新的數據被增加到新的分區中。

(3).表分區的優缺點
表分區有以下優點:
1、改善查詢性能:對分區對象的查詢可以僅搜索自己關心的分區,提高檢索速度。
2、增強可用性:如果表的某個分區出現故障,表在其他分區的數據仍然可用;
3、維護方便:如果表的某個分區出現故障,需要修復數據,只修復該分區即可;
4、均衡I/O:可以把不同的分區映射到不同磁碟以平衡I/O,改善整個系統性能。
缺點:
分區表相關:已經存在的表沒有方法可以直接轉化為分區表。不過 Oracle 提供了在線重定義表的功能。

(4).表分區的幾種類型及操作方法

一.范圍分區:
范圍分區將數據基於范圍映射到每一個分區,這個范圍是你在創建分區時指定的分區鍵決定的。這種分區方式是最為常用的,並且分區鍵經常採用日期。舉個例子:你可能會將銷售數據按照月份進行分區。
當使用范圍分區時,請考慮以下幾個規則:
1、每一個分區都必須有一個VALUES LESS THAN子句,它指定了一個不包括在該分區中的上限值。分區鍵的任何值等於或者大於這個上限值的記錄都會被加入到下一個高一些的分區中。
2、所有分區,除了第一個,都會有一個隱式的下限值,這個值就是此分區的前一個分區的上限值。
3、在最高的分區中,MAXVALUE被定義。MAXVALUE代表了一個不確定的值。這個值高於其它分區中的任何分區鍵的值,也可以理解為高於任何分區中指定的VALUE LESS THAN的值,同時包括空值。
例一:
假設有一個CUSTOMER表,表中有數據200000行,我們將此表通過CUSTOMER_ID進行分區,每個分區存儲100000行,我們將每個分區保存到單獨的表空間中,這樣數據文件就可以跨越多個物理磁碟。下面是創建表和分區的代碼,如下:

CREATE TABLE CUSTOMER
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
STATUS CHAR(1)
)
PARTITION BY RANGE (CUSTOMER_ID)
(
PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01,
PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02
)

例二:按時間劃分

CREATE TABLE ORDER_ACTIVITIES
(
ORDER_ID NUMBER(7) NOT NULL,
ORDER_DATE DATE,
TOTAL_AMOUNT NUMBER,
CUSTOTMER_ID NUMBER(7),
PAID CHAR(1)
)
PARTITION BY RANGE (ORDER_DATE)
(
PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACEORD_TS01,
PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02,
PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03
)

例三:MAXVALUE

CREATE TABLE RangeTable
(
idd INT PRIMARY KEY ,
iNAME VARCHAR(10),
grade INT
)
PARTITION BY RANGE (grade)
(
PARTITION part1 VALUES LESS THAN (1000) TABLESPACE Part1_tb,
PARTITION part2 VALUES LESS THAN (MAXVALUE) TABLESPACE Part2_tb
);

二.列表分區:

該分區的特點是某列的值只有幾個,基於這樣的特點我們可以採用列表分區。
例一

CREATE TABLE PROBLEM_TICKETS
(
PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,
DESCRIPTION VARCHAR2(2000),
CUSTOMER_ID NUMBER(7) NOT NULL,
DATE_ENTERED DATE NOT NULL,
STATUS VARCHAR2(20)
)
PARTITION BY LIST (STATUS)
(
PARTITION PROB_ACTIVE VALUES ('ACTIVE') TABLESPACE PROB_TS01,
PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02)

例二

CREATE TABLE ListTable
(
id INT PRIMARY KEY ,
name VARCHAR (20),
area VARCHAR (10)
)
PARTITION BY LIST (area)
(
PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb,
PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb
);

三.散列分區(也稱HASH分區):
這類分區是在列值上使用散列演算法,以確定將行放入哪個分區中。當列的值沒有合適的條件時,建議使用散列分區。
散列分區為通過指定分區編號來均勻分布數據的一種分區類型,因為通過在I/O設備上進行散列分區,使得這些分區大小一致。
例一:

CREATE TABLE HASH_TABLE
(
COL NUMBER(8),
INF VARCHAR2(100)
)
PARTITION BY HASH (COL)
(
PARTITION PART01 TABLESPACE HASH_TS01,
PARTITION PART02 TABLESPACE HASH_TS02,
PARTITION PART03 TABLESPACE HASH_TS03
)

簡寫:

CREATE TABLE emp
(
empno NUMBER (4),
ename VARCHAR2 (30),
sal NUMBER
)
PARTITION BY HASH (empno) PARTITIONS 8
STORE IN (tbs01,tbs02,tbs03,tbs04,tbs05,tbs06,tbs07,tbs08);

hash分區最主要的機制是根據hash演算法來計算具體某條紀錄應該插入到哪個分區中,hash演算法中最重要的是hash函數,Oracle中如果你要使用hash分區,只需指定分區的數量即可。建議分區的數量採用2的n次方,這樣可以使得各個分區間數據分布更加均勻。

四.組合范圍列表分區
這種分區是基於范圍分區和列表分區,表首先按某列進行范圍分區,然後再按某列進行列表分區,分區之中的分區被稱為子分區。

CREATE TABLE SALES
(
PRODUCT_ID VARCHAR2(5),
SALES_DATE DATE,
SALES_COST NUMBER(10),
STATUS VARCHAR2(20)
)
PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
(
PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009
(
SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
),
PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009
(
SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
)
)

五.復合范圍散列分區:
這種分區是基於范圍分區和散列分區,表首先按某列進行范圍分區,然後再按某列進行散列分區。

create table dinya_test
(
transaction_id number primary key,
item_id number(8) not null,
item_description varchar2(300),
transaction_date date
)
partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)
(
partition part_01 values less than(to_date(『2006-01-01』,』yyyy-mm-dd』)),
partition part_02 values less than(to_date(『2010-01-01』,』yyyy-mm-dd』)),
partition part_03 values less than(maxvalue)
);

(5).有關表分區的一些維護性操作:
一、添加分區
以下代碼給SALES表添加了一個P3分區

ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN (TO_DATE('2003-06-01','YYYY-MM-DD')) TABLESPACE SPACE_NAME;

注意:增加一個分區的時候,增加的分區的條件必須大於現有分區的最大值,否則系統將提示ORA-14074 partition bound must collate higher than that of the last partition 錯誤。
以下代碼給SALES表的P3分區添加了一個P3SUB1子分區

ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE') TABLESPACE SPACE_NAME;

二、刪除分區
以下代碼刪除了SALES表中名為P3的分區:

ALTER TABLE SALES DROP PARTITION P3;

在以下代碼刪除了P4SUB1子分區:

ALTER TABLE SALES DROP SUBPARTITION P4SUB1;

注意:如果刪除的分區是表中唯一的分區,那麼此分區將不能被刪除,要想刪除此分區,必須刪除表。
三、截斷分區
截斷某個分區是指刪除某個分區中的數據,並不會刪除分區,也不會刪除其它分區中的數據。當表中即使只有一個分區時,也可以截斷該分區。通過以下代碼截斷分區:

ALTER TABLE SALES TRUNCATE PARTITION P2;

通過以下代碼截斷子分區:

ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;

四、合並分區
合並分區是將相鄰的分區合並成一個分區,結果分區將採用較高分區的界限,值得注意的是,不能將分區合並到界限較低的分區。以下代碼實現了P1 P2分區的合並:

ALTER TABLE SALES MERGE PARTITIONS P1, P2 INTO PARTITION P2;

五、拆分分區
拆分分區將一個分區拆分兩個新分區,拆分後原來分區不再存在但是如果表存在PMAX分區那麼原來的分區還是可以存在的。注意不能對 HASH類型的分區進行拆分。

ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
此拆分語句是將P2分區拆分為PARTITION P21與PARTITION P22兩個分區,日期小於2003-02-01的數據存於 P21分區中否則存於 P22分區中。

--包含PMAX分區的表拆分分區
ALTER TABLE hs_his.HISHOLDSINFO SPLIT PARTITION PMAX AT(20100900) INTO (partition P201008, partition PMAX);
此拆分語句是將 PMAX 分區拆分為P201008與 PMAX 兩個分區,數據小於20100900 的數據存於 P201008 分區中否則存於 PMAX 分區中。

六、接合分區(coalesca)
結合分區是將散列分區中的數據接合到其它分區中,當散列分區中的數據比較大時,可以增加散列分區,然後進行接合,值得注意的是,接合分區只能用於散列分區中。通過以下代碼進行接合分區:

ALTER TABLE SALES COALESCA PARTITION;

七、重命名表分區
以下代碼將P21更改為P2

ALTER TABLE SALES RENAME PARTITION P21 TO P2;

⑥ oracle資料庫按照一定條件把表拆分為多個表

其實不需要拆分表,分區就可以,還是原來的表名,只是將原來的表分成了若乾的分區,這樣能起到分表的效果,還不用分成很多的表。
比如你原來的表的名字是A,那麼將該表改為A1,然後從新建立一個分區表A,分區的依據是班級,也就是list分區,也就是一般意義上的列表分區表。
然後再將A1的數據插入新A表就可以了。
至於分區表的建立方式,往上很多,可以自行查找。
這樣操作查詢的語句不需要變,只是在不跨分區查詢的情況下,相當於分成了若干張表去查詢。比如查詢1班的成績,那麼就是在1班的分區內,不會有2班的問題,就相當於你用一個指頭就能解決問題,不會動用這個手一樣。
如果分表的話,那麼假設有12個班,那麼就要建立12張表,這樣的話,語句就要寫12次,冗餘太大了。

⑦ oracle 表分區

范圍(range)分區:
一::對於分區表,如果where條件種沒有分區列,那麼oracle會掃描所有的分區,然後做PARTITION RANGE
ALL 操作,這樣成本將比未分區的全表掃描稍微高點,因為需要合並各個分區.
二:范圍分區可以用values less than (maxvalue)增加一個默認分區,maxvalue 常量表示該分區用來存放所有其
他分區無法存放的記錄,
三:范圍分區可以對各種謂詞做分區消除,包括=,>,<,<>等比hash,和list分區要靈活

⑧ ORACLE表分區

一.表分區策略

1.識別大表

  採用ANALYZE TABLE語句進行分析,然後查詢數據字典獲得相應的數據量。

2.大表如何分區

可根據月份,季度以及年份等進行分區;

3.分區的表空間規劃

要對每個表空間的大小進行估計

二.創建表分區

a.創建范圍分區的關鍵字是'RANGE'

1.范圍分區

create table ware_retail_part --創建一個描述商品零售的數據表

(

  id integer primary key,--銷售編號

  retail_date date,--銷售日期

  ware_name varchar2(50)--商品名稱

)

partition by range(retail_date)

(

  --2011年第一個季度為part_01分區

  partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TEMP01,

  --2011年第二個季度為part_02分區

  partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TEMP01,

  --2011年第三個季度為part_03分區

  partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TEMP01,

  --2011年第四個季度為part_04分區

  partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TEMP01

);

2.創建散列分區

3.組合分區:

4.interval 分區

三.創建索引分區

索引分區分為本地索引分區和全局索引分區,全局索引不反應基礎表的結構,要分區只能進行范圍分區。

創建索引分區要參照表分區

四.分區技術簡介

優點:

1.減少維護工作量

2.增強數據的可用性

3.均衡I/O,提升性能

4.提高查詢速度

5.分區對用戶保持透明,用戶感覺不到分區的存在。

五,管理表分區

1.添加表分區

ALTER TABLE...ALTER PARATITION

2.合並表分區

3.刪除分區

ALTER TABLE...DROP PARTITION

刪除分區時,裡面的數據也會被刪除。

-創建表和分區

create table sales--創建一個銷售記錄表

(

  id number primary key,--記錄編號

  goodsname varchar2(10),--商品名

  saledate date--銷售日期

)

partition by range(saledate)--按照日期分區

(

  --第一季度數據

  partition part_sea1 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace tbsp_1,

  --第二季度數據

  partition part_sea2 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace tbsp_2,

  --第三季度數據

  partition part_sea3 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace tbsp_1,

  --第四季度數據

  partition part_sea4 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace tbsp_2

);

--創建局部索引

create index index_3_4 on sales(saledate)

local(

partition part_seal tablespace tbsp_1,

partition part_sea2 tablespace tbsp_2,

partition part_sea3 tablespace tbsp_1,

partition part_sea4 tablespace tbsp_2

);

--並入分區

alter table sales merge partitions part_sea3,part_sea4 into partition part_sea4;

--重建局部索引

alter table sales modify partition part_sea4 rebuild unusable local indexes;

六.管理索引分區

刪除索引:DROP PARTITION

重建分區:REBUILT PARTITION

更名索引分區:RENAME PARTITION

分割索引分區:SPLIT PARTITION

⑨ Oracle創建分區表操作

1、創建語句
create table p(id number)
partition by range(id)
(partition p1 values less than(100) tablespace t1,
partition p2 values less than(200) tablespace t2,
partition p3 values less than(300) tablespace t3);
2、添加分區
alter table p add partition p4 values less than (400) tablespace t4;
3、清除分區數據
alter table p trunc partition p1;
4、刪除分區
alter table p drop partition p1;

⑩ 如何更新oracle表中的分區欄位

1、按時間分區表創建: 其中add_date_time為分區欄位,每一年一個分區。插入100W數據。

熱點內容
我配置很高了ae為什麼卡 發布:2025-05-17 14:54:50 瀏覽:167
python數據分析實戰pdf 發布:2025-05-17 14:49:42 瀏覽:950
海瀾之家廣告腳本 發布:2025-05-17 13:56:06 瀏覽:30
手文件夾恢復 發布:2025-05-17 13:53:32 瀏覽:993
linux怎麼看進程 發布:2025-05-17 13:53:30 瀏覽:303
thinkphp欄位緩存 發布:2025-05-17 13:52:01 瀏覽:575
山靈app安卓版如何設置 發布:2025-05-17 13:51:49 瀏覽:388
帆布壓縮袋 發布:2025-05-17 13:26:27 瀏覽:457
c語言16進製表示方法 發布:2025-05-17 13:11:25 瀏覽:480
ftp單位 發布:2025-05-17 13:10:03 瀏覽:142