flashback 技术(待续)

1.1   flashback 家族介绍

flashback 技术是已Undo Segement 中的内容为基础的,因此受限于UNDO_RETENTION 参数。在oracle 10g 中flashback 功能得到扩展,细分出许多级别。我们从整体上了解一下flashback家族的组成。

  Oracle 10g 中的flashback 家族包括一下成员flashback database、flashback drop 、flashbackversion query、flashback transaction query 和 flashback table。

按照功能影响的数据级别,又可以把它们进行如下分类。

l               记录级别:这个级别包括flashbackversion query和flashback transaction query。

l               表级别:包括flashback drop和 flashback table。

l               数据库级别:指flashback database。

记录级别和表级别的flashback操作,可以由普通用户自己使用,不需要DBA 介入,而数据库级别的flashback 则需要DBA完成。

1.2   flashback database

flashback database 功能非常类似于RMAN的不完全恢复,它可以把整个数据库回退到过去的某个时间点,这个功能以来于 flashback log 日志,比RMAN 更快速和高效。因此flashback database 可以看作是不完全恢复的替代技术。但是flashback database 也有限制。

l         Flashback database 不能解决 Media Failure,这种错误RMAN 的恢复仍然是唯一的选择。

l         如果删除了数据文件或者利用shrink技术缩小了数据文件的大小。这是不能用flashback database技术回退到改变之前的转台;这时候就必须先利用RMAN吧删除之前或者缩小之前的文件备份restore出来。然后再利用flashback database 执行剩下的flashback recovery。

l         如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用flashback database。

l         使用flashback database所能恢复到得最早SCN,取决于flashback database log 中记录的是数据块的before image,因此恢复时会更快速和高效。

 

1.2.1          flashback database 构架

flashback database 整个架构包括一个进程Recover Writer(RVWR),后台进程、flashback database log 日志和flash recovery area。

一旦数据库启用了flashback database,则RVWR进程会启动,RVWR进程会向flashback recovery area 内写入flashback database log,这些日志包括的是数据块的‘前镜像’(before image)。这也是flashback database 技术比不完成恢复快的原因。

 

1.2.2          启用flashback database

数据库的flashback database功能确实是关闭的,要是启用这个功能,需要对数据库做如下配置工作。

1.       配置flash recovery area

(1)       启用flash recovery area

 Sql>alter system db_recovery_file_dest_size=2g scope=both;

 Sql>alter system set db_recovery_file_dest=’ D:\oracle\product\10.2.0\flash_recovery_area’ scope=both;

容量大小可以不是固定不变的,可以在以后的根据需要调整。检查修改生效:

Select name,value from v$parameter

Where name like ‘%flash%’ or name like ‘%recovery%’

Order by name

 

(2) 禁用flash recovery area:

Sql>alter system set db_recovery_file_dest=’’;

 

1.3    启用数据库flashback功能

(1)       数据库重启到mount 状态

Sql> startup mount;

检查flashback功能,缺省时功能是关闭的

(2)启动flashback 功能

Sql>alter database flashback on;

(3)  设置db_flashback_retention_target参数

db_flashback_retention_target是一个数值型参数,单位是分钟,代表数据库能回退多少分钟。

下面这个例子代表能够回退1天。

Sql>alter system set db_flashback_retention_target=1440 scope=both;

(4) 打开数据库

Sql>alter database open;

1.4    flashback database

配置好flash recovery area 和flashback logging 之后,我们开始试验了

(1)       实验之前我们先做一次全备份。

RMAN>backup database;

(2) 模拟用户误删操作。

A. select count(*) from test;

3

B.当前时间:

Select sysdate from dual;

2011-08-19 15:29:11

C. Truncate table test;

select count(*) from test;

0

(3) 确认能够恢复的时间点

 

(4) flashback database 实际就是对数据库的一个不完全恢复操作,因此需要关闭数据库,冲去数据库到mount状态

Sql>shutdown immediate

Sql>startup mount

(5)基于时间的恢复

Sql>flashback database to timestamp to_timestamp(‘2011-08-19 15:29:11’,’yyyy-mm-dd hh24:mi:ss’);

闪回完成。

sql> select count(*) from test

3

1.5 闪回对象

  除table的其他对象,比如function,procedure,trigger等。 这时候,就需要使用到ALL_SOURCE 表。 

 

Related Views

DBA_SOURCE describes the text source of all stored objects in the database.

USER_SOURCE describes the text source of the stored objects owned by the current user. This view does not display the OWNER column.

 

Column

Datatype

NULL

Description

OWNER

VARCHAR2(30)

NOT NULL

Owner of the object

NAME

VARCHAR2(30)

NOT NULL

Name of the object

TYPE

VARCHAR2(12)

 

Type of object: FUNCTION, JAVA SOURCE, PACKAGE, PACKAGE BODY, PROCEDURE, TRIGGER, TYPE, TYPE BODY

LINE

NUMBER

NOT NULL

Line number of this line of source

TEXT

VARCHAR2(4000)

 

Text source of the stored object

 

 

如果我们误删除了某些对象,如procedure,就可以使用all_source 表进行恢复。

 

SQL> desc dba_source

 Name                                      Null?    Type

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

 OWNER                                              VARCHAR2(30)

 NAME                                               VARCHAR2(30)

 TYPE                                               VARCHAR2(12)

 LINE                                               NUMBER

 TEXT                                               VARCHAR2(4000)

 

查看dba_source 的所有type

SQL> select type from dba_source group by type;

 

TYPE

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

PROCEDURE

PACKAGE

PACKAGE BODY

TYPE BODY

TRIGGER

FUNCTION

TYPE

 

7 rows selected.

 

基于timestamp恢复的语句

SQL>SELECT text

    FROM dba_source

         AS OF TIMESTAMP TO_TIMESTAMP ('XXXXX', 'YYYY-MM-DD HH24:MI:SS')

   WHERE owner = 'XXXX' AND name = '你删除的对象名'

ORDER BY line;

 

 

示例:

 

创建函数:

SQL> CREATE OR REPLACE function getdate return date

as

v_date date;

begin

   select  sysdate into v_date from dual;

   return v_date;

end;

/

Function created.

 

查询函数:

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

Session altered.

 

SQL> select getdate() from dual;

GETDATE()

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

2011-04-07 21:02:09

 

查询dba_source 表:

SQL> select text from dba_source where name='GETDATE' order by line;

 

TEXT

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

function getdate return date

as

  v_date date;

begin

   select  sysdate into v_date from dual;

   return v_date;

end;

 

7 rows selected.

 

drop 函数,在查询,记录不存在

SQL> drop function getdate;

Function dropped.

 

SQL> select text from dba_source where name='GETDATE' order by line;

no rows selected

 

使用我们的Flashback Query 查询:

SQL> select text from dba_source as of timestamp to_timestamp('2011-04-07 21:02:09','yyyy-mm-dd hh24:mi:ss') where name='GETDATE' order by line;

 

TEXT

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

function getdate return date

as

  v_date date;

begin

   select  sysdate into v_date from dual;

   return v_date;

end;

7 rows selected.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值