1 删除表中的列
可以使用drop column子句来删除一个表中的列。
如:
alter table dept80 dorp (job_id);
复制
2 set unused选项
可以使用set unused选项标记一个或多个列为unused。
使用drop unused columns语句来删除标记为unused的列。
可以指定online关键字来表示在标记unused的列时允许对表进行DML操作。
语法:
ALTER TABLE <table_name> SET UNUSED(<column_name> [ , <column_name>]) [online]; OR ALTER TABLE <table_name> SET UNUSED COLUMN <column_name> [ , <column_name>] [online]; ALTER TABLE <table_name> DROP UNUSED COLUMNS;
复制
设置UNUSED选项将一个或多个列标记为未使用,以便在系统资源需求较低时可以删除它们。指定这个子句并不会实际从表中的每一行删除目标列。因此,响应时间比执行DROP子句要快。UNUSED列被视为已删除,即使它们的列数据仍保留在表行中。当一列被标记为UNUSED后,就不能访问该列。SELECT *查询不会从UNUSED列中检索数据。此外,标记为UNUSED列的名称和类型在DESCRIBE语句期间不会显示,可以向表中添加一个与UNUSED列同名的新列。设置的UNUSED信息存储在USER_UNUSED_COL_TABS字典视图中。可以指定ONLINE关键字来表示在标记UNUSED列时允许对表进行DML操作。
3 DROP UNUSED COLUMNS
删除UNUSED列从表中删除当前标记为未使用的所有列。当需要从表中未使用的列中回收额外的磁盘空间时,可以使用此语句。如果表中没有未使用的列,则语句返回时不会出现错误。
如:
ALTER TABLE dept80 SET UNUSED (last_name); ALTER TABLE dept80 DROP UNUSED COLUMNS;
复制
删除unused的列;
4 恢复unused的列
示例:在scott用户下创建表t,将t表的id列设为unused,然后恢复
SCOTT@PROD> create table t (id number,name varchar2(10)); SCOTT@PROD> insert into t values(10,'TEST'); SCOTT@PROD> commit; SCOTT@PROD> alter table t set unused (id) online; SCOTT@PROD> col object_name for a30 SCOTT@PROD> SELECT OBJECT_ID,OBJECT_NAME FROM USER_OBJECTS where object_name='T'; OBJECT_ID OBJECT_NAME ---------- ------------------------------ 74130 T SCOTT@PROD> conn / as sysdba Connected. SYS@PROD> select col#,intcol#,name from col$ where obj#=74130; COL# INTCOL# NAME ---------- ---------- ------------------------------ 0 1 SYS_C00001_20070908:05:36$ 1 2 NAME SYS@PROD> select cols from tab$ where obj#=74130; COLS ---------- 1 SYS@PROD> update col$ set col#=intcol# where obj#=74130; 2 rows updated. SYS@PROD> select col#,intcol#,name from col$ where obj#=74130; COL# INTCOL# NAME ---------- ---------- ------------------------------ 1 1 SYS_C00001_20070908:05:36$ 2 2 NAME SYS@PROD> update tab$ set cols=cols+1 where obj#=74130; 1 row updated. SYS@PROD> update col$ set name='ID' where obj#=74130 and col#=1; 1 row updated. SYS@PROD> update col$ set property=0 where obj#=74130; 2 rows updated. SYS@PROD> commit; Commit complete. SYS@PROD> startup force ORACLE instance started. Total System Global Area 838860800 bytes Fixed Size 8626240 bytes Variable Size 591400896 bytes Database Buffers 230686720 bytes Redo Buffers 8146944 bytes Database mounted. Database opened. SYS@PROD> conn scott/tiger Connected. SCOTT@PROD> select * from t; ID NAME ---------- ------------------------------ 10 TEST
复制
5 练习题
在scott用户下模拟创建表并且对表的列set unused,之后添加列,列名与被设置为unused列的列名和数据类型一样,通过数据字典查询unused的信息,最后删除。将整体操作步骤列出
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1295次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
777次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
702次阅读
2025-03-06 09:41:49
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
DarkAthena
569次阅读
2025-03-04 14:33:31
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
534次阅读
2025-03-05 00:42:34
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
456次阅读
2025-03-13 14:38:19
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
453次阅读
2025-03-04 21:56:13
【ORACLE】char类型和sql优化器发生的“错误”反应
DarkAthena
406次阅读
2025-03-04 23:05:01
什么,oracle 主机用户被删了?原来是虚惊一场!
Lucifer三思而后行
405次阅读
2025-03-03 21:12:09
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
348次阅读
2025-03-12 21:27:56