所以我在这里有一个非常尴尬的话题。 oracle服务器10g上的一个表被删除并重新创建,它不应该是。桌子的结构发生了变化,现在我无法将其闪回。转储是从前一天开始但我不确定如何只恢复一个表。任何想法如何进行这个主题?
非常感谢。 彼得
答案 0 :(得分:2)
要还原已删除的表(您应该使用其他名称还原它或删除与正在还原的表同名的表),您可以使用imp
实用程序(对于通过将表名指定为tables
参数(tables=(your_table_name)
)的值,您可以获得转储文件(在这种情况下,您必须删除已存在的模式中具有相同名称的表或将表导入另一个模式。),或者如果启用了flashback
选项,则可以使用recycle bin
语句恢复表。
以下是使用flashback
语句恢复表的示例:
SQL> drop table tb_test;
Table dropped
SQL> drop table tb_test1;
Table dropped
SQL> show parameter recyclebin;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on
SQL> create table tb_test(id number);
Table created
SQL> insert into tb_test(id) values(123);
1 row inserted
SQL> commit;
Commit complete
SQL> select object_name, original_name, operation from recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION
------------------------------------------------------------------------------
BIN$sCyDUbMsQ9qOotUQZUTt9g==$0 TB_TEST1 DROP
BIN$uVD0HKOsQv26JTT3Q0PuOg==$0 TB_TEST DROP
SQL> purge recyclebin;
Done
SQL> select object_name, original_name, operation from recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION
------------------------------------------------------------------------------
SQL> drop table tb_test;
Table dropped
SQL> select object_name, original_name, operation from recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION
------------------------------------------------------------------------------
BIN$+shfpD3rQKy/ry5LKtkJaw==$0 TB_TEST DROP
SQL> create table tb_test(id number, col1 varchar2(11));
Table created
SQL> insert into tb_test(id, col1) values(11, 'string');
1 row inserted
SQL> commit;
Commit complete
SQL> flashback table tb_test to before drop;
flashback table tb_test to before drop
ORA-38312: original name is used by an existing object
SQL> flashback table tb_test to before drop rename to tb_test1;
Done
SQL> select * from tb_test1;
ID
----------
123
SQL> select * from tb_test;
ID COL1
---------- -----------
11 string
SQL>