【unused】恢复unused的字段

xixuefeng Oracle, Utilities 2012-12-21 21:36:38 673 次浏览 【unused】恢复unused的字段已关闭评论

    我们知道 unused 是一个不可逆删除字段的一个动作,原理是先在数据字典中标识某字段为 unused,当系统空闲时,再执行彻底删除字段的动作,由于这个 unused 的动作在设计时就没打算让你恢复,所以,Oracle 这个做的也挺绝的,只有一个视图可以查看某张表有几个字段修改为 unused,剩下的动作就是什么时候在空闲时,将 unused 的字段彻底清除。

    既然 unused 的字段没有删除,只是修改了字典表,那么,我们恢复把它修改回来,那么 unused 的字段是否可以恢复呢?带着这个疑问,做了如下测试:
1、在scott用户下创建两张一样的表T1,T2,并插入部分测试数据

2、将T1表的z字段修改为unused

3、既然user_unused_col_tabs视图记录的是一个统计值,那么我们看看它是从那张表统计的,我们首先看看user_unused_col_tabs到底是个什么“东西”

4、我们之前创建了两张表,我们可以通过对比两张表的字典表有什么变化,然后将其更新回去,应该就能恢复

4、按照之前的思路,对基表进行更新(虚拟机测试环境,毫无问题)

5、验证是否恢复unused成功

6、小结
1)此种方法更新了基表,这是Oracle所不建议的,所以,大家在做unused的时候,一定要谨慎、小心,不要轻易的unused
2)修改基表后,不是立即生效的,需要重启数据库
3)我们在这个过程中,发现了bitand这个函数,这个函数Oracle自己用的相对比较多,我们作为管理、开发中几乎用不上这个函数,后续会给出这个函数的具体含义
回顶部