Oracle的闪回操作

Oracle10g中引入了闪回技术,但这并不意味着所有的表都能闪回成功,当没有足够的磁盘空间,Oracle将使用回收站中的磁盘空间,而且位图连接索引和引用完整性约束也不受回收站的保护。

recyclebin参数的设置

show parameter bin       --展示是否使用了闪回技术,默认是使用闪回技术的
alter session set recyclebin=off;     --在session级别修改
alter system set recyclebin=off DEFERRED; --不加DEFERRED参数是不允许修改的,但在session一级可以修改,与10g不同

显示回收站中被删除的表

show recyclebin

删除或清空回收站中的表

purge table table_name;    --删除回收中的一张表
purge recyclebin;     --清空回收

恢复被删除的表

flashback table table_name to before drop;   

彻底删除表,不放进回收站

drop table table_name purge;

闪回错误的DML操作

 在Oracle10g和11g中可以利用还原段中的数据进行恢复

设置还原段的保留时间

show parameter undo_retention    --查看保留时间,默认是15分钟
alter system set undo_retention=7200; --修改保留时

下面以一个例子来进行说明

复制代码
update myemp set sal=9999;                 --将myemp中的员工都变为9999

--通过version子句查询以往的事物操作信息,version_xid为事物号,minvalue为最小值,maxvalue为最大值
select versions_xid,empno,ename,sal
from myemp versions between scn minvalue and maxvalue where empno=7900;
结果显示如下图,versions_xid为空,表明我们并未提交所做的DML操作

commit;     --提交再查询,结果如图:

conn system/manager
select operation,START_SCN from flashback_transaction_query where xid=hextoraw('0A00020004050000'); --查找出事物随对应的SCN号

---不知道为什么表中显示状态为unknown,按理应该是UPDATE的。
alter table scott.myemp enable row movement;    --开启表的行移动功能
flashback table scott.myemp to SCN 1996229; --恢复操作完成
复制代码

也可以按照时间点恢复

flashback table scott.myemp to timestamp to_timestamp('15:36','hh24:mi');

 

posted @   头痛不头痛  阅读(1024)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示
主题色彩