标记未使用的列

如果您担心从大表中的所有行中删除列数据所需的时间长度,您可以使用该ALTER TABLE...SET UNUSED语句。

该语句将一个或多个列标记为未使用,但实际上并未删除目标列数据或恢复这些列占用的磁盘空间。但是,标记为未使用的列不会显示在查询或数据字典视图中,并且会删除其名称,以便新列可以重用该名称。在大多数情况下,列上定义的约束、索引和统计信息也会被删除。例外是标记为未使用的 LOB 列的任何内部索引都不会被删除。

 

要将hiredatemgr列标记为未使用,请执行以下语句:

ALTER TABLE hr.admin_emp SET UNUSED (hiredate, mgr);

您可以稍后通过发出ALTER TABLE...DROP UNUSED COLUMNS语句删除标记为未使用的列。每当显式删除表的任何特定列或列时,也会从目标表中删除未使用的列。

数据字典视图USER_UNUSED_COL_TABS,ALL_UNUSED_COL_TABSDBA_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;

如果对表启用高级行压缩,则可以删除表列。如果仅启用基本表压缩,则不能删除列。

 

posted @ 2022-10-05 18:11  wongchaofan  阅读(30)  评论(0编辑  收藏  举报