一、 概念:
為強化資料庫大表格的管理,ORACLE推出了partition talbe。partition將表分離在若干不同的表空間上,用限制每個partition的空間,不只達到空間管理也增進了效能。更方便維護、備份、恢復、事務及查詢性能。
二、優點:
1 、增強可用性:如果表的一個 partition 由於系統故障而不能使用,表的其餘好的 partition 仍然可以使用, 減少系統故障只影響表的一部分 partition
2 、維護輕鬆:如果需要重建表,獨立管理每個 partition 比管理單個 table 要輕鬆得多
3 、均衡I/O:可以把 table 的不同 partition 分配到不同的磁片來平衡I/O改善性能
4 、改善性能:對大 table 的查詢、增加、修改等操作可以分解到各 partition 來平行執行,可使運行速度更快
5 、 partition 對用戶透明,最終用戶感覺不到 partition 的存在。
三、Partition Management:
1 、Create partition:
以老爺公司為例, 有個 table 每個月要增加的資料約 200G, 沒有誇張, 而且者已經是有做過分區儲存在不同的 Oracle Instance 了, 如果整個公司只有一台 Oracle 那更是倍增.
STEP1、Create tablestapce and assign data file location:
--假設我以一個時間欄位當作切割, 且每個月用 2 個 tablespace/partition, 每個 tablespace 內含 2 個 datafile 儲存資料.(實際更多, 只為了範例說明方便)
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_01_1
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_01_1_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_01_1_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_01_2
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_01_2_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_01_2_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
STEP2、建立基於分區的表:
CREATE TABLE phone_log
(no VARCHAR2(20) NOT NULLl,
communicate_date DATE NOT NULL
)
PARTITION BY RANGE (communicate_date)
(
PARTITION phone_log_2010_01_1 VALUES LESS THAN (TO_DATE(' 2010-01-16 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_01_1,
PARTITION phone_log_2010_01_2 VALUES LESS THAN (TO_DATE(' 2010-02-01 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_01_2
);
對於有 partition 的 table 可以指定要查詢的 partition
select * from phone_log
select * from phone_log partition (phone_log_2010_01_1);
2 、Partition Extension :
STEP1、Create tablespace:
--假設原本只有建立 2010/01 的 partition, 現在要增加 2010/02 的 partition.
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_02_1
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_02_1_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_02_1_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_02_2
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_02_2_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_02_2_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
STEP2、Add partition to table:
ALTER TABLE phone_log
ADD PARTITION phone_log_2010_02_1 VALUES LESS THAN (TO_DATE(' 2010-02-16 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_02_1;
ADD PARTITION phone_log_2010_02_2 VALUES LESS THAN (TO_DATE(' 2010-02-16 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_02_2;
3 、Drop partition:
--對於不要的資料或超出保存期限的資料, 可用刪除 partition 刪除的方式處理.
STEP1、Drop partition:
ALTER TABLE phone_log DROP PARTITION phone_log_2010_01_1;
SETP2、Drop tablespace
drop tablespace TBS_PHONE_LOG_DAT_2010_01_1 including contents and datafiles;
--刪除 tablespace 時可以同時刪除 datafile, 但有些 oracle 版本有 bug, 會無法刪除 datafile.
STEP3、rm data file
--UNIX系統為例:
rm /data_1/tbs_phone_log_dat_2010_01_1_1.dbf
rm /data_2/tbs_phone_log_dat_2010_01_1_2.dbf
為強化資料庫大表格的管理,ORACLE推出了partition talbe。partition將表分離在若干不同的表空間上,用限制每個partition的空間,不只達到空間管理也增進了效能。更方便維護、備份、恢復、事務及查詢性能。
二、優點:
1 、增強可用性:如果表的一個 partition 由於系統故障而不能使用,表的其餘好的 partition 仍然可以使用, 減少系統故障只影響表的一部分 partition
2 、維護輕鬆:如果需要重建表,獨立管理每個 partition 比管理單個 table 要輕鬆得多
3 、均衡I/O:可以把 table 的不同 partition 分配到不同的磁片來平衡I/O改善性能
4 、改善性能:對大 table 的查詢、增加、修改等操作可以分解到各 partition 來平行執行,可使運行速度更快
5 、 partition 對用戶透明,最終用戶感覺不到 partition 的存在。
三、Partition Management:
1 、Create partition:
以老爺公司為例, 有個 table 每個月要增加的資料約 200G, 沒有誇張, 而且者已經是有做過分區儲存在不同的 Oracle Instance 了, 如果整個公司只有一台 Oracle 那更是倍增.
STEP1、Create tablestapce and assign data file location:
--假設我以一個時間欄位當作切割, 且每個月用 2 個 tablespace/partition, 每個 tablespace 內含 2 個 datafile 儲存資料.(實際更多, 只為了範例說明方便)
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_01_1
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_01_1_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_01_1_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_01_2
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_01_2_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_01_2_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
STEP2、建立基於分區的表:
CREATE TABLE phone_log
(no VARCHAR2(20) NOT NULLl,
communicate_date DATE NOT NULL
)
PARTITION BY RANGE (communicate_date)
(
PARTITION phone_log_2010_01_1 VALUES LESS THAN (TO_DATE(' 2010-01-16 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_01_1,
PARTITION phone_log_2010_01_2 VALUES LESS THAN (TO_DATE(' 2010-02-01 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_01_2
);
對於有 partition 的 table 可以指定要查詢的 partition
select * from phone_log
select * from phone_log partition (phone_log_2010_01_1);
2 、Partition Extension :
STEP1、Create tablespace:
--假設原本只有建立 2010/01 的 partition, 現在要增加 2010/02 的 partition.
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_02_1
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_02_1_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_02_1_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
CREATE TABLESPACE TBS_PHONE_LOG_DAT_2010_02_2
LOGGING DATAFILE
'/data_1/tbs_phone_log_dat_2010_02_2_1.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
'/data_2/tbs_phone_log_dat_2010_02_2_2.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30000M,
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2048K SEGMENT SPACE MANAGEMENT AUTO ;
STEP2、Add partition to table:
ALTER TABLE phone_log
ADD PARTITION phone_log_2010_02_1 VALUES LESS THAN (TO_DATE(' 2010-02-16 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_02_1;
ADD PARTITION phone_log_2010_02_2 VALUES LESS THAN (TO_DATE(' 2010-02-16 ','YYYY-MM-DD')) TABLESPACE TBS_PHONE_LOG_DAT_2010_02_2;
3 、Drop partition:
--對於不要的資料或超出保存期限的資料, 可用刪除 partition 刪除的方式處理.
STEP1、Drop partition:
ALTER TABLE phone_log DROP PARTITION phone_log_2010_01_1;
SETP2、Drop tablespace
drop tablespace TBS_PHONE_LOG_DAT_2010_01_1 including contents and datafiles;
--刪除 tablespace 時可以同時刪除 datafile, 但有些 oracle 版本有 bug, 會無法刪除 datafile.
STEP3、rm data file
--UNIX系統為例:
rm /data_1/tbs_phone_log_dat_2010_01_1_1.dbf
rm /data_2/tbs_phone_log_dat_2010_01_1_2.dbf
全站熱搜