前言 在 Oracle 9i 出现之前,你只能通过 MOVE 或导出和导入的方式来进行表格重定义,因此表格重定义的过程可能相当漫长或者说是一个离线过程,在此期" name="description" />

9i新特性之——在线表格重定义研究1

发表于:2007-06-22来源:作者:点击数: 标签:
MI LY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 前言 在 Oracle 9i 出现之前,你只能通过 MOVE 或导出和导入的方式来进行表格重定义,因此表格重定义的过程可能相当漫长或者说是一个离线过程,在此期

   

MILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前言

 

Oracle9i出现之前,你只能通过MOVE或导出和导入的方式来进行表格重定义,因此表格重定义的过程可能相当漫长或者说是一个离线过程,在此期间应用程序对该表的操作将失败,特别是大型的分区表上的操作(上次coolyl)就问到了这个问题,我们当时是建议他用move partition的办法解决,但是move可能很耗时并可能引起全局索引的失效(不过9i已经有了update global indexes)。除了这个,如果用exp,我们也不能保证exp的时候该表的数据没有改变(除非单用户),而imp更是一个漫长的过程。

 

为了解决这个问题,Oracle9i在其DBMS_REDEFINITION软件包中引入了在线表格重定义功能。这个特性对24/7Oracle数据库来说非常重要,这是由于DBA现在可以在保持表格的可更新性的同时重新组织表格的结构。

 

然而,在线表格重定义也不是完美无缺的。下面列出了Oracle9i重定义过程的部分限制。

 

·你必须有足以维护两份表格拷贝的空间。

 

·你不能更改主键栏。

 

·表格必须有主键。

 

·必须在同一个大纲中进行表格重定义。

 

·在重定义操作完成之前,你不能对新加栏加以NOT NULL约束。

 

·表格不能包含LONGBFILE以及用户类型(UDT)。

 

·不能重定义链表(clustered tables)。

 

·不能在SYSSYSTEM大纲中重定义表格。

 

·不能用具体化视图日志(materialized view logs)来重定义表格;不能重定义含有具体化视图的表格。

 

·不能在重定义过程中进行横向分集(horizontal subsetting)。

原文转自:http://www.ltesting.net