免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8487 | 回复: 6
打印 上一主题 下一主题

set unused column怎么重新启用该列? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-01 10:01 |只看该作者 |倒序浏览
30可用积分
set unused column怎么重新启用该列?

就是说一个列被设置了unused了,怎么重新启用这个列?

最佳答案

查看完整内容

设置unused列之后,并不是将该列数据立即删除,而是被隐藏起来,以下为恢复步骤:对数据字典不熟悉的同学测试前做好备份工作

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
2 [报告]
发表于 2010-05-01 10:01 |只看该作者
本帖最后由 duolanshizhe 于 2010-07-15 15:50 编辑

设置unused列之后,并不是将该列数据立即删除,而是被隐藏起来,以下为恢复步骤:对数据字典不熟悉的同学测试前做好备份工作
  1. SQL> conn hsy/hsy  
  2. Connected.

  3. SQL> create table t (a number,b number,c varchar2(10),d number);
  4. Table created.

  5. SQL> insert into t values(1,2,'A',3);   
  6. 1 row created.

  7. SQL> insert into t values(4,5,'B',6);
  8. 1 row created.

  9. SQL> commit;
  10. Commit complete.

  11. SQL> select * from t;

  12.          A          B C                   D
  13. ---------- ---------- ---------- ----------
  14.          1          2 A                   3
  15.          4          5 B                   6
  16.          
  17. SQL> alter table t set unused column c;
  18. Table altered.

  19. SQL> select * from t;

  20.          A          B          D
  21. ---------- ---------- ----------
  22.          1          2          3
  23.          4          5          6
  24.          
  25. SQL> SET LINESIZE 200
  26. SQL> SELECT OBJECT_ID,OBJECT_NAME FROM USER_OBJECTS;

  27. OBJECT_ID OBJECT_NAME
  28. ---------- -----------------------------------------------
  29.      70322 XPLAN_NTT
  30.      70321 XPLAN_OT
  31.      70323 XPLAN
  32.      70324 XPLAN
  33.      71929 2???
  34.      71930 T
  35.      70775 TEST_VIEW
  36.      69706 TEST_PROC

  37. 8 rows selected.

  38. SQL> conn hsy/hsy as sysdba
  39. Connected.

  40. SQL> select col#,intcol#,name from col$ where obj#=71930;

  41.       COL#    INTCOL# NAME
  42. ---------- ---------- ------------------------------
  43.          1          1 A
  44.          2          2 B
  45.          0          3 SYS_C00003_10071515:33:59$    [color=Red] ---原来的列名为C,被系统修了[/color]
  46.          3          4 D

  47. SQL> select cols from tab$ where obj#=71930;

  48.       COLS
  49. ----------
  50.          3                                [color=Red]   ----系统的字段数目也发生了变化 [/color]

  51. SQL> update col$ set col#=intcol# where obj#=71930;
  52. 4 rows updated.

  53. SQL> update tab$ set cols=cols+1 where obj#=71930;
  54. 1 row updated.

  55. SQL> update col$ set name='C' where obj#=71930 and col#=3;
  56. 1 row updated.

  57. SQL> update col$ set property=0 where obj#=71930;
  58. 4 rows updated.

  59. SQL> commit;
  60. Commit complete.

  61. SQL> startup force;     [color=Red]  这一步是必不可少的[/color]
  62. ORACLE instance started.

  63. Total System Global Area 1107296256 bytes
  64. Fixed Size                  2020160 bytes
  65. Variable Size             234884288 bytes
  66. Database Buffers          855638016 bytes
  67. Redo Buffers               14753792 bytes
  68. Database mounted.
  69. Database opened.
  70. SQL> select * from hsy.t;      

  71.          A          B C                   D
  72. ---------- ---------- ---------- ----------
  73.          1          2 A                   3
  74.          4          5 B                   6

复制代码

论坛徽章:
0
3 [报告]
发表于 2010-05-04 10:24 |只看该作者
现在知道,是没办法挽回的了。。。

谁进来接分吧?

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
4 [报告]
发表于 2010-05-04 12:22 |只看该作者
我来接分了。再还给你吧。晚上回家看看。现在手里没有环境。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
5 [报告]
发表于 2010-07-15 15:55 |只看该作者
这样能恢复也不错。感觉应该可以的。但是正常的SQL语句好像没有恢复的能力。楼上这个属于高级恢复

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
6 [报告]
发表于 2010-07-15 16:05 |只看该作者
这个是能恢复。不错。呵呵。新手实践了!
但是有一个问题,如果不记得以前的列名(比如set unused后多个表多个列,过几天不记得列名了 )那恢复的时候列名只能随便命名了。也不是万全之策。学习了。

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
7 [报告]
发表于 2010-07-15 16:47 |只看该作者
这种方式也仅仅在set unused column之后,较短时间内可以恢复,如果这部分数据被覆盖了,那也就恢复不出来的,所以还是取决于磁盘空间充足情况,仅仅是测试案例,也可能不成功,就像undo一样,不能保证所有情况都可以恢复。

论坛徽章:
0
8 [报告]
发表于 2010-07-15 17:00 |只看该作者
看来是没有100%完美恢复的可能了。

不知道oracle会不会在以后做个快速恢复的功能,我觉得有必要

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
9 [报告]
发表于 2010-07-15 17:08 |只看该作者
很多操作是不可逆的,所以需要谨慎操作

一般要set unused column操作也就是为了删除一列,所以oracle设计的时候就没有考虑可逆性
其实这个是可以弄一个可逆的

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
10 [报告]
发表于 2010-07-15 17:11 |只看该作者
很多操作是不可逆的,所以需要谨慎操作

一般要set unused column操作也就是为了删除一列,所以oracle设计 ...
duolanshizhe 发表于 2010-07-15 17:08



    弄成可逆的可能会增加ORACLE的其它负担。所以就这样了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP