一、在线表重定义的用处:
1、修改表或者簇的存储参数
2、在相同schema的表空间之间,可以移动表或簇
注意:如果表的可以停止dml操作,则可以利用alter table move来进行表空间的更改
3、增加、修改或者删除一个或多个表或簇的列
4、非簇表可以做添加或删除分区的支持
5、改变分区的结构
6、更改简单表的分区物理属性,在相同schema的表空间之间,也可以将其分区更改表空间
7、更改物化视图日志或an Oracle Streams Advanced Queueing队列表的物理属性
8、添加支持并行查询
9、通过重建表或簇来减少碎片
注意:在很多cases里,可以通过在线段shrink的简单方法来减少碎片
10、转换堆组织表为索引组织表,反之亦可
11、一个关系表转换成有对象列的表,反之亦可
12、一个对象表转换成一个关系表或者有对象列的表,反之亦可
二、限制在线表的重定义
1、在sys和system schema下的表不能使用在线重定义
2、临时表不能
3、索引组织表的溢出表不能被独立的在线重定义
4、有bfile的列的表不能重新定义
5、表具有 fine-grained access control (row-level security)不能被在线重定义
6、表有long列,要将其转换成clobs,long raw列转换成blobs可以做在线重定义,lob列也可作
7、表的重定义不能做nologging
8、具有物化视图日志的表不能做在线重定义
9、可以利用cast操作来做数组到嵌套表的列映射。反之则不行
10、其他的一些信息你可以参考官方文档
三、在线表的重定义有两种方法:OEM里的Reorganize Objects wizard或利用DBMS_REDEFINITION包.
介绍后一种方法,因为后一种会了,前一种肯定会了
method1:Performing Online Redefinition with DBMS_REDEFINITION的大概步骤介绍:
1、选择by key或者by rowid来做重定义。
by key:利用主键或者伪主键来进行重定义,伪主键就是具有not null约束组件的所有字段唯一键。重定义前后表版本应该
有相同的主键列。这个是首选和默认的重定义方法。
by rowid:如果没有键是可用的那么就用by rowid。用by rowid,就会有一个名为M_ROW$$的隐含列添加到重定义后表里。如果在重定义完之后,最好把M_ROW$$列给删除或者标记无效。在索引组织表上不能用这种方法。
如果利用by rowid来做重定义,compatible参数在1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)