set unused的用法(ORACLE删除字段)

一、问题

现场有一张大数据量的分区表,数据量在10G以上。因某种原因需要删除其中的某些字段。如果直接用
alter table1 drop (column1,column2);
或者alter table1 drop column column1;和alter table1 drop column column2; 
的话,需要执行很长时间,这期间该表被锁,会影响到其它应用。

二、解决方法

使用set unused,等系统空闲时再drop unused。

1.

alter table table1 set unused (column1,column2);
或者
alter table table1 set unused column column1;
alter table table2 set unused column column2;

2.

alter table drop unused columns checkpoint 1000;

三、知识点(set unused的用法)

原理:清楚掉字典信息(撤消存储空间),不可恢复。

可以使用 SET UNUSED 选项标记一列或者多列不可用。
使用DROP SET UNUSED 选项删除被标记为不可用的列。

语法:

ALTER TABLE table SET UNUSED (COLlist多个) 或者 ALTER TABLE table SET UNUSED COLUMN col单个;

ALTER TABLE table DROP UNUSED COLUMNS [checkpoint 1000];

set unused不会真地删除字段。

除了alter table drop field外,也可以
alter table set unused field;
alter table drop unused;

set unused系统开销比较小,速度较快,所以可以先set unused,然后在系统负载较小时,再drop。如系统负载不大,也可以直接drop。

不管用何种方法,都不会收回空间。

如果你有这个需求,要删除某一个表上的某些列,但是由于这个表拥有非常大量的资料,如果你在尖峰时间直接执行 ALTER TABLE ABC DROP(COLUMN);可能会收到
ORA-01562 - failed to extend rollback segment number string,
这是因为在这个删除列的过程中你可能会消耗光整个RBS,造成这样的错误出现,因此这样的做法并不是一个好方法,就算你拼命的加大RBS空间来应付这个问题,也不会是个好主意。

我的建议做法:

1>
CREATE TABLE T1 (A NUMBER,B NUMBER);

SQL> begin
2 for i in 1 …… 100000
3 loop
4 insert into t1 values (i,100);
5 end loop;
6 commit;
7 end;

SQL> select count(*) from t1;

set unused的用法(ORACLE删除字段)的更多相关文章

  1. ORACLE删除字段(set unused的用法)

    一.问题 现场有一张大数据量的分区表,数据量在10G以上.因某种原因需要删除其中的某些字段.如果直接用 alter table1 drop (column1,column2); 或者alter tab ...

  2. oracle删除字段中的空格、回车及指定字符

    create or replace procedure PROC_test is --Description:删除字段中的指定字符(回车chr(13).换行chr(10)) --By LiChao - ...

  3. oracle删除字段时候判断字段是否存在

    declare v_count number; begin ) into v_count from all_tab_columns a where a.TABLE_NAME = 'XXX1' and ...

  4. oracle 删除字段中空格

    update  sales_report set region =  REGEXP_REPLACE(region,  '( ){1,}', '')

  5. Oracle 增加修改删除字段

    Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...

  6. oracle删除表字段和oracle表增加字段

    这篇文章主要介绍了oracle表增加字段.删除表字段修改表字段的使用方法,大家参考使用吧   添加字段的语法:alter table tablename add (column datatype [d ...

  7. Oracle SET UNUSED的用法

    SET UNUSED的用法 原理:清楚掉字典信息(撤消存储空间),不可恢复.    可以使用 SET UNUSED选项标记一列或者多列不可用.    使用DROP SET UNUSED选项删除被被标记 ...

  8. Oracle删除修改字段

    Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...

  9. Oracle 增加修改删除字段与添加注释

    添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...

随机推荐

  1. 剥开比原看代码13:比原是如何通过/list-balances显示帐户余额的?

    作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchai ...

  2. C# linq 最大、最小对象的扩展

    public static class LinqExtension { public static T MaxBy<T, TR>(this IEnumerable<T> en, ...

  3. 深究CSS中Position的属性和特性

    一.position的概念 作为布局必不可缺少的元素之一,深究其属性以及一些注意点是非常必要的. 定义:规定元素的定位类型. position属性: 属性 描述 常用性 absolute 生成绝对定位 ...

  4. 转 lightmap

    小记一下用法与问题,时更 surface shader就不用操心了,自带lightmap计算 主要是vertex fragment shader部分 Unity5 bake light map有三种情 ...

  5. hbase非结构化数据库与结构化数据库比较

    目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不 ...

  6. vue中兄弟组件间通讯

    vue2.0中兄弟组件间的通讯是通过eventBus(事件发布订阅)实现的. eventBus.js import Vue from 'vue' const eventBus = new Vue() ...

  7. P481tabtenn0

    编程环境为Qt Creator 4.0.3 (Community) tabtenn0.h #ifndef TABTENN0_H #define TABTENN0_H #include <stri ...

  8. 最短路径遍历所有的节点 Shortest Path Visiting All Nodes

    2018-10-06 22:04:38 问题描述: 问题求解: 本题要求是求遍历所有节点的最短路径,由于本题中是没有要求一个节点只能访问一次的,也就是说可以访问一个节点多次,但是如果表征两次节点状态呢 ...

  9. (转)c# 互斥锁

    ----------------------------------------------文章1---------------------------------------------- 互斥锁( ...

  10. 利用WCF实现上传下载文件服务

    使用WCF上传文件           在WCF没出现之前,我一直使用用WebService来上传文件,我不知道别人为什么要这么做,因为我们的文件服务器和网站后台和网站前台都不在同一个机器,操作人员觉 ...