Oracle 会在 table 变大时自动压缩它吗?

Does Oracle auto-compress the table as it grows large?

我的 database.Earlier 中有一个 table,在执行 DROP DDL 时没有问题。但是几天后 table 变大了,我尝试了 DROP DDL,它说:

SQL Error: ORA-39726: unsupported add/drop column operation on compressed tables.

根据我的 DBA,没有命令 运行 压缩 table。

As per my DBA no commands were run to compress the table.

您可以通过查询[DBA|ALL|USER]_TABLES视图来查看压缩状态。

例如,

SQL> CREATE TABLE t(col1 NUMBER, col2 NUMBER) COMPRESS;

Table created.

SQL> SELECT table_name, compression,compress_for
  2  FROM user_tables
  3  WHERE table_name ='T';

TABLE_NAME COMPRESS COMPRESS_FOR
---------- -------- ----------------------------
T          ENABLED  BASIC

删除列取决于压缩类型。对于为 直接路径插入 压缩的 table,您不能删除该列。但是,如果 table 被压缩 for all operations,那么你可以使用 SET UNUSED/ DROP UNUSED.

如何删除压缩的列 table

唯一的办法是:

  • 解压整个table
  • 使列 未使用
  • 然后删除未使用的列

SQL> ALTER TABLE t SET UNUSED COLUMN ename;

Table altered.

SQL> ALTER TABLE t MOVE NOCOMPRESS PARALLEL 4;

Table altered.

SQL> ALTER TABLE t DROP UNUSED COLUMNS;

Table altered.

SQL> SELECT table_name, compression,compress_for
  2  FROM user_tables
  3  WHERE table_name ='T';

TABLE_NAME COMPRESS COMPRESS_FOR
---------- -------- ----------------------------
T          DISABLED