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. powerdesigner反转数据库的设计图

    PowerDesigner导入sql文件 1:点击 2:弹出该页面,点击确定 3:弹出一下页面,点击下面按钮选择文件 4:点击确定完成 二 .表转换为中文的执行脚本及步骤 执行脚本为:Option E ...

  2. MInio python

    # Install Minio library. # $ pip install minio # # Import Minio library. from minio import Minio # I ...

  3. log4net配置使用

    1.配置文件 app.config <?xml version="1.0" encoding="utf-8" ?> <configuratio ...

  4. django网站地图sitemap

    网站地图是根据网站的结构.框架.内容,生成的导航网页,是一个网站所有链接的容器.很多网站的连接层次比较深,蜘蛛很难抓取到,网站地图可以方便搜索引擎或者网络蜘蛛抓取网站页面,了解网站的架构,为网络蜘蛛指 ...

  5. OpenModelica部分库缺失问题解决

    问题:写下面这段代码时,保存时没有出错,但执行时提示找不到initialState这个函数. when time > redTime then state1 := Modelica.Math.R ...

  6. LaTeX 交叉引用系统简介

    目录 摘要 1. 简介 2. 指定标签或标记符 3. 标签的位置 4. 引用的生成和更新 5. 引用相关的警告信息 6. 扩展引用功能的宏包 6.1 varioref宏包 6.2 cleveref宏包 ...

  7. public,protected,private

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  8. zlib 2.1.8 编译遇到的问题以及解决方法

    环境:win7 x64 + vs2013 1.用vs2013打开zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln进行编译 包含了下面的的多个项目: miniunz: ...

  9. Mac python3.6 安装即使用 psycopg2

    学习下python调用PostgreSQL数据库 首先需要安装 psycopg2 python3安装: pip install psycopg2-binary 官网地址: https://pypi.o ...

  10. C++ 输出文件编码控制

    c++ 读写文件需要包含fstream头文件. 读文件声明形如:  ifstream fin("路径"): 写文件声明形如:ofstream fout("路径" ...