Ask Hoegh(9)——SET UNUSED列可以恢复吗?

问:

使用 SET UNUSED 选项可以标记一列或者多列不可用,对于SET UNUSED列可以恢复吗?
如果可以,如何恢复?


答:

首先我们了解一下SET UNUSED选项的功能和语法。

功能

使用 SET UNUSED 选项标记一列或者多列不可用, 设置UNUSED的作用是为了在cpu、内存等资源不充足的时候,先做上UNUSED标记再等数据库资源空闲的时候用DROP SET UNUSED删除。

语法

ALTER TABLE table SET UNUSED (多个列名,使用逗号隔开)  或 ALTER TABLE table SET UNUSED COLUMN colName;
ALTER TABLE table DROP UNUSED COLUMNS;

SET UNUSED列能否恢复?

设置 UNUSED 列之后,并不是将该列数据立即删除,而是被隐藏起来,物理上还是存在的,因此可以恢复,
但是恢复过程需要修改底层的数据字典并重启数据库,因此在执行 SET UNUSED操作时务必慎重!

恢复步骤

1.创建测试表

我们在scott用户下创建测试表hoegh,并插入4条数据。

点击(此处)折叠或打开

  1. SCOTT@HOEGH>
  2. SCOTT@HOEGH> create table hoegh(id number,name varchar2(20),dynasty varchar2(10));

  3. Table created.

  4. SCOTT@HOEGH> insert into hoegh values(1,'xishi','chunqiu');

  5. 1 row created.

  6. SCOTT@HOEGH> insert into hoegh values(2,'wangzhaojun','xihan');

  7. 1 row created.

  8. SCOTT@HOEGH> insert into hoegh values(3,'diaochan','donghan');

  9. 1 row created.

  10. SCOTT@HOEGH> insert into hoegh values(4,'yangyuhuan','tang');

  11. 1 row created.

  12. SCOTT@HOEGH> commit;

  13. Commit complete.

  14. SCOTT@HOEGH> desc hoegh
  15.  Name Null? Type
  16.  ----------------------------------------- -------- ----------------------------
  17.  ID NUMBER
  18.  NAME VARCHAR2(20)
  19.  AGE VARCHAR2(10)

  20. SCOTT@HOEGH> select * from hoegh;

  21.         ID NAME DYNASTY
  22. ---------- -------------------- ----------
  23.          1 xishi chunqiu
  24.          2 wangzhaojun xihan
  25.          3 diaochan donghan
  26.          4 yangyuhuan tang

  27. SCOTT@HOEGH>

2.设置并删除UNUSED列
我们选择hoegh表的第3列DYNASTY进行测试。

点击(此处)折叠或打开

  1. SCOTT@HOEGH>
  2. SCOTT@HOEGH> alter table hoegh set unused column DYNASTY;

  3. Table altered.

  4. SCOTT@HOEGH> desc hoegh
  5.  Name Null? Type
  6.  ----------------------------------------- -------- ----------------------------
  7.  ID NUMBER
  8.  NAME VARCHAR2(20)

  9. SCOTT@HOEGH>
  10. SCOTT@HOEGH> select * from hoegh;

  11.         ID NAME
  12. ---------- --------------------
  13.          1 xishi
  14.          2 wangzhaojun
  15.          3 diaochan
  16.          4 yangyuhuan

  17. SCOTT@HOEGH>

3.根据测试表的OBJECT_ID修改数据字典信息

首先我们查询hoegh表的对象编号,然后切换到sys用户下,根据对象编号修改底层的数据字典信息。

点击(此处)折叠或打开

  1. SCOTT@HOEGH>
  2. SCOTT@HOEGH> SELECT OBJECT_ID FROM USER_OBJECTS
  3. where OBJECT_NAME= 'HOEGH'; 2

  4.  OBJECT_ID
  5. ----------
  6.     102893

  7. SCOTT@HOEGH>
  8. SCOTT@HOEGH> conn / as sysdba
  9. Connected.
  10. SYS@HOEGH> select cols from tab$ where obj#=102893;

  11.       COLS
  12. ----------
  13.          2

  14. SYS@HOEGH> update col$ set col#=intcol# where obj#=102893;

  15. 3 rows updated.

  16. SYS@HOEGH>
  17. SYS@HOEGH> update tab$ set cols=cols+1 where obj#=102893;

  18. 1 row updated.

  19. SYS@HOEGH> update col$ set name='DYNASTY' where obj#=102893 and col#=3;

  20. 1 row updated.

  21. SYS@HOEGH> update col$ set property=0 where obj#=102893;

  22. 3 rows updated.

  23. SYS@HOEGH> commit;

  24. Commit complete.

  25. SYS@HOEGH>
  26. SYS@HOEGH> desc scott.hoegh
  27.  Name Null? Type
  28.  ----------------------------------------- -------- ----------------------------
  29.  ID NUMBER
  30.  NAME VARCHAR2(20)

  31. SYS@HOEGH>

4.重启数据库,确实测试表是否恢复

我们发现hoegh表的DYNASTY列仍然看不到,此时我们需要重启数据库。

点击(此处)折叠或打开

  1. SYS@HOEGH>
  2. SYS@HOEGH> shu immediate
  3. Database closed.
  4. Database dismounted.
  5. ORACLE instance shut down.
  6. SYS@HOEGH> startup
  7. ORACLE instance started.

  8. Total System Global Area 941600768 bytes
  9. Fixed Size 1348860 bytes
  10. Variable Size 717228804 bytes
  11. Database Buffers 218103808 bytes
  12. Redo Buffers 4919296 bytes
  13. Database mounted.
  14. Database opened.
  15. SYS@HOEGH> desc scott.hoegh
  16.  Name Null? Type
  17.  ----------------------------------------- -------- ----------------------------
  18.  ID NUMBER
  19.  NAME VARCHAR2(20)
  20.  DYNASTY VARCHAR2(10)

  21. SYS@HOEGH>
  22. SYS@HOEGH> select * from scott.hoegh;

  23.         ID NAME DYNASTY
  24. ---------- -------------------- ----------
  25.          1 xishi chunqiu
  26.          2 wangzhaojun xihan
  27.          3 diaochan donghan
  28.          4 yangyuhuan tang

  29. SYS@HOEGH>
  30. SYS@HOEGH>
至此,恢复完成。
                                                                                                                                                                                            ~~~~~~~ the end~~~~~~~~~
                                                                                                                                                                                                               hoegh
                                                                                                                                                                                                           2016.10.24


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

转载于:http://blog.itpub.net/30162081/viewspace-2126980/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值