教你应对Oracle检索数据的一致性以及回滚数据(2)
http://www.itjxue.com 2015-07-17 10:50 来源:未知 点击次数:
2.回滚数据(事务恢复)
1.当用户updata数据但还没有提交
SQL> select * from c;
A B
---------- -----------------------------
1 10
3 4
SQL> update c set b=2 where a=1;
SQL> select * from c;
A B
---------- -----------------------------
1 2
3 4
这时用户突然后悔了,想恢复到原来的状态
SQL> rollback;
Rollback complete.
SQL> commit;
SQL> select * from c;
A B
---------- -----------------------
110
3 4
可见当用户用命今rollback还能回滚到初始状态。
2.当用户updata数据且已提交
当用户updata数据且已提交后,可以根据SCN记录把数据还源。
先查看原始数据
SQL> select * from c;
A B
---------- ----------
110
3 4
找到SCN
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
693636
现在删除表中的数据并提交
SQL> delete from c;
2 rows deleted.
SQL> commit;
Commit complete.
查询(现在表中已没有数据了)
SQL> select * from c;
no rows selected
检索特定SCN的数据
SQL> select * from c as of scn 693636;
A B
---------- ----------
110
3 4
恢复数据
SQL> insert into c select * from c as of scn 693636;
2 rows created.
SQL> commit;
Commit complete.
现在再查询
SQL> select * from c;
A B
---------- ----------------------
110
3 4
可见可以根据SCN恢复到某一检查点的数据,如果把SCN转换成时间,,就可以把数据恢复到某一时间点。