oracle报错数据复数,测试2 ORACLE flashback 恢复数据

flashback  恢复数据

准备工作:

1.创建表空间

create tablespace zxq datafile ‘d:\zxq.dbf‘ size 2m;

2.创建用户

create user  zxq  identified by zxq default tablespace zxq ;

3.创建测试表

create table zxq.zxq as  select  * from scott.emp;

修改数据库不闪回

alter database  flashback off

当前scn

select current_scn from v$database ;

1426285

删除表

drop table zxq.zxq ;

闪回被删除的表

flashback table zxq.zxq to  before drop ;

ok

查询数据

select  count(*) from zxq.zxq

count(*)

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

14

删除表

drop table zxq.zxq ;

关闭数据库在打开

shutdown immediate ;

startup ;

查询数据表

select  count(*) from zxq.zxq as of scn  1426285

表不存错误

恢复被删除的表zxq

flashback table zxq.zxq to  before drop ;

select  count(*) from zxq.zxq

count(*)

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

14

表数据删除

delete from zxq.zxq ;

查询数据表

select  count(*)  from zxq.zxq ;

count(*)

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

0

通过SCN查询被删除表的数据(数据来自UNDO)

select  count(*) from zxq.zxq as of scn  1426285

count(*)

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

14

尝试恢复

flashback table zxq.zxq to  scn  1426285 ;

错误,表不支持移动

开打行移动

alter table zxq.zxq enable row movement

再次恢复到指定的SCN

flashback table zxq.zxq to  scn  1426285 ;

OK

查询被恢复的数据

select  count(*)  from zxq.zxq ;

count(*)

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

14

结论

表级别的恢复和alter database  flashback off /of 没有关系

测试2 恢复数据库

删除表

drop table zxq.zxq ;

恢复数据库到指定的SCN

flashback database  zxq.zxq to  scn  1426285 ;

错误,数据库没有打开flashback

关闭再启动到mount 状态

shutdown immediate  ;

startup mount ;

打开数据库闪回支持

alter database  flashback on;

恢复数据库到指定的SCN

flashback database  zxq.zxq to  scn  1426285 ;

报错误

日志不全。

恢复失败。

结论,没有日志,不可以恢复。

打开数据库

alter database open ;

插入数据

insert into zxq.zxq (empno) values (1);

insert into zxq.zxq (empno) values (2);

查询当前SCN

select current_scn from v$database ;

1429091

删除数据

delete  from zxq.zxq ;

16行被删除

尝试恢复数据

flashback database   to  scn  1429091 ;

报错,open 状态的数据库不能闪回。

关闭数据库在打开

shutdown immediate ;

startup mount ;

再次恢复数据

flashback database   to  scn  1429091 ;

ok

Completed: flashback database   to  scn  1429091

数据库打开

alter database open ;

报错,需要用resetlogs 方式打开数据库。

resetlogs方式打开数据

alter database open resetlogs;

查看恢复的数据

select  count(*)  from zxq.zxq ;

count(*)

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

16

恢复完成。

resetlogs的作用

防止陈旧的数据进入数据库(保证数据库的一致性),这也就是为什么在用resetlogs打开数据库,一定要立即对数据库做个全备。

在控制文件,data file header,redo log header里存储”resetlogs data“,当open resetlogs被执行时,可以通过这些内容检查一致性。

什么时候用resetlogs

1. 不完全恢复

2. 用备份的控制文件恢复

3. 新创建的控制文件来恢复

注意:

使用resetlogs选项,会把当前的日志序号(log sequence number)重设为1,并抛弃所有日志信息。在以下条件时需要使用resetlogs选项:

在不完全恢复(介质恢复);

使用备份控制文件。

使用resetlogs打开数据库后,务必要完整地进行一次数据库备份。

原文:http://www.cnblogs.com/snail88/p/7071164.html

你可能感兴趣的:(oracle报错数据复数)