zoukankan      html  css  js  c++  java
  • 修改表增加字段默认值default

    对个生产库的表增加1个字段.字段类型是INT型, 表数据有2千万条, alter table table_name add xxoo number(4) default  0 ;

    因此 不仅要修改字典,还要刷新全部数据.

    1) 在ALTER sql中有带缺省值,ORACLE会直接刷新全部的记录。
    2) 在ALTER sql中没有带缺省值,ORACLE只会影响到后来的记录。

    alter table table_name add xxoo number(4) default null;

    Table altered
     
    Executed in 0.062 seconds

    带有default null 就可以了

     alter table table_name add xxoo number(4) default 0;
     
    Table altered

    Executed in 1.625 seconds

    原来的话 要更新所有的行,会导致UNDO段占用

    使用语句Alter table a add test number(10) default 0;更新一个大表中字段时,表有四个分区,数据达到几十亿行,增加一个字段竟然要几个小时的时间,修改语句加上Nologging ,怎么没有作用呢?去找是不是哪有锁了呢,使用语句 select * from dba_locks where lock_id1=33784;发现Session_id为14的一直在执行,那么他在执行什么呢!查询一下吧。

    使用语句:

    select a.sid,a.username,c.SQL_TEXT from v$session a, dba_locks b,v$sqlarea c
      where b.lock_id1=33784 and a.SID=b.session_id
       and a.SQL_ADDRESS=c.ADDRESS;

    哦,原来他在Update Test 字段值为0.至此总结到,原来Alter之后做的竟然是Update,也明白了为什么Undo表空间会爆涨。去掉Default 0,呵呵,很快就OK了。

    建议没有必要时慎用Default

  • 相关阅读:
    python 文件操作
    高级函数
    运行cadence dpi例子出现的问题
    我对验证的一些理解【zz】
    archlinux 下挂载ntfs分区,显示"permission denied"
    vs2012安装SharePoint 2013的项目模版
    Iptables工具的使用
    webmin简介
    cassandra简介
    linux中端口扫描
  • 原文地址:https://www.cnblogs.com/james1207/p/3343358.html
Copyright © 2011-2022 走看看