[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

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

目录
相关文章
|
OLTP 数据库
数据的删除与修改
数据的删除与修改
160 0
|
Linux
删除恢复的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。
829 0
|
SQL Oracle 关系型数据库
[20180228]11g删除表空间的恢复2.txt
[20180228]11g删除表空间的恢复2.txt --//以前曾经做过利用传输表空间恢复数据库,连接如下: http://blog.itpub.net/267265/viewspace-2141174/ http://blog.
1104 0
|
SQL Oracle 关系型数据库
[20180222]11g删除表空间的恢复.txt
[20180222]11g删除表空间的恢复.txt --//以前曾经做过利用传输表空间恢复数据库,连接如下: http://blog.itpub.net/267265/viewspace-2141174/ http://blog.
1090 0
|
索引 关系型数据库 Oracle
[20171202]关于函数索引的状态.txt
[20171202]关于函数索引的状态.txt --//我曾经在一篇贴子提到索引可以disable吗?链接: --//http://blog.itpub.net/267265/viewspace-2123537/ --//实际上仅仅函数索引能disable,为什么呢?实际上自己以前并不搞清楚实际上这个跟oracle使用函数的特殊性有关.
1212 0
|
SQL 监控 测试技术
[20171113]修改表结构删除列相关问题4.txt
[20171113]修改表结构删除列相关问题4.txt --//连续写了3篇修改表结构删除列的相关问题,链接如下: http://blog.itpub.net/267265/viewspace-2147158/ http://blog.
965 0
|
Oracle 关系型数据库
[20171113]修改表结构删除列相关问题3.txt
[20171113]修改表结构删除列相关问题3.txt --//维护表结构删除字段一般都是先 ALTER TABLE SET UNUSED (); --//然后等空闲时候删除列.
748 0
|
SQL Oracle 关系型数据库
[20171113]修改表结构删除列相关问题.txt
[20171113]修改表结构删除列相关问题.txt --//维护表结构删除字段一般都是先 ALTER TABLE SET UNUSED (); --//然后等空闲时候删除列.
833 0
|
Oracle 关系型数据库 数据库管理
[20171113]修改表结构删除列相关问题2.txt
[20171113]修改表结构删除列相关问题2.txt --//测试看看修改表结构删除列产生的redo向量,对这些操作细节不了解,分析redo看看. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING             ...
1029 0