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选项删除被被标记 ...
随机推荐
- FineUploader 学习笔记
FineUploader既是开源的又是收费的,这个没搞懂. 先看效果:
- Windows Azure 微软公有云体验(三) IIS中文编码解决方案
Windows Azure 微软公有云已经登陆中国有一段时间了,现在是处于试用阶段,Windows Azure的使用将会给管理信息系统的开发.运行.维护带来什么样的新体验呢? Windows Azur ...
- 蓝牙 CoreBluetooth
baseK(相关基础知识)蓝牙常见名称和缩写 BLE:(Bluetooth low energy)蓝牙4.0设备因为低耗电,也叫BLEperipheral,central:外设和中心设备,发起链接的是 ...
- 截图技巧——鼠标按着不懂,同时点击截图快捷键(QQ为ctrl+alt+a)即可避免按下快捷键鼠标按下等操作消失截不到的尴尬。
截图技巧--鼠标按着不懂,同时点击截图快捷键(QQ为ctrl+alt+a)即可避免按下快捷键鼠标按下等操作消失截不到的尴尬.
- CSS3—三角形
话不多说看效果:演示效果,runjs 1.加了宽高和border,边用不同颜色显示,每条边都是一个梯形 2.去掉宽高,每条边都是三角形 3.只显示其中一条边就是不同的三角形了,是不是很简单,改变bor ...
- Bootstrap之导航栏(2015年-05年-20日)
<nav class="navbar navbar-default" style="border-color: transparent;">< ...
- 【转载】Kafka High Availability
http://www.haokoo.com/internet/2877400.html Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则 ...
- 160多个android开源代码汇总
第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...
- PHP学习笔记 - 进阶篇(9)
PHP学习笔记 - 进阶篇(9) 图形图像操作 GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或者直接生成新 ...
- SQL之存储过程,仿数组
create procedure update_ERPTreeList(@s1 varchar(),@s2 varchar()) As Begin declare @ss1 varchar(),@ss ...