卖水果的

操作系统、数据库、个人观点及学习过程

« Windows、Linux、AIX进入 SQL*PLUS 的简单总结在Oracle 9 下实验表空间的传输 »

压缩表维护列的经过

 生产数据库一直运行正常,今天要在某张大表上增加一列

SQL>alter table SAL_t_XXXXXXX add P075 number default 0 ;

alter table SAL_t_XXXXXXX add P075 number default 0 ;

ORA-22586: cannot add columns to object tables

SQL>

后又执行如下语句: ( remark2 一个未使用的列)

SQL>alter table SAL_t_XXXXXXX drop column remark2 ;

alter table SAL_t_XXXXXXX drop column remark2 ;

ORA-12996: cannot drop system-generated virtual column

SQL>

失败后,尝试下面语句

SQL> alter table SAL_t_XXXXXXX rename column Remark2 to r2

Table altered

SQL>

居然成功了!

症状基本可以这样描述了:

SAL_t_XXXXXXX 不能新增列,也不能删除表,但是可以修改列名.

难道是: 空间不足了,

执行下面语句

SQL>alter table SAL_t_XXXXXXX pctfree 20 ;

table altered

SQL>alter table SAL_t_XXXXXXX add p075 number default 0 ;

alter table SAL_t_XXXXXXX drop column remark2 ;

ORA-12996: cannot drop system-generated virtual column

SQL>

问题还是存在

google 一下

找到几篇篇类似情况的贴子,

大概原因是:表做过 compress 操作,不过实在是想不起来了,先解决问题

大概通过3个方法

1.修改表为非压缩状态

2.把表改名,重建一个结构相同的表.数据导过来

3.把问题表 exp 导出,nocomperss 导入

方法1

SQL>alter table SAL_t_XXXXXXX move nocompress ;

table altered

SQL>

alter table SAL_t_XXXXXXX add P075 number default 0 ;

ORA-22586: cannot add columns to object tables

SQL>

失败.

方法2:(之前,手工把问题表的TRIX等都导出来)

SQL> create table a select * from SAL_t_XXXXXXX ;

table created

SQL>rename SAL_t_XXXXXXX to b ;

table renamed

SQL>rename b to SAL_t_XXXXXXX

table renamed

SQL>drop table b ;

table droped

SQL>-- 执行问题表的TRIX

编译无效对象

SQL>alter table SAL_t_XXXXXXX add P075 number default 0 ;

table altered

SQL>

第三种方法没有测试...

问题解决之

 

 

  • 相关文章:
  • quote 1.xiaoy
  • 为什么会有产生这样的问题呢? 向兄长学习,避免生产出现此类问题.
  • 2011/11/23 14:39:48 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427  Theme By Bokezhuti.cn

CopyRight 2009-2011 msgde.net , All rights reserved
联系站长:wmxcn2000@sina.com|MSN联系:msgde.net@hotmail.com