使用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
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
相关文章推荐
- ORACLE普通表转换成分区表的操作——在线重定义表(DBMS_REDEFINITION)
- 使用DBMS_REDEFINITION在线切换普通表到分区表
- 使用DBMS_REDEFINITION在线切换普通表到分区表
- 使用DBMS_REDEFINITION在线切换普通表到分区表
- dbms_redefinition方式普通表改造分区表
- 【转】Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
- ORACLE普通表转换成自动分区表
- ORACLE 普通表转换成分区表(在线重定义)
- ORACLE 普通表转换成分区表(在线重定义)
- android usb otg模式转换成host模式(不使用otg线连接,只用普通usb四线连接)
- 普通表转换为分区表
- 使用C#将HTML文本转换为普通文本,去掉所有的Html标记
- Oracle普通表->分区表转换(9亿数据量)
- SQL Server 2005中的分区表(六):将已分区表转换成普通表(转)
- SQL Server 2005中的分区表(六):将已分区表转换成普通表
- 普通表到分区表转换
- 普通表向分区表转换的几种方法(转载yangtingkun blog)
- 利用REDEFINITION将普通表转换成分区表案例
- 如何将oralce普通表转换为分区表
- 使用eclipse转换普通项目为web项目