暂无图片
oracle索引在线重建唯一索引
我来答
分享
yjccc
2021-11-08
oracle索引在线重建唯一索引

oracle分区表存在主键,主键索引为全局索引未分区,现在想要将主键索引重建为local索引,索引列不变

且存在需求:

1、在线重建,不影响dml操作。

2、需要在重建过程中保证数据唯一性,能够堵重。

有没有办法能够做到。

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
文成

使用在线重定义,或者新建一个空表,建立local索引,再把数据插入过来,再修改表名

暂无图片 评论
暂无图片 有用 1
暂无图片
yjccc
题主
2021-11-08
表数据量非常巨大,这样相当于整个表都重建了吧,有没有只处理索引的方式呢
Uncopyrightable

是不是需要删除全局索引,重新创建分区索引?不然会提示列含有索引?

暂无图片 评论
暂无图片 有用 0
yjccc
题主
2021-11-08
对,同样一个列上不能有两个索引,但是删除重建过程中还没有办法实现数据的堵重
薛晓刚

你就rebulid 这个索引 最后带上 online。再开启并行。你再测试环境试试 。基本不影响使用。

暂无图片 评论
暂无图片 有用 0
yjccc
题主
2021-11-08
alter index rebuild online 不支持local 参数吧,官方文档上面没有搜到
薛晓刚
答主
2021-11-08
那你可以drop以后,在create 后面再带local online等
yjccc
题主
2021-11-08
重建是可以的,但是有没有办法能在重建唯一索引的过程中保证索引列数据的唯一性呢
DarkAthena

如果表的数据量真的很大,而且dml操作很频繁,你这个操作要在线操作的话,就很危险了,无论是删除索引或者创建索引,都会把这个表都锁住,其他dml这个表的会话都会被卡住,而且数据量越大,建索引时间越长。

如果真的很有必要更换索引的话,建议发维护通知,挑选一个业务不繁忙的时间点,暂停对外服务,在静态数据的环境下搞定

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