oracle壓縮表(二)

space6212發表於2019-07-19
在低版本的oracle中,一旦對錶進行了壓縮,就不能新增刪除欄位了。但在10g下,可以對壓縮表進行結構的變更。
看下面的例子:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production

TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production

SQL> create table tom(id number) compress;

Table created

SQL> insert /*+ append */ into tom select rownum from dba_objects;

6186 rows inserted

SQL> commit;

Commit complete

SQL> alter table tom nocompress;

Table altered

SQL> alter table tom move;

Table altered

SQL> alter table tom add(b number);

alter table tom add(b number)

ORA-22856: 無法在物件表中新增列

在9201中,無論怎麼做無法對錶進行新增刪除列的操作。

在9204中,有了一點改進,雖然也不能用直接的方法對錶結構進行修改,但可以透過曲折的步驟修改壓縮表結構。

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

SQL> create table tom(id number) compress;

Table created.

SQL> insert /*+ append */ into tom select rownum from dba_objects;

30837 rows created.

SQL> commit;

Commit complete.

SQL> alter table tom add(b number);
alter table tom add(b number)
*
ERROR at line 1:
ORA-22856: cannot add columns to object tables


SQL> alter table tom nocompress;

Table altered.

SQL> alter table tom add(b number);
alter table tom add(b number)
*
ERROR at line 1:
ORA-22856: cannot add columns to object tables


SQL> alter table tom move;

Table altered.

SQL> alter table tom add(b number);

Table altered.

SQL> alter table tom compress;

Table altered.

SQL> alter table tom move;

Table altered.

歸結一下:
1) alter table xxx nocompress;
2) alter xxx move;
3) alter table xxx
4) alter table xxx compress;
5) alter table xxx move
6) 最後,如果有索引的話不要忘了重建索引

在10g下,oracle顯然修正了這個bug
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production


SQL> create table tom(id number) compress;

表已建立。

SQL> insert /*+ append */ into tom select rownum from dba_objects;

已建立51880行。

SQL> commit;

提交完成。

SQL> alter table tom add(b number);

表已更改。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63799/,如需轉載,請註明出處,否則將追究法律責任。

相關文章