ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Oracle数据库基础之8_闪回

Oracle数据库基础之8_闪回 闪回技术分以下几类闪回查询Flashback Query闪回版本查询Flashback Version Query闪回事务查询Flashback Transaction Query闪回表:Flashback Table闪回删除:Flashback Drop闪回数据库Flashback Database其中闪回查询闪回版本查询闪回事务查询闪回表这四种闪回都是基于undo实现的闪回删除Flashback Drop是基于回收站来实现的闪回数据库Flashback Database是基于闪回日志来实现的。闪回查询Flashback Queryselect * from A as of scn 1095782;select * from A as of timestamp sysdate-5/1440;闪回版本查询Flashback Version Queryselect column1,column2,versions_startscn,versions_starttime,versions_xid,versions_operation from A versions BETWEEN SCN MINVALUE AND MAXVALUE order by 3闪回事务查询Flashback Transaction Query必须启用ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;否则flashback_transaction_query.undo_sql结果为空Select xid,operation,commit_scn,undo_sql from flashback_transaction_query where xid in(Select versions_xid from A versions between scn minvalue and maxvalue)闪回表:Flashback Table必须启用ALTER TABLE t1 ENABLE ROW MOVEMENT;否则执行flashback table时会报错: ORA-08189: 因为未启用行移动功能, 不能闪回表需要ROW MOVEMENT的原因每一行数据都对应一个row_id记录了数据存放的具体位置哪个数据文件、哪个数据块、哪行比如1行数据被删除了这行对应的数据块就空了一旦有其他数据插入可能就会写入到这些到数据块上也就是这行数据的位置被其他数据占用了以后如果要恢复这行因为原先的位置被其他数据占用就要改变这行数据的位置这就是row movementflashback table t1 to scn XX闪回删除:Flashback Drop每个表空间都会有一个叫作回收站的逻辑区域当用户执行drop命令时 被删除的表和表的关联对象( 包括索引 约束触发器LOB段LOBindex 段) 不会被物理删除 这些对象先转移到回收站中这就给用户提供了一个恢复的可能。闪回丢弃是指将被丢弃的数据库对象及其相依对象的拷贝保存在回收站中以便在必要时能够及时恢复这些对象。在回收站被清空以前被丢弃的对象并没有从数据库中删除这就使得数据库能够恢复被意外或误操作而删除的表。drop table t1;show recyclebin;select object_name,original_name from user_recyclebin;flashback table t1 to before drop;闪回数据库Flashback Database要想使用Flashback Database 必须使用Flash RecoveryArea因为Flashback Database Log 只能保存在这里。 要配置的2个参数如下一个是大小DB_RECOVERY_FILE_DEST_SIZE一个是位置DB_RECOVERY_FILE_DEST。startup mount;alter database flashback on;alter database open;shutdown immediate;startup mount;Flashback database to timestamp to_timestamp(‘09-10-14 14:37:05’,‘yy-mm-dd hh24:mi:ss’);Flashback database to SCN XX;alter database open resetlogs;直接alter database open resetlogs打开数据库当然指定scn或者timestamp时间点之后产生的数据统统丢失。如果不想丢数据可以先执行alter database open read only命令以read-only模式打开数据库然后立刻通exp(expdp不行因为expdp必须在readwrite下操作)方式将误操作涉及表的数据导出再执行recover database命令以重新应用数据库产生的redo将数据库修复到flashback database操作前的状态然后再通过逻辑导入的方式将之前误操作的表重新导入这样的话对现有数据的影响最小不会有数据丢失。
返回列表