时间:2021-07-01 10:21:17 帮助过:110人阅读
原理: 清除掉字典信息中列名等相关信息,没有回收存储空间,被 set unused 的列不可恢复。 可以使用 SET UNUSED 选项标记一列或者多列不可用。 使用DROP SET UNUSED 选项删除被被标记为不可用的列。 语法: ALTER TABLE table SET UNUSED (COLlist多个) 或
如何修复被设置为UNUSED的字段,以下的方法可以恢复(以下步骤执行前要做好备份),没有经验的DBA不要轻易尝试。
1、创建实验表TTTA
SQL> CREATE TABLE TTTA ( A INTEGER,B INTEGER,C VARCHAR2(10),D INTEGER);
表已创建。
SQL> INSERT INTO TTTA VALUES (1,2,'3',4);
已创建 1 行。
SQL> INSERT INTO TTTA VALUES (2,3,'4',5);
已创建 1 行。
SQL> COMMIT;
提交完成。
ALTER TABLE TTTA SET UNUSED COLUMN C;
2、以下进行恢复
SQL> SELECT OBJ# FROM OBJ$ WHERE NAME='TTTA';
      OBJ#
----------
     32067
SELECT COL#,INTCOL#,NAME FROM COL$ WHERE OBJ#=32067;
      COL#    INTCOL# NAME
---------- ---------- ------------------------------
         1          1 A
         2          2 B
         0          3 SYS_C00003_08031720:09:55$   被UNUSED的字段
         3          4 D
SQL> SELECT COLS FROM TAB$ WHERE OBJ#=32067;
      COLS
----------
         3      ------字段数变为3了
SQL> UPDATE COL$ SET COL#=INTCOL# WHERE OBJ#=32067;
已更新4行。
SQL> UPDATE TAB$ SET COLS=COLS+1 WHERE OBJ#=32067;
已更新 1 行。
SQL>UPDATE COL$ SET NAME='C' WHERE OBJ#=32067 AND COL#=3;
SQL>UPDATE COL$ SET PROPERTY=0 WHERE OBJ#=32067;
SQL> COMMIT;
3、重启数据库
SQL> SELECT * FROM SCOTT.TTTA;
         A          B C                   D
---------- ---------- ---------- ----------
         1          2 3                   4
         2          3 4                   5
恢复完成
来源:(http://blog.sina.com.cn/s/blog_5eb210c50100gpx6.html) - Oracle set unused的用法_qiqi_新浪博客