Oracle的分割槽管理

tonywi888發表於2007-03-30
一、 分割槽概述:

為了簡化資料庫大表的管理,ORACLE8推出了分割槽選項。分割槽將表分離在若干不同的表空間上,用分而治之的方法來支撐無限膨脹的大表,給大表在物理一級的可管理性。將大表分割成較小的分割槽可以改善表的維護、備份、恢復、事務及查詢效能。針對當前社保及電信行業的大量日常業務資料,可以推薦使用ORACLE8的該選項。

二、分割槽的優點:

1 、增強可用性:如果表的一個分割槽由於系統故障而不能使用,表的其餘好的分割槽仍然可以使用;

2 、減少關閉時間:如果系統故障隻影響表的一部分分割槽,那麼只有這部分分割槽需要修復,故能比整個大表修復花的時間更少;

3 、維護輕鬆:如果需要重建表,獨立管理每個分割槽比管理單個大表要輕鬆得多;

4 、均衡I/O:可以把表的不同分割槽分配到不同的磁碟來平衡I/O改善效能;

5 、改善效能:對大表的查詢、增加、修改等操作可以分解到表的不同分割槽來並行執行,可使執行速度更快;

6 、分割槽對使用者透明,終端使用者感覺不到分割槽的存在。

三、分割槽的管理:

1 、分割槽表的建立:

