暂无图片
oracle表没有date类型的字段可以用在线重定义做range分区吗
我来答
分享
暂无图片 匿名用户
oracle表没有date类型的字段可以用在线重定义做range分区吗
暂无图片 10M

oracle表没有date类型的字段可以用在线重定义做range分区吗

数据库有一张表80个G了没做分区,本来打算用重定义转成分区表,看了下字段类型,所有字段类型都是varchar2的,比如createtime、updatetime这些字段的类型都是varchar2的,请问可以用在线重定义转吗

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

这其实是两个问题,
1.varchar2字段是可以用于定义range分区的
2.在线重定义与你用什么东西分区没有关系,只要老表有主键(没有主键用ROWID也行,不过会麻烦一点),新定义的表能create出来,一般就能转

测试如下

--原表 CREATE TABLE table_o (ID NUMBER PRIMARY KEY, TIME varchar2(20)) ; --插入测试数据 insert into table_o values(123,'2021-01-03 12:00:00'); commit; --新表,用varchar2字段做range分区 CREATE TABLE table_n (ID NUMBER PRIMARY KEY, TIME varchar2(20)) PARTITION BY RANGE (TIME) (PARTITION P1 VALUES LESS THAN ('2021-01-01 00:00:00'), PARTITION P2 VALUES LESS THAN ('2021-02-01 00:00:00'), PARTITION P3 VALUES LESS THAN ('2021-03-01 00:00:00'), PARTITION P4 VALUES LESS THAN (MAXVALUE)); --校验是否可以重定义 begin DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'table_o', DBMS_REDEFINITION.CONS_USE_PK); end; / --开始重定义 begin DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'table_o', 'table_n'); end; / --模拟增量数据产生 insert into table_o values(456,'2021-02-03 12:00:00'); commit; --同步增量数据 begin dbms_redefinition.sync_interim_table(USER, 'table_o', 'table_n'); end; / --完成重定义 begin DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'table_o', 'table_n'); end; /
暂无图片 评论
暂无图片 有用 1
弱小可怜又无助
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
cqiwen

其实自己实验下就知道答案了。

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