ORACLE系统分区表整理系列产品(二) 系统分区表
摘要: 序言文中主要小结系统分区表的平时维护保养实际操作及其相对的留意事宜。 文中涉及到的平时维护保养內容包含:提升系统分区(add)移动系统分区(move) 断开系统分区(truncate)...
必须留意:有关系统分区表平时维护保养实际操作,针对系统分区表数据库索引的危害未谈及,会在后边小结系统分区表数据库索引时开展论述表明。
1、检测表提前准备以便有利于实际的实际操作演试,最先提前准备一张RANGE型的检测系统分区表TEST_RANGE_PARTITION。
这儿的检测数据信息来源于于oracle检测客户scott下的emp表。
--建立系统分区表TEST_RANGE_PARTITION --这儿根据dbms_metadata.get_ddl得到emp表的建表构造从而改动 TABLE SCOTT . TEST_RANGE_PARTITION 2 ( EMPNO NUMBER(4,0), 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4,0), 6 HIREDATE DATE, 7 SAL NUMBER(7,2), 8 COMM NUMBER(7,2), 9 DEPTNO NUMBER(2,0) 10 ) 11 PARTITION BY RANGE ( SAL ) 12 (PARTITION TEST_RANGE_SAL_01 VALUES LESS THAN (1000) 13 PARTITION TEST_RANGE_SAL_02 VALUES LESS THAN (2000) 14 PARTITION TEST_RANGE_SAL_03 VALUES LESS THAN (3000) 15 PARTITION TEST_RANGE_SAL_MAX VALUES LESS THAN (MAXVALUE) 16 ); Table created.
plete.
根据下边的方式,掌握有关上边建立系统分区表的数据信息遍布基本状况。
--查寻分表各系统分区的标准及其数据信息库遍布状况 --能看到这时NUM_ROWS列入空,关键是由于表的的统计分析信息内容未搜集造成。 a.TABLE_NAME,PARTITIONING_TYPE,PARTITION_NAME,HIGH_VALUE,NUM_ROWS 2 from user_part_tables a,user_tab_partitions b 3 where a.TABLE_NAME=b.TABLE_NAME; TABLE_NAME PARTITION PARTITION_NAME HIGH_VALUE NUM_ROWS ------------------------------ --------- -------------------- ----------- ---------- TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_01 1000 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_02 2000 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_03 3000 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_MAX MAXVALUE
--搜集系统分区表TEST_RANGE_PARTITION的统计分析信息内容 pute statistics; Table analyzed.
--能看到,这时各系统分区的数据信息状况早已显示信息出去 a.TABLE_NAME,PARTITIONING_TYPE,PARTITION_NAME,HIGH_VALUE,NUM_ROWS 2 from user_part_tables a,user_tab_partitions b 3 where a.TABLE_NAME=b.TABLE_NAME; TABLE_NAME PARTITION PARTITION_NAME HIGH_VALUE NUM_ROWS ------------------------------ --------- -------------------- ----------- ---------- TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_01 1000 2 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_02 2000 6 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_03 3000 3 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_MAX MAXVALUE 3
根据上边的实际操作,早已取得成功建立了一张RANGE型的系统分区表。
下边将借助这张表,详细介绍系统分区表的平时维护保养实际操作。
2、提升系统分区维护保养实际操作(add)提升系统分区维护保养实际操作,说白了,关键对于当今系统分区表开展加上新系统分区的实际操作。
当系统分区表存有默认设置标准系统分区,如:RANGE系统分区表的MAXVALUE系统分区、LIST系统分区表的DEFAULT系统分区,这时提升系统分区实际操作会出错。
下边试着根据提升系统分区实际操作,立即为检测表提升系统分区TEST_RANGE_SAL_04
table TEST_RANGE_PARTITION add partition TEST_RANGE_SAL_04 values less than(4000); alter table TEST_RANGE_PARTITION add partition TEST_RANGE_SAL_04 values less than(4000) ERROR at line 1: ORA-14074: partition bound must collate higher than that of the last partition
能看到,对于存有默认设置标准的系统分区表,没法实行提升系统分区实际操作。
处理方法:
1、删掉原默认设置标准系统分区,待提升系统分区后,再再次加上默认设置标准系统分区。
2、应用分拆系统分区(split)的方法,后边详细介绍。
这儿,大家试着下处理方法1的方式开展实际操作。
--删掉存有默认设置标准MAXVALUE的系统分区 table TEST_RANGE_PARTITION drop partition TEST_RANGE_SAL_MAX; Table altered.
--再次搜集系统分区表的统计分析信息内容 pute statistics; Table analyzed.
--观查系统分区表的信息内容,能看到这时默认设置标准MAXVALUE的系统分区早已不会有 a.TABLE_NAME,PARTITIONING_TYPE,PARTITION_NAME,HIGH_VALUE,NUM_ROWS 2 from user_part_tables a,user_tab_partitions b 3 where a.TABLE_NAME=b.TABLE_NAME; TABLE_NAME PARTITION PARTITION_NAME HIGH_VALUE NUM_ROWS ------------------------------ --------- -------------------- ----------- ---------- TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_01 1000 2 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_02 2000 6 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_03 3000 3
--提升新系统分区TEST_RANGE_SAL_04 table TEST_RANGE_PARTITION add partition TEST_RANGE_SAL_04 values less than(4000); Table altered.
--再次提升默认设置标准MAXVALUE系统分区 table TEST_RANGE_PARTITION add partition TEST_RANGE_SAL_MAX values less than(maxvalue); Table altered.
根据上边的方式,早已进行了提升系统分区的实际操作。下边进一步认证提升系统分区的实际操作。
--再次搜集检测系统分区表的统计分析信息内容 pute statistics; Table analyzed.
--查询系统分区表信息内容,能看到上边提升的新系统分区 a.TABLE_NAME,PARTITIONING_TYPE,PARTITION_NAME,HIGH_VALUE,NUM_ROWS 2 from user_part_tables a,user_tab_partitions b 3 where a.TABLE_NAME=b.TABLE_NAME; TABLE_NAME PARTITION PARTITION_NAME HIGH_VALUE NUM_ROWS --------------------- --------- ------------------ ----------- --------- TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_01 1000 2 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_02 2000 6 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_03 3000 3 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_MAX MAXVALUE 0 TEST_RANGE_PARTITION RANGE TEST_RANGE_SAL_04 4000 0
必须留意的是:针对默认设置标准的系统分区开展删掉,其数据信息不容易重遍布到别的系统分区,只是删掉数据信息。因而在生产制造自然环境应用需谨慎。
到此,提升系统分区维护保养实际操作的详细介绍完毕。
3、移动系统分区维护保养实际操作(move)移动系统分区维护保养实际操作,关键是将系统分区从一个表室内空间转移至另外一个表室内空间中。
--查询当今系统分区相匹配的表室内空间状况 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ -------------------- ------------------------------ TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS TEST_RANGE_PARTITION TEST_RANGE_SAL_01 USERS TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS
--实行移动系统分区实际操作 table TEST_RANGE_PARTITION move partition TEST_RANGE_SAL_01 tablespace PARTITION_TS; Table altered.
--认证移动后,系统分区所属的表室内空间 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ -------------------- ------------------------------ TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS TEST_RANGE_PARTITION TEST_RANGE_SAL_01 PARTITION_TS TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS
必须留意的是:
针对组成系统分区,没法立即移动系统分区,不然会抛出去ORA-14257不正确,实例以下:
--提前准备一张list-list的组成系统分区表 TABLE EMPLOYEE_LIST_LIST_PART 2 ( EMPNO NUMBER(4,0), 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4,0), 6 HIREDATE DATE, 7 SAL NUMBER(7,2), 8 COMM NUMBER(7,2), 9 DEPTNO NUMBER(2,0) 10 ) 11 PARTITION BY LIST (DEPTNO) 12 SUBPARTITION BY LIST (JOB) 13 ( 14 PARTITION EMPLOYEE_DEPTNO_10 VALUES (10) 15 ( SUBPARTITION EMPLOYEE_10_JOB_MAGAGER VALUES ( MANAGER ), 16 SUBPARTITION EMPLOYEE_10_JOB_DEFAULT VALUES (DEFAULT) 17 ), 18 PARTITION EMPLOYEE_DEPTNO_20 VALUES (20) 19 ( SUBPARTITION EMPLOYEE_20_JOB_MAGAGER VALUES ( MANAGER ), 20 SUBPARTITION EMPLOYEE_20_JOB_DEFAULT VALUES (DEFAULT) 21 ), 22 PARTITION EMPLOYEE_DEPTNO_OTHERS VALUES (DEFAULT) 23 ( SUBPARTITION EMPLOYEE_30_JOB_MAGAGER VALUES ( MANAGER ), 24 SUBPARTITION EMPLOYEE_30_JOB_DEFAULT VALUES (DEFAULT) 25 ) 26 ); Table created.
--查询当今这种情况合系统分区所属表室内空间的信息内容 TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME,TABLESPACE_NAME from user_tab_subpartitions; TABLE_NAME PARTITION_NAME SUBPARTITION_NAME TABLESPACE_NAME ----------------------- ---------------------- ------------------------ --------------- EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_10 EMPLOYEE_10_JOB_MAGAGER USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_10 EMPLOYEE_10_JOB_DEFAULT USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_20 EMPLOYEE_20_JOB_MAGAGER USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_20 EMPLOYEE_20_JOB_DEFAULT USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_OTHERS EMPLOYEE_30_JOB_MAGAGER USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_OTHERS EMPLOYEE_30_JOB_DEFAULT USERS
--移动组成系统分区表的区别 table EMPLOYEE_LIST_LIST_PART move partition EMPLOYEE_DEPTNO_20 tablespace PARTITION_TS; alter table EMPLOYEE_LIST_LIST_PART move partition EMPLOYEE_DEPTNO_20 tablespace PARTITION_TS ERROR at line 1: ORA-14257: cannot move partition other than a Range, List, System, or Hash partition
根据上边的演试,能够清晰的见到,针对组成系统分区,没法立即移动系统分区至新的表室内空间。
处理方法:
移动系统分区表的子系统分区,随后改动当今所属系统分区的特性就可以。实际演试以下:
--移动子系统分区 table EMPLOYEE_LIST_LIST_PART move subpartition EMPLOYEE_20_JOB_MAGAGER tablespace PARTITION_TS; Table altered.
table EMPLOYEE_LIST_LIST_PART move subpartition EMPLOYEE_20_JOB_DEFAULT tablespace PARTITION_TS; Table altered.
--改动系统分区的默认设置特性 TABLE EMPLOYEE_LIST_LIST_PART MODIFY DEFAULT ATTRIBUTES FOR PARTITION EMPLOYEE_DEPTNO_20 2 tablespace PARTITION_TS; Table altered.
--认证移动系统分区后的結果 TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME,TABLESPACE_NAME from user_tab_subpartitions; TABLE_NAME PARTITION_NAME SUBPARTITION_NAME TABLESPACE_NAME ----------------------- --------------------- ----------------------- --------------- EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_10 EMPLOYEE_10_JOB_MAGAGER USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_10 EMPLOYEE_10_JOB_DEFAULT USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_20 EMPLOYEE_20_JOB_MAGAGER PARTITION_TS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_20 EMPLOYEE_20_JOB_DEFAULT PARTITION_TS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_OTHERS EMPLOYEE_30_JOB_MAGAGER USERS EMPLOYEE_LIST_LIST_PART EMPLOYEE_DEPTNO_OTHERS EMPLOYEE_30_JOB_DEFAULT USERS
能看到,根据移动子系统分区的方式,进行了针对组成系统分区的移动实际操作。
4、断开系统分区维护保养实际操作(truncate)断开系统分区维护保养实际操作,相对性于传统式的delete实际操作,删掉数据信息的高效率会高些。并且会减少高水位线线。
演试以下:
--查询当今检测表系统分区状况及系统分区中的纪录数 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions 2 where PARTITION_NAME= TEST_RANGE_SAL_02 or PARTITION_NAME= TEST_RANGE_SAL_03 TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS 6 TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3
--实行断开系统分区实际操作 table TEST_RANGE_PARTITION truncate partition TEST_RANGE_SAL_02; Table truncated.
--再次搜集全新的检测表的统计分析信息内容 pute statistics; Table analyzed.
--认证断开实际操作后,系统分区的纪录数转变 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions 2 where PARTITION_NAME= TEST_RANGE_SAL_02 or PARTITION_NAME= TEST_RANGE_SAL_03 TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3
从上边的演试中能看到,根据truncate实际操作,检测表的TEST_RANGE_SAL_02系统分区数据信息被清除。
到此,演试结束。
5、删掉系统分区维护保养实际操作(drop)针对系统分区的删掉实际操作,必须留意,在删掉系统分区后,系统分区所纪录的数据信息,不容易重遍布至别的系统分区中,只是被一并删掉。
--查验当今系统分区表的系统分区状况,及其数据信息的遍布状况 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3 TEST_RANGE_PARTITION TEST_RANGE_SAL_01 PARTITION_TS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 0
--实行系统分区的删掉实际操作 table TEST_RANGE_PARTITION drop partition TEST_RANGE_SAL_04; Table altered.
--再度查验系统分区表的系统分区状况,及其数据信息的遍布状况 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3 TEST_RANGE_PARTITION TEST_RANGE_SAL_01 PARTITION_TS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 0
能看到,系统分区的删掉实际操作不容易危害数据信息的遍布状况。
6、分拆系统分区维护保养实际操作(split)在 提升系统分区维护保养实际操作 一部分,提及了针对存有默认设置标准的系统分区表提升系统分区的的二种方法,这儿将详细介绍根据分拆系统分区的方法来提升系统分区。
必须留意:在总体目标系统分区分拆后,被分拆的系统分区会依照分拆标准,将数据信息开展重遍布。
演试案例:
最先,将检测表的数据信息遍布复原至初建时的数据信息遍布态。
--清除检测系统分区表格中的全部数据信息 table TEST_RANGE_PARTITION; Table truncated.
--再次载入检测系统分区表的数据信息 into TEST_RANGE_PARTITION select * from emp; 14 rows created.
--再次搜集检测表的统计分析信息内容 pute statistics; Table analyzed.
--查询这时,数据信息在系统分区间的遍布状况 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS 6 TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3 TEST_RANGE_PARTITION TEST_RANGE_SAL_01 PARTITION_TS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 3
查询这时,存有默认设置标准MAXVALUE的系统分区TEST_RANGE_SAL_MAX的实际数据信息信息内容。
* from TEST_RANGE_PARTITION partition(TEST_RANGE_SAL_MAX); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------ -------- -------- --------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7902 FORD ANALYST 7566 03-DEC-81 3000 20
下边对于上边的系统分区TEST_RANGE_SAL_MAX开展分拆解决,在其中:
将SAL =3000且SAL 4000的数据信息放进新的系统分区TEST_RANGE_SAL_04。
将SAL =4000的数据信息保存在系统分区TEST_RANGE_SAL_MAX中。
--对于总体目标系统分区,实行分拆系统分区维护保养实际操作 --根据上边的要求,将数据信息分拆至系统分区TEST_RANGE_SAL_04及其TEST_RANGE_SAL_MAX中 table TEST_RANGE_PARTITION split partition TEST_RANGE_SAL_MAX at (4000) into 2 (partition TEST_RANGE_SAL_04,partition TEST_RANGE_SAL_MAX); Table altered.
--查询这时检测系统分区表的系统分区状况,及其数据信息遍布状况 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS 6 TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3 TEST_RANGE_PARTITION TEST_RANGE_SAL_01 PARTITION_TS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 1
认证系统分区中具体的数据信息內容
* from TEST_RANGE_PARTITION partition(TEST_RANGE_SAL_04); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------ ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------ ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 5000 10
能看到,历经分拆,数据信息已按以前的要求,各自储存在2个系统分区中。
7、合拼系统分区维护保养实际操作(merge)合拼系统分区实际操作,关键是将不一样的系统分区,根据系统分区的合拼,开展融合。
必须留意:
针对list系统分区,合拼的系统分区无尽制规定。 针对range系统分区,合拼的系统分区务必邻近,不然没法开展合拼实际操作。 针对hash系统分区,没法开展合拼系统分区实际操作。另外,针对range系统分区,低限值由界限值较低的系统分区决策,限制值由界限值较高的系统分区决策。
演试实例:
根据合拼系统分区技术性,将检测表的系统分区TEST_RANGE_SAL_01及其系统分区TEST_RANGE_SAL_02开展合拼,实际以下:
--查询当今系统分区表的系统分区状况 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_02 USERS 6 TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3 TEST_RANGE_PARTITION TEST_RANGE_SAL_01 PARTITION_TS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 18、互换系统分区维护保养实际操作(exchange)
table TEST_RANGE_PARTITION merge partitions 2 TEST_RANGE_SAL_01,TEST_RANGE_SAL_02 3 into partition TEST_RANGE_SAL_00; Table altered.
--认证合拼系统分区后的結果 TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 3 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 2 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 1 TEST_RANGE_PARTITION TEST_RANGE_SAL_00 USERS 8
互换系统分区技术性,关键是将一个非系统分区表的数据信息同 一个系统分区表的一个系统分区 开展数据信息互换。适用双重互换,既能够从系统分区表的系统分区中转移到非系统分区表,还可以从非系统分区表转移至系统分区表的系统分区中。
标准上,非系统分区表的构造、数据信息遍布等,要合乎系统分区表的总体目标系统分区的界定标准。
演试以下:
最先,清除检测系统分区表的数据信息
table TEST_RANGE_PARTITION; Table truncated.
TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_00 USERS 0
建立一张根据emp表,sal 2000的检测非系统分区表emp_test。
table emp_test as select * from emp where sal 2000; Table created.留意,这时非系统分区表的数据信息量为8条纪录。
实行互换系统分区实际操作,观查系统分区表的纪录转变,及其非系统分区表的纪录转变
--实行系统分区互换实际操作 table TEST_RANGE_PARTITION exchange PARTITION TEST_RANGE_SAL_00 with table emp_test; Table altered.
TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_00 USERS 8 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 0
0能看到,根据分去互换,非系统分区表的数据信息迁移至系统分区表格中,同时非系统分区表的纪录被消除。
再度实行互换系统分区实际操作,观查系统分区表的纪录转变,及其非系统分区表的纪录转变
table TEST_RANGE_PARTITION exchange PARTITION TEST_RANGE_SAL_00 with table emp_test; Table altered.
TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_00 USERS 0
8能看到,这时系统分区表的数据信息又再度迁移回至非系统分区表,证实了前边上述,系统分区互换技术性,既能够从系统分区表的系统分区中转移到非系统分区表,还可以从非系统分区表转移至系统分区表的系统分区中。
既非系统分区表的数据信息,不符合合系统分区表的系统分区标准,这时互换会抛出去ORA-14099不正确。
--清除上边检测非系统分区表的数据信息 table emp_test; Table truncated.
--载入emp的全部数据信息至该检测非系统分区表 --往往应用检测非系统分区表,是考虑到emp表之后做别的试验时将会还必须在其中的数据信息 --根据那样实际操作,检测非系统分区表的数据信息,既存有sal 2000的数据信息,也存有sal 2000的数据信息 into emp_test select * from emp; 14 rows created.
--试着互换系统分区,观查結果 table TEST_RANGE_PARTITION exchange PARTITION TEST_RANGE_SAL_00 with table emp_test; alter table TEST_RANGE_PARTITION exchange PARTITION TEST_RANGE_SAL_00 with table emp_test ERROR at line 1: ORA-14099: all rows in table do not qualify for specified partition能看到,因为TEST_RANGE_SAL_00系统分区的限定标准为sal 2000,而检测非系统分区表的数据信息包括了sal 2000的数据信息,因而互换不成功。
处理方法:
根据without validation子句,能够防止数据信息校检,而互换取得成功。但会存有与系统分区标准有悖的数据信息,因而该方式要谨慎。
table TEST_RANGE_PARTITION exchange PARTITION TEST_RANGE_SAL_00 with table emp_test without validation; Table altered.
TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- TEST_RANGE_PARTITION TEST_RANGE_SAL_03 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_00 USERS 14 TEST_RANGE_PARTITION TEST_RANGE_SAL_04 USERS 0 TEST_RANGE_PARTITION TEST_RANGE_SAL_MAX USERS 0
技术性计划方案拓展构思:
若准备选用互换系统分区的方式,以完成非系统分区表到系统分区表的变换,能够选用先建立一个仅有默认设置标准的单一系统分区的系统分区表,在系统分区互换数据信息后,依据具体必须,根据前边提及的 分拆系统分区 的方式开展系统分区实际操作。
9、收拢系统分区维护保养实际操作(coalesce)收拢系统分区维护保养实际操作,只是能够在hash系统分区及其组成系统分区的hash子系统分区勤奋履行用。
根据应用收拢系统分区技术性,能够收拢当今hash系统分区的系统分区总数。
针对hash系统分区的数据信息,在收拢全过程中,oracle会全自动进行数据信息在系统分区间的重遍布。
演试以下:
最先根据emp表的数据信息,建立一张hash系统分区表
TABLE EMPLOYEE_HASH_PART 2 ( EMPNO NUMBER(4,0), 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4,0), 6 HIREDATE DATE, 7 SAL NUMBER(7,2), 8 COMM NUMBER(7,2), 9 DEPTNO NUMBER(2,0) 10 ) 11 PARTITION BY HASH (ENAME) 12 ( 13 PARTITION EMPLOYEE_PART01, 14 PARTITION EMPLOYEE_PART02 15 ); Table created.
TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- EMPLOYEE_HASH_PART EMPLOYEE_PART02 USERS 6 EMPLOYEE_HASH_PART EMPLOYEE_PART01 USERS 8实行收拢系统分区实际操作
table EMPLOYEE_HASH_PART coalesce partition; Table altered.
TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- EMPLOYEE_HASH_PART EMPLOYEE_PART01 USERS 14能看到,根据收拢系统分区,本来2个系统分区融合到一个,并且数据信息也同时被融合。
必须留意:
当hash系统分区中仅有一个系统分区时,这时没法开展收拢实际操作。
TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,num_rows from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------- --------------- ---------- EMPLOYEE_HASH_PART EMPLOYEE_PART01 USERS 14
table EMPLOYEE_HASH_PART coalesce partition; alter table EMPLOYEE_HASH_PART coalesce partition ERROR at line 1: ORA-14285: cannot COALESCE the only partition of this hash partitioned table or index到此,有关系统分区表的平时维护保养实际操作及留意事宜小结完毕,事后会挤时间小结系统分区表数据库索引的维护保养。