`
勒布朗
  • 浏览: 70527 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

oralce表数据删除的恢复操作

阅读更多
通常我们操作数据库时可能会对数据库进行了一些错误的操作,做常见的是不小心将表中的数据给删除了或是直接将表给drop了。其实,这些操作后,我们都是可以进行数据恢复的,这里是我进行了一些实验,简单的恢复操作。
1、如果我们将表给删了怎么办?
在这里我们做一个实验
新建一张表t_user
create table t_user(
   username varchar2(20) primary key,
   age varchar2(10)
)
插入两条数据:
insert into t_user values('zzzz','1');
insert into t_user values('xxxx','2');
查看一下:
select * from t_user;
结果是:
zzzz 1 XX U
xxxx 2 XX U
我们继续操作
drop table t_user;
这事再去查询数据库时,没有了t_user这张表了。
但是我们想恢复这张表怎么办呢?
我们可以利用闪回,命令是这样的
flashback table t_user to before drop;
ok,再去查询一下t_user表,这个表以及表中的数据又存在了。
2、我们最常见的是删除了表中的数据,也就是truncate或是delete操作。
这是我们需要将闪回到删除之前的数据库看看
命令是:
(1)select * from t_user as of timestamp sysdate - 5/1440;
(2)select * from t_user as of timestamp(systimestamp-interval '1' minute);
这里的时间参数我们是可以设置的
在这里我们就可以看到我们删除数据之前的表的数据,接下来的操作就很简单了,我们就在上述命令前直接加上:insert  into t_user就Ok了。

这些都是闪回能给我们带来的帮助,但是
注意:如果需要闪回一个表,需要以下条件:
·需要有flashback any table的系统权限或者是该表的flashback对象权限;
·需要有该表的select,insert,delete,alter权限;
·必须保证该表row movement。

如果希望能闪回数据库,需要设置如下参数:DB_RECOVER_FILE_DEST      --日志的存放位置,
DB_RECOVER_FILE_DEST_SIZ  --E恢复区的大小
在创建数据库的时候,Oracle将自动创建恢复区,但默认是关闭的,需要执行alter database flashback on命令。   

执行Flashback Database命令格式:
SQL>flashback database to time to_timestamp(xxx);

SQL>flashback database to scn xxx



数据库的闪回状态可以从V$database视图中查询得到:

SQL> select dbid,name,flashback_on,current_scn from v$database;

DBID             NAME       FLASHBACK_ON CURRENT_SCN

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

1692001961  ACF          NO                         8175168



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics