问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

有约束的表可以使用oracle在线重定义将普通表改为分区表吗

发布网友 发布时间:2022-04-28 13:56

我来回答

2个回答

懂视网 时间:2022-04-30 14:16

table myPartition(id number,code varchar2(5),identifier varchar2(20)); insert into myPartition values(1,‘01‘,‘01-01-0001-000001‘); insert into myPartition values(2,‘02‘,‘02-01-0001-000001‘); insert into myPartition values(3,‘03‘,‘03-01-0001-000001‘); insert into myPartition values(4,‘04‘,‘04-01-0001-000001‘); commit; alter table myPartition add constraint pk_test_id primary key (id);

2.检查下这张表是否可以在线重定义,无报错表示可以,报错会给出错误信息:

--管理员权限执行begin
SQL> exec dbms_redefinition.can_redef_table(‘scott‘, ‘myPartition‘);
PL/SQL procedure successfully completed

–管理员权限执行end

3.建立在线重定义需要的中间表,表结构就是要将原测试表重定义成什么样子,这里建立的是按全宗号分区的分区表:

create table t_temp(id number,code varchar2(5),
identifier varchar2(20)) partition by range(id)( 
  partition TAB_PARTOTION_01 values less than (2), 
  partition TAB_PARTOTION_02 values less than (3), 
  partition TAB_PARTOTION_03 values less than (4), 
  partition TAB_PARTOTION_04 values less than (5), 
  partition TAB_PARTOTION_OTHER values less THAN (MAXVALUE) 
);

alter table t_temp add constraint pk_temp_id2 primary key (id);

4.启动在线重定义:

--管理员权限执行sql命令行执行
exec dbms_redefinition.start_redef_table(‘scott‘, ‘myPartition‘, ‘t_temp‘);
--管理员权限执行sql命令行执行

这里dbms_redefinition包的start_redef_table模块有3个参数,分别是SCHEMA名字、原表的名字、中间表的名字。

5.启动在线重定义后,中间表就可以查到原表的数据。

select * from t_temp;

6.由于在生成系统中,在线重定义的过程中原数据表可能会发生数据改变,向原表中插入数据模拟数据改变。

insert into myPartition values(5,‘05‘,‘05-01-0001-000001‘);
commit;

7.此时原表被修改,中间表并没有更新。

select * from myPartition;
select * from t_temp;

8.使用dbms_redefinition包的sync_interim_table模块刷新数据后,中间表也可以看到数据更改

--管理员权限执行sql命令行执行,同步两边数据
exec dbms_redefinition.sync_interim_table(‘scott‘, ‘myPartition‘, ‘t_temp‘);
--管理员权限执行sql命令行执行

查询同步后的两边数据是否一致:

select * from myPartition;
select * from t_temp;

9.结束在线重定义

--管理员权限执行sql命令行执行,结束重定义
exec dbms_redefinition.finish_redef_table(‘scott‘, ‘myPartition‘, ‘t_temp‘);
--管理员权限执行sql命令行执行

10.验证数据

select * from myPartition;
select * from t_temp;

11.查看各分区数据是否正确

select table_name, partition_name from user_tab_partitions where table_name = ‘myPartition‘;

select * from myPartition partition(TAB_PARTOTION_01);

12.在线重定义后,中间表已经没有意义,删掉中间表


drop table t_temp purge;

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用ORACLE在线重定义将普通表改为分区表

标签:oracle

热心网友 时间:2022-04-30 11:24

客户有张大表,在设计的时候是分区表,按全宗号分了77个分区,最近发现对这张表查询速度明显比之前慢了许多,经过分析发现这张表的分区不见啦,变成了普通表
问了看法人员才知道,原来他对这张表做了好多次ALTER TABLE XX RENAME和CREATE TABLE XX AS SELECT *操作,由于CREATE TABLE AS(CTAS)操作只会建立同样的表结构而不会建立分区,导致这张表由分区表变成了普通的堆表,那么就要将这张表再改回分区表,普通表改为分区表的方法很多,但是对于7*24的系统来说,就只能用ORACLE 10g版本推出的新功能-在线重定义了!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
可以提前退出“三支一扶”计划吗 能提前退出“三支一扶”计划吗 绒沙金礼品制作工艺 什么叫绒沙金 榖皮巾的意思是什么 IPOD新版本安装会不会影响内存 我的是ipod 4 8G的,我下载了东西以后发现内存是占了,但是显示不出来东西... 为什么我的IPOD下载程序只用了4G却显示用了6.4G 间谍过家家阿尼亚表情包汇总(间谍过家家阿尼亚次子) 关于"化物语"中的女主 战场原黑仪(戦场ヶ原ひたぎ)的1440*900宽屏壁纸... 智能电视能通过歌华有线看腾讯会议吗? 小米电视是否习以腾讯会议? 多吃橘子,对身体有好处吗? 橙汁的功效作用 橙汁的作用和功效是什么? 喝带皮桔子榨汁的好处 POP如何摆放 怎样去掉MP3你的人声,提取背景音乐。 如何从mp3中分离出背景音乐 怎么样把mp3格式音乐中的曲子提取出来 用什么文件从MP3中提取背景音乐 用开水蒸馒头还是用冷水蒸好 亚惠酒酿元宵粥的做法和图片 这种酒酿元宵怎么制作、具体步骤。 颜色和黏稠度用什么弄的… 惠美美食广场酒酿元宵的做法 亚惠快餐里 酒酿元宵的做法 亚惠美食里的酒酿圆子怎么做? 亚惠里的酒酿元宵怎么做? 微信电脑版双击打不开 ios 使用手势pop界面会响应什么方法 oracle表中已经有数据还能创建分区吗 oracle中,已经建成的表怎么添加分区 如何对oracle中已建好的表追加分区 oracle数据量有多大时可用在线重定义 Oracle对现有的表建立表分区,可能会有什么风险,特别是程序端。_百度知... oracle执行表的在线重定义语句报错 oracle 表已有分区怎么加分区 oracle 表分区拆分最大分区 在线应用 何时用,如何建Oracle分区表 胸部的POP怎么练? 梦到死去的姥姥活过来追着我跑 求黑色霸气动漫情侣头像 尼泊尔金刚菩提子佛珠手串手链怎么盘玩 肿眼泡怎么化眼线 跪求黑暗系的情侣头像啊,各位大神有吗 男女通用,黑暗系,情侣头像,有的发给我,我给采纳 有木有像这样风格的黑暗哥特 猎奇的之类的情侣头像 你好 想问下 PPT里 画曲线的时候 没颜色 有解决办法吗? PPT2010-插入-形状-曲线-颜色是白的,怎么才能更改曲线的默认颜色 法制教育心得体会(六年级)