修复被设置为unused的字段

本文介绍了一种在Oracle数据库中恢复被设置为UNUSED的字段的方法。通过直接操作数据库的元数据表来实现字段的恢复,但该过程风险较高,建议在充分备份后由经验丰富的数据库管理员执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有个人问我如何修复被设置为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 行。

UPDATE COL$ SET NAME=’C’ WHERE OBJ#=32067 AND COL#=3;

UPDATE COL$ SET PROPERTY=0 WHERE OBJ#=32067;
SQL> COMMIT;

3、重启数据库
SQL> SELECT *   FROM SCOTT.TTTA;

          A           B C                    D
---------- ---------- ---------- ----------
          1           2 3                    4 [Page]
          2           3 4                    5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值