【现网问题】

最近在给咪咕做视频后台管理,移动那边希望页面上,码流字段可以支持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数据大表割接的更多相关文章

  1. 删除数据-大表根据rowid来删除部分数据

    偶遇需求,大表中需要删除部分数据.分批删除. declare TYPE type_table_rowid IS TABLE OF ROWID INDEX BY BINARY_INTEGER;table ...

  2. 一次MySQL两千万数据大表的优化过程,三种解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  3. oracle 大表删除数据后,回收空间的问题。

    在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理. 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据.我们可以把需要保留的数据转移到别的表,然后再把大 ...

  4. 【Spark调优】大表join大表,少数key导致数据倾斜解决方案

    [使用场景] 两个RDD进行join的时候,如果数据量都比较大,那么此时可以sample看下两个RDD中的key分布情况.如果出现数据倾斜,是因为其中某一个RDD中的少数几个key的数据量过大,而另一 ...

  5. 【Spark调优】小表join大表数据倾斜解决方案

    [使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...

  6. 大数据开发实战:Hive优化实战3-大表join大表优化

    5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优 ...

  7. 大数据量表中,增加一个NOT NULL的新列

      这次,发布清洗列表功能,需要对数据库进行升级.MailingList表加个IfCleaning字段,所有的t_User*表加个IfCleaned字段.   脚本如下 对所有的t_User表执行 a ...

  8. delete千万级别大表中的某部分数据

    如果表很大--千万级别的数据,又不能做truncate 操作,只能 delete 表中某部分数据时可以用以下来执行,这种方式只对大表操作时比较有效率,数据量小时不考虑 --示例如下 declare c ...

  9. SQL Server从读写频繁的大表中删除大批量数据

    如果我们直接用delete from语句来删除读写频繁的大表中的数据,很有可能会因为where的条件是全表扫描从而导致整个表被锁住了.如果该表是读写频繁的生产库那简直就是一场灾难,所有的线上读写请求都 ...

随机推荐

  1. UNIX网络编程——shutdown 与 close 函数 的区别

    假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...

  2. [GitHub]第三讲:简单分支操作

    Git 最核心的操作对象是版本( commit ),最核心的操作技巧就是分支. 什么是分支? 仓库创建后,一旦有了新 commit,默认就会放到一个分支上,名字叫 master.前面咱们一直看到的多个 ...

  3. 论文系统Step1:从日志记录中提取特定信息

    论文系统Step1:从日志记录中提取特定信息 前言 论文数据需要,需要实现从服务器日志中提取出用户的特定交互行为信息.日志内容如下: 自己需要获取"请求数据包一行的信息"及&quo ...

  4. MySql下视图的创建

     (1).第一类:create view v as select * from table; (2).第二类:create view v as select id,name,age from ta ...

  5. log4j 日志限制大小 拆分成30个 不按日期分日志 按大小拆分 按日期产生

    先说一下按日期产生,不解释,大家都懂,这种方法的缺点就是很吃硬盘空间 log4j.rootLogger=INFO,logfile,stdout log4j.logger.java.sql=DEBUG, ...

  6. TCP的定时器系列 — 超时重传定时器

    主要内容:TCP定时器概述,超时重传定时器.ER延迟定时器.PTO定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd Q:一条TCP连接会使用 ...

  7. iOS语音通话(语音对讲)

    中间参考了别人的Demo,下载地址不记得了. 因为项目需要做一个语音对讲功能,其实说白了就是类似QQ的语音通话,但是资料少之又少,研究了好久,才跟同事弄出一个粗略的版本.我记性不好,所以来记录一下,也 ...

  8. struts2 令牌 实现源代码 JSP

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  9. 《java入门第一季》之二维数组

    /* 格式2: 数据类型[][] 数组名 = new 数据类型[m][]; m:表示这个二维数组有多少个一维数组. 列数没有给出,可以动态的给.这一次是一个变化的列数. */ class Array2 ...

  10. Cocos2D的OALSimpleAudio预加载音频

    在OALSimpleAudio接口中,没有委托机制和通知机制告诉你什么时候预加载完成.也不需要这样的机制. 如下代码: //Listing 11-1. Preloading a background ...