|
分區(qū)寫法: 幾大點: 1.分區(qū)表 2.分區(qū)的區(qū)exp和imp 3.自動給分區(qū)表添加索引 自動分配表空間 http://space./17203031/viewspace-706173 alter table table_name drop partition partition_name; interval分區(qū) 實驗環(huán)境: SQL> create tablespace part datafile '/u01/app/oradata/hou/part01.dbf' size 10M autoextend on next 10M maxsize 31G; SQL> create user part identified by "part" default tablespace part; SQL> grant connect,resource to part; INTERVAL PARTITION 一、interval partition 11g之前,分區(qū)必須是手工或者存儲過程預(yù)分配新分區(qū)。 interval 分區(qū)是oracle 11g引入的新技術(shù),無需DBA預(yù)分配新分區(qū),插入數(shù)據(jù)時系統(tǒng)會根據(jù)range列和已分配的分區(qū)自動判斷新數(shù)據(jù)是否可以插入到已存在的分區(qū)中,如果不能滿足插入已存在的分區(qū),系統(tǒng)自動分配一個新分區(qū)來存放新插入的數(shù)據(jù)。 interal 分區(qū)減少了dba對分區(qū)的操作,保證了分區(qū)的準(zhǔn)確安全性。 月自動創(chuàng)建分區(qū) 1.建表 create table month_part (c1 number,c3 date) partition by range(c3) interval(numtoyminterval (1,'month')) (partition part1 values less than (to_date('2010-01-01','YYYY-MM-DD')), partition part2 values less than (to_date('2010-02-01','YYYY-MM-DD')) ); 2.查看現(xiàn)在表的分區(qū) SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='MONTH_PART'; TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ MONTH_PART PART1 PART MONTH_PART PART2 PART 3.插入數(shù)據(jù)測試 begin for i in 0..11 loop insert into MONTH_PART values(i,add_months(to_date('2012-01-01','yyyy-mm-dd'),i)); end loop; commit; end; / 4.看看數(shù)據(jù)
SQL> alter session set nls_date_format='yyyy-mm-dd';Session altered. SQL> select * from MONTH_PART; C1 C3 ---------- ---------- 0 2012-01-01 1 2012-02-01 2 2012-03-01 3 2012-04-01 4 2012-05-01 5 2012-06-01 6 2012-07-01 7 2012-08-01 8 2012-09-01 9 2012-10-01 10 2012-11-01 11 2012-12-01 12 rows selected. 5.看是否自己創(chuàng)建分區(qū) SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='MONTH_PART'; TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ MONTH_PART PART1 PART MONTH_PART PART2 PART MONTH_PART SYS_P11599 PART MONTH_PART SYS_P11600 PART MONTH_PART SYS_P11601 PART MONTH_PART SYS_P11602 PART MONTH_PART SYS_P11603 PART MONTH_PART SYS_P11604 PART MONTH_PART SYS_P11605 PART MONTH_PART SYS_P11606 PART MONTH_PART SYS_P11607 PART MONTH_PART SYS_P11608 PART MONTH_PART SYS_P11609 PART MONTH_PART SYS_P11610 PART 14 rows selected. 14個分區(qū)=創(chuàng)建表時定義的2個分區(qū)+插入12條數(shù)據(jù)自動產(chǎn)生的分區(qū)。 查看單個分區(qū)中的數(shù)據(jù) SQL> select * from MONTH_PART partition(SYS_P11606); C1 C3 ---------- ---------- 7 2012-08-01 二、interval partition+store in 分區(qū)表的創(chuàng)建目的,除了進行分區(qū)內(nèi)局部掃描、便于管理外,還可以通過將分區(qū)存放在不同的表空間做到平衡分散IO的目的。所以,對分區(qū)的表空間規(guī)劃,通常是DBA日常決策的一個重要內(nèi)容。 interval partition中,分區(qū)的創(chuàng)建是由系統(tǒng)自動生成,這就存在一個問題:如何規(guī)劃分區(qū)的存儲,也就是系統(tǒng)自動分配的分區(qū)存放在哪些tablespace? 如果在store in后面標(biāo)注上tablespaces的列表,那么新創(chuàng)建出的分區(qū)就會依次循環(huán)的均勻存放在各個分區(qū)上。 格式如下: create table xx(c1,c2) partition by range(c2) interval(numtoyminterval (1,'month')) store in(tablespace1,tablespace2,....,tablespacen) (partition xx......, partition xx...... ) 實驗環(huán)境準(zhǔn)備: 添加表空間p1,p2 SQL> create tablespace p1 datafile '/u01/app/oradata/hou/p1.dbf' size 10M autoextend on next 10M maxsize 31G; SQL> create tablespace p2 datafile '/u01/app/oradata/hou/p2.dbf' size 10M autoextend on next 10M maxsize 31G; 賦予part用戶在p1和p2表空間的磁盤配額 alter user part quota unlimited on p1; alter user part quota unlimited on p2; 1.創(chuàng)建分區(qū)表 create table interval_partition(c1 number,c3 date) partition by range(c3) interval(numtoyminterval (1,'month')) store in(p1,p2) (partition part2010_01 values less than (to_date('2010-02-01','yyyy-mm-dd')), partition part2010_02 values less than (to_date('2010-03-01','yyyy-mm-dd')) ); 2.查看現(xiàn)在表的分區(qū)
SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='INTERVAL_PARTITION';TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ INTERVAL_PARTITION PART2010_01 PART INTERVAL_PARTITION PART2010_02 PART 3.插入數(shù)據(jù)測試 begin for i in 0..11 loop insert into INTERVAL_PARTITION values(i,add_months(to_date('2010-01-01','yyyy-mm-dd'),i)); end loop; commit; end; / 4.看看數(shù)據(jù)
SQL> alter session set nls_date_format='yyyy-mm-dd';Session altered. SQL> select * from INTERVAL_PARTITION; C1 C3 ---------- ---------- 0 2010-01-01 1 2010-02-01 2 2010-03-01 3 2010-04-01 4 2010-05-01 5 2010-06-01 6 2010-07-01 7 2010-08-01 8 2010-09-01 9 2010-10-01 10 2010-11-01 11 2010-12-01 12 rows selected. 5.看是否自己創(chuàng)建分區(qū) SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='INTERVAL_PARTITION'; SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='INTERVAL_PARTITION' order by PARTITION_NAME; TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ INTERVAL_PARTITION PART2010_01 PART INTERVAL_PARTITION PART2010_02 PART INTERVAL_PARTITION SYS_P11642 P1 INTERVAL_PARTITION SYS_P11643 P2 INTERVAL_PARTITION SYS_P11644 P1 INTERVAL_PARTITION SYS_P11645 P2 INTERVAL_PARTITION SYS_P11646 P1 INTERVAL_PARTITION SYS_P11647 P2 INTERVAL_PARTITION SYS_P11648 P1 INTERVAL_PARTITION SYS_P11649 P2 INTERVAL_PARTITION SYS_P11650 P1 INTERVAL_PARTITION SYS_P11651 P2 12 rows selected. 系統(tǒng)自動分配的分區(qū)循環(huán)交替地存放在P1和P2表空間上,各為5個,這樣就做到了I/O均衡。 當(dāng)如可以看的更清楚 SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME from user_tab_partitions where TABLE_NAME='INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION TABLESPACE_NAME -------------------- --------------- -------------------------------------------------------------------------------- ------------------ --------------- INTERVAL_PARTITION PART2010_01 TO_DATE(' 2010-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 1 PART INTERVAL_PARTITION PART2010_02 TO_DATE(' 2010-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 2 PART INTERVAL_PARTITION SYS_P11642 TO_DATE(' 2010-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 3 P1 INTERVAL_PARTITION SYS_P11643 TO_DATE(' 2010-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 4 P2 INTERVAL_PARTITION SYS_P11644 TO_DATE(' 2010-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 5 P1 INTERVAL_PARTITION SYS_P11645 TO_DATE(' 2010-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 6 P2 INTERVAL_PARTITION SYS_P11646 TO_DATE(' 2010-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 7 P1 INTERVAL_PARTITION SYS_P11647 TO_DATE(' 2010-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 8 P2 INTERVAL_PARTITION SYS_P11648 TO_DATE(' 2010-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 9 P1 INTERVAL_PARTITION SYS_P11649 TO_DATE(' 2010-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 10 P2 INTERVAL_PARTITION SYS_P11650 TO_DATE(' 2010-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 11 P1 INTERVAL_PARTITION SYS_P11651 TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 12 P2 6.查看數(shù)據(jù)分布 數(shù)據(jù)根據(jù)月份正確的插入到了各個分區(qū)中 SQL> select * from INTERVAL_PARTITION partition(PART2010_01); C1 C3 ---------- ---------- 0 2010-01-01 SQL> select * from INTERVAL_PARTITION partition(PART2010_02); C1 C3 ---------- ---------- 1 2010-02-01 SQL> select * from INTERVAL_PARTITION partition(SYS_P11642); C1 C3 ---------- ---------- 2 2010-03-01 SQL> select * from INTERVAL_PARTITION partition(SYS_P11643); C1 C3 ---------- ---------- 3 2010-04-01 SQL> select * from INTERVAL_PARTITION partition(SYS_P11644); C1 C3 ---------- ---------- 4 2010-05-01 . . . SQL> select * from INTERVAL_PARTITION partition(SYS_P11651); C1 C3 ---------- ---------- 11 2010-12-01 ------------------------------------------------------------ 測試每月給interval 分區(qū)添加一個表空間 實驗?zāi)康模好總€月第一天0時新增加一個表空間X,系統(tǒng)自動分配新分區(qū),然后將新分區(qū)存放到新增表空間X中,從而實現(xiàn)每個月的數(shù)據(jù)都存放到獨立的表空間中。 給分區(qū)表INTERVAL_PARTITION添加一個新表空間P3 SQL> create tablespace p3 datafile '/u01/app/oradata/hou/p3.dbf' size 10M autoextend on next 10M maxsize 31G; SQL> alter user part quota unlimited on p3; 為分區(qū)表 INTERVAL_PARTITION添加新的表空間 SQL> conn part/part SQL> alter table INTERVAL_PARTITION set store in (p1,p2,p3); 參考: http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm#i2087440 http://www./t_interval_partitioning.htm 查看表的元數(shù)據(jù) 從元數(shù)據(jù)中看不到p3。 插入數(shù)據(jù)看看 begin for i in 0..11 loop insert into INTERVAL_PARTITION values(i,add_months(to_date('2011-02-01','yyyy-mm-dd'),i)); end loop; commit; end; / 收集統(tǒng)計信息: exec dbms_stats.gather_table_stats(user,'INTERVAL_PARTITION',cascade=>true); 查詢分區(qū)表具體信息 SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS from user_tab_partitions where TABLE_NAME='INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION TABLESPACE_NAME NUM_ROWS ---------------------------- ---------------------- ---------------------------------------------------------------------------------------------------------------------------- ------------------ --------------- ---------- INTERVAL_PARTITION PART2010_01 TO_DATE(' 2010-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 1 PART 1 INTERVAL_PARTITION PART2010_02 TO_DATE(' 2010-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 2 PART 1 INTERVAL_PARTITION SYS_P11642 TO_DATE(' 2010-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 3 P1 1 INTERVAL_PARTITION SYS_P11643 TO_DATE(' 2010-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 4 P2 1 INTERVAL_PARTITION SYS_P11644 TO_DATE(' 2010-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 5 P1 1 INTERVAL_PARTITION SYS_P11645 TO_DATE(' 2010-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 6 P2 1 INTERVAL_PARTITION SYS_P11646 TO_DATE(' 2010-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 7 P1 1 INTERVAL_PARTITION SYS_P11647 TO_DATE(' 2010-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 8 P2 1 INTERVAL_PARTITION SYS_P11648 TO_DATE(' 2010-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 9 P1 1 INTERVAL_PARTITION SYS_P11649 TO_DATE(' 2010-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 10 P2 1 INTERVAL_PARTITION SYS_P11650 TO_DATE(' 2010-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 11 P1 1 INTERVAL_PARTITION SYS_P11651 TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 12 P2 1 INTERVAL_PARTITION SYS_P11652 TO_DATE(' 2011-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 13 P1 1 INTERVAL_PARTITION SYS_P11653 TO_DATE(' 2011-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 14 P2 1 INTERVAL_PARTITION SYS_P11654 TO_DATE(' 2011-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 15 P3 1 INTERVAL_PARTITION SYS_P11655 TO_DATE(' 2011-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 16 P1 1 INTERVAL_PARTITION SYS_P11656 TO_DATE(' 2011-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 17 P2 1 INTERVAL_PARTITION SYS_P11657 TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 18 P3 1 INTERVAL_PARTITION SYS_P11658 TO_DATE(' 2011-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 19 P1 1 INTERVAL_PARTITION SYS_P11659 TO_DATE(' 2011-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 20 P2 1 INTERVAL_PARTITION SYS_P11660 TO_DATE(' 2011-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 21 P3 1 INTERVAL_PARTITION SYS_P11661 TO_DATE(' 2011-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 22 P1 1 INTERVAL_PARTITION SYS_P11662 TO_DATE(' 2011-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 23 P2 1 INTERVAL_PARTITION SYS_P11663 TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 24 P3 1 INTERVAL_PARTITION SYS_P11664 TO_DATE(' 2012-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 25 P1 上面綠色部分是插入數(shù)據(jù)產(chǎn)生的新分區(qū)。插入新時間段的數(shù)據(jù),系統(tǒng)自動產(chǎn)生分區(qū),用循環(huán)方式將新分區(qū)存放到P1 P2 P3分區(qū)中。 *做這個實驗的本意是:每個月第一天0時新增加一個表空間X,系統(tǒng)自動分配新分區(qū),然后將新分區(qū)存放到新增表空間X中,從而實現(xiàn)每個月的數(shù)據(jù)都存放到獨立的表空間中。 通過實驗,看來我的想法無法實現(xiàn),oracle并不是發(fā)現(xiàn)新增表空間后,就把新增的分區(qū)存放到新的表空間,而是依然采用循環(huán)方式將新分區(qū)放到表空間中。 有個擔(dān)憂:假如分區(qū)表INTERVAL_PARTITION可以將分區(qū)存放到P1 P2兩個表空間,且這個分區(qū)表已經(jīng)使用很久,P1 P2中存放著大量分區(qū)(也就是大量數(shù)據(jù)),這個時候P1 P2的分區(qū)數(shù)應(yīng)該是均衡的,如果加入P3表空間,oracle采用什么方法實現(xiàn)P1 P2 P3的數(shù)據(jù)均衡呢? 開始實驗: 1.摘除P3表空 SQL> alter table INTERVAL_PARTITION set store in(p1,p2); Table altered. 但是查看INTERVAL_PARTITION的分區(qū)情況,發(fā)現(xiàn)存放到P3表空間的分區(qū)依然存在??! SQL> SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS from user_tab_partitions where TABLE_NAME='INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION TABLESPACE_NAME NUM_ROWS -------------------- --------------- -------------------------------------------------------------------------------- ------------------ --------------- ---------- INTERVAL_PARTITION PART2010_01 TO_DATE(' 2010-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 1 PART 1 INTERVAL_PARTITION PART2010_02 TO_DATE(' 2010-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 2 PART 1 INTERVAL_PARTITION SYS_P11642 TO_DATE(' 2010-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 3 P1 1 INTERVAL_PARTITION SYS_P11643 TO_DATE(' 2010-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 4 P2 1 INTERVAL_PARTITION SYS_P11644 TO_DATE(' 2010-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 5 P1 1 INTERVAL_PARTITION SYS_P11645 TO_DATE(' 2010-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 6 P2 1 INTERVAL_PARTITION SYS_P11646 TO_DATE(' 2010-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 7 P1 1 INTERVAL_PARTITION SYS_P11647 TO_DATE(' 2010-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 8 P2 1 INTERVAL_PARTITION SYS_P11648 TO_DATE(' 2010-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 9 P1 1 INTERVAL_PARTITION SYS_P11649 TO_DATE(' 2010-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 10 P2 1 INTERVAL_PARTITION SYS_P11650 TO_DATE(' 2010-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 11 P1 1 INTERVAL_PARTITION SYS_P11651 TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 12 P2 1 INTERVAL_PARTITION SYS_P11652 TO_DATE(' 2011-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 13 P1 1 INTERVAL_PARTITION SYS_P11653 TO_DATE(' 2011-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 14 P2 1 INTERVAL_PARTITION SYS_P11654 TO_DATE(' 2011-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 15 P3 1 INTERVAL_PARTITION SYS_P11655 TO_DATE(' 2011-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 16 P1 1 INTERVAL_PARTITION SYS_P11656 TO_DATE(' 2011-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 17 P2 1 INTERVAL_PARTITION SYS_P11657 TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 18 P3 1 INTERVAL_PARTITION SYS_P11658 TO_DATE(' 2011-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 19 P1 1 INTERVAL_PARTITION SYS_P11659 TO_DATE(' 2011-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 20 P2 1 INTERVAL_PARTITION SYS_P11660 TO_DATE(' 2011-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 21 P3 1 INTERVAL_PARTITION SYS_P11661 TO_DATE(' 2011-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 22 P1 1 INTERVAL_PARTITION SYS_P11662 TO_DATE(' 2011-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 23 P2 1 INTERVAL_PARTITION SYS_P11663 TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 24 P3 1 INTERVAL_PARTITION SYS_P11664 TO_DATE(' 2012-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 25 P1 1 看存放在P3的分區(qū)是否有數(shù)據(jù),里面還有數(shù)據(jù),我剛才摘除P3空間的操作沒有生效嗎? SQL> select * from INTERVAL_PARTITION partition(SYS_P11663); C1 C3 ---------- ------------ 10 01-DEC-11 SQL> select * from INTERVAL_PARTITION partition(SYS_P11660); C1 C3 ---------- ------------ 7 01-SEP-11 SQL> select * from INTERVAL_PARTITION partition(SYS_P11657); C1 C3 ---------- ------------ 4 01-JUN-11 SQL> select * from INTERVAL_PARTITION partition(SYS_P11654); C1 C3 ---------- ------------ 1 01-MAR-11 2.插入新數(shù)據(jù),看看新分區(qū)是否還存放在P3表空間 begin for i in 0..11 loop insert into INTERVAL_PARTITION values(i,add_months(to_date('2012-02-02','yyyy-mm-dd'),i)); end loop; commit; end; / SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS from user_tab_partitions where TABLE_NAME='INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION TABLESPACE_NAME NUM_ROWS -------------------- --------------- -------------------------------------------------------------------------------- ------------------ --------------- ---------- INTERVAL_PARTITION PART2010_01 TO_DATE(' 2010-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 1 PART 1 INTERVAL_PARTITION PART2010_02 TO_DATE(' 2010-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 2 PART 1 INTERVAL_PARTITION SYS_P11642 TO_DATE(' 2010-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 3 P1 1 INTERVAL_PARTITION SYS_P11643 TO_DATE(' 2010-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 4 P2 1 INTERVAL_PARTITION SYS_P11644 TO_DATE(' 2010-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 5 P1 1 INTERVAL_PARTITION SYS_P11645 TO_DATE(' 2010-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 6 P2 1 INTERVAL_PARTITION SYS_P11646 TO_DATE(' 2010-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 7 P1 1 INTERVAL_PARTITION SYS_P11647 TO_DATE(' 2010-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 8 P2 1 INTERVAL_PARTITION SYS_P11648 TO_DATE(' 2010-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 9 P1 1 INTERVAL_PARTITION SYS_P11649 TO_DATE(' 2010-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 10 P2 1 INTERVAL_PARTITION SYS_P11650 TO_DATE(' 2010-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 11 P1 1 INTERVAL_PARTITION SYS_P11651 TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 12 P2 1 INTERVAL_PARTITION SYS_P11652 TO_DATE(' 2011-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 13 P1 1 INTERVAL_PARTITION SYS_P11653 TO_DATE(' 2011-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 14 P2 1 INTERVAL_PARTITION SYS_P11654 TO_DATE(' 2011-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 15 P3 1 INTERVAL_PARTITION SYS_P11655 TO_DATE(' 2011-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 16 P1 1 INTERVAL_PARTITION SYS_P11656 TO_DATE(' 2011-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 17 P2 1 INTERVAL_PARTITION SYS_P11657 TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 18 P3 1 INTERVAL_PARTITION SYS_P11658 TO_DATE(' 2011-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 19 P1 1 INTERVAL_PARTITION SYS_P11659 TO_DATE(' 2011-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 20 P2 1 INTERVAL_PARTITION SYS_P11660 TO_DATE(' 2011-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 21 P3 1 INTERVAL_PARTITION SYS_P11661 TO_DATE(' 2011-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 22 P1 1 INTERVAL_PARTITION SYS_P11662 TO_DATE(' 2011-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 23 P2 1 INTERVAL_PARTITION SYS_P11663 TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 24 P3 1 INTERVAL_PARTITION SYS_P11664 TO_DATE(' 2012-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 25 P1 1 INTERVAL_PARTITION SYS_P11665 TO_DATE(' 2012-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 26 P2 INTERVAL_PARTITION SYS_P11666 TO_DATE(' 2012-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 27 P1 INTERVAL_PARTITION SYS_P11667 TO_DATE(' 2012-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 28 P2 INTERVAL_PARTITION SYS_P11668 TO_DATE(' 2012-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 29 P1 INTERVAL_PARTITION SYS_P11669 TO_DATE(' 2012-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 30 P2 INTERVAL_PARTITION SYS_P11670 TO_DATE(' 2012-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 31 P1 INTERVAL_PARTITION SYS_P11671 TO_DATE(' 2012-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 32 P2 INTERVAL_PARTITION SYS_P11672 TO_DATE(' 2012-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 33 P1 INTERVAL_PARTITION SYS_P11673 TO_DATE(' 2012-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 34 P2 INTERVAL_PARTITION SYS_P11674 TO_DATE(' 2012-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 35 P1 INTERVAL_PARTITION SYS_P11675 TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 36 P2 INTERVAL_PARTITION SYS_P11676 TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 37 P1 上面綠色部分是新產(chǎn)生的分區(qū),果然新分區(qū)不存放到P3表空間中,那么P3表空間中的數(shù)據(jù)為何依然存在呢? 試著刪除P3表空間,看看數(shù)據(jù)是否被刪除。 P3中含有的數(shù)據(jù) 10 01-DEC-11 7 01-SEP-11 4 01-JUN-11 1 01-MAR-11 SQL> conn / as sysdba Connected. SQL> drop tablespace p3 including contents and datafiles; drop tablespace p3 including contents and datafiles * ERROR at line 1: ORA-14404: partitioned table contains partitions in a different tablespace P3表空間還有分區(qū)表的分區(qū),看看能不能把P3表空間中的分區(qū)移到P1 P2中 conn part/part alter table INTERVAL_PARTITION move partition SYS_P11654 tablespace p1; alter table INTERVAL_PARTITION move partition SYS_P11657 tablespace p1; alter table INTERVAL_PARTITION move partition SYS_P11660 tablespace p1; alter table INTERVAL_PARTITION move partition SYS_P11663 tablespace p1; SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS from user_tab_partitions where TABLE_NAME='INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION TABLESPACE_NAME NUM_ROWS -------------------- --------------- -------------------------------------------------------------------------------- ------------------ --------------- ---------- INTERVAL_PARTITION PART2010_01 TO_DATE(' 2010-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 1 PART 1 INTERVAL_PARTITION PART2010_02 TO_DATE(' 2010-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 2 PART 1 INTERVAL_PARTITION SYS_P11642 TO_DATE(' 2010-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 3 P1 1 INTERVAL_PARTITION SYS_P11643 TO_DATE(' 2010-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 4 P2 1 INTERVAL_PARTITION SYS_P11644 TO_DATE(' 2010-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 5 P1 1 INTERVAL_PARTITION SYS_P11645 TO_DATE(' 2010-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 6 P2 1 INTERVAL_PARTITION SYS_P11646 TO_DATE(' 2010-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 7 P1 1 INTERVAL_PARTITION SYS_P11647 TO_DATE(' 2010-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 8 P2 1 INTERVAL_PARTITION SYS_P11648 TO_DATE(' 2010-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 9 P1 1 INTERVAL_PARTITION SYS_P11649 TO_DATE(' 2010-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 10 P2 1 INTERVAL_PARTITION SYS_P11650 TO_DATE(' 2010-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 11 P1 1 INTERVAL_PARTITION SYS_P11651 TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 12 P2 1 INTERVAL_PARTITION SYS_P11652 TO_DATE(' 2011-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 13 P1 1 INTERVAL_PARTITION SYS_P11653 TO_DATE(' 2011-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 14 P2 1 INTERVAL_PARTITION SYS_P11654 TO_DATE(' 2011-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 15 P1 1 INTERVAL_PARTITION SYS_P11655 TO_DATE(' 2011-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 16 P1 1 INTERVAL_PARTITION SYS_P11656 TO_DATE(' 2011-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 17 P2 1 INTERVAL_PARTITION SYS_P11657 TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 18 P1 1 INTERVAL_PARTITION SYS_P11658 TO_DATE(' 2011-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 19 P1 1 INTERVAL_PARTITION SYS_P11659 TO_DATE(' 2011-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 20 P2 1 INTERVAL_PARTITION SYS_P11660 TO_DATE(' 2011-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 21 P1 1 INTERVAL_PARTITION SYS_P11661 TO_DATE(' 2011-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 22 P1 1 INTERVAL_PARTITION SYS_P11662 TO_DATE(' 2011-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 23 P2 1 INTERVAL_PARTITION SYS_P11663 TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 24 P1 1 INTERVAL_PARTITION SYS_P11664 TO_DATE(' 2012-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 25 P1 1 INTERVAL_PARTITION SYS_P11665 TO_DATE(' 2012-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 26 P2 INTERVAL_PARTITION SYS_P11666 TO_DATE(' 2012-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 27 P1 INTERVAL_PARTITION SYS_P11667 TO_DATE(' 2012-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 28 P2 INTERVAL_PARTITION SYS_P11668 TO_DATE(' 2012-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 29 P1 INTERVAL_PARTITION SYS_P11669 TO_DATE(' 2012-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 30 P2 INTERVAL_PARTITION SYS_P11670 TO_DATE(' 2012-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 31 P1 INTERVAL_PARTITION SYS_P11671 TO_DATE(' 2012-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 32 P2 INTERVAL_PARTITION SYS_P11672 TO_DATE(' 2012-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 33 P1 INTERVAL_PARTITION SYS_P11673 TO_DATE(' 2012-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 34 P2 INTERVAL_PARTITION SYS_P11674 TO_DATE(' 2012-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 35 P1 INTERVAL_PARTITION SYS_P11675 TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 36 P2 INTERVAL_PARTITION SYS_P11676 TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 37 P1 37 rows selected. 上面紅色部分就是以前在P3表空間的分區(qū),現(xiàn)在都移到了P1表空間。 再次刪除P3表空間 SQL> conn / as sysdba Connected. SQL> drop tablespace p3 including contents and datafiles; Tablespace dropped. OK,成功! ************************* 刪除分區(qū)表中表空間的順序: 1.摘除某個表空間,store in 中寫要保留的表空間即可 alter table partition_table set store in(tablespace1,tabelspace2); 2.將要刪除的表空間中的分區(qū)移到保留的表空間中 alter table partition_table move partition xx tablespace xx; 3.刪除表空間 drop tablespace xx including contents and datafiles; *********************** 3.向P1表空間中的SYS_P11642 分區(qū)大量插入數(shù)據(jù) SQL> select * from INTERVAL_PARTITION partition(SYS_P11642); C1 C3 ---------- ------------ 2 01-MAR-10 SQL> ALTER TABLE INTERVAL_PARTITION NOLOGGING; Table altered. begin for i in 0..27900040 loop insert into INTERVAL_PARTITION values(i,to_date('2010-03-01','yyyy-mm-dd')); end loop; commit; end; / SQL> select FILE_NAME,BYTES/1024/1024 as M from dba_data_files; FILE_NAME M -------------------------------------------------- ---------- /u01/app/oradata/hou/users01.dbf 699.5 /u01/app/oradata/hou/undotbs01.dbf 1405 /u01/app/oradata/hou/sysaux01.dbf 613.0625 /u01/app/oradata/hou/system01.dbf 1170 /u01/app/oradata/hou/example01.dbf 100 /u01/app/oradata/hou/p1.dbf 531.5 /u01/app/oradata/hou/p2.dbf 10 /u01/app/oradata/hou/part01.dbf 70 P1表空間已經(jīng)達(dá)到500多兆,而P2只有10兆。 再次插入新時間段數(shù)據(jù),看看新分區(qū)分配到什么表空間。 begin for i in 0..11 loop insert into INTERVAL_PARTITION values(i,add_months(to_date('2013-02-02','yyyy-mm-dd'),i)); end loop; commit; end; / 下面是新分配的分區(qū),發(fā)現(xiàn)依然存在循環(huán)交替使用p1 p2表空間的情況。 SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS from user_tab_partitions where TABLE_NAME='INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION TABLESPACE_NAME NUM_ROWS -------------------- --------------- -------------------------------------------------------------------------------- ------------------ ------------------------------ ---------- INTERVAL_PARTITION SYS_P11677 TO_DATE(' 2013-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 38 P2 1 INTERVAL_PARTITION SYS_P11678 TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 39 P1 1 INTERVAL_PARTITION SYS_P11679 TO_DATE(' 2013-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 40 P2 1 INTERVAL_PARTITION SYS_P11680 TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 41 P1 1 INTERVAL_PARTITION SYS_P11681 TO_DATE(' 2013-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 42 P2 1 INTERVAL_PARTITION SYS_P11682 TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 43 P1 1 INTERVAL_PARTITION SYS_P11683 TO_DATE(' 2013-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 44 P2 1 INTERVAL_PARTITION SYS_P11684 TO_DATE(' 2013-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 45 P1 1 INTERVAL_PARTITION SYS_P11685 TO_DATE(' 2013-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 46 P2 1 INTERVAL_PARTITION SYS_P11686 TO_DATE(' 2013-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 47 P1 1 INTERVAL_PARTITION SYS_P11687 TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 48 P2 1 INTERVAL_PARTITION SYS_P11688 TO_DATE(' 2014-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 49 P1 1 初步結(jié)論:interval并不能根據(jù)表空間使用率決定新分區(qū)分配到低使用率的表空間上,它只是遵循循環(huán)交替使用p1 p2表空間來分配新增的分區(qū)。 現(xiàn)在p1表空間只有一個數(shù)據(jù)文件p1.dbf,把尺寸固定到530M并且無法自動擴展,大量往P1中插數(shù)據(jù),看看會怎么樣 begin for i in 0..50000 loop insert into INTERVAL_PARTITION values(i,to_date('2010-03-01','yyyy-mm-dd')); end loop; commit; end; / * ERROR at line 1: ORA-01688: unable to extend table PART.INTERVAL_PARTITION partition SYS_P11642 by 1024 in tablespace P1 ORA-06512: at line 3 p2表空間滿, SYS_P11642分區(qū)不能再向p2中插入數(shù)據(jù),從而可以看出,oracle并不能根據(jù)表空間的利用率自動均衡分配分區(qū), 繼續(xù)插入數(shù)據(jù) begin for i in 0..11 loop insert into INTERVAL_PARTITION values(i,add_months(to_date('2014-02-02','yyyy-mm-dd'),i)); end loop; commit; end; / 下面就是插入新數(shù)據(jù)后產(chǎn)生的新分區(qū),發(fā)現(xiàn)oracle依然固執(zhí)地循環(huán)分配新分區(qū)到P1 P2表空間,P2表空間已經(jīng)滿了,你還分配什么! SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS from user_tab_partitions where TABLE_NAME='INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION TABLESPACE_NAME NUM_ROWS -------------------- --------------- -------------------------------------------------------------------------------- ------------------ ------------------------------ ---------- INTERVAL_PARTITION SYS_P11689 TO_DATE(' 2014-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 50 P2 INTERVAL_PARTITION SYS_P11690 TO_DATE(' 2014-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 51 P1 INTERVAL_PARTITION SYS_P11691 TO_DATE(' 2014-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 52 P2 INTERVAL_PARTITION SYS_P11692 TO_DATE(' 2014-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 53 P1 INTERVAL_PARTITION SYS_P11693 TO_DATE(' 2014-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 54 P2 INTERVAL_PARTITION SYS_P11694 TO_DATE(' 2014-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 55 P1 INTERVAL_PARTITION SYS_P11695 TO_DATE(' 2014-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 56 P2 INTERVAL_PARTITION SYS_P11696 TO_DATE(' 2014-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 57 P1 INTERVAL_PARTITION SYS_P11697 TO_DATE(' 2014-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 58 P2 INTERVAL_PARTITION SYS_P11698 TO_DATE(' 2014-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 59 P1 INTERVAL_PARTITION SYS_P11699 TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 60 P2 INTERVAL_PARTITION SYS_P11700 TO_DATE(' 2015-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA 61 P1 總終結(jié)論:11g之前,分區(qū)表都要預(yù)分配分區(qū)。而11g 的interval partition 技術(shù),在插入數(shù)據(jù)時會根據(jù)range列自動分配新分區(qū),更加自動、簡單化。 同時,interval partition可以指定將分區(qū)創(chuàng)建在指定的表空間中(store in字子句指定),oracle采用循環(huán)交替分配新分區(qū)到各個表空間,這個動作極其機械化,只是循環(huán)!不會根據(jù)表空間的利用率,智能均衡表空間的里 用率!(如存在A B兩個表空間,A表空間已經(jīng)滿了,B表空間數(shù)據(jù)量很少,oracle不會把新分區(qū)全部分配到B表空間,而是依然循環(huán)分配新分區(qū)到A B兩個表空間!)從而可見,interval partition實現(xiàn)I/O均衡的能力也不過如此,沒有想象的那么智能。 想要實現(xiàn)想法,看來還是要采用傳統(tǒng)的利用存儲過程定時預(yù)分配表空間和分區(qū)的方法。 三、普通range分區(qū)表可以轉(zhuǎn)換為interval分區(qū)表 http:///2009/09/11g-interval-partitioning/
|
|
|
來自: aaie_ > 《性能優(yōu)化》