bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

oracle表分區怎么寫 oracle數據庫表分區方法

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、一般分區表都會很大,所以可以先創建表空間,為了讓分區表存放到單獨的表空間,否則默認會存放到USERS表空間

2、創建TABLESPACE TS1:

CREATE TABLESPACE TS1 DATAFILE '/data1/oracle/test.dbf' SIZE 512M AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED;

3、創建分區表,需要確定按什么分區,比如按id或按時間段:

CREATE TABLE test_201602

(

ID NUMBER(10) NOT NULL,

CREATE_TIME DATE,

)

TABLESPACE TS1

PARTITION BY LIST (ID)

(PARTITION PT_1001 VALUES (1001) TABLESPACE TS1);

4、繼續增加分區

ALTER TABLE test_201602 ADD PARTITION "PT_1003" VALUES (1003) LOGGING NOCOMPRESS;

ALTER TABLE test_201602 ADD PARTITION "PT_1004" VALUES (1004) LOGGING NOCOMPRESS;

5、查詢表及分區數量

select TABLE_NAME,PARTITION_COUNT,DEF_TABLESPACE_NAME from USER_PART_TABLES order by DEF_TABLESPACE_NAME;

Oracle數據庫分區表操作方法

在大型的企業應用或企業級的數據庫應用中 要處理的數據量通常可以達到幾十到幾百GB 有的甚至可以到TB級 雖然存儲介質和數據處理技術的發展也很快 但是仍然不能滿足用戶的需求 為了使用戶的大量的數據在讀寫操作和查詢中速度更快 Oracle提供了對表和索引進行分區的技術 以改善大型應用系統的性能

使用分區的優點

·增強可用性 如果表的某個分區出現故障 表在其他分區的數據仍然可用

·維護方便 如果表的某個分區出現故障 需要修復數據 只修復該分區即可

·均衡I/O 可以把不同的分區映射到磁盤以平衡I/O 改善整個系統性能

·改善查詢性能 對分區對象的查詢可以僅搜索自己關心的分區 提高檢索速度

Oracle數據庫提供對表或索引的分區方法有三種

·范圍分區

·Hash分區(散列分區)

·復合分區

下面將以實例的方式分別對這三種分區方法來說明分區表的使用 為了測試方便 我們先建三個表空間

以下為引用的內容

create tablespace dinya_space

datafile /test/demo/oracle/demodata/dinya dnf size M

create tablespace dinya_space

datafile /test/demo/oracle/demodata/dinya dnf size M

create tablespace dinya_space

datafile /test/demo/oracle/demodata/dinya dnf size M

分區表的創建

范圍分區

范圍分區就是對數據表中的某個值的范圍進行分區 根據某個值的范圍 決定將該數據存儲在哪個分區上 如根據序號分區 根據業務記錄的創建日期進行分區等

需求描述 有一個物料交易表 表名 material_transactions 該表將來可能有千萬級的數據記錄數 要求在建該表的時候使用分區表 這時候我們可以使用序號分區三個區 每個區中預計存儲三千萬的數據 也可以使用日期分區 如每五年的數據存儲在一個分區上

根據交易記錄的序號分區建表 以下為引用的內容

SQL create table dinya_test

(

transaction_id number primary key

item_id number( ) not null

item_description varchar ( )

transaction_date date not null

)

partition by range (transaction_id)

(

partition part_ values less than( ) tablespace dinya_space

partition part_ values less than( ) tablespace dinya_space

partition part_ values less than(maxvalue) tablespace dinya_space

);

Table created

建表成功 根據交易的序號 交易ID在三千萬以下的記錄將存儲在第一個表空間dinya_space 中 分區名為:par_ 在三千萬到六千萬之間的記錄存儲在第二個表空間

dinya_space 中 分區名為 par_ 而交易ID在六千萬以上的記錄存儲在第三個表空間dinya_space 中 分區名為par_

根據交易日期分區建表

以下為引用的內容

SQL create table dinya_test

(

transaction_id number primary key

item_id number( ) not null

item_description varchar ( )

transaction_date date not null

)

partition by range (transaction_date)

(

partition part_ values less than(to_date( yyyy mm dd ))

tablespace dinya_space

partition part_ values less than(to_date( yyyy mm dd ))

tablespace dinya_space

partition part_ values less than(maxvalue) tablespace dinya_space

);

Table created

這樣我們就分別建了以交易序號和交易日期來分區的分區表 每次插入數據的時候 系統將根據指定的字段的值來自動將記錄存儲到制定的分區(表空間)中

當然 我們還可以根據需求 使用兩個字段的范圍分布來分區 如partition

by range ( transaction_id transaction_date)

分區條件中的值也做相應的改變 請讀者自行測試

Hash分區(散列分區)

散列分區為通過指定分區編號來均勻分布數據的一種分區類型 因為通過在I/O設備上進行散列分區 使得這些分區大小一致 如將物料交易表的數據根據交易ID散列地存放在指定的三個表空間中

以下為引用的內容

SQL create table dinya_test

(

transaction_id number primary key

item_id number( ) not null

item_description varchar ( )

transaction_date date

)

partition by hash(transaction_id)

(

partition part_ tablespace dinya_space

partition part_ tablespace dinya_space

partition part_ tablespace dinya_space

);

Table created

建表成功 此時插入數據 系統將按transaction_id將記錄散列地插入三個分區中 這里也就是三個不同的表空間中

復合分區

有時候我們需要根據范圍分區后 每個分區內的數據再散列地分布在幾個表空間中 這樣我們就要使用復合分區 復合分區是先使用范圍分區 然后在每個分區內再使用散列分區的一種分區方法 如將物料交易的記錄按時間分區 然后每個分區中的數據分三個子分區 將數據散列地存儲在三個指定的表空間中

以下為引用的內容

SQL create table dinya_test

(

transaction_id number primary key

item_id number( ) not null

item_description varchar ( )

transaction_date date

)

partition by range(transaction_date)subpartition by hash(transaction_id)

subpartitions store in (dinya_space dinya_space dinya_space )

(

partition part_ values less than(to_date( yyyy mm dd ))

partition part_ values less than(to_date( yyyy mm dd ))

partition part_ values less than(maxvalue)

);

Table created

該例中 先是根據交易日期進行范圍分區 然后根據交易的ID將記錄散列地存儲在三個表空間中

分區表操作

以上了解了三種分區表的建表方法 下面將使用實際的數據并針對按日期的范圍分區來測試分區表的數據記錄的操作

插入記錄

以下為引用的內容

SQL insert into dinya_test values( BOOKS sysdate);

row created

SQL insert into dinya_test values( BOOKS sysdate+ );

row created

SQL insert into dinya_test values( BOOKS to_date( yyyy mm dd ));

row created

SQL insert into dinya_test values( BOOKS to_date( yyyy mm dd ));

row created

SQL insert into dinya_test values( BOOKS to_date( yyyy mm dd ));

row created

SQL insert into dinya_test values( BOOKS to_date( yyyy mm dd ));

row created

SQL mit;

Commit plete

SQL

按上面的建表結果 年前的數據將存儲在第一個分區part_ 上 而 年到 年的交易數據將存儲在第二個分區part_ 上 年以后的記錄存儲在第三個分區part_ 上

查詢分區表記錄 以下為引用的內容

SQL select * from dinya_test partition(part_ );

TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE

BOOKS : :

BOOKS : :

SQL

SQL select * from dinya_test partition(part_ );

TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE

BOOKS

BOOKS

SQL

SQL select * from dinya_test partition(part_ );

TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE

BOOKS

BOOKS

SQL

從查詢的結果可以看出 插入的數據已經根據交易時間范圍存儲在不同的分區中 這里是指定了分區的查詢 當然也可以不指定分區 直接執行select * from dinya_test查詢全部記錄

在也檢索的數據量很大的時候 指定分區會大大提高檢索速度

更新分區表的記錄

以下為引用的內容

SQL update dinya_test partition(part_ ) t set em_description= DESK where

t transaction_id= ;

row updated

SQL mit;

Commit plete

SQL

這里將第一個分區中的交易ID= 的記錄中的item_description字段更新為 DESK 可以看到已經成功更新了一條記錄 但是當更新的時候指定了分區 而根據查詢的記錄不在該分區中時 將不會更新數據 請看下面的例子 以下為引用的內容

SQL update dinya_test partition(part_ ) t set em_description= DESK where

t transaction_id= ;

rows updated

SQL mit;

Commit plete

SQL

指定了在第一個分區中更新記錄 但是條件中限制交易ID為 而查詢全表 交易ID為 的記錄在第三個分區中 這樣該條語句將不會更新記錄

刪除分區表記錄

以下為引用的內容

SQL delete from dinya_test partition(part_ ) t where t transaction_id= ;

row deleted

SQL mit;

Commit plete

SQL

上面例子刪除了第二個分區part_ 中的交易記錄ID為 的一條記錄 和更新數據相同 如果指定了分區 而條件中的數據又不在該分區中時 將不會刪除任何數據

分區表索引的使用

分區表和一般表一樣可以建立索引 分區表可以創建局部索引和全局索引 當分區中出現許多事務并且要保證所有分區中的數據記錄的唯一性時采用全局索引

局部索引分區的建立

以下為引用的內容

SQL create index dinya_idx_t on dinya_test(item_id)

local

(

partition idx_ tablespace dinya_space

partition idx_ tablespace dinya_space

partition idx_ tablespace dinya_space

);

Index created

SQL

看查詢的執行計劃 從下面的執行計劃可以看出 系統已經使用了索引

以下為引用的內容

SQL select * from dinya_test partition(part_ ) t where em_id= ;

Execution Plan

SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= Bytes= )

TABLE ACCESS (BY LOCAL INDEX ROWID) OF DINYA_TEST (Cost=

Card= Bytes= )

INDEX (RANGE SCAN) OF DINYA_IDX_T (NON UNIQUE) (Cost=

Card= )

Statistics

recursive calls

db block gets

consistent gets

physical reads

redo size

bytes sent via SQL*Net to client

bytes received via SQL*Net from client

SQL*Net roundtrips to/from client

sorts (memory)

sorts (disk)

rows processed

SQL

全局索引分區的建立

全局索引建立時global 子句允許指定索引的范圍值 這個范圍值為索引字段的范圍值

以下為引用的內容

SQL create index dinya_idx_t on dinya_test(item_id)

global partition by range(item_id)

(

partition idx_ values less than ( ) tablespace dinya_space

partition idx_ values less than ( ) tablespace dinya_space

partition idx_ values less than (maxvalue) tablespace dinya_space

);

Index created

SQL

本例中對表的item_id字段建立索引分區 當然也可以不指定索引分區名直接對整個表建立索引 如

以下為引用的內容

SQL create index dinya_idx_t on dinya_test(item_id);

Index created

SQL

同樣的 對全局索引根據執行計劃可以看出索引已經可以使用

以下為引用的內容

SQL select * from dinya_test t where em_id= ;

Execution Plan

SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= Bytes= )

TABLE ACCESS (BY GLOBAL INDEX ROWID) OF DINYA_TEST (Cost

= Card= Bytes= )

INDEX (RANGE SCAN) OF DINYA_IDX_T (NON UNIQUE) (Cost=

Card= )

Statistics

recursive calls

db block gets

consistent gets

physical reads

redo size

bytes sent via SQL*Net to client

bytes received via SQL*Net from client

SQL*Net roundtrips to/from client

sorts (memory)

sorts (disk)

rows processed

SQL

分區表的維護

了解了分區表的建立 索引的建立 表和索引的使用后 在應用的還要經常對分區進行維護和管理 日常維護和管理的內容包括 增加一個分區 合并一個分區及刪除分區等等 下面以范圍分區為例說明增加 合并 刪除分區的一般操作

增加一個分區:

以下為引用的內容

SQL alter table dinya_test

add partition part_ values less than(to_date( yyyy mm dd ))

tablespace dinya_spa

ce ;

Table altered

SQL

增加一個分區的時候 增加的分區的條件必須大于現有分區的最大值 否則系統將提示ORA partition bound must collate higher than that of the last partition 錯誤

合并一個分區

以下為引用的內容

SQL alter table dinya_test merge partitions part_ part_ into partition part_ ;

Table altered

SQL

在本例中將原有的表的part_ 分區和part_ 分區進行了合并 合并后的分區為part_ 如果在合并的時候把合并后的分區定為part_ 的時候 系統將提示ORA cannot reuse lower bound partition as resulting partition 錯誤

刪除分區

以下為引用的內容

SQL alter table dinya_test drop partition part_ ;

Table altered

SQL

刪除分區表的一個分區后 查詢該表的數據時顯示 該分區中的數據已全部丟失 所以執行刪除分區動作時要慎重 確保先備份數據后再執行 或將分區合并

總結

lishixinzhi/Article/program/Oracle/201311/17329

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表分區怎么寫 oracle數據庫表分區方法
文章位置:http://vcdvsql.cn/article8/hpijip.html

成都網站建設公司_創新互聯,為您提供網站策劃響應式網站網站建設小程序開發網站收錄關鍵詞優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作