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的条件是全表扫描从而导致整个表被锁住了.如果该表是读写频繁的生产库那简直就是一场灾难,所有的线上读写请求都 ...
随机推荐
- J2EE进阶(十一)SSH框架整合常见问题汇总(二)
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of cn. ...
- Java四大名著下载大全(中文+英文)
转自:http://www.blogjava.net/kuuyee/archive/2013/06/03/400084.html 抽时间整理了一下Java四大名著,分享出来方便大家学习! Note 郑 ...
- SDL2源代码分析5:更新纹理(SDL_UpdateTexture())
===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...
- 1052. Linked List Sorting (25)
题目如下: A linked list consists of a series of structures, which are not necessarily adjacent in memory ...
- iOS开发之二:UIWindow与UIView
1.UIWindow UIWindow 继承自UIView,它是整个应用的容器,一般来说一个应用就只有一个UIWindow. 如果不使用storyboard 时,需要我们自己创建UIWindow.实例 ...
- UNIX环境高级编程——select、poll和epoll
一.select select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一. select的一个缺点在于单个进程能够监视的文件描述符的数量 ...
- metasploit使用
新版本的Metasploit分为Pro和Communicate版本,都可以使用WebUI的方式和Console的方式 下面主要介绍console方式的使用 1. use
- Java进阶(三十) 判断字符串编码类型
java 判断字符串编码类型 public static String getEncoding(String str) { String encode = "GB2312"; tr ...
- PHP中关于foreach的简单的用法总结
在php中使用循环方式输出数组里面的内容有好多种方式,我们既可以采用数组迭代循环的方式,当然也可以采用下面的foreach方法,日常开发中用到的最多就是它.下面我们就先看一下它的用法吧: //语法是: ...
- Leetcode_172_Factorial Trailing Zeroes
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42417535 Given an integer n, re ...