您的位置:首页 > 其它

使用Dbms_Redefinition转换普通表-》分区表

2012-02-25 18:39 393 查看
SQL> CREATE TABLE unpar_table (

2 id NUMBER(10),

3 create_date DATE,

4 name VARCHAR2(100)

5 );

Table created.

SQL> ALTER TABLE unpar_table ADD (

2 CONSTRAINT unpar_table_pk PRIMARY KEY (id)

3 );

Table altered.

SQL> SQL> CREATE INDEX create_date_ind ON unpar_table(create_date);

Index created.

SQL> EXEC DBMS_STATS.gather_table_stats(USER, 'unpar_table', cascade => TRUE);

PL/SQL procedure successfully completed.

SQL> CREATE TABLE par_table (

2 id NUMBER(10),

3 create_date DATE,

4 name VARCHAR2(100)

5 )

6 PARTITION BY RANGE (create_date)

7 (PARTITION unpar_table_2005 VALUES LESS THAN (TO_DATE('01/01/2005', 'DD/MM/YYYY')),

8 PARTITION unpar_table_2006 VALUES LESS THAN (TO_DATE('01/01/2006', 'DD/MM/YYYY')),

9 PARTITION unpar_table_2007 VALUES LESS THAN (MAXVALUE));

Table created.

SQL> EXEC Dbms_Redefinition.can_redef_table(USER, 'unpar_table');

PL/SQL procedure successfully completed.

SQL> BEGIN

2 DBMS_REDEFINITION.start_redef_table(

3 uname => USER,

4 orig_table => 'unpar_table',

5 int_table => 'par_table');

6 END;

7 /

PL/SQL procedure successfully completed.

SQL> BEGIN

2 dbms_redefinition.sync_interim_table(

3 uname => USER,

4 orig_table => 'unpar_table',

5 int_table => 'par_table');

6 END;

7 /

PL/SQL procedure successfully completed.

SQL> ALTER TABLE par_table ADD (

2 CONSTRAINT unpar_table_pk2 PRIMARY KEY (id)

3 );

Table altered.

SQL> SQL> CREATE INDEX create_date_ind2 ON par_table(create_date);

Index created.

SQL> EXEC DBMS_STATS.gather_table_stats(USER, 'par_table', cascade => TRUE);

PL/SQL procedure successfully completed.

SQL> BEGIN

2 dbms_redefinition.finish_redef_table(

3 uname => USER,

4 orig_table => 'unpar_table',

5 int_table => 'par_table');

6 END;

7 /

PL/SQL procedure successfully completed.

SQL> DROP TABLE par_table;

Table dropped.

SQL> ALTER TABLE unpar_table RENAME CONSTRAINT unpar_table_pk2 TO unpar_table_pk;

Table altered.

SQL> ALTER INDEX create_date_ind2 RENAME TO create_date_ind;

Index altered.

SQL> desc unpar_table

Name Null? Type

----------------------------------------- -------- ----------------------------

ID NOT NULL NUMBER(10)

CREATE_DATE DATE

NAME VARCHAR2(100)

SQL> SELECT partition_name

2 FROM user_tab_partitions

3 WHERE table_name ='UNPAR_TABLE';

PARTITION_NAME

------------------------------

UNPAR_TABLE_2005

UNPAR_TABLE_2006

UNPAR_TABLE_2007

SQL> SELECT partitioned

2 FROM user_tables

3 WHERE table_name ='UNPAR_TABLE';

PAR

---

YES

11g的Dbms_Redefinition增强了很多:

1.Online table redefinition supports tables with materialized views and view logs

2.Online table redefinition supports triggers with ordering dependency

3.Minimizing dependent recompilations
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: