Oracle100w数据大表割接
【现网问题】
最近在给咪咕做视频后台管理,移动那边希望页面上,码流字段可以支持1位小数,如8.0。自己查看数据库,发现码流字段是Number整型,也就是要换类型,打算直接换成varchar2。因为自己一般建表,除了主键外键或者特殊的,其余字段设置都喜欢设置成varchar2,适应业务场景更广。当然也可以选Number(*,1),保留1位小数,不过移动那边需求,再改了就蛋疼了。
以下:表名:tb_name 字段名:col_name 现网数据量估计100w
【失败尝试1】
alter table tb_name modify (col_name nvarchar2(128));
因为现网字段有数据,所以会报错误“ORA-01439:要更改数据类型,则要修改的列必须为空”。
注意:不是所有修改字段类型,有数据就都会报这个错误,像给nvarchar2增加长度,不会影响原来的数据,肯定就不报这个错。
【失败尝试2】
--修改原字段名col_name为col_namebak
alter table tb_name rename column col_name to col_namebak;
--增加一个和原字段名同名的字段col_name
alter table tb_name add col_name varchar2(128);
--将备份col_namebak数据更新到增加的字段col_name
update tb_name set col_name=col_namebak;
--更新完,删除备份字段col_namebak
alter table tb_name drop column col_namebak;
这样尽管不会报ORA-01439错误,但是因为现网有100w的内容,在更新完统一commit会,消耗很多时间,这样就需要分批次提交。
【成功尝试】
--待编辑cur的定义,检查sql的daemon
declare
v_count number;
begin
for cur in (select t.rowid from tb_name t) loop
update tb_name set col_name=col_namebak;
v_count := v_count + 1;
if v_count >= 5000 then
commit;
end if;
end loop;
commit;
end;
/
这样,更新语句会每5000次提交1次,消耗时间会缩短一半多。
【参考】
https://www.cnblogs.com/langtianya/p/6148491.html
https://blog.csdn.net/baple/article/details/43014961
Oracle100w数据大表割接的更多相关文章
- 删除数据-大表根据rowid来删除部分数据
偶遇需求,大表中需要删除部分数据.分批删除. declare TYPE type_table_rowid IS TABLE OF ROWID INDEX BY BINARY_INTEGER;table ...
- 一次MySQL两千万数据大表的优化过程,三种解决方案
问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...
- oracle 大表删除数据后,回收空间的问题。
在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理. 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据.我们可以把需要保留的数据转移到别的表,然后再把大 ...
- 【Spark调优】大表join大表,少数key导致数据倾斜解决方案
[使用场景] 两个RDD进行join的时候,如果数据量都比较大,那么此时可以sample看下两个RDD中的key分布情况.如果出现数据倾斜,是因为其中某一个RDD中的少数几个key的数据量过大,而另一 ...
- 【Spark调优】小表join大表数据倾斜解决方案
[使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...
- 大数据开发实战:Hive优化实战3-大表join大表优化
5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优 ...
- 大数据量表中,增加一个NOT NULL的新列
这次,发布清洗列表功能,需要对数据库进行升级.MailingList表加个IfCleaning字段,所有的t_User*表加个IfCleaned字段. 脚本如下 对所有的t_User表执行 a ...
- delete千万级别大表中的某部分数据
如果表很大--千万级别的数据,又不能做truncate 操作,只能 delete 表中某部分数据时可以用以下来执行,这种方式只对大表操作时比较有效率,数据量小时不考虑 --示例如下 declare c ...
- SQL Server从读写频繁的大表中删除大批量数据
如果我们直接用delete from语句来删除读写频繁的大表中的数据,很有可能会因为where的条件是全表扫描从而导致整个表被锁住了.如果该表是读写频繁的生产库那简直就是一场灾难,所有的线上读写请求都 ...
随机推荐
- Android 优质精准的用户行为统计和日志打捞方案
Android 自定义优质精准的用户行为和日志打捞方案 Tamic csdn博客 :http://blog.csdn.net/sk719887916/article/details/51398416 ...
- SDL2源代码分析3:渲染器(SDL_Renderer)
===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...
- 为学Android,我看了这些书
刚刚开始新的学习生活时,很容易走错方向,然后,这意味着不知道该学习什么,不知道该怎样学习,很显然,我写下这句话意味着我走过这样的路,为此,就付出了不小的代价,浪费了很多时间. 这篇文章当然 ...
- 转换xml格式的短信记录
<?xml version="1.0" encoding="UTF-8"?> <SMSRecord> <SMS> ...
- Django练习——博客系统小试
在上一篇博客Todolist的基础上(http://blog.csdn.net/hcx25909/article/details/24251427),本周继续进行实践,这次我要搭建一个简单的博客系统. ...
- Touch Handling in Cocos2D 3.x(六)
使英雄变成可触碰的对象 这是另一个非常有用的特性.很多用户需要捡起已经存在的英雄然后满屏幕移动它们.让我们按以下步骤实现该功能: 如果用户触摸屏幕空白位置,一个新的英雄将被创建 如果用户触摸一个已经存 ...
- Linux驱动基础:msm平台,modem等framework加载
msm平台,AP和CP封装在一起,公用一块内存.所以AP需要负责把整个modem, TZ , rpm等binary拷贝到内存中以供modem等subsystem去运行.那AP这边是怎么分配这些内存,又 ...
- ZooKeeper 客户端的使用
连接zk 1 2 cd bin zkCli.sh -timeout 5000 -server 27.154.242.214:5091 输入h,回车查看帮助 1 2 3 4 5 6 7 8 9 10 1 ...
- Dynamics CRM2011 同一个FORM表单同一个字段可以摆放多次
这是一个很细微的问题,细微到很容易被忽略(可能其他人没有但我确实是忽略了) 红框中的勾默认是勾选的,可能有人会像我一样,从没关心过这个地方还有个勾也从没关心过要把这个勾去掉,所以在表单上A.B两个节中 ...
- 《java入门第一季》之Arrays类前传(排序问题)
一:冒泡排序 /* * 数组排序之冒泡排序: * 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 * * 引申: * 利用冒泡排序法,可以获取一个数组的最大值(先冒泡排序,取最后一 ...