压缩表列的修改


           
           
                     
                     
增加列:
oltp:可以增加一列指定默认值并且为not null的的列,如果指定默认值,但是可为空是不支持oltp压缩方式的
If a default value is specified for an added column, then the column must be NOT NULL. Added nullable columns with default values 
are not supported.
basic:你不能给增加的列指定默认值


删除列:
oltp:oltp 压缩方式可以支持列的删除列,但是为了避免长时间的解压缩和再压缩 可以设置 列的unused
DROP COLUMN is supported, but internally the database sets the column UNUSED to avoid long-running decompression and 

recompression operations.

basic:不支持删除列  Dropping a column is not supported.
basic方式不能指定默认值:
 
                             
SQL>  select table_name,blocks,compress_for From dba_tables where table_name='T3';
TABLE_NAME                         BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T3                                    302 BASIC
SQL> ALTER TABLE T3 ADD  X NUMBER;
表已更改。
SQL> ALTER TABLE T3 ADD  X1 NUMBER DEFAULT 0;
ALTER TABLE T3 ADD  X1 NUMBER DEFAULT 0
                  *
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作


                       
                       
oltp方式下,新加的列为空,那么不支持oltp压缩方式
SQL> select table_name,blocks,compress_for From dba_tables where table_name in ('T');
TABLE_NAME BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T 762 OLTP
SQL> alter table t add x number default 1;
表已更改。
                       
                       
SQL> insert into t (empno,ename,job,mgr,hiredate,sal,comm,deptno,x) values(7369,'smith','clerk',7902,sysdate,777,null,20,null);
已创建 1 行。
SQL> select *from t where ename='smith';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO X
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- ----------
7369 smith clerk 7902 11-4月 -14 777 20
SQL> update t1 set comm=null; 已更新196608行。 SQL> commit; 提交完成。
SQL> analyze table t compute statistics;
表已分析。
SQL> select table_name,blocks,compress_for From dba_tables where table_name in ('T');
TABLE_NAME BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T 1392 OLTP
我们可以看到t表在update 某一列是null后,全部解压缩,从上面我们可以看到update某列值为空,那么此行数据就会解压缩


实验目的,给test表增加一列空值,插入到t2表中,那么t2表中也会有一列是空值,测试插入oltp压缩表的数据有一列是空值,是否此行不适用oltp压缩
SQL> select table_name,blocks,compress_for From dba_tables where table_name in ('T2');
TABLE_NAME BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T2 762 OLTP
SQL> alter table test add x number;
表已更改。
SQL> truncate table t2;
表被截断。
SQL> alter table t2 add x number;
表已更改。
SQL> insert into t2 select *From test;
已创建196608行。
SQL> commit;
提交完成。
SQL> analyze table t2 compute statistics;
表已分析。
SQL> select table_name,blocks,compress_for From dba_tables where table_name in ('T2');
TABLE_NAME BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T2 496 OLTP

结论: 可以看到t2表是压缩,插入的数据中有一列是空值,不影响压缩效果,但是update某一列的为空值,那么此列就会解压缩

basic方式不支持删除列
SQL> select table_name,blocks,compress_for From dba_tables where table_name in ('T3'); TABLE_NAME BLOCKS COMPRESS_FOR
------------------------------ ---------- ------------
T3 302 BASIC
SQL> alter table t3 drop column x;
alter table t3 drop column x
*
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
   
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值