1. 程式人生 > >oracle 分割槽表放入不同的表空間

oracle 分割槽表放入不同的表空間

  查詢分割槽:Select *From user_extents WHERE partition_name='分割槽名';

1)建立表空間

create tablespace HRPM0

datafile '/oradata/misdb/HRPM0.DBF' size 5m autoextend on next 10m maxsize unlimited

2)刪除表空間(同時把資料檔案也刪除)

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

   如果不想刪除資料檔案:

           Drop tablespace tablespace_name;

3) 修改表空間大小

alter database datafile '/path/NADDate05.dbf' resize 100M

4)新增資料檔案(在建立表空間時,若是約束了表空間的大小,那麼一段時間後,這個表空間就會被裝滿,無法再新增其他物件。則需要給表空間新增資料檔案):

Alter tablespace tablespace_name add datafile’ '/path/NADDate06.dbf’ size 100M;

4) 備註:

4.1).--.禁止undo tablespace自動增長

alter database datafile 'full_path\undotbs01.dbf' autoextend off;

4.2).-- 建立一個新的小空間的undo tablespace

create undo tablespace undotBS2 datafile 'full_path\UNDOTBS02.DBF' size 100m;

4.3).-- 設定新的表空間為系統undo_tablespace

alter system set undo_tablespace=undotBS2;

4.4).-- Drop 舊的表空間

drop tablespace undotbs1 including contents;

4.5).--檢視所有表空間的情況

select * from dba_tablespaces

5)查到一個最好用的表:dict

5.1)select *from dict where table_name like '%PART%'

5.2)ALL_TAB_PARTITIONS:可以查出表所對應的分割槽內容;

5.3)dab_tab_partitons :與上2);

5.4)dba_ind_partitons:查詢分割槽的索引;

5.5)子分割槽也是一樣的(dba_tab_subpartitons,dba_ind_partitons)

一、使用分割槽的優點:

    1、增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用;

    2、維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;

    3、均衡I/O:可以把不同的分割槽對映到磁碟以平衡I/O,改善整個系統性能;

4、改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度。

二、Oracle資料庫提供對錶或索引的分割槽方法有幾種(收集到四種):

        1、範圍分割槽

        2、列表分割槽

        3、Hash分割槽(雜湊分割槽)

        4、複合分割槽

三、詳描述分割槽例項:

    1)下面將以例項的方式分別對這三種分割槽方法來說明分割槽表的使用。為了測試方便,我們先建三個表空間。

create tablespace dinya_space01 datafile 'C:\表空間\dinya01.dbf' size 5Mcreatetablespace dinya_space02 datafile 'C:\表空間\dinya02.dbf'SIZE 5Mcreate tablespacedinya_space03 datafile 'C:\表空間\dinya03.dbf' SIZE 5M;

select * from user_tablespaces

                   <表空間->三個>

1.1)範圍分割槽

    範圍分割槽就是對資料表中的某個值的範圍進行分割槽,根據某個值的範圍,決定將該資料儲存在哪個分割槽上。如根據序號分割槽,根據業務記錄的建立日期進行分割槽等。

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

根據交易記錄的序號分割槽建表:----為了測試需要做以下修改;

create table dinya_test

   (

        transaction_id number primary key,

        item_id number(8) not null,

        item_description varchar2(300),

        transaction_date date not null

    )

    partition by range (transaction_id)

    (

       partition part_01 values less than(2) tablespace dinya_space01,-----2條以下的交易在此分割槽上:part_01

      partition part_02 values less than(3) tablespace dinya_space02,-----等於+大於2而小於3的交易在此分割槽:part_02

      partition part_03 values less than(maxvalue) tablespace dinya_space03----大於3的交易在此分割槽:part_03

-----------------以上在pl/sql測試成功;

---------------- 以下沒有在pl/sql測試!

根據交易日期分割槽建表:

SQL> create table dinya_test

   (

        transaction_id number primary key,

        item_id number(8) not null,

       item_description varchar2(300),

       transaction_date date not null  

 )

    partition by range (transaction_date)

    (

   partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dinya_space01,

   partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dinya_space02,

 partition part_03 values less than(maxvalue) tablespace dinya_space03

 );

這樣我們就分別建了以交易序號和交易日期來分割槽的分割槽表。每次插入資料的時候,系統將根據指定的欄位的值來自動將記錄儲存到制定的分割槽(表空間)中。

當然,我們還可以根據需求,使用兩個欄位的範圍分佈來分割槽,如partition by range ( transaction_id ,transaction_date),分割槽條件中的值也做相應的改變,請讀者自行測試。

---------------------------------以上沒有在pl/sql測試!

1.2) 範圍分割槽建立成功之後的相關操作測試;

 a)向表新增測試資料:

insert into dinya_test values(1,12,'BOOKS',sysdate);

insert into dinya_test values(2,12, 'BOOKS',sysdate+30);

insert into dinya_test values(3,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));

insert into dinya_test values(4,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));

insert into dinya_test values(5,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

insert into dinya_test values(6,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));

b)查詢

   b.1)如果查詢全表資料

select * from dinya_test;如下圖:

                                < 全表資料>

select * from dinya_test partition(part_01);如下圖:

                              <Part_01分割槽的資料>

select * from dinya_test partition(part_02);如下圖:

                               <Part_02分割槽的資料>

select * from dinya_test partition(part_03);如下圖:

                               <Part_03分割槽的資料>

update dinya_test partition(part_01) t set t.item_description='DESK' wheret.transaction_id=1;

select * from dinya_test partition(part_01);BOOKS->DESK(發生變化)

select * from dinya_test(此結果就不用查看了,肯定變了);

---刪除part_03分割槽中transaction_id=4的記錄:

delete from dinya_test partition(part_03) t where t.transaction_id=4;

select * from dinya_test partition(part_03)

             少了transaction_id=4的記錄(與上圖對比)

c)索引的建立:

   c.1)區域性索引的建立:

create index dinya_idx_t on dinya_test(item_id)

local

   (

partition idx_1 tablespace dinya_space01,---分割槽名為:idx_1

partition idx_2 tablespace dinya_space02, ---分割槽名為:idx_2

partition idx_3 tablespace dinya_space03---分割槽名為:idx_3

 );  ---pl/sql測試成功

注:

select *from ALL_TAB_PARTITIONS where table_name ='DINYA_TEST'

    select *From dba_ind_partitions where partition_name='IDX_1'

   c.2)全域性索引的建立:

全域性索引建立時global 子句允許指定索引的範圍值,這個範圍值為索引欄位的範圍值:

create index dinya_idx_t on dinya_test(item_id)

global partition by range(item_id)

 (

partition idx_1 values less than (1000tablespace dinya_space01,

partition idx_2 values less than (10000tablespace dinya_space02,

partition idx_3 values less than (maxvaluetablespace dinya_space03

 );----PL/SQL末測試[參照以上local]

整個表建立索引:

   Create index dinya_idx_t on dinya_test(item_id);

備註: select *from all_indexes(dba_indexesall_ind_columns user_ind_columns dba_ind_columns)

1.3) Hash分割槽(雜湊分割槽)

——————————以下沒有在機器上測試

雜湊分割槽為通過指定分割槽編號來均勻分佈資料的一種分割槽型別,因為通過在I/O裝置上進行雜湊分割槽,使得這些分割槽大小一致。如將物料交易表的資料根據交易ID雜湊地存放在指定的三個表空間中:

create table dinya_test

    (

       transaction_id number primary key,

        item_id number(8) not null,

        item_description varchar2(300),

        transaction_date date

   )

   partition by hash(transaction_id)

   (

       partition part_01 tablespace dinya_space01,

       partition part_02 tablespace dinya_space02,

       partition part_03 tablespace dinya_space03

 );

建表成功,此時插入資料,系統將按transaction_id將記錄雜湊地插入三個分割槽中,這裡也就是三個不同的表空間中。

——————————以上沒有在機器上測試;

1.4) 列表分割槽:該分割槽的特點是某列的值只有幾個,基於這樣的特點我們可以採用列表分割槽。

示例1:

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

)     

備註:active和inactive是列status的值!謹記與range和hash分割槽的區別;

1.4.1)測試如下:

   insert into PROBLEM_TICKETS values(1,'BOOKS',1,sysdate,'ACTIVE');

insert into PROBLEM_TICKETS values(2,'son',2,sysdate+30,'INACTIVE');

insert into PROBLEM_TICKETS values(3,'son',3,to_date('2006-05-30','yyyy-mm-dd'),'INACTIVE');

insert into PROBLEM_TICKETS values(4,'BOOKS',4,to_date('2007-06-23','yyyy-mm-dd'),'INACTIVE');

insert into PROBLEM_TICKETS values(5,'old',5,to_date('2011-02-26','yyyy-mm-dd'),'ACTIVE');

insert intoPROBLEM_TICKETSvalues(6,'test',6,to_date('2011-04-30','yyyy-mm-dd'),'INACTIVE');

select * from PROBLEM_TICKETS

                                     <查詢全表>

1.4.2)

   select * from PROBLEM_TICKETS partition(PROB_ACTIVE)

1.4.2)

   select * from PROBLEM_TICKETS partition(PROB_INACTIVE)

在測試中遇到這樣的情況。如果表建立了分割槽,如果要刪除資料檔案(表空間檔案),則要先刪除分割槽,然後才能刪除資料檔案(但是在刪除資料檔案時,必須要保留一個分割槽才能最終刪除資料檔案>表空間檔案,)

當然,也可以直接就刪除表也行,剛所有的全刪除,但是表空間檔案還在!

1.5) 複合分割槽

 有時候我們需要根據範圍分割槽後,每個分割槽內的資料再雜湊地分佈在幾個表空間中,這樣我們就要使用複合分割槽。複合分割槽是先使用範圍分割槽,然後在每個分割槽內再使用雜湊分割槽的一種分割槽方法,如將物料交易的記錄按時間分割槽,然後每個分割槽中的資料分三個子分割槽,將資料雜湊地儲存在三個指定的表空間中:

create table dinya_test

    (

        transaction_id number primary key,

        item_id number(8not null,

    item_description varchar2(300),

     transaction_date date

    )

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

subpartitions 3 store in (dinya_space07,dinya_space08,dinya_space09)

 (

partition part_07 values less than(to_date('2006-01-01','yyyy-mm-dd')),

partition part_08 values less than(to_date('2010-01-01','yyyy-mm-dd')),

partition part_09 values less than(maxvalue)

 );

 ---測試如下:

select *From user_tab_partitions where table_name=upper('dinya_test')

selec *From user_tab_subpartitions where table_name=upper('dinya_test')

《圖1

插入如下資料:

insert into dinya_test values(1,12,'BOOKS',sysdate);

insert into dinya_test values(2,12'BOOKS',sysdate+30);

insert into dinya_test values(3,12'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));

insert into dinya_test values(7,12'BOOKS',to_date('2005-05-30','yyyy-mm-dd'));

insert into dinya_test values(4,12'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));

insert into dinya_test values(5,12'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

insert into dinya_test values(6,12'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));

select *From dinya_test:如下圖

select *From dinya_test partition(part_07)如下圖:

select *From dinya_test partition(part_09)

參照下圖,按所顯的子分割槽名,看能否查出資料:

select*Fromuser_tab_subpartitions where table_name=upper('dinya_test')

select *From dinya_test subpartition(SYS_SUBP62):如下圖:

其它的查詢一樣。-----測試成功;

  備註: 該例中,先是根據交易日期進行範圍分割槽,然後根據交易的ID將記錄雜湊地儲存在三個表空間中。

1.6)複合範圍列表分割槽:這種分割槽是基於範圍分割槽和列表分割槽,表首先按某列進行範圍分割槽,然後再按某列進行列表分割槽,分割槽之中的分割槽被稱為子分割槽。

示例1:

Create table sales

(

Product_id varchar2(5),

Sales_date date,

Sales_cost number(10),

Status varchar2(20)

)

Partition by range(Sales_cost)

Subpartition by list(status)

(

Partition p1 values less than (1tablespace dinya_space01

(

Subpartition p1sub1 values('ACTIVE'tablespace   dinya_space03,

Subpartition p1sub2 values('INACTIVE'tablespace dinya_space04

),

Partition p2 values less than (3

相關推薦

oracle 分割槽不同空間

  查詢分割槽:Select *From user_extents WHERE partition_name='分割槽名'; 1)建立表空間 create tablespace HRPM0 datafile '/oradata/misdb/HRPM0.DBF' size 5m autoextend

oracle的dmp匯入到不同空間 oracle的dmp檔案匯入到不同空間 oracle將dmp檔案匯入到不同空間方法: 1、exp USER/
Oracle導出導指定

pri 備份 tail () erro scrip 數據導出 key ret 從源數據庫導出: exp user1/pwd@server1 file=c:\temp\exp.dmp tables=(table1, table2) 導入到目標數據庫:

如何將儲存過程執行後的結果集臨時

如果能夠得到儲存過程結果集的表結構insert into #tmp exec sp_who 否則select * into #tmp from OPENROWSET('SQLOLEDB','SERVER=server;uid=sa;pwd=sapwd;Database=mas

Oracle小技巧_不同空間不同用戶導導出數據dmp

16px 這就是 直接 改變 索引 什麽 rom oracle數據庫 添加 【博主註:數據庫方面 ITPUB網站及博客內容非常豐富翔實】 轉載來源 ITPUB 博客經常有人會問:原來的數據在USERS表空間裏面,我想把它IMP進APP表空間,我已經修改了目的

exp-imp實現oracle不同空間的遷移

 --1 在遷徙目標機上新建 create tablespace tzsb datafile 'I:\app\Administrator\oradata\orcl\tzsb01.dbf' size 500m create user wgm_tzsb identified

mybatis oracle不同空間名重複與批量刪除,新增

mybatis自動生成中會遇到oracle不同表空間中有相同的表明,錯誤提示讓你選擇指定表空間 需要在生成的xml中新增指定的表空間使用者名稱就可以了 <!--   tableName="你要生成的資料庫表名" --><table schema="c##t

Oracle不同空間之間的資料遷移

--將資料庫為testdb,使用者名稱為testuser中預設(users)表空間裡的資料遷移至表空間(newtablespace) --1.用system使用者登陸testdb資料庫,建立directory(testdir)並將讀、寫許可權授予testuser使用者

ORA-14404:分割槽包含不同空間中的分割槽

Drop tablespace 有下面兩種方式: drop tablespace crm_data including contents and datafiles; drop tablespace crm_data including contents cascade c

Oracle 不同空間資料查詢

Oracle資料庫是通過表空間來儲存物理表的,一個數據庫例項可以有N個表空間,一個表空間下可以有N張表。 現在有資料庫例項DB,DB下面有兩個表空間schema1(使用者1可以訪問)和schema2(使用者2可以訪問),schema1下面有表member,如何

ora—14404分割槽包含不同空間分割槽

群:1278813061.查詢分割槽表select table_name from user_tables where partitioned='YES'; 2.檢視你的分割槽表的定義set long 1000select dbms_metadata.get_ddl('TAB

用Toad for Oracle創建數據庫空間和用戶

創建數據庫 ssi 密碼 ble src base ace 創建用戶 pac 打開Toad, 1,菜單欄Session—>new Connection….打開如下窗口: 2,進入之後,菜單DatebaseàSechema Brower。。。找到Table Spa

access數據庫oracle

win 數據源 點擊 db文件 本機 右鍵 導入 window 數據庫表 1、本機安裝access數據庫 25M左右2、創建ODBC數據源,要選擇oracle C:\Windows\SysWOW64\odbcad32.exe 3、打開要導入的 .mdb文件 右

oracle創建用戶、空間、臨時空間、分配權限步驟詳解

分配權限 use 表數據 依次 log auto create 過程 limit 首先登陸管理員賬號,或者有DBA權限的用戶,接下來依次: --查詢所有用戶select * from dba_users;--創建新用戶create user gpmgt identified

Oracle中怎麽查看空間的文件路徑

linux oracle 表空間位置 select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;select * from dba_data_files;Oracle中怎麽查看表空間的文件路徑

【算法與數據結構實戰】線性操作-實現A並B,結果A中

!= 實現 push 集合 div 中間 for iter 和數 //數據結構與算法基礎題1:線性表操作,實現A並B,結果放入A中 #include "stdafx.h" #include <iostream> #include <string>

oracle 數據庫管理--管理空間和數據文件

臨時表 dad varchar2 pac sele write into max 讀寫 一、概念表空間是數據庫的邏輯組成部分。從物理上講,數據庫數據存放在數據文件中;從邏輯上講,數據庫數據則是存放在表空間中,表空間由一個或多個數據文件組成。 二、數

Oracle數據庫基本操作——空間管理

mage acl 刪除 建數據庫 contents dff 分享 至少 ext 簡介:ORACLE物理上是由磁盤上的以下幾種文件:數據文件和控制文件和LOGFILE構成的表空間就只談相關的數據文件首先明確概念:表空間是ORACLE內部定義的一個概念,是為了統一ORACLE物

Oracle角色,權限,空間基礎語句

分享圖片 customer toe png 包含 source val 角色 oracle角色 控制臺: -sqlplus -----連接數據庫 -conn sys/123456@orcl as sysdba -----登錄sys -creat