今天同事在删除表字段的时候时候报这样的错误。 数据库版本 ORACLE 10.2.0.1
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作。给出的错误提示很明显知道是什么问题。不能对压缩表进行DDL的删除操作。查询USER_TABLES数据字典发现该不是压缩表。
ORA-39726: 不支持对压缩表执行添加/删除列操作。给出的错误提示很明显知道是什么问题。不能对压缩表进行DDL的删除操作。查询USER_TABLES数据字典发现该不是压缩表。
下面在本机上演示一下。
1,创建一张普通的表并进行删除字段操作:
scott@DILM>create table test_com (id int,name varchar2(10));
表已创建。
scott@DILM>alter table test_com drop column id;
表已更改。
没问题
2,将表改为压缩表
scott@DILM>alter table test_com add id int;
表已更改。
scott@DILM>alter table test_com compress;
表已更改。
TABLE_NAME COMPRESS
------------------------------ --------
TEST_COM ENABLED
------------------------------ --------
TEST_COM ENABLED
3,模仿删除
scott@DILM>alter table test_com drop column id;
alter table test_com drop column id
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
4,将表修改为非压缩表,再进行删除操作:
scott@DILM>alter table test_com nocompress;
表已更改。
TABLE_NAME COMPRESS
------------------------------ --------
TEST_COM DISABLED
------------------------------ --------
TEST_COM DISABLED
scott@DILM>alter table test_com drop column id;
alter table test_com drop column id
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
alter table test_com drop column id
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
将压缩表修改成非压缩表之后居然报相同的错误
尝试一下能不能增加字段
scott@DILM>alter table test_com add address varchar(20);
表已更改。
可以看出增加字段是可以的,
再想一下,能不能增加默认值的字段:
scott@DILM>alter table test_com add shuxing varchar(20) default 'compress';
alter table test_com add shuxing varchar(20) default 'compress'
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
我了个去,报错。
5,该错误解决方法:
上网上搜索了一下,吸收成了自己的小知识(网络真好)
将要删除的字段置为UNUSED COLUMN 再进行删除。
scott@DILM>alter table test_com drop column id;
alter table test_com drop column id
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
alter table test_com drop column id
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
scott@DILM>alter table test_com set unused column id;
表已更改。
scott@DILM>alter table test_com drop unused columns;
表已更改。
通过以上测试总结一下:非压缩表置成压缩表之后,不能进行字段的删除操作,可以增加没有默认值的字段操作;将压缩属性去掉之后DROP,ADD操作报相同的错误。要达到目的,
首先把要删除的字段置成UNUSED再进行DROP.
上述针对的ORACLE版本为10.2.0.1 今天中午在公司的10.2.0.5版本数据库测试,发现有不同的结果。
压缩的表变成非压缩表的修改方法不一致,结果不同:
alter table test1 nocompress; --修改完后,不能进行后续的删除字段操作。
alter table test2 move nocompress;--执行之后,可以进行后续的删除字段操作。
不明白这两条语句有什么不同,不都是解压表吗?
以上为一己之见,有不同意见者,希望指出。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26873192/viewspace-731337/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26873192/viewspace-731337/