Oracle set unused的用法

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;

set unused不会真地删除字段。

除了alter table drop field外,也可以

alter table set   unused field;

alter table drop unused;

set unused系统开销比较小,速度较快,所以可以先set unuased,然后在系统负载较小时,再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;

COUNT(*)

100000

2>

SQL> ALTER TABLE T1 SET UNUSED COLUMN A CASCADE CONSTRAINTS;

不要马上drop column,应该先set unused让column无法使用,避开系统尖峰时间再来处理删除栏位里的资料,要注意的是一但你set unused column,这个栏位是无法再回复使用的。

3>

重点来了,若你的栏位有一百万笔资料,我们应该避免一次写入那么多的undo log,所以我准备每删除一千笔资料就commit一次。

SQL> alter table t1 drop unused columns checkpoint 1000;

Table altered.

在离峰的时间进行这样的动作,应该可以避免 ORA-01562 的错误发生。

刚才有个人问我如何修复被设置为UNUSED的字段,我考虑了一下,以下的方法可以恢复(以下步骤执行前要做好备份),没有经验的DBA不要轻易尝试。

1、创建实验表TTTA

SQL> CREATE TABLE TTTA ( A INTEGER,B INTEGER,C VARCHAR2(10),D INTEGER);

表已创建。

SQL> INSERT INTO TTTA VALUES (1,2,'3',4);

已创建 1行。

SQL> INSERT INTO TTTA VALUES (2,3,'4',5);

已创建 1行。

SQL> COMMIT;

提交完成。

SQL> ALTER TABLE TTTA SET UNUSED COLUMN C;

2、以下进行恢复

SQL> SELECT OBJ# FROM OBJ$ WHERE NAME='TTTA';

OBJ#

----------

32067

SQL>SELECT COL#,INTCOL#,NAME FROM COL$ WHERE OBJ#=32067;

COL#    INTCOL# NAME

---------- ---------- ------------------------------

1          1 A

2          2 B

0          3 SYS_C00003_08031720:09:55$   被UNUSED的字段

3          4 D

SQL> SELECT COLS FROM TAB$ WHERE OBJ#=32067;

COLS

----------

3      ------字段数变为3了

SQL> UPDATE COL$ SET COL#=INTCOL# WHERE OBJ#=32067;

已更新4行。

SQL> UPDATE TAB$ SET COLS=COLS+1 WHERE OBJ#=32067;

已更新 1行。

UPDATE COL$ SET NAME='C' WHERE OBJ#=32067 AND COL#=3;

UPDATE COL$ SET PROPERTY=0 WHERE OBJ#=32067;

SQL> COMMIT;

3、重启数据库

SQL> SELECT * FROM SCOTT.TTTA;

A          B C                   D

---------- ---------- ---------- ----------

1          2 3                   4

2          3 4                   5

恢复完成

oracle unused 语法_【转】Oracle set unused的用法相关推荐

  1. oracle declare语法_基于oracle数据库存储过程的创建及调用

    教学大纲: PLSQL编程:Hello World.程序结构.变量.流程控制.游标. 存储过程:概念.无参存储.有参存储(输入.输出). JAVA调用存储存储过程. 1. PLSQL编程 1.1. 概 ...

  2. java 获取oracle表结构_获取Oracle中所有表的列表?

    回答(19) 2 years ago 我们可以从以下查询获取所有表格,包括列详细信息: SELECT * FROM user_tab_columns; 2 years ago 使用sqlplus更好地 ...

  3. ocp oracle 考试报名_获得Oracle认证对拓展职业前景的影响

    知识就是力量 通过考试和考试成绩固然很重要,但您在学习过程中所掌握的知识才是您职业成功的坚实基础.在备考过程中,获得的知识和经验才是您真正的财富. Oracle Certified Associate ...

  4. oracle 逆向递归查询_[转]ORACLE递归查询

    递归数据库处理,也称为材料清单 或零件分解问题,适用于包括人力资源.制造业.金融市场和教育在内的多种应用领域.这类处理中所涉及的数据称为 树状结构 数据或 层次结构 数据.Oracle 数据库长期以来 ...

  5. oracle mysql 乱码_解决Oracle数据库中文乱码

    查询当前Oracle所用编码 在服务器上查看数据库服务器字符集 select userenv('language') from dual; USERENV('LANGUAGE') ---------- ...

  6. oracle proedure 文件_关于oracle存储过程读取文件

    你的位置: 问答吧 -> Oracle -> 问题详情 关于oracle存储过程读取文件 问题:我知道只能读取固定目录的文件,我想问的是 1,文件名可以通过参数传入存储过程中吗? 2,怎么 ...

  7. oracle mysql 效率_关于oracle 数据库效率的优化

    最近项目快要快要结束了,我们最终还是要面对我们一直存在的问题,就是数据库查询编码的问题,但是通过各个方面观察我们发现数据库仅仅200w条数据查询议一天的数据也就仅仅不到两万条数据没结果查了将近两分钟, ...

  8. mysql远程连接oracle数据库服务器配置_远程访问oracle数据库

    Remote access to the oracle database 首先我们在linux下安装的Oracle软件,并创建了数据库,配置了监听 服务器端: 需要开启监听(lsnrctl start ...

  9. 12c oracle 修改内存_关于Oracle数据库12c 新特性总结

    概述 今天主要简单介绍一下Oracle12c的一些新特性,仅供参考. 参考: http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NE ...

  10. oracle 中大于等于_针对oracle安装参数调整方法

    solaris针对oracle安装的shmmax参数调整方法 安装数据库不能拘泥于联机文档,最近看到好几个跑oracle的sun主机上,都把和数据库内存使用相关的操作系统内核参数shmmax设置成4G ...

最新文章

  1. 一份以太坊入门完全指南(非程序员免进)。
  2. 8除以2表示什么意思_平均配速8'12'是什么意思
  3. Mysql循环语句,死循环解决办法
  4. Neo4j:Cypher –删除重复的节点
  5. linux man 手册翻译,close (linux man) 翻译
  6. python用xlrd怎么清洗数据_利用Python进行数据清洗
  7. 基于Linux解决登录ssh客户端失败问题—sshd error: could not load host key
  8. 逻辑斯蒂回归:家庭买私家车的概率
  9. 油耗虚高保养贵,便宜车就活该问题多多?
  10. android 动态创建数据库表,简析Android数据库中创建表与LitePal的基本用法
  11. java plugin firefox_Firefox 中使用 Java 插件
  12. stm32 OV7670/摄像头模块颜色区域定位(腐蚀中心算法)
  13. Python flag用法
  14. axure 倒计时_Axure 8.0实例 |自定义倒计时制作流程
  15. 北京中医药大学《计算机基础》平时作业1
  16. JVM(2)垃圾收集器
  17. 09组团队项目-Alpha冲刺-5/6
  18. 制作一幅好地图的10个技巧
  19. [渝粤教育] 西南科技大学 会计学原理 在线考试复习资料(1)
  20. 12个 pip 命令

热门文章

  1. phpcms V9.6.0版本整合百度ueditor1.4.3.2,包括水图片上传水印
  2. Vitamio不支持特性列表(本文会持续更新 2013-03-13)
  3. 字符HTML编码类(转)
  4. Kafka中Producer与Broker之间的交互
  5. idea module重命名后去掉后面带着的原来的名字
  6. spring 之 AOP 理解
  7. 企业在信息化建设上乘之选:软件快速开发框架
  8. 为何不让AI做更正确的抉择?人类要逐渐交出控制权
  9. postman 使用
  10. disconf-web安装