Oracle 12.2新特性——在线把非分区表转为分区表

  

在Oracle12.2版本之前,如果想把一个非分区表转为分区表常用的有这几种方法:1、建好分区表然后插入选择把数据插入到分区表中;2、使用在线重定义(DBMS_REDEFINITION)的方法。它们的币是:第一种方法,如果对表有频繁的DML操作,尤其是更新操作,就需要停业务来做转换。第二种方法可以在线进行操作,不需要停业务,但操作步骤比较复杂,且可能出错。

Oracle12cR2版本中提供了一种新特性,一条语句就可以把非分区表转换为分区表,语法如下:

ALTER  TABLE  table_name  MODIFY  table_partitioning_clauses   [],filter_condition 才能   [],ONLINE 才能   (才能,UPDATE  INDEXES  [,, index  {, local_partitioned_index  |, global_partitioned_index  |, GLOBAL }   ,,,,,,,,,,,,,,,,,,,,(,index  {, local_partitioned_index  |, global_partitioned_index  |, GLOBAL },]…,)   ,,,,,,,,,,,,,,,,,,)   ]才能

下面来测试一下这个新特性

1,创建测试表及相关索引,并查看状态

zx@ORA12C> create  table  emp  as  select  *,得到scott.emp;      Table 创建。      zx@ORA12C> create  index  idx_emp_no 提醒emp (empno);      Index 创建。      zx@ORA12C> create  index  idx_emp_job 提醒emp(工作);      Index 创建。      zx@ORA12C> col  table_name  for 故事本来   zx@ORA12C> col  index_name  for 故事本来   zx@ORA12C> select  table_name partitioned 得到user_tables  where  table_name=癊MP”;      TABLE_NAME ,,,,,,,,,,,,,,,,,,,,标准   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - -   EMP ,,,,,,,,,,,,,,,,,,,,,,,,,,,没有      分区,zx@ORA12C> select  index_name status 得到user_indexes  where  table_name=癊MP”;      INDEX_NAME ,,,,,,,,,,,,,,,,,,,, PAR 状态   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,-安康;- - - - - - -   IDX_EMP_NO ,,,,,,,,,,,,,,,,,,,, NO 有效   IDX_EMP_JOB ,,,,,,,,,,,,,,,,,,, NO ,有效的

2,使用alter table语句,执行分区表转换操作

zx@ORA12C> alter  table  emp 修改   2,,,,,,partition  by  range  (deptno), interval  (10)   3,,,,,,(,partition  p1  values  less  than  (10),   4,,,,,,,,partition  p2  values  less  than  (20)   5,,,,,),在线   6,,,,,      Table 改变。

3,查看现在的表和索引的状态

zx@ORA12C> select  table_name, partitioned 得到user_tables  where  table_name=癊MP”;      TABLE_NAME ,,,,,,,,,,,,,,,,,,,,标准   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - -   EMP ,,,,,,,,,,,,,,,,,,,,,,,,,,,是的      分区,zx@ORA12C> select  index_name status 得到user_indexes  where  table_name=癊MP”;      INDEX_NAME ,,,,,,,,,,,,,,,,,,,, PAR 状态   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,-安康;- - - - - - -   IDX_EMP_NO ,,,,,,,,,,,,,,,,,,,, NO 有效   IDX_EMP_JOB ,,,,,,,,,,,,,,,,,,, NO 有效      zx@ORA12C> select  table_name partition_name 得到user_tab_partitions  where  table_name=癊MP”;      TABLE_NAME ,,,,,,,,,,,,,,,,,,, PARTITION_NAME   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   EMP ,,,,,,,,,,,,,,,,,,,,,,,,,,, P1   EMP ,,,,,,,,,,,,,,,,,,,,,,,,,,, P2   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Oracle 12.2新特性——在线把非分区表转为分区表