oracle 在线重定义实验-对表进行分区
2013-08-09 09:08
441 查看
在线重定义是通过物化视图进行更新,下面我们做一个实验来更了解在线重定义的原理:
SQL> alter table test add constraint PK_ID primary key (object_id);
表已更改。
SQL> create table test_partition
(
OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(128),
SUBOBJECT_NAME VARCHAR2(30),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE VARCHAR2(19),
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19),
STATUS VARCHAR2(7),
TEMPORARY VARCHAR2(1),
GENERATED VARCHAR2(1),
SECONDARY VARCHAR2(1)
)partition by list (object_type)
(
partition p1 values ('TABLE'),
partition p2 values ('TABLE PARTITION'),
partition p3 values ('INDEX'),
partition p4 values ('INDEX PARTITION'),
partition p5 values ('PROCEDURE'),
partition p6 values ('FUNCTION'),
partition other values (default)
);
表已创建。
SQL> alter table test_partition add constraint PK_PID primary key (object_id);
表已更改。
--如果表不满足重定义的条件,将会报错并给出原因。
--用DBMS_REDEFINITION.CONS_USE_PK代表用主键,是默认选项,也可以用rowid的方式,这里不讨论
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'TEST', DBMS_REDEFINITION.CONS_USE_PK);
PL/SQL 过程已成功完成。
SQL> select owner,mview_name from user_mviews;
未选定行
SQL> select log_owner,master,log_table from user_mview_logs;
未选定行
--创建含on prebuilt table的物化视图和物化视图日志
--实现通过物化视图刷新当前表中数据进入中间表
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'TEST', 'TEST_PARTITION');
PL/SQL 过程已成功完成。
SQL> select owner,mview_name from user_mviews;
OWNER MVIEW_NAME
------------------------------ ------------------------------
TEST TEST_PARTITION
SQL> select log_owner,master,log_table from user_mview_logs;
LOG_OWNER MASTER LOG_TABLE
------------------------------ ------------------------------ ------------------------------
TEST TEST MLOG$_TEST
--实现物化视图刷新在执行同步时操作过程中变化数据。
SQL> EXEC dbms_redefinition.sync_interim_table(user, 'TEST','TEST_PARTITION') ;
PL/SQL 过程已成功完成。
--锁定原表,防止表上的DML,物化视图执行刷新,完成刷新后,将删除物化视图和对应的日志。
SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'TEST', 'TEST_PARTITION');
PL/SQL 过程已成功完成。
SQL> select owner,mview_name from user_mviews;
未选定行
SQL> select log_owner,master,log_table from user_mview_logs;
未选定行
SQL> select count(*) from test_partition;
COUNT(*)
----------
50504
SQL> alter table test add constraint PK_ID primary key (object_id);
表已更改。
SQL> create table test_partition
(
OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(128),
SUBOBJECT_NAME VARCHAR2(30),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE VARCHAR2(19),
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19),
STATUS VARCHAR2(7),
TEMPORARY VARCHAR2(1),
GENERATED VARCHAR2(1),
SECONDARY VARCHAR2(1)
)partition by list (object_type)
(
partition p1 values ('TABLE'),
partition p2 values ('TABLE PARTITION'),
partition p3 values ('INDEX'),
partition p4 values ('INDEX PARTITION'),
partition p5 values ('PROCEDURE'),
partition p6 values ('FUNCTION'),
partition other values (default)
);
表已创建。
SQL> alter table test_partition add constraint PK_PID primary key (object_id);
表已更改。
--如果表不满足重定义的条件,将会报错并给出原因。
--用DBMS_REDEFINITION.CONS_USE_PK代表用主键,是默认选项,也可以用rowid的方式,这里不讨论
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'TEST', DBMS_REDEFINITION.CONS_USE_PK);
PL/SQL 过程已成功完成。
SQL> select owner,mview_name from user_mviews;
未选定行
SQL> select log_owner,master,log_table from user_mview_logs;
未选定行
--创建含on prebuilt table的物化视图和物化视图日志
--实现通过物化视图刷新当前表中数据进入中间表
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'TEST', 'TEST_PARTITION');
PL/SQL 过程已成功完成。
SQL> select owner,mview_name from user_mviews;
OWNER MVIEW_NAME
------------------------------ ------------------------------
TEST TEST_PARTITION
SQL> select log_owner,master,log_table from user_mview_logs;
LOG_OWNER MASTER LOG_TABLE
------------------------------ ------------------------------ ------------------------------
TEST TEST MLOG$_TEST
--实现物化视图刷新在执行同步时操作过程中变化数据。
SQL> EXEC dbms_redefinition.sync_interim_table(user, 'TEST','TEST_PARTITION') ;
PL/SQL 过程已成功完成。
--锁定原表,防止表上的DML,物化视图执行刷新,完成刷新后,将删除物化视图和对应的日志。
SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'TEST', 'TEST_PARTITION');
PL/SQL 过程已成功完成。
SQL> select owner,mview_name from user_mviews;
未选定行
SQL> select log_owner,master,log_table from user_mview_logs;
未选定行
SQL> select count(*) from test_partition;
COUNT(*)
----------
50504
相关文章推荐
- Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
- Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
- Oracle在线重定义-分区整理(bat执行)
- 如何对已经存在数据的表进行在线重定义方式实现分区
- Oracle 12C 新特性之表分区或子分区的在线迁移
- oracle 10g在线重定义新特性——关联对象自动重命名(一)
- 普通表转分区表(交换分区、在线重定义)
- 使用ORACLE在线重定义将普通表改为分区表
- Oracle 在线重定义表分区
- oracle在线重定义表
- oracle 9i下在线重定义表
- Oracle 12C 新特性之表分区或子分区的在线迁移
- 在线重定义 Oracle Redefinition
- 在oracle 9i下在线重定义表
- oracle 在线重定义将普通表转换成分区表
- [Oracle] 表在线重定义 - 普通表到分区表
- Oracle plsql 按来源进行分区插入下级对应分区分区,锁表。
- oracle 10g在线重定义新特性——关联对象自动重命名(二)
- oracle 根据在线更新分区。
- 利用Oracle在线重定义Online Redefinition清理历史数据