如果您担心从大表中的所有行中删除列数据所需的时间长度,您可以使用该ALTER TABLE...SET UNUSED
语句。
该语句将一个或多个列标记为未使用,但实际上并未删除目标列数据或恢复这些列占用的磁盘空间。但是,标记为未使用的列不会显示在查询或数据字典视图中,并且会删除其名称,以便新列可以重用该名称。在大多数情况下,列上定义的约束、索引和统计信息也会被删除。例外是标记为未使用的 LOB 列的任何内部索引都不会被删除。
要将hiredate
和mgr
列标记为未使用,请执行以下语句:
ALTER TABLE hr.admin_emp SET UNUSED (hiredate, mgr);
您可以稍后通过发出ALTER TABLE...DROP UNUSED COLUMNS
语句删除标记为未使用的列。每当显式删除表的任何特定列或列时,也会从目标表中删除未使用的列。
数据字典视图USER_UNUSED_COL_TABS
,ALL_UNUSED_COL_TABS
或DBA_UNUSED_COL_TABS
可用于列出所有包含未使用列的表。该COUNT
字段显示表中未使用的列数。
SELECT * FROM DBA_UNUSED_COL_TABS; OWNER TABLE_NAME COUNT --------------------------- --------------------------- ----- HR ADMIN_EMP 2
对于外部表,SET UNUSED语句被透明地转换为ALTER TABLE DROP COLUMN语句。因为外部表仅由数据库中的元数据组成,所以DROP COLUMN语句的执行与SET UNUSED语句的执行等效。
Removing Unused Columns
该ALTER TABLE...DROP UNUSED COLUMNS
语句是唯一允许对未使用的列执行的操作。它从表中物理删除未使用的列并回收磁盘空间。
在随后的ALTER TABLE
语句中,CHECKPOINT
指定了可选子句。此子句导致在处理指定的行数后应用检查点,在本例中为 250。检查点减少了删除列操作期间累积的撤消日志量,以避免潜在的撤消空间耗尽。
ALTER TABLE hr.admin_emp DROP UNUSED COLUMNS CHECKPOINT 250;
如果对表启用高级行压缩,则可以删除表列。如果仅启用基本表压缩,则不能删除列。
标签:语句,删除,标记,DROP,UNUSED,使用,TABLE,ALTER From: https://www.cnblogs.com/wonchaofan/p/16756069.html