恢复SET UNUSED操作

    技术2022-05-20  45

     

    边学习边分享哈,以下方法已经过本人测试

    可以使用 SET UNUSED 选项标记一列或者多列不可用。

    使用DROP SET UNUSED 选项删除被被标记为不可用的列。

    语法:

       ALTER TABLE table SET UNUSED (COLlist多个) 或者 ALTER TABLE table SET UNUSED COLUMN col单个;

       ALTER TABLE table DROP UNUSED COLUMNS;

     

    SET UNUSED不会真地删除字段,可恢复。

     

    如何修复被设置为UNUSED的字段,以下的方法可以恢复(以下步骤执行前要做好备份),没有经验的DBA不要轻易尝试。

    创建实验表TEST_UNUSED_COLUMNS

    1、CREATE TABLE TEST_UNUSED_COLUMNS

    (

    TEST_1 VARCHAR2(2),

    TEST_2 VARCHAR2(2),

    TEST_3 VARCHAR2(2),

    TEST_4 VARCHAR2(2),

    TEST_5 VARCHAR2(2)

    );

    INSERT INTO TEST_UNUSED_COLUMNS VALUES('A1','A2','A3','A4','A5');

    INSERT INTO TEST_UNUSED_COLUMNS VALUES('B1','B2','B3','B4','B5');

    INSERT INTO TEST_UNUSED_COLUMNS VALUES('C1','C2','C3','C4','C5');

    COMMIT;

    2、SELECT * FROM TEST_UNUSED_COLUMNS;

    --查询结果

    TEST_1  TEST_2  TEST_3  TEST_4  TEST_5

    A1      A2      A3      A4      A5

    B1      B2      B3      B4      B5

    C1      C2      C3      C4      C5

    3、 

    ---设置TEST_5不可用

    ALTER TABLE TEST_UNUSED_COLUMNS SET UNUSED COLUMN TEST_5;  

    SELECT * FROM TEST_UNUSED_COLUMNS; 

    --查询结果

    TEST_1  TEST_2  TEST_3  TEST_4

    A1      A2      A3      A4     

    B1      B2      B3      B4      

    C1      C2      C3      C4  

    以下进行恢复

    1、用管理员身份登录,sys、system均可

    2、查找TEST_UNUSED_COLUMNS在数据库中分配的编号

    SSELECT OBJ# FROM OBJ$ WHERE NAME='TEST_UNUSED_COLUMNS';

    --查询结果

    OBJ#

    53916

    --

    SELECT COL#,INTCOL#,NAME FROM COL$ WHERE OBJ#=53916;

    --查询结果

    COL#  INTCOL#  NAME

    1      1        TEST_1

    2      2        TEST_2

    3      3        TEST_3

    4      4        TEST_4

    0      5        SYS_C00005_11022820:28:45$

    3、更新

    UPDATE COL$ SET COL#=INTCOL# WHERE OBJ#=53916;

    UPDATE TAB$ SET COLS=COLS+1 WHERE OBJ#=53916;

    UPDATE COL$ SET NAME='TEST_5' WHERE OBJ#=53916 AND COL#=5;

    UPDATE COL$ SET PROPERTY=0 WHERE OBJ#=53916;

    commit;

    4、重启数据库

    SELECT * FROM TEST_UNUSED_COLUMNS;

    --查询结果

    TEST_1  TEST_2  TEST_3  TEST_4  TEST_5

    A1      A2      A3      A4      A5

    B1      B2      B3      B4      B5

    C1      C2      C3      C4      C5

    恢复完成

     


    最新回复(0)