|
|
![]() |
|
如何将Oracle数据库的普通表转换成分区表(4)
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(‘USER’, 'T', 'T_NEW', -
> 'ID ID, TIME TIME', DBMS_REDEFINITION.CONS_USE_PK); 可以改为: SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(‘USER’, 'T', 'T_NEW') PL/SQL 过程已成功完成。 SQL> EXEC dbms_redefinition.sync_interim_table(‘USER’, 'T', 'T_NEW') 现在,将中间表与原始表同步。(仅当要对表 T 进行更新时才需要执行该操作。) SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER’, 'T', 'T_NEW'); PL/SQL 过程已成功完成。 如果重组织失败,那么你就必须采取特殊的步骤来让它重新开始。由于重定义过程需要创建表格的快照,因此为了重新开始这一过程,你必须调用DBMS_REDEFINITION.ABORT_REDEF_TABLE来释放快照。 DBMS_REDEFINITION.ABORT_REDEF_TABLE过程有三个参数,即用户(schema)、原始表格(original table name)名称以及持有表格名称(holding table name)。它“出栈”并允许你开始重组织表格。 SQL> SELECT COUNT(*) FROM T; SQL> SELECT COUNT(*) FROM T PARTITION (P2); SQL> SELECT COUNT(*) FROM T PARTITION (P3); 需要说明的是完成后,原表和中间表的结构也同时进行了交换,并且中间表里面有原表的数据备份。 优点: 保证数据的一致性,在大部分时间内,表T都可以正常进行DML操作。只在切换的瞬间锁表,具有很高的可用性。这种方法具有很强的灵活性,对各种不同的需要都能满足。而且,可以在切换前进行相应的授权并建立各种约束,可以做到切换完成后不再需要任何额外的管理操作。 不足:实现上比上面两种略显复杂,适用于各种情况。 然而,在线表格重定义也不是完美无缺的。下面列出了Oracle9i重定义过程的部分限制: 你必须有足以维护两份表格拷贝的空间。 你不能更改主键栏。 表格必须有主键。 必须在同一个大纲中进行表格重定义。 在重定义操作完成之前,你不能对新加栏加以NOT NULL约束。 表格不能包含LONG、BFILE以及用户类型(UDT)。 不能重定义链表(clustered tables)。 不能在SYS和SYSTEM大纲中重定义表格。 不能用具体化视图日志(materialized view logs)来重定义表格;不能重定义含有具体化视图的表格。 不能在重定义过程中进行横向分集(horizontal subsetting)。 第 1 2 3 4 页 责任编辑:qwer19871212
相关文章
|
|