Oracle 如何使用Flashback Table功能恢复表数据

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

目的

——-

 

本文旨在还原被意外删除的表数据。

 

 

范围 & 应用

——————-

适用于dba和support analyst

 

 

使用闪回表功能恢复表:

—————————————————–

FLASHBACK TABLE 语句使用户将表恢复到之前的时间点。它提供了被用户或应用意外修改或删除的快速,联机解决方案。

Flashback Drop 比可用于此情况的其他恢复机制快得多,如时间点恢复,并不会导致任何最近事务的丢失或宕机时间downtime。

 

将指定表中的所有数据还原到时间戳或SCN描述的之前的时间点。当它被还原时,一个exclusive DML锁被保持在表上。

 

联机执行还原操作。

 

注:你必须使用自动undo管理来使用闪回表功能。这基于存储在undo表空间中的undo信息。

 

Automatically restores all of the table attributes, such as indexes, triggers, and

the likes that are necessary for an application to function with the flashed back

table. 有必要自动还原所有表属性,如索引,触发器等使应用能操作被闪回表。

 

维持在分布式环境中的任何远程状态。例如,所有复制所需的表修改,如果复制表被闪回。

 

保持约束指定的数据完整性。被闪回的表提供的所有表约束都未被违反。这包括在FLASHBACK TABLE语句中的一个表和不在FLASHBACK TABLE语句的另一个表之间指定的所有参考完整性约束。

 

即使在闪回后,原始表中的数据未丢失。之后你能回到原始状态。

 

要使用FLASHBACK TABLE 语句,你必须被授予FLASHBACK ANY TABLE 系统权限或你必须有在表上的FLASHBACK 对象权限。此外, 你必须有在表上的SELECT, INSERT, DELETE,和UPDATE 权限。你在执行闪回操作的表必须启用了行移动row movement。

 

例如:

 

SQL>alter tablespace UNDOTBS1 retention guarantee;

 

SQL>select tablespace_name,retention from dba_tablespaces;

 

TABLESPACE_NAME                RETENTION

—————————— ———–

SYSTEM                         NOT APPLY

UNDOTBS1                       GUARANTEE

SYSAUX                         NOT APPLY

TEMP                           NOT APPLY

EXAMPLE                        NOT APPLY

USERS                          NOT APPLY

HISTORY                        NOT APPLY

 

7 rows selected.

 

SQL> ALTER TABLE flash_test_table enable row movement;

 

Table altered.

 

 

SQL> select * from flash_test_table;

 

EMPNO EMPNAME

———- ——————————

1 Kiran

2 Scott

3 Tiger

4 Jeff

 

SQL> select current_scn from v$database;

 

CURRENT_SCN

—————-

332348

 

 

 

SQL> connect scott/tiger

Connected.

SQL> insert into flash_test_table values(5,’Jane’);

 

1 row created.

 

SQL> insert into flash_test_table values(6,’John’);

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

SQL> connect / as sysdba

Connected.

SQL> select current_scn from v$database;

 

CURRENT_SCN

—————-

332376

 

SQL> connect scott/tiger

Connected.

 

SQL> select * from flash_test_table;

 

EMPNO EMPNAME

———- ——————————

1 Kiran

2 Scott

3 Tiger

4 Jeff

5 Jane

6 John

 

6 rows selected.

 

SQL> flashback table flash_test_table to scn 332348;

 

Flashback complete.

 

SQL> select * from flash_test_table;

 

EMPNO EMPNAME

———- ——————————

1 Kiran

2 Scott

3 Tiger

4 Jeff

 

SQL> flashback table flash_test_table to scn 332376;

 

Flashback complete.

 

SQL> select * from flash_test_table;

 

EMPNO EMPNAME

———- ——————————

1 Kiran

2 Scott

3 Tiger

4 Jeff

5 Jane

6 John

 

6 rows selected.

 

 

 

其他注释:

————————

添加的示例,使用有时间戳(to_timestamp)的闪回表

.

SQL> flashback table xxx to timestamp to_timestamp(‘2012-09-01 11:00:00’, ‘YYYY-MM-DD HH24:MI:SS’) ;

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号