ITPub博客

首页 > 数据库 > Oracle > 闪回数据库(基础实例讲解)

闪回数据库(基础实例讲解)

原创 Oracle 作者:oracle_zsx 时间:2013-08-24 09:51:35 0 删除 编辑
一、
查看闪回数据库功能是否开启
SQL> select flashback_on from v$database;
闪回数据库实例:
1、
查询当前的时间
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;
TIME
-----------------
13-05-30 01:02:40
2、
创建一张表,并插入数据,然后查询当前的时间
SQL> create table t (id int);
Table created.
SQL> insert into t values(1);
1 row created.
SQL> commit;
Commit complete.
SQL>  select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;
TIME
-----------------
13-05-30 01:04:23
3、
发生checkpoint和switchlog
SQL> alter system checkpoint;
System altered.
SQL> alter system switch logfile;
System altered.
4、
关闭数据库然后打开数据库到mount状态:
shutdown immediate
startup mount
5、
闪回数据库到创建表之前的状态
SQL> flashback database to timestamp to_timestamp('13-05-30 01:02:40','yy-mm-dd hh24:mi:ss');
Flashback complete.
6、
闪回之后,打开数据库用resetlogs的方式
SQL> alter database open resetlogs;
Database altered.
7、打开数据库,查询表t是否存在(不存在的话就对了)
SQL> select * from t;
select * from t
              *
ERROR at line 1:
ORA-00942: table or view does not exist
警告:
闪回数据库需要注意的问题:
1、必须在归档模式下
2、必须在mount状态下闪回数据库
3、必须以resetlog的方式打开
4、闪回数据库日志默认放在闪回恢复区
5、如果闪回恢复区满了,那么数据库就会hang住
 

二、
闪回数据库,用SCN的方法
1、
查询当前的系统改变号(两种方法)
方法一:
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
     678771
方法二:
select timestamp_to_scn(sysdate)  from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
                   678772
2、
查询表中的数据
SQL> select * from t;
        ID
----------
         1
删除表中的数据
delete from t;
1 row deleted.
然后查询当前的scn
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
     679055
3、
在mount状态下去闪回数据库
SQL> flashback database to scn 678799;
Flashback complete.
4、
打开数据库,并查询表中的数据是否存在
SQL> alter database open resetlogs;
Database altered.
SQL> select * from t;
        ID
----------
         1
注意:
之间不能有ddl操作
 

三、
闪回数据库,模拟闪回日志丢失
1、
关闭数据库
shutdown immediate
2、
切到闪回恢复区
cd /u01/app/oracle/flash_recovery_area/ORCL/
干掉所有的闪回日志
rm -rf *
3、
启动数据库到mount
SQL> startup mountORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size             113247632 bytes
Database Buffers          197132288 bytes
Redo Buffers                2973696 bytes
Database mounted.
打开数据库(发现出错了)
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-38760: This database instance failed to turn on flashback database
4、
解决办法:
先关闭闪回数据库功能
SQL> alter database flashback off;
Database altered.
5、
打开数据库
SQL> alter database open;
Database altered.
6、
查看闪回数据库是否开启
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29107230/viewspace-769175/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-08-22

  • 博文量
    25
  • 访问量
    135466