`

Oracle闪回查询恢复delete删除数据

阅读更多

Flashback query(闪回查询)原理

  Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(SCN),从而将数据找回。

Flashback query(闪回查询)前提:

SQL> show parameter undo;

NAME                                TYPE       VALUE

------------------------------------ ----------- ------------------------------

undo_management                     string     AUTO

undo_retention                        integer    900

undo_tablespace                       string     UNDOTBS1

其中undo_management = auto,设置自动undo管理AUM),该参数默认设置为:auto

Undo_retention = n(),设置决定undo最多的保存时间,其值越大,就需要越多的undo表空间的支持。修改undo_retention的命令如下:

SQL> alter system set undo_retention = 3600;

System altered

闪回实现方式

1.      获取数据删除前的一个时间点或scn,如下:

SQL>select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time, to_char(dbms_flashback.get_system_change_number) scn from dual;

TIME               SCN

------------------- ----------------------------------------

2010-06-29 23:03:14 1060499

2.      查询该时间点(或scn)的数据,如下:

SQL> select * from t as of timestamp to_timestamp('2010-06-29 22:57:47', 'yyyy-mm-dd hh24:mi:ss');

SQL> select * from t as of scn 1060174;

3.      将查询到的数据,新增到表中。也可用更直接的方法,如:

SQL>create table tab_test as select * from t of timestamp to_timestamp('2010-06-29 22:57:47', 'yyyy-mm-dd hh24:mi:ss');
SQL>insert into tab_test select * from1060174;

示例:

Create table t(id number);

insertinto t values(1);
insert into t values(2);
insert into t values(3);
insert into t values(4);
insert into t values(5);

1.查看t表中的原始数据

SQL> select * from t;

       ID

---------

        1

        2

        3

        4

        5

2.获取数据删除前的一个时间点或scn

SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time, to_char(dbms_flashback.get_system_change_number) scn from dual;

TIME               SCN

------------------- ----------------------------------------

2010-06-29 23:23:33  1061279

3.删除t表中的数据,并提交事物

SQL> delete from t;

5 rows deleted

SQL> commit;

Commit complete

4.在查看t表,此时t表中数据以删除

SQL> select * from t;

       ID

----------

5.查看t表中scn1061279(或时间点为2010-06-29 23:23:33)时的数据

SQL> select * from t as of scn 1061279;

       ID

----------

        1

        2

        3

        4

        5

6.确认要恢复后,将t表中的数据还原到scn1061279(或时间点为2010-06-29 23:23:33)时的数据,并提交事物

SQL> insert into t select * from t as of scn 1061279;

5 rows inserted

SQL> commit;

Commit complete

7.确认t表数据的还原情况

SQL> select * from t;

       ID

----------

        1

        2

        3

        4

        5

注:推荐使用scn,由于oracle9i中,因为scn与时间点的同步需要5分钟,如果最近5分钟之内的数据需要Falshback query查询,可能会查询丢失,而scn则不存在这个问题。Oracle10g中这个问题已修正(scn与时间点的大致关系,可以通过logmnr分析归档日志获得)。

Falshback query查询的局限:

1. 不能Falshback5天以前的数据。

2. 闪回查询无法恢复到表结构改变之前,因为闪回查询使用的是当前的数据字典。

3. 受到undo_retention参数的影响,对于undo_retention之前的数据,Flashback不保证能Flashback成功。

4. drop,truncate等不记录回滚的操作,不能恢复。

5. 普通用户使用dbms_flashback包,必须通过管理员授权。命令如下:

SQL>grant execute on dbms_flashback to scott;

分享到:
评论

相关推荐

    ORACLE闪回技术恢复指南

    **闪回删除**和**闪回查询**允许用户基于时间戳或系统变更号(SCN)恢复表中的数据,这对于因误执行DELETE语句导致数据丢失的情况非常有用。 **闪回语法**: ```sql -- 按照SCN闪回 FLASHBACK TABLE tablename TO SCN...

    sql恢复oracle数据库delete的数据

    1. **闪回查询 (Flashback Query)**: Oracle提供了一种称为闪回查询的功能,它允许我们查看数据库的过去状态,就像时间倒流一样。通过使用`SELECT FROM FLASHBACK TABLE`或`SELECT AS OF TIMESTAMP`语句,我们可以...

    Oracle恢复误删除数据

    Oracle 恢复误删除数据 Oracle 数据库是企业级的关系数据库管理系统,广泛应用于各种行业。然而,在实际操作中,误删除数据是...Oracle 恢复误删除数据需要了解闪回方法的使用和限制,同时也需要注意空间占用的问题。

    Oracle数据库误删除数据的不同恢复方法整理(超级实用)

    Oracle数据库提供了多种误删除数据的恢复方法,包括闪回恢复和回收站恢复。通过对这些方法的理解和应用,可以有效地避免因误操作而导致的数据丢失问题。同时,在日常维护中,合理地管理回收站和及时回收不再需要的...

    Oracle数据库误删除数据的不同恢复方法整理

    ### Oracle数据库误删除数据的不同恢复方法 #### 一、引言 在日常的数据库管理工作中,数据误删除是一个常见的问题。对于Oracle数据库来说,它提供了一系列强大的数据恢复工具和技术,帮助管理员快速有效地恢复误...

    用Oracle闪回功能恢复偶然丢失的数据

    当用户执行DML操作(如DELETE、UPDATE、INSERT)后,如果发生错误,可以通过闪回查询回到某个特定时间点,查看并恢复丢失的数据。然而,闪回查询在Oracle 9i中仅限于DML操作,对于DDL操作(如DROP)无法恢复。 ...

    提升Oracle闪回特性快速恢复数据保安全.pdf

    1. **闪回查询**(Flashback Query):在Oracle 9i中,闪回查询允许用户查询到过去某个时间点的数据状态,但仅限于DML(Data Manipulation Language)操作,如INSERT、UPDATE和DELETE。对于误删的行记录,可以通过闪...

    oracle删除数据的恢复

    除了使用闪回查询外,还可以通过创建一个备份表并在删除数据前备份数据的方式来进行恢复。这种方法更为保险,但需要提前做好规划。 **步骤1:创建备份表** 在执行删除操作之前,可以创建一个备份表,并将原始数据...

    oracle中truncate table后的数据恢复

    Oracle提供了一些闪回工具,如闪回表(Flashback Table)、闪回数据库(Flashback Database)和闪回查询(Flashback Query)。 - 用户具有足够的权限。恢复操作可能需要`SYSDBA`权限。 **2. 使用闪回表恢复数据** ...

    oracle恢复误删数据

    - 首先,确定删除数据时的最新备份,然后使用RMAN恢复到这个备份点,接着应用归档日志直到误删操作之前的时间点。 请注意,恢复数据的效率和可行性取决于你的数据库配置,包括是否启用了闪回选项、是否有足够的...

    Oracle闪回技术在数据恢复中的应用.pdf

    通过闪回查询,用户可以快速恢复到某一特定时间点的数据状态,而无需进行完整的数据库恢复。 2. 自动回滚段管理 (Automatic Undo Management, AUM) Oracle 9i引入了自动回滚段管理,它将回滚段的管理和空间分配...

    oracle 通过快照进行数据恢复

    ### Oracle通过快照进行数据恢复 #### 一、引言 ...当然,除了快照之外,Oracle还提供了其他数据恢复机制,如备份与恢复、闪回技术等,这些工具和技术的综合运用将进一步提高数据的安全性和可靠性。

    ORACLE truncate 数据恢复

    在Oracle数据库中,`TRUNCATE TABLE`命令用于删除表中的所有数据,但它与`DELETE`语句有所不同。`TRUNCATE`操作是DDL(Data Definition Language)的一部分,而`DELETE`是DML(Data Manipulation Language)。由于`...

    ORACLE数据库误操作执行了DELETE,该如何恢复数据?

    ### ORACLE数据库误操作执行了DELETE,该如何恢复数据? 在Oracle数据库管理中,误操作是常见的问题之一。尤其是在执行删除(DELETE)操作时,如果未能正确地确认或配置好相关参数,可能会导致重要数据的丢失。本文...

    如何在ORACLE9I下利用闪回功能恢复误删数据.pdf

    使用DBMS_FLASH包,用户可以轻松地执行闪回查询,以查看和恢复误删除的记录。这个功能依赖于Oracle的自动回滚段管理(Automatic Undo Management, AUM),不过需要注意的是,对于Drop等永久性操作,闪回查询无法恢复...

    Oracle 备份恢复闪回技术实战

    4. **删除数据并提交**: ```sql delete from test; commit; ``` 5. **闪回查询**: - 使用之前的SCN进行闪回查询: ```sql select count(*) from test as of scn 999846; ``` 此时会显示100条记录,即闪...

    Oracle 9i以上的闪回,用于误操作后的数据恢复

    假设我们有一个名为`gametable`的游戏记录表,在进行数据误删除后,可以通过以下步骤使用闪回查询功能来恢复数据。 1. **误删除操作**: ```sql DELETE FROM gametable WHERE GAMEID = 1008; COMMIT; ``` 上述...

    Oracle恢复truncate删除表的数据.pdf

    【Oracle 恢复 Truncate 删除表的数据】 在Oracle数据库中,`TRUNCATE TABLE`命令用于删除表中的所有数据,但保留表结构。与`DELETE`语句不同,`TRUNCATE`不记录任何删除操作,因此无法通过常规的事务回滚来恢复...

    Oracle 8大闪回模式及其特性及其详细实验解释

    闪回删除功能可以恢复被`DELETE`语句误删除的数据。它类似于回收站,可以在一定程度上防止数据的永久丢失。 5. **闪回版本查询和闪回事物查询**: 这两种查询方式允许用户查看数据在某一时间点的状态。闪回版本...

Global site tag (gtag.js) - Google Analytics