开发者社区> lfreeali> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[20150430]列删除的简单恢复.txt

简介: [20150430]列删除的简单恢复.txt SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ ...
+关注继续查看

[20150430]列删除的简单恢复.txt

SCOTT@test> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> create table tt as select * from dept ;
Table created.

SCOTT@test> @desc tt
Name     Null?    Type
-------- -------- ----------------------------
DEPTNO            NUMBER(2)
DNAME             VARCHAR2(14)
LOC               VARCHAR2(13)

SCOTT@test> alter table tt set unused column dname;
Table altered.

SCOTT@test> column name format a30
SCOTT@test> select obj#,col#,segcol#,name,intcol#,property from sys.col$ where obj# in (select object_id from dba_objects where owner=user and object_name='TT');
      OBJ#       COL#    SEGCOL# NAME                              INTCOL#   PROPERTY
---------- ---------- ---------- ------------------------------ ---------- ----------
    302306          1          1 DEPTNO                                  1          0
    302306          0          2 SYS_C00002_15043010:08:49$              2      32800
    302306          2          3 LOC                                     3          0

--可以发现SEGCOL#还存在,说明真正的数据并没有删除.

SCOTT@test> select DEPTNO,"SYS_C00002_15043010:08:49$",loc from tt;
select DEPTNO,"SYS_C00002_15043010:08:49$",loc from tt
              *
ERROR at line 1:
ORA-00904: "SYS_C00002_15043010:08:49$": invalid identifier

--如果这时要对出来如何处理呢?

SCOTT@test> select rowid,obj#,col#,segcol#,name,intcol#,property from sys.col$ where obj# in (select object_id from dba_objects where owner=user and object_name='TT');
ROWID                    OBJ#       COL#    SEGCOL# NAME                              INTCOL#   PROPERTY
------------------ ---------- ---------- ---------- ------------------------------ ---------- ----------
AAAAACAABAAAXJFAAQ     302306          1          1 DEPTNO                                  1          0
AAAAACAABAAAXJFAAR     302306          0          2 SYS_C00002_15043010:08:49$              2      32800
AAAAACAABAAAXJFAAS     302306          2          3 LOC                                     3          0

--
alter system flush shared_pool;
update  sys.col$ set col#=2 ,property=0 where rowid='AAAAACAABAAAXJFAAR';
update  sys.col$ set col#=3 ,property=0 where rowid='AAAAACAABAAAXJFAAS';
SYS@test> column name format a30
SYS@test> select rowid,obj#,col#,segcol#,name,intcol#,property from sys.col$ where obj# in (select object_id from dba_objects where owner='SCOTT' and object_name='TT');
ROWID                    OBJ#       COL#    SEGCOL# NAME                              INTCOL#   PROPERTY
------------------ ---------- ---------- ---------- ------------------------------ ---------- ----------
AAAAACAABAAAXJFAAQ     302306          1          1 DEPTNO                                  1          0
AAAAACAABAAAXJFAAR     302306          2          2 SYS_C00002_15043010:08:49$              2          0
AAAAACAABAAAXJFAAS     302306          3          3 LOC                                     3          0
commit;

SYS@test> select * from scott.tt;
select * from scott.tt
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 4299
Session ID: 580 Serial number: 11

--还不行.

SYS@test> select rowid,obj#,cols from sys.tab$ where obj# in (select object_id from dba_objects where owner='SCOTT' and object_name='TT');
ROWID                    OBJ#       COLS
------------------ ---------- ----------
AAAAACAABAAAXJFAAJ     302306          2

update sys.tab$ set cols=3 where rowid='AAAAACAABAAAXJFAAJ';
commit ;

update  sys.col$ set col#=2 ,property=0,name='DNAME' where rowid='AAAAACAABAAAXJFAAR';
commit ;

alter system flush shared_pool;
--补充1点,刷新无效,我重启才ok的.看来要一次改对,也许有一些东西在共享池子没有清楚干净.

SYS@test> select * from scott.tt;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS1
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

--注意,千万不要在生产系统做这个测试!!!!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[20180329]删除带斜线的索引.txt
[20180329]删除带斜线的索引.txt --//上午看链接:http://www.itpub.net/thread-2100824-1-1.html --//开始没仔细看,实际上已经恢复了,索引名带斜线,看看如何删除.
855 0
[20150926]索引压缩问题.txt
[20150926]索引压缩问题.txt --以前如果索引前缀重复值很多,我会选择索引压缩,这样减少磁盘空间占用,索引范围扫描也可以减少磁盘IO,虽然这样可能消耗一些 --CUP资源,感觉影响不大。
795 0
[20150821]简单编写解除阻塞的脚本.txt
[20150821]简单编写解除阻塞的脚本.txt --主要是在rac环境下查杀阻塞的会话,以前的一些脚本不好用。 SELECT    'alter system kill session '''          || blocking_session...
630 0
[20150811]模拟坏块处理.txt
[20150811]模拟坏块处理.txt --如果存在备份,修复坏块还是相对简单的.在11g下: select * from V$DATABASE_BLOCK_CORRUPTION; --在rman下执行: blockrecover corrupti...
768 0
[20150707]OEM的问题.txt
[20150707]OEM的问题.txt --今天看awr报表时发现如下命令: --已经格式化: SELECT TO_CHAR        (           TO_TIMESTAMP ('2015-07-06', 'YYYY-MM-DD'...
777 0
[20150610]sql的谓词中使用函数.txt
[20150610]sql的谓词中使用函数.txt --程序开发经常可以看到如下的代码: -- trunc(dd_date)=trunc(sysdate),结果导致必须建立函数索引。
857 0
[20150321]索引空块的问题.txt
[20150321]索引空块的问题.txt --晚上看了: 索引空块较多造成index range scan的IO成本较高 http://www.dbaxiaoyu.
697 0
[20150304]关于sql格式化问题.txt
[20150304]关于sql格式化问题.txt --今天看书学习了sql格式化技巧。 --我以前遇到的sql语句很长,喜欢抽取在toad下格式化。一般格式化成如下。
666 0
[20120301]索引命名问题.txt
http://jonathanlewis.wordpress.com/2012/02/06/index-naming/重复测试。1.测试环境:SQL> select * from v$version ;BANNER------------------------...
598 0
+关注
lfreeali
熟悉oracle数据库性能优化,rman备份,数据库恢复技术.
2121
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载