某公司的每年產生巨大的銷售記錄,DBA向公司建議每季度的資料放在一個分割槽內,以下示範的是該公司1999年的資料(假設每月產生30M的資料),操作如下:
STEP1、建立表的各個分割槽的表空間:
CREATE TABLESPACE ts_sale1999q1
DATAFILE ‘/u1/oradata/sales/sales1999_q1.dat’
SIZE 100M
DEFAULT STORAGE (INITIAL 30m NEXT 30m MINEXTENTS 3 PCTINCREASE 0)
CREATE TABLESPACE ts_sale1999q2
DATAFILE ‘/u1/oradata/sales/sales1999_q2.dat’
SIZE 100M
DEFAULT STORAGE (INITIAL 30m NEXT 30m MINEXTENTS 3 PCTINCREASE 0)
CREATE TABLESPACE ts_sale1999q3
DATAFILE ‘/u1/oradata/sales/sales1999_q3.dat’
SIZE 100M
DEFAULT STORAGE (INITIAL 30m NEXT 30m MINEXTENTS 3 PCTINCREASE 0)
CREATE TABLESPACE ts_sale1999q4
DATAFILE ‘/u1/oradata/sales/sales1999_q4.dat’
SIZE 100M
DEFAULT STORAGE (INITIAL 30m NEXT 30m MINEXTENTS 3 PCTINCREASE 0)
STEP2、建立基於分割槽的表:
CREATE TABLE sales
(invoice_no NUMBER,
...
sale_date DATE NOT NULL )
PARTITION BY RANGE (sale_date)
(PARTITION sales1999_q1
VALUES LESS THAN (TO_DATE(‘1999-04-01’,’YYYY-MM-DD’)
TABLESPACE ts_sale1999q1,
PARTITION sales1999_q2
VALUES LESS THAN (TO_DATE(‘1999-07-01’,’YYYY-MM-DD’)
TABLESPACE ts_sale1999q2,
PARTITION sales1999_q3
VALUES LESS THAN (TO_DATE(‘1999-10-01’,’YYYY-MM-DD’)
TABLESPACE ts_sale1999q3,
PARTITION sales1999_q4
VALUES LESS THAN (TO_DATE(‘2000-01-01’,’YYYY-MM-DD’)
TABLESPACE ts_sale1999q4 );

2 、分割槽表的擴容:

到了1999年年底,DBA應向表中加入2000年的表空間,同樣是每季度一個表空間,由於公司業務欣欣向榮,預計每個分割槽為40M,操作如下。
STEP1、建立表空間:
CREATE TABLESPACE ts_sale2000q1
DATAFILE ‘/u1/oradata/sales/sales2000_q1.dat’
SIZE 130M
DEFAULT STORAGE (INITIAL 40m NEXT 40m MINEXTENTS 3 PCTINCREASE 0)
其他表空間ts_sale2000q2,ts_sale2000q3,ts_sales2000q4如法炮製。
STEP2、為表新增表空間:
ALTER TABLE sales
ADD PARTITION sales2000_q1
VALUES LESS THAN (TO_DATE(‘2000-04-01’,’YYYY-MM-DD’)
TABLESPACE ts_sale2000q1;
其他分割槽sales2000_q1,sales2000_q1,sales2000_q1如法炮製。

3 、刪除不必要的分割槽:

公司規定:銷售的明細資料兩年內必須儲存線上。到2001年,DBA必須將1999年的資料備份(備份方法見5、EXPORT分割槽),將1999年的分割槽刪除,將空間供後來的資料使用。如此迴圈,永遠保持兩年的銷售資料線上。
STEP1、DROP 分割槽:
ALTER TABLE sales
DROP PARTION sales1999_q1;
ALTER TABLE sales
DROP PARTION sales1999_q2;
ALTER TABLE sales
DROP PARTION sales1999_q3;
ALTER TABLE sales
DROP PARTION sales1999_q4;
STEP2、利用作業系統的工具刪除以上表空間佔用的檔案
     (表空間基於裸裝置無須次步),UNIX系統為例:
oracle$ rm /u1/oradata/sales/sales1999_q1.dat
oracle$ rm /u1/oradata/sales/sales1999_q2.dat
oracle$ rm /u1/oradata/sales/sales1999_q3.dat
oracle$ rm /u1/oradata/sales/sales1999_q4.dat
4 、分割槽的其他操作:

分割槽的其他操作包括截短分割槽(truncate),將存在的分割槽劃分為多個分割槽(split),交換分割槽(exchange),重新命名(rename),為分割槽建立索引等。DBA可以根據適當的情況使用。以下僅說明分裂分割槽(split),例如該公司1999年第四季度銷售明細資料急劇增加(因為慶國慶、迎千禧、賀迴歸),DBA向公司建議將第四季度的分割槽劃分為兩個分割槽,每個分割槽放兩個月份的資料,操作如下:
STEP1、按(1)的方法建立兩個分割槽的表空間ts_sales1999q4p1,
ts_sales1999q4p2;
STEP2、給表新增兩個分割槽sales1999_q4_p1,sales1999_q4_p2;
STEP3、分裂分割槽:
ALTER TABLE sales
SPLIT PARTITON sales1999_q4
AT TO_DATE (‘1999-11-01’,’YYYY-MM-DD’)
INTO (partition sales1999_q4_p1, partition sales1999_q4_p2)

5 、檢視分割槽資訊:
DBA要檢視錶的分割槽資訊,可檢視資料字典USER_EXTENTS,操作如下:
SVRMGRL>SELECT * FROM user_extents WHERE SEGMENT_NAME=’SALES’;
SEGMENT_NA PARTITION_ SEGMENT_TYPE TABLESPACE
---------- ------------ --------------- --------------
SALES SALES1999_Q1 TABLE PARTITION TS_SALES1999Q1
SALES SALES1999_Q2 TABLE PARTITION TS_SALES1999Q2
SALES SALES1999_Q3 TABLE PARTITION TS_SALES1999Q3
SALES SALES1999_Q4 TABLE PARTITION TS_SALES1999Q4
SALES SALES2000_Q1 TABLE PARTITION TS_SALES1999Q1
SALES SALES2000_Q2 TABLE PARTITION TS_SALES1999Q2
SALES SALES2000_Q3 TABLE PARTITION TS_SALES1999Q3
SALES SALES2000_Q4 TABLE PARTITION TS_SALES1999Q4

5 、EXPORT分割槽:

ORACLE8的EXPORT 工具可在表的分割槽以及匯出資料,例如到2001年,DBA必須將1999年的資料按分割槽匯出,操作如下:
oracle$ exp sales/sales_password tables=sales:sales1999_q1 rows=Y
file=sales1999_q1.dmp
oracle$ exp sales/sales_password tables=sales:sales1999_q2 rows=Y
file=sales1999_q2.dmp
oracle$ exp sales/sales_password tables=sales:sales1999_q3 rows=Y
file=sales1999_q3.dmp
oracle$ exp sales/sales_password tables=sales:sales1999_q4 rows=Y
file=sales1999_q4.dmp
6 、IMPORT分割槽:

ORACLE8的IMPORT 工具可在表的分割槽以及匯入資料,例如在2001年,使用者要檢視1999年的資料,DBA必須匯入1999年的資料,使之線上,操作如下:
STEP1、建立表的1999年的四個表空間和相應的分割槽,參照(2);
STEP2、匯入資料:
oracle$ imp sales/sales_password FILE =sales1999_q1.dmp
TABLES = (sales:sales1999_q1) IGNORE=y
oracle$ imp sales/sales_password FILE =sales1999_q2.dmp
TABLES = (sales:sales1999_q2) IGNORE=y
oracle$ imp sales/sales_password FILE =sales1999_q3.dmp
TABLES = (sales:sales1999_q3) IGNORE=y
oracle$ imp sales/sales_password FILE =sales1999_q4.dmp
TABLES = (sales:sales1999_q4) IGNORE=y
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-907590/,如需轉載,請註明出處,否則將追究法律責任。

相關文章