ORACLE 之 闪回

Oracle备份与恢复基础篇

一、  oracle闪回技术

oracle闪回技术在9i中开始使用提供flashback queue操作,在10G中得到很大提升,增加了flashback tableflashbackdropflashback version queryflashback transaction queryflashback database、在11G中又增加了flashback data archive功能。

注意:除了flashback database 之外其他的闪回操作都是以undo segment中的内容为基础的,因此受限于undo_retenton参数,而且要启用flashback特性,必须启动自动撤销管理表空间。如下所示:

SQL> showparameter undo_

 

NAME                                 TYPE        VALUE

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

_optimizer_undo_cost_change          string      11.1.0.6

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS1

SQL>

一) flashbacktable

闪回表的操作可以根据时间点,也可以根据具体的scn进行闪回操作,如下是根据时间点的操作。注意:这个过程完全是依赖于undo进行的,注意undo_retentionundo_management的设置。如下是操作内容:

如下是进行scn的恢复;

Select timestamp_to_scn(to_date(‘2012-12-24 18:01:27’,’yyyy-mm-ddhh24:mi:ss’));

Flashback to test9 to scn xxxxxx;

         注意:如果进行闪回表的操作时,提示需要启用行移动那么使用如下命令:

      Altertable test9 enable row movement

二) flashbackdrop

当我们使用drop table删除一个表的时候,那么这个表只是形式上被删除了,那么如果前提是启用了oracle的回收站,那么该表则将放入回收站中。我们可以使用如下命令查看,是否启用了回收站:

此图表示已经启用。那么oracle的回收站到底在那呢?其实他就是在用户所在表空间中划分出来的一个逻辑的空间,其所能存储的数据依赖于该用户下的表空间。(当然此项功能对sys/system用户无效)

当发生空间不够时,Oracle会按照先入先出的顺序覆盖Recycle Bin中的对象。也可以手动的删除Recycle Bin占用的空间。

 

1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin

 

2). Purge tablespace tablespace_name useruser_name: 清空指定表空间的Recycle Bin中指定用户的对象

 

3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象

 

4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限

 

5). Drop table table_name purge:  删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。

 

6). Purge index recycle_bin_object_name:当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。因为索引是可以重建的

如下是一个使用实例:

上边所要操作的其实在一个用户数据字典中存在的一个数据事务。

当然我们可以通过user-recyclebin,查看更加详细的信息,如dropscnoperation等等。

思考:如果我删除的2个表明一样,那么我们怎么恢复呢。答案是通过ject_name进行查询事务,然后区别进行检索内容进行恢复,或是根据删除的时间orscn等等。

三) flashback queue

Flashback ORACLE 9i 就开始提供的一项特性,在9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback QueryOracle就是采用多版本查询的一致性,应用undo的数据前镜像来保障查询的一致性,或者说通过undo进行构建一个查询的一个记录集,在此过程中不许要等待事务被提交或是事务回滚完成。Oracle有多中方式构建这个查询记录集,那么我们最简单的就是使用asof timestamp 或是as of scn。采用我的操作案例如下:

第一种方法:

SQL> select count(*) from test9;

 

  COUNT(*)

----------

         6

 

SQL> delete from test9 where rownum<3;

 

已删除2行。

 

SQL> commit;

 

提交完成。

 

SQL> select count(*) from test9;

 

  COUNT(*)

----------

         4

 

SQL> select count(*) from test9 as of timestampsysdate-3/1440;

 

  COUNT(*)

----------

         6

 

SQL> insert into test9 select * from test9 as oftimestamp sysdate-3/1440;

 

已创建6行。

 

SQL> select count(*) from test9;

 

  COUNT(*)

----------

        10

可以看出这个闪回操作比较适合delete from table;这样的语句。

当然我们这个技术使用也可以完全基于scn,那么在系统中就有一个smon_scn_time,我们可以通过如下命令进行查询:

Select scn,to_char(time_dp,’yyyy-mm-ddhh24:mi:ss’) from smon_scn_time;

这个scntime是每隔5分钟进行一次同步。

 

可以看到我们已经发现具体操作的相关信息。注意,这个查询可以使基于时间的也可以使基于scn的。Starttime代表一行记录被执行时的时间,endtime代表被替代的时间。另外,我们还可以基于一段时间或是scn进行查询。当然了,这个功能也是受限于undo表空间的设置的。

四) flashbackversion query

通过flash query可以看出它只能看到某个时间点的操作变化,那么flashback version query就是在一个时间段内的操作变化。如:

Selectempno,versions_operation,versions_starttime,versions_endtime,versions_xid fromtest9 versions between timestamp minvalue and maxvalue;

另外注意ORA_ROWSCN伪劣的相关内容。当每次修改需要记录ORA_ROWSCN时可以在创建表时,使用rowdependencies.

五) flashbacktransaction query

同样该功能的实现都需要使用undo。那么该功能就是依赖于一个flashback_transaction_query这个视图,然后进行事务的修改。

我的操作如下:

SQL>select * from test9;

 

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM    DEPTNO

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

      7369 SMITH      CLERK           7902 17-12-80            800                    20

      7777 ALLEN      SALESMAN        7698 20-2 -81          1600        300         30

 

SQL>update test9 set empno=3333 where empno=7369;

 

已更新 1 行。

 

SQL>commit;

 

提交完成。

 

SQL>select versions_operation,versions_xid from test9 versions between timestampminvalue and maxvalue;

 

VVERSIONS_XID

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

U05001600200E0000

I 05001A001E0E0000

SQL>select xid,undo_sql from flashback_transaction_query wherexid='05001600200E0000';

 

XID

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

UNDO_SQL

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

05001600200E0000

update"SCOTT"."TEST9" set "EMPNO" = '7369' where ROWID= 'AAASE1AAEAAAABeAAA';

 

05001600200E0000

 

 

 

SQL>

然后我们就可以给予某个事务进行撤销恢复了。

六) flashbackdatabase

flashbackdatabase 与其他flashback操作有所不同,那么flashbackdatabase是基于flashback log的,我们可以通过使用flashback日志把整个数据库闪回到以前一个状态,注意:此过程中需要涉及到数据库重启操作。那么我们可以通过配置相关参数然后启动此项功能。默认是被关闭的,在开启此功能后会在后台进程增加一个rvwr日志写入进程。注意;此项功能是需要启动数据库归档模式。

操作如下;关闭此功能如下:

开启此功能如下:

另外我们也可以再告警日志中查看到如下信息:

db_recovery_file_dest_size of 5120 MB is 43.82% used.

看出我们的区用了43.82%。当达到峰值时,需要使用rman进行删除。

以下是操作:

 

另外还有db_flashback_retention_target参数。

常用的视图有:

V$flashback_recovery_area_usagev$databasev$flashback_database_logv$flashback_database_logfilev$flashback_database_stat

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值