如何从大型 Oracle 数据库中删除列?

问题描述 投票:0回答:1

Oracle中有一张表,大小约为200GB,通过

ALTER TABLE table DROP COLUMN
列删除其中的列将需要15个小时以上。 有哪些方法可以加快速度,或者至少,如果不可能加快速度,如何正确地做到这一点?真的只是
DROP COLUMN
吗?

Oracle 数据库 11g 企业版版本 11.2.0.3.0 - 64 位生产版

我读到过关于

SET UNUSED
的内容,但似乎是同一件事?相反,它不会物理地清除桌子,您仍然需要使用
DROP UNUSED COLUMNS
我还发现了一些关于
SHRINK SPACE
的东西,但我不明白它是如何工作的以及如何使用它。应该和
SET UNUSED
一起组合吗?尽管至少很明显这不能并行完成。唯一能做到的就是删除时不锁表

附注将一张表复制到一张新表不适合我们

P.S.S.我重新阅读了很多论坛,感觉不可能快速并行地做到这一点(例如,您可以并行创建索引 -

CREATE INDEX PARALLEL
)。但所有的问题和答案都是旧的,所以我决定提出一个新问题,希望有任何新的功能或程序

database oracle
1个回答
1
投票

要么:

  1. 正如你所做的那样

    ALTER TABLE table_name DROP COLUMN column_name

  2. CREATE TABLE table_name_new AS
    SELECT col1, col2, col3, col4 -- Excluding the column you want to drop
    FROM   table_name
    

    然后:为新表添加索引、约束等;删除旧表;并将新表重命名为旧表的名称。

© www.soinside.com 2019 - 2024. All rights reserved.