Oracle 11gR2数据库闪回功能--预防人为逻辑错误

Oracle 11gR2数据库闪回功能--预防人为逻辑错误

1.Flashback对于DJI ERP系统的作用?

对于一些人为操作的错误,比如批量删除了数据,我们可以通过Flashback功能来恢复。缺点是,此段时间内其他用户的正确操作也会丢失。

a.设立一个闪回窗口,例如60分钟。当出现人为错误时,可以恢复到过去60分钟内的任何一个时间点。

b.以某个时刻设定一个恢复点,以后出问题了,那怕过了几个月,都可以恢复到这个时刻上来。而且,只能恢复到这个时刻,而不能是这几个月内的任何一个时间点。

我们的需求只落在闪回方案b上。

我们可以在生产库或灾备库上开启flashback。

A.利用灾备库做完闪回操作后,我们可以查询相应时刻的表数据,也可以利用这个时刻的静态数据库,克隆出一个新的环境。如果克隆到正式环境,能起到恢复生产的作用。但此时生产停机时间可能就得半天左右了。

B.如果是生产开启flashback,当出现需要全库闪回时,直接就可以在生产闪回了,停机时间会在1小时内。

2.闪回理论参考

理论上,我们都可以闪回到这时间窗口内的任何一个时间点。开了闪回日志,每间隔10分钟,会将有变化data block的变化前影像写到flashback log中(没变化的data block就不会记)。此时能回退的点,取决于FRA中的闪回日志窗口,窗口是随着空间的压力而向后滚动的。鉴于闪回日志是一段时间采样一次,那么我们是否只能闪回到以10分钟为单位的时间点上呢?如果想要10分钟内的时刻怎么办呢?所以flshback
database时也是需要用redo log来做精确恢复的。回退的机制是这样的,根据想恢复到的target time,将该target time之前的最接近的一次闪回日志采样数据取出,然后将每个数据块利用redo log向后走到精确地走到target scn。当然,我们有了1440这个保证的时间窗,时间窗中的日志与归档日志都不会被删除、就算它符合归档日志删除策略。

3.方案A的实践指导参考

包括开启闪回功能、以及如何闪回。

在生产库与灾备库上开启闪回都是可以的,方法大同小异,下面介绍在灾备库上开启flashback功能。

1).通过这个查询,可以知道,我们的ERP生产库、灾备库的闪回功能都是没有开启的。

SQL> select flashback_on from v$database;

FLASHBACK_ON

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

NO

2).开启flashback功能。当我在DG库想开启闪回功能时,会提示必须先启动闪回恢复区,指定闪回日志应该放到哪里。

SQL> alter database flashback on;

alter database flashback on

*

ERROR at line 1:

ORA-38706: Cannot turn on FLASHBACK DATABASE logging.

ORA-38709: Recovery Area is not enabled.

SQL>

3).指定flash recovery area(fra,闪回恢复区)。我们设定其size为80G(也就是flashback log、以及存放在fra区的其他文件如归档日志、备份等,不能超过80G),并且把“/u01/erpdg/db/apps_st/fra”这两个路径作为闪回恢复区。

SQL> alter system set db_recovery_file_dest_size=80g;

System altered.

SQL> alter system set db_recovery_file_dest=‘/u01/erpp1/db/apps_st/fra‘;

System altered.

SQL>

4).再次开启flashback功能,因为我们的灾备库在实时恢复生产库的日志,所以会报错。我们必须先停下恢复日志的进程、即MRP进程,使得灾备库处于一个静止时间点。

5).停掉MRP进程:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

6).再次开启闪回特性,成功了。

7).此时我们的闪回时间窗口多大呢?通过查看参数db_flashback_retention_target的值,是1440分钟。这个值是可以调整的。这个窗口是随着空间的压力而向后滚动的。也就是说,1440分钟(一天)以内的数据,系统是必须要保证可以闪回到的,假如空间不足以保证1440分钟的闪回,系统宁愿宕下来不运作,也不会让我们不能闪回到。那是不是1440分钟以外的人为错误,我们就一定不能闪回呢?也不一定,假如空间是否足够,两天、三天前的闪回日志,系统依然会保留的。触发系统删除闪回日志的,一般是系统空间压力(比如设定为达到fra的90%就触发删除,删除到60%为止)。

8).此时我们要将dg库的mrp进程重新启起来,再实时应用生产库传过来的日志。

SQL> alter database recover managed standby database using current logfile disconnect from session parallel 8;

Database altered.

SQL>

此时,整个DG库的flashback功能开启完毕。

9).闪回查询。当有一天,有用户在数据库里面误操作,比如人为地删除了数据。如果是一个表的数据,其实这里我们首先是可以考虑利用undo的闪回查询。

select * from dept as of timestamp to_timestamp(‘2012-03-09 21:55:06‘,‘yyyy-mm-dd hh24:mi:ss‘);--闪回查询,利用回滚段。

select * from dept as of timestamp to_timestamp(‘2012-03-09 21:55:06‘,‘yyyy-mm-dd hh24:mi:ss‘) minus select * from dept;--得到被删除的记录

execute SYS.dbms_flashback.enable_at_time(to_timestamp(‘2012-03-09 21:55:06‘,‘yyyy-mm-dd hh24:mi:ss‘));

--让当前会话回到指定时间点,会看到一个冻结版的数据库,只能select,不能DML。

备注:表结构不能被更改过。即闪回不能跨越DDL。

对于闪回查询,就是查询某个表过去的数据。这里,我们先讨论需要整库闪回的情况,比如做了一些错误操作,涉及到很多关联的表,我们也很难理清究竟要闪回什么的时候,就可以用统一的整库闪回操作。

10).全库flashback前,同样需要停掉MRP进程:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

11).全库Flash back操作

SQL> flashback database to timestamp to_timestamp(‘2014-07-22 14:22:24‘,‘yyyy-mm-dd hh24:mi:ss‘);

Flashback complete.

SQL>

12).验证。此时我们已经闪回到了所需要的时间点。

SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘;

Session altered.

SQL> col max(first_time) for a30

SQL> select CONTROLFILE_TIME from v$database;

CONTROLFILE_TIME

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

2014-07-22 14:22:25

SQL>

13).反复闪回,以取得错误刚好发生前的时间点。

alter database open read only;

以只读模式打开,看是否找到了被误删除的内容,不断从shutdown abort开始,重新flashback,不断采用二分法,以逼近被删除模式那一刻之前的点。

Oracle 11gR2数据库闪回功能--预防人为逻辑错误

时间: 2024-10-25 05:31:54

Oracle 11gR2数据库闪回功能--预防人为逻辑错误的相关文章

开启数据库闪回功能

1.闪回功能必须,设置数据库为归档 SQL> select log_mode from v$database; LOG_MODE ------------------------ NOARCHIVELOG SQL> shutdown immediate; SQL> startup mount; 设置闪回区位置和大小 SQL> show parameter db_recovery NAME TYPE VALUE ---------- --------- ----------- db_

Oracle 11g R2 闪回技术

为了使数据库能够从任何逻辑错误中迅速恢复,oracle推出了闪回技术.采用该技术,可以对行级和事物级的数据变化进行恢复,减少了数据恢复的时间,而且操作简单.通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率.闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复. 闪回技术包括以下各项: 闪回查询:(FLASHBACK QUERY):查询过去某个时间点或某个SCN值时表中的数据信息 闪回版本查询(FLASHBACK Version query):查询过去某个时间段或某个

[转]Oracle DB执行闪回数据库

? 配置闪回数据库 ? 执行闪回数据库操作 ? 监视闪回数据库 闪回数据库 闪回数据库操作: ? 作用类似于数据库的倒带按钮 ? 可以在用户造成了逻辑数据损坏的情况下使用 闪回数据库 使用闪回数据库,通过还原自先前某个时间点以来发生的所有更改,可快速将数据库恢复到那个时间的状态.因为不需要还原备份,所以此操作速度很快.可以使用此功能还原导致逻辑数据损坏的更改. 使用闪回数据库时,Oracle DB 可使用过去的块映像回退对数据库的更改.在正常数据库操作期间,Oracle DB 会不定期地将这些块

Oracle OCP笔记(31)使用闪回功能

Oracle OCP笔记(31)使用闪回功能 Oracle的闪回功能受到3个数据库结构之一的支持: 撤消数据.闪回恢复区和回收站. 撤消表空间中的撤销数据不仅支持事务回滚,也支持大多数闪回表操作.Flashback Data Archives允许查询先前版本的表行,它在撤销表空间之外的一个或多个表空间中提供一个区域,支持的保留期比撤销表空间还长.闪回日志保存在闪回恢复区中,从而无需执行传统的还原和恢复操作,即可方便地将整个数据库回滚到过去的时间点.每个表空间中的回收站包含一个或多个版本的已删除的

开启 oracle 的闪回功能

查看是否开启闪回 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ NO 查看是否配置了db_recover_file_dest SQL> show parameter db_recovery NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_reco

oracle生产环境 闪回、归档操作参考

闪回与归档的相关测试 参考博客:http://www.cnblogs.com/hellojesson/p/7050097.html 数据库在归档模式下的管理 参考博客:http://www.cnblogs.com/hellojesson/p/7182219.html 场景描述: 本地数据库 当前运行在非归档模式 没有开启闪回功能!!! 我们要做的操作是将:数据库切换在归档模式 ,开启数据库的闪回功能: 并且:自定义闪会恢复区路径以及大小 自定义归档日志存放路径以及大小 确认当前系统环境:  没有

oracle中的闪回

项目中运用: 首先说明:闪回方法有一个前提,就是需要尽早的发现问题,果断的采取行动.若误操作的记录已经在UNDO表空间中被清除,则此方法就不可行了,需要另寻他法. 例如: SELECT * FROM tb_moko_info_basic AS OF TIMESTAMP TO_TIMESTAMP('2014-12-16 9:50:24', 'YYYY-MM-DD HH24:MI:SS') WHERE receipt_num = 'P14120100496'; 使用闪回功能快速恢复用户的误操作 Or

Oracle Flashback Technologies - 闪回数据库

根据指定的SCN,使用rman闪回数据库 #查看可以闪回到多久前 SQL> select * from v$flashback_database_log; #查看当前的SCN SQL> select current_scn from v$database; CURRENT_SCN ----------- 1462273 SQL> #关闭数据库 $ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Tue

MySQL Flashback 闪回功能详解

阅读目录 1. 简介 2. 闪回原理 3. flashback安装 4. 使用简介 5. Flashback工具使用注意点 回到顶部 1. 简介 mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据.在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos).比如忘了带where条件的update.delete操作,传统的恢复方式是利用全备+二进制日志前滚进行恢复,相比于传统的全备+增备,flashback显然更为快速.简单. 目前My