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
我的 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