地市分站
用户名
密  码
您现在的位置是:树人网首页 / 计算机等级考试 / oracle认证 / 文章浏览
如何将Oracle数据库的普通表转换成分区表(4)
文章来源:来源网络 发表时间:2008-05-22 点击次数
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

相关文章
公告栏

“蓝焰杯”第二届河南教育十大新闻人物火热评选中!!

点击参加评选,为你心目中的新闻人物投上一票>>>>
频道内容精选
[计算机考试]程序员必考的知识点
论坛/博客精选