ORACLE表的在线重定义

本文详细介绍了Oracle的在线表重定义,包括用途、限制条件和两种实现方法。重点讲解了利用DBMS_REDEFINITION包进行重定义的步骤,如创建中间表、同步、完成重定义等,并提及了分区表的特殊处理。此外,还提到了执行过程中的问题解决策略和所需权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在线表重定义的用处:
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参数在10.1或者更早版本,就要利用ALTER TABLE table_name SET UNUSED (M_ROW$$);来设
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值