Oracle 11g筆記 分割槽表

2021-07-11 17:18:29 字數 3498 閱讀 5304

一、分割槽表

分割槽技術,oracle允許把乙個大表分成幾部分,每部分叫乙個分割槽,然後把每個部分放在不同的物理磁碟,以提高整個資料庫的效能。

每個分割槽還可以再分成幾份,這樣產生的分割槽叫子分割槽(subpartition)。分割槽表邏輯上還是乙個整體。

1、優點:

(1)分割槽技術使資料庫的可管理性變得更加容易,

如:使用者可以往乙個單獨的分割槽中裝載資料,而對其它分割槽沒有任何影響;使用者可以在乙個單獨的分割槽上建立索引。

(2)分割槽可以提高表的查詢效能,sql語句的where子句會過濾掉不需要的分割槽,oracle不會再掃瞄那些不需要的分割槽。

(3)分割槽技術減少資料的不可用時間,使用者可以單獨地維護乙個分割槽中的資料,而不影響其它分割槽中資料的使用。

(4)分割槽技術在資料庫級完成,幾乎不需要對應用程式做任何修改。

2、分類:

(1)範圍分割槽

根據表中列值的範圍將整個表分成不同的部分,如:按照時間進行範圍分割槽

(2)列表分割槽

使用列值將表劃分成幾部分

(3)雜湊分割槽:作用雜湊函式把錶分成幾部分

(4)復合分割槽:同時使用兩種分割槽方法對錶進行分割槽

3、建立示例

(1)範圍分割槽表

sql>create table sales(invoice_no number,sale_year int not null,sale_month int not null,sale_day int not null)

partition by range (sale_year)

(partition p1 values less than (2000) tablespace users,

partition p2 values less than (2001) tablespace lmtbsb,

partition p3 values less than (2002) tablespace bigtbs_01,

partition p4 values less than (2003) tablespace tsseg_manual);

(2)雜湊分割槽(根據雜湊值把表分成幾個分割槽。法一:指定分割槽數量;法

二、指定分割槽名字)

a.指定分割槽數量,關鍵字partitions指定分割槽的數量

sql>create table dept(deptno number,deptname varchar(32))

partition by hash(deptno) partitions 4;

指定分割槽數為4,所有分割槽都放在相同的表空間中。

b.按指定分割槽的名字進行分割槽

sql>create table dept(deptno number,deptname varchar(32))

partition by hash(deptno)

(partition p1 tablespace users,

partition p2 tablespace lmtbsb,

partition p3 tablespace bigtbs_01,

partition p4 tablespace tsseg_manual);

(3)列表分割槽

sql>create table sales(item integer,qty integer,store_name varchar(30),city varchar2(20),sale_date date)

partition by list (city)

(partition region_east values('杭州','上海') tablespace users,

partition region_west values('成都','重慶') tablespace lmtbsb,

partition region_south values('廣州','桂林') tablespace bigtbs_01);

4、其它示例

(1)得到乙個分割槽表的所有子分割槽

sql>select table_name,partition_name,subpartition_name,tablespace_name

from dba_tab_subpartitions

where table_name='composite_sales'

order by table_name,partition_name

(2)將表的乙個分割槽從乙個表空間移動至另外乙個表空間

a.確認分割槽sp1在哪個表空間

sql>select table_name,partition_name,subpartition_name,tablespace_name

from dba_tab_subpartitions

where table_name='sales' and table_owner='test'

查詢得知:sp1在p1表空間中

b.將分割槽sp1移至表空間p

sql>alter table sales move partition sp1 tablespace tp;

c.移動分割槽,會使索引無效,需要重建索引,如:

sql>alter index sales3_pk rebuild;

(3)檢視乙個表是不是表空間

sql>select owner,table_name,partitioned from dba_tables where owner='test' and table_name='sales3';

檢視使用者test的表sales3是不是分割槽表。

若partitioned=yes表示這個表是分割槽表

(4)得到建立分割槽的sql語句

sql>select dbms_metadata.get_ddl ('table','sales3','test') from dual;

新增乙個範圍分割槽,注:新增的分割槽邊界值必須大於已存大的分割槽邊界

sql>alter table sales3 add partition p1999 values less then (1999);

(5)合併分割槽,注:合併以後的分割槽的名字不能是邊界值較低的那個分割槽的名字,但可以是另外乙個分割槽的名字

sql>alter table sales3 merge partitions sp1,sp3 into partitions sp3    

(6)分割槽交換

sql>alter table sales3 exchange partition sp1 with table tar_sales;

或:sql>alter table sales3 exchange partition sp3 with table tar_sales including indexes without validation;

注:進行分割槽交換時,分割槽表上有索引,目標表上也應有索引

檢視索引ind_map由哪些列組成:

sql>select index_owner,index_name,table_name,column_name from dba_ind_columns where index_owner='test' and index_name='ind_map'; 

oracle11g分割槽表

1按需建立分割槽,可以自動擴充套件分割槽 create table f sales sales amt number,d date date partition by range d date interval numtoyminterval 1,year partition p1 values l...

oracle 11g 按時間建分割槽表

假如已建立的表不能再建立分割槽,只有重新建分割槽表,然後將資料匯入表中,再將表名改為原表名 1.我的原表名為monitor data,現在建臨時分割槽表 create table gps monitor data tmp data id char 36 byte not null,equip id ...

oracle11g分割槽表按時間自動建立

首先來介紹下numtodsinterval和numtoyminterval兩個函式。numtoyminterval和numtoyminterval是日期轉換函式,作用 可以將數字轉換成相應的日期單位時間 語法 numtoyminterval n char expr char expr 日期描述,可以...