迪士尼彩乐园:Oracle10g?flashback系列新特性之flashback?database

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 11:47:19
Oracle10g flashback系列新特性之flashback database    闪回数据库可以迅速地将数据库闪回到误操作或人为错误的前一个时间点,而不用通过备份来进行恢复。不过flashback database 也存在限制的,对于下面的几种情况,是不能通过闪回数据库来进行前滚的:
1) 介质失败,比如数据文件、控制文件丢失等等。
2) 数据文件被RESIZE或者删除。
3) 控制文件被重建之后
4) RESETLOGS打开数据库后,不能恢复到RESETLOGS之前的时间点
如果要启动闪回数据库功能,首先数据库要处于归档模式,然后要设置db_recovery_file_dest来存放flashback log(前滚日志)。

SQL> conn / as sysdba;
已连接。
--查看数据库是否启用闪回数据库功能
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
--设置快速恢复区
SQL> alter system set db_recovery_file_dest_size=1G scope=both;
系统已更改。
SQL> alter system set db_recovery_file_dest='L:\db_recovery_file_dest';
系统已更改。
SQL> show parameter db_recovery_file
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      L:\db_recovery_file_dest
db_recovery_file_dest_size           big integer 1G
--关闭快速恢复区,在关闭快速恢复区之前必须先关闭flashback功能:
SQL> alter database flashback off;
SQL> alter system set db_recovery_file_dest='';
--下面将演示一下如何启动flashback功能
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
--将数据启动到MOUNT状态下
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              92276068 bytes
Database Buffers           71303168 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
--设置db_flashback_retention_target,单位为分钟。即闪回数据保存的时间,下面设置为1天。
SQL> alter system set db_flashback_retention_target=1440 scope=both;
系统已更改。
--启动flashback
SQL> alter database flashback on;
数据库已更改。
--关闭flashback databse
SQL> alter database flashback off;
SQL> alter database open;
数据库已更改。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
会话已更改。
--下面的OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME分别说明了可以闪回的最早的时间和SCN,在利用flashback database进行前滚恢复时,不能恢复到OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME之前的时刻。
SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
  from V$FLASHBACK_DATABASE_LOG;
OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
             1190173 2007-05-13 22:01:46
闪回的时候可以通过SQLPLUS或者RMAN进行闪回,闪回的时候可以通过时间或SCN值进行闪回。
1、通过SQLPLUS进行闪回
SQL> create table t1 as select * from dba_users;
表已创建。
SQL> create table t2 as select * from dba_users;
表已创建。
SQL> select sysdate from dual;
SYSDATE
-------------------
2007-05-13 22:12:39
SQL> truncate table t1;
表被截断。
SQL> drop table t2;
表已删除。
SQL> flashback database to timestamp(to_date('2007-05-13 22:12:39','yyyy-mm-dd h
h24:mi:ss'));
flashback database to timestamp(to_date('2007-05-13 22:12:39','yyyy-mm-dd hh24:m
i:ss'))
*
第 1 行出现错误:
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。
要进行flashback database操作时,必须将数据库置于mount状态,类似于进行不完全恢复。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount exclusive
ORACLE 例程已经启动。
Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              92276068 bytes
Database Buffers           71303168 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
SQL> flashback database to timestamp(to_date('2007-05-13 22:12:39','yyyy-mm-dd h
h24:mi:ss'));
闪回完成。
当闪回完成后,可以用ALTER DATABASE OPEN READ ONLY打开数据库,查看是否闪回到期望的时间点。如果闪回到期望的时间点,那么再以RESETLOGS打开数据库。下面的例子直接用RESETLOGS打开数据库。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(*) from t1;
  COUNT(*)
----------
        22
SQL> select count(*) from t2;

  COUNT(*)
----------
        22
2、通过RMAN进行闪回
SQL> select count(*) from t1;
  COUNT(*)
----------
        22
SQL> select count(*) from t2;
  COUNT(*)
----------
        22
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
    1192401
SQL> truncate table t1;
表被截断。
SQL> drop table t2;
表已删除。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
C:\Documents and Settings\linyuefeng>rman target sys/sys@ora10g nocatalog
恢复管理器: Release 10.2.0.1.0 - Production on 星期日 5月 13 23:00:10 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup force mount

Oracle 实例已启动
数据库已装载
系统全局区域总计     167772160 字节
Fixed Size                     1247900 字节
Variable Size                 92276068 字节
Database Buffers              71303168 字节
Redo Buffers                   2945024 字节
RMAN> flashback database to scn 1192401;
启动 flashback 于 13-5月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=100 devtype=DISK
正在开始介质的恢复
介质恢复完成, 用时: 00:00:15
完成 flashback 于 13-5月 -07
RMAN> sql 'alter database open resetlogs';
sql 语句: alter database open resetlogs
SQL> conn / as sysdba;
已连接。
SQL> select count(*) from t1;
  COUNT(*)
----------
        22
SQL> select count(*) from t2;
  COUNT(*)
----------
        22

分享

0