【原创】通过数据字典操作删除表的列

这几天做实验的时候不小心给dual表添加了一列,造成了数据库所用的drop操作都不能执行了,而sys用户下的表是不能通过alter table ... drop column ... 删除列,最后通过其他方式解决了,请参考:http://space.itpub.net/498744/viewspace-258714。但实际上也可以通过下面的方法直接删除列(主要是操作col$和tab$数据字典表)

注意:一定不要在生产数据库尝试下面的操作,要不然就算黎叔不生气,后果照样很严重

实验环境:WinXP SP2
数据库版本:10.2.0.1

具体步骤如下:

1.创建实验表test,包行a和b两列

sys@TEST>create table test
  2  (a number,
  3  b number);

Table created.

2.查看col$数据字典表中test表的记录

sys@TEST>select obj#,name from col$ where obj# in  (select object_id from dba_objects where object_name='TEST');

      OBJ# NAME
---------- ------------------------------
     61201 A
     61201 B

3.删除test表的中b列

sys@TEST>delete col$ where obj#=61201 and name='B';

1 row deleted.

sys@TEST>commit;

Commit complete.

4.查看tab$数据字典表中test表的记录。可以看到tab$中记录了表的列数

sys@TEST>select cols,intcols,kernelcols from tab$ where obj#=61201;

      COLS    INTCOLS KERNELCOLS
---------- ---------- ----------
         2          2          2

5.将test表的列数改为1

sys@TEST>update tab$ set cols=1,intcols=1,kernelcols=1 where obj#=61201;

1 row updated.

sys@TEST>commit;

Commit complete.

6.desc test表依旧有两列,改动没有成功?这是因为数据字典表是在数据库启动的时候载入的,重启数据库就可以了

sys@TEST>desc test
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- --------------------------
 A                                                              NUMBER
 B                                                              NUMBER

7.重启数据库

sys@TEST>shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

sys@TEST>startup
ORACLE instance started.

Total System Global Area  268435456 bytes
Fixed Size                  1248504 bytes
Variable Size             125829896 bytes
Database Buffers          134217728 bytes
Redo Buffers                7139328 bytes
Database mounted.
Database opened.

8.修改完成,可以看到test表只有一列了


sys@TEST>desc test
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- -------------------------
 A                                                              NUMBER

 

这个实验只是删除表的一列,实际上对列改名、添加列、删除表等操作也是可以类似的完成的,主要就是操作col$、tab$、obj$三张数据字典表表

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/498744/viewspace-258710/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/498744/viewspace-258710/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值