前言
在Oraclei出现之前你只能通过MOVE或导出和导入的方式来进行表格重定义因此表格重定义的过程可能相当漫长或者说是一个离线过程在此期间应用程序对该表的操作将失败特别是大型的分区表上的操作(上次coolyl)就问到了这个问题我们当时是建议他用move partition的办法解决但是move可能很耗时并可能引起全局索引的失效(不过i已经有了update global indexes)除了这个如果用exp我们也不能保证exp的时候该表的数据没有改变(除非单用户)而imp更是一个漫长的过程
为了解决这个问题Oraclei在其DBMS_REDEFINITION软件包中引入了在线表格重定义功能这个特性对/Oracle数据库来说非常重要这是由于DBA现在可以在保持表格的可更新性的同时重新组织表格的结构
然而在线表格重定义也不是完美无缺的下面列出了Oraclei重定义过程的部分限制
·你必须有足以维护两份表格拷贝的空间
·你不能更改主键栏
·表格必须有主键
·必须在同一个大纲中进行表格重定义
·在重定义操作完成之前你不能对新加栏加以NOT NULL约束
·表格不能包含LONGBFILE以及用户类型(UDT)
·不能重定义链表(clustered tables)
·不能在SYS和SYSTEM大纲中重定义表格
·不能用具体化视图日志(materialized view logs)来重定义表格不能重定义含有具体化视图的表格
·不能在重定义过程中进行横向分集(horizontal subsetting) |