pl/sql的数据库闪回技术

数据库操作,可能会误删一些数据,怎么找回这些数据,就可以使用这篇文章介绍的闪回技术。

备注:写这篇文章源于我的一次误操作,没有备份数据,一个时间戳数据错误,导致删掉了几天的数据,找回数据的过程,了解了闪回技术,所以在这做了总结记录。

我的删除操作语句如下:

delete from IE_CK_TABLE
where adddate >= to_date ('2017-07-19 15:00:00','yyyy-mm-dd hh24:mi:ss')


一、首先,给数据一个备份操作

1,从闪回表里备份数据

create table IE_CK_TABLE_bak
as
select * from IE_CK_TABLE as of TIMESTAMP to_timestamp('20170725 161535','yyyymmdd hh24miss')
where adddate >= to_date ('2017-07-19 15:00:00','yyyy-mm-dd hh24:mi:ss')

2、直接备份数据

CREATE TABLE [table_name]_[DATE] AS SELECT * FROM [table_name] WHERE ...;
eg:
CREATE TABLE cux_example_all_0725 AS SELECT * FROM cux_example_all WHERE example_id = 1;

为了更保险起见,备份一个当前状态的,备份一个删除数据之前状态的。数据进行对比,查看操作的数据。(如果你有管理员权限,建议暂停系统,避免恢复过程中的操作数据无效)。where字句不用,就是全部数据备份,之后可以将停系统之前的状态和恢复之后的数据表进行对比,来还原修改数据。


二、闪回操作语句

本次是执行delete语句,错删数据,因此采用闪回表技术。

1、查询删掉的数据

SELECT *
  FROM ie_ck_table AS OF TIMESTAMP to_date('2017-07-25 16:09:53', 'yyyy-mm-dd hh24:mi:ss')
 WHERE adddate >= to_date('2017-07-19 15:00:00','yyyy-mm-dd hh24:mi:ss');

where选择条件是当时删除时的条件,从而找到被删掉的数据。

2、闪回表语句,执行闪回操作

flashback table ie_ck_table to timestamp to_timestamp('2017-07-25 15:33:27' ,'yyyy-mm-dd hh24:mi:ss')

回退到删除操作执行之前的时间,尽量回退到删除操作之前1秒或1分。

小插曲: 我当时执行回退,遇到了一个错误ORA-08189: cannot flashback the table because row movement is not enabled

             解决办法:执行 alter table wzq_ie_ck_table enable row movement

             此时又遇到一个错误:ORA-00054: resource busy and acquire with NOWAIT specified

            资源被占用,那么就要找到占用未结束的会话,结束它。具体解决办法参见:http://blog.itpub.net/26148431/viewspace-2121271/

            会话查找,执行语句:

select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.object_id=o.object_id

SELECT sid, serial#, username, osuser, terminal,program ,action,PREV_SQL_ADDR FROM v$session where sid = session_id

alter system kill session 'SID,SERIAL#';

此时,再执行alter语句就可以了,当开启ROW MOVEMENT后,表被顺利的flashback了。

详细内容参见 http://www.cnblogs.com/ivictor/p/3975339.html

3、表数据的对比校验

将系统关闭时的数据和恢复的数据表进行对比,这个参见http://www.askmaclean.com/archives/oracle-compare-data-between-tables-method.html

但是操作比较复杂。

4、闪回表保存时间


5、思考

数据备份之后,在恢复数据期间对数据进行的操作是



你可能感兴趣的:(数据库)