drop column与set unused
8i以前,如果需要删除表中的列,需要删除表然后重新建。现在,但我们需要删除一个列时,可以有以下两种方法:
- Logical Delete
- Physical Delete
Logical Delete(逻辑删除)
我们需要删除表的一个列,通常采用物理删除(ALTER TABLE table_name DROP COLUMN column_name)。但如果是一个大表,这将是一个及其消耗时间和资源的操作。假若在系统繁忙时对大表做物理删除,甚至可能会收到 ORA-01562 - failed to extend rollback segment number string。这是因为在这个删除列的过程中,可能会消耗光整个undo segment.
此时,我们可以采用逻辑删除列:
ALTER TABLE table_name SET UNUSED (column_name);
ALTER TABLE table_name SET UNUSED (column_name1, column_name2);
逻辑删除后,被删除的列就不可见了。之后便可以用以下命令进行物理删除:
ALTER TABLE table_name DROP UNUSED COLUMNS;
对于大表,为了减少undo logs,我们可以使用CHECKPOINT选项在处理了特定行后来强制checkpoint操作。
ALTER TABLE table_name DROP UNUSED COLUMNS CHECKPOINT 5000;
我们可以在DBA_UNUSED_COL_TABS查看每个表中被设置为unused的列的数量。
Physical Delete(物理删除)
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE table_name DROP (column_name1, column_name2);
使用DROP COLUMN物理删除表中列的同时,也会物理删除表中unused的列。
测试代码:
SQL> create table test (t1 varchar2(10), t2 number, t3 number);
Table created
SQL> insert into test values ('Tough1',1,1);
1 row inserted
SQL> insert into test values ('Tough2',2,2);
1 row inserted
SQL> select * from test;
T1 T2 T3
---------- ---------- ----------
Tough1 1 1
Tough2 2 2--逻辑删除test表的t3列
SQL> alter table test set unused (t3);Table altered
--此时t3列已经不可见
SQL> select * from test;T1 T2
---------- ----------
Tough1 1
Tough2 2--我们可以在user_unused_col_tabs表中查看到test表中设置为unused列的数量
SQL> select * from user_unused_col_tabs;TABLE_NAME COUNT
------------------------------ ----------
T2 2
TEST 1--物理删除test表的t2列
SQL> alter table test drop column t2;Table altered
--物理删除test表t2列时,把之前逻辑删除的t3列也物理删除了
SQL> select * from user_unused_col_tabs;TABLE_NAME COUNT
------------------------------ ----------
T2 2SQL> select * from test;
T1
----------
Tough1
Tough2
drop column与set unused的更多相关文章
- [每日一题] OCP1z0-047 :2013-07-15 drop column
如下实验: gyj@OCM> Create table emp( 2 Empno number(4) not null, 3 First_name varchar2( ...
- SQLite无法使用drop column删除表字段解决办法
由于项目需求变更,我需要在sqlite数据库的表中删除一个字段,通用的sql操作语句如下: alter table record drop column name; 结果数据库提示如下错误: 搜索得知 ...
- 【数据库】——SQLite使用drop column删除表字段
由于项目需求变更,我需要在sqlite的表中删除一个字段,通用的sql操作语句如下: alter table task drop column custom_fields; 结果数据库提示如下错误: ...
- SQL SERVER删除列,报错."由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN ... 失败"
队友给我修改数据的语句.总是执行失败.很纳闷. 如下图: 仔细看了下这个列,并没有什么特殊.如下图: 但其确实有个约束: 'DF__HIS_DRUG___ALL_I__04E4BC85' . 为什么有 ...
- 如何drop大表的中不用的字段 set unused column
转自 http://foxmile.blog.163.com/blog/static/81169805201143191957184/ 我 们要删除表中不用的字段,如果直接drop column,对于 ...
- drop有default constraint的column
有时候我们在drop column的时候,会遇到一些default constraints而不能drop,如果我们已经知道constraint name,则可以用下面的语句先把constraint r ...
- set unused的用法(ORACLE删除字段)
set unused的用法(ORACLE删除字段) 一.问题 现场有一张大数据量的分区表,数据量在10G以上.因某种原因需要删除其中的某些字段.如果直接用alter table1 drop (colu ...
- ORACLE删除字段(set unused的用法)
一.问题 现场有一张大数据量的分区表,数据量在10G以上.因某种原因需要删除其中的某些字段.如果直接用 alter table1 drop (column1,column2); 或者alter tab ...
- Oracle SET UNUSED的用法
SET UNUSED的用法 原理:清楚掉字典信息(撤消存储空间),不可恢复. 可以使用 SET UNUSED选项标记一列或者多列不可用. 使用DROP SET UNUSED选项删除被被标记 ...
随机推荐
- memcached linux / win32 1.4.13
memcached-win32-1.4.13 点击下载 http://pan.baidu.com/s/1kTMABaf memcached -d install (安装为windows service ...
- 线程NSThread的使用
// // ZYThreadViewController.h // Thread // // Created by yejiong on 15/11/4. // Copyright © 2015年 z ...
- JPA与ORM以及Hibernate
- ACM一道关于素数查找的题
在ACM做这么一道题: 我用了最简单的查找素数的方法: bool isPrime(int n) { int t=n-1; while(t>2) { if(n%t==0) { return fal ...
- jboss之mod_cluster集群
本篇针对的mode_cluster版本是mod_cluster-1.2.6.Final-linux2-x64.tar.gz / mod_cluster-1.2.6.Final-windows-amd6 ...
- Python 基础【第四篇】参数
程序运行避免不了需要一些参数来支持 那么如何让程序接收参数呢?这里先简单的用sys模块的参数 sys.argv[]方法来实现参数获取 1.用法: import sys //导入sys模块后期会详细 ...
- jquery手写焦点轮播图-------解决最后一张无缝跳转第一张的问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CSS3秘笈第三版涵盖HTML5学习笔记9~12章
第9章,装饰网站导航 限制访问,处于隐私方面考虑,浏览器已经开始限制可以对伪类:visited应用哪些CSS属性了.其中包括对已访问过的链接定义color.background-color.borde ...
- javascript深入理解闭包
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...
- HttpClient(4.3.5) - ResponseHandler
The simplest and the most convenient way to handle responses is by using the ResponseHandler interfa ...