oracle表 中删除一列

简介: 1、测试 在sys用户下创建测试表: SQL> create table t  as select object_id,object_name from dba_objects; 表已创建。

1、测试

在sys用户下创建测试表:

SQL> create table t  as select object_id,object_name from dba_objects;
表已创建。

SQL> select count(*)from t ;
 COUNT(*)
----------

48940

删除object_name 列:

SQL> alter table t drop column object_name;
alter table t drop column object_name
*
第 1 行出现错误:
ORA-12988: cannot drop column from table owned by SYS

我去。。。在sys用户下面的表是不能删除列的。。。。这下肿么办?简单。。。换个表空间,换个用户解决:

SQL> create table scott.t2 tablespace users as select  * from t ;
表已创建。

给表建个索引,一会测试用:

SQL> create index i_t1 on t2(object_id);
索引已创建。

 SQL> select segment_name,partition_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments where segment_name like '%T2%' ;

SEGMENT_NAME    PARTITION_NAME      SEGMENT_TYPE       TABLESPACE      BYTES   BLOCKS   EXTENTS
---------------                     --------------------           ------------------               ----------               ----------      ------            -------
I_T2                                                                           INDEX                     USERS                 983040      120             15
T2                                                                               TABLE                    USERS                 2097152    256             17

删除列,需要一段时间,其中会牵涉到表内锁的锁定。

SQL> alter table t2 drop column object_id;
表已更改。
再次查询段结构:
SQL> select segment_name,partition_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments where segment_name like '%T2%';

SEGMENT_NAME    PARTITION_NAME      SEGMENT_TYPE       TABLESPACE      BYTES   BLOCKS   EXTENTS
---------------                     --------------------           ------------------               ----------               ----------      ------            -------
T2                                                                               TABLE                    USERS                 2097152    256             17

索引也会一并删除的。。。。

注意:在大表上删除列的时候,一定要注意,它会花费很长的时间,锁住表,影响数据库性能。


在oracle数据库中,还有一种方法用来删除列:

SQL> alter table t2 set unused column object_id;
表已更改。

这条语句的意思是把object_id置为不可用,更改此列的名称(oracle内部明白),但是不会释放此列对应的空间。(我测试的时候,如果删除的列时索引列,然后再去找索引就找不到了,查得dba_indexes视图中的index_name 没有了,总行数也少了一行。猜测应该是索引也重命名了,已经不是索引了。但是空间估计也不会释放的。没有测试。。。)这个执行非常快,和truncate的机制差不多,在生产库中如果需要紧急应用,为了避免drop column操作锁住表,可以使用这个语句。等到系统有充足的时间时,我们再用另一个语句来释放空间:

alter table t2 drop unused columns;

表已更改。

这个操作是比较慢的。。








相关文章
|
存储 SQL Oracle
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
118 0
|
5月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-复制表的定义及数据
【1月更文挑战第5天】【1月更文挑战第14篇】在Oracle数据库中,复制表定义和复制表数据是两个常见的操作。
99 1
|
5月前
|
消息中间件 关系型数据库 Kafka
实时计算 Flink版产品使用合集之oracle cdc 抽取新增一张表 可以从savepoint恢复吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之oracle无主键的表支持同步吗如何实现
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
42 3
|
5月前
|
资源调度 Oracle 关系型数据库
实时计算 Flink版产品使用合集之同步Oracle数据时,一张表产生了大量的连接数,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL 存储 Oracle
Oracle中的Dual表:数据世界的“神奇小盒子”
【4月更文挑战第19天】Oracle的Dual表是一个虚拟表,仅含一行一列,常用于执行SQL函数、数据类型转换、测试语句和动态SQL。它是测试和便捷操作的工具,如获取当前日期(`SELECT SYSDATE FROM DUAL`)、数字转字符串(`SELECT TO_CHAR(12345) FROM DUAL`)。在存储过程、函数和触发器中也发挥重要作用,是数据库管理员的得力助手。
|
5月前
|
存储 Oracle 关系型数据库
Oracle系列之七:表的创建与管理
Oracle系列之七:表的创建与管理
|
10月前
|
Oracle 关系型数据库
Oracle - 表操作语句
Oracle - 表操作语句
41 0
|
Oracle 关系型数据库 数据库
Oracle数据库 查询所有表
Oracle数据库 查询所有表
166 1

推荐镜像

更多