利用oracle闪回技术恢复误删除的表或误更新的记录.docx
- 文档编号:23283068
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:9
- 大小:205.29KB
利用oracle闪回技术恢复误删除的表或误更新的记录.docx
《利用oracle闪回技术恢复误删除的表或误更新的记录.docx》由会员分享,可在线阅读,更多相关《利用oracle闪回技术恢复误删除的表或误更新的记录.docx(9页珍藏版)》请在冰豆网上搜索。
利用oracle闪回技术恢复误删除的表或误更新的记录
利用oracle闪回技术恢复误删除的表或误更新的记录
为了使Oracle数据库从任何逻辑误操作中迅速地恢复,Oracle推出了闪回技术。
该技术首先以闪回查询(FlashbackQuery)出现在Oracle9i版本中,后来Oracle在10g中对该技术进行了全面扩展,提供了闪回数据库、闪回删除、闪回表、闪回事物及闪回版本查询等功能,本文将重点说闪回删除、闪回表的使用。
(本文使用oracle版本10.2.0.3.0)
一.确认flashbackon打开
首先要保证数据库运行在flashbackon模式下,可用以下语句查询是否工作在此模式下:
selecta.name,a.log_mode,a.FLASHBACK_ONfromv$databasea;
如FLASHBACK_ON不为YES,请进行以下操作打开此功能。
1.首先关闭数据库shutdownimmediate;
2.打开数据库进入mount状态:
startupmount;
3.在mount状态下输入:
alterdatabaseflashbackon;
alterdatabaseopen;
如报以下错,按照加粗字体的命令进行操作。
SQL>alterdatabaseflashbackon
2 ;
alterdatabaseflashbackon
*
第1行出现错误:
ORA-38706:
无法启用FLASHBACKDATABASE事件记录。
ORA-38714:
要求进行实例恢复。
则进行如下操作:
SQL>shutdownabort
ORACLE例程已经关闭。
SQL>startupmount
ORACLE例程已经启动。
TotalSystemGlobalArea 599785472bytes
FixedSize 1291964bytes
VariableSize 239077700bytes
DatabaseBuffers 352321536bytes
RedoBuffers 7094272bytes
数据库装载完毕。
SQL>alterdatabaseflashbackoff;
数据库已更改。
SQL>alterdatabaseopen;
数据库已更改。
SQL>shutdownimmediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL>startupmount
ORACLE例程已经启动。
TotalSystemGlobalArea 599785472bytes
FixedSize 1291964bytes
VariableSize 243272004bytes
DatabaseBuffers 348127232bytes
RedoBuffers 7094272bytes
数据库装载完毕。
SQL>alterdatabaseflashbackon;
数据库已更改。
成功之后,输入alterdatabaseopen;打开数据库,之后再操作数据库时,如对表有误删除(drop),或误操作表记录(DML操作),均可通过以下方法恢复。
二.操作演示
以下举两个例子说明一下常用,具体语法的使用大家可以学习时google一下。
1.数据误删除恢复操作:
在下图中,可以看到slave_account表有3894条记录。
执行以下删除操作:
deletefromslave_accountwhererownum<200
发现记录已经被删除了199条,且已经提交。
执行以下语句进行恢复误删除数据操作:
flashbackTableSLAVE_ACCOUNTtotimestamp(to_date('2011-07-1511:
50:
00','yyyy-mm-ddhh24:
mi:
ss'));
报错这时,请执行:
altertableSLAVE_ACCOUNTenablerowmovement;
这个命令的作用是,允许Oracle修改分配给行的rowid。
在Oracle中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。
闪回表处理会对EMP完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。
要支持闪回就必须允许Oracle执行这个操作。
现在可以看到flashbackTableSLAVE_ACCOUNTtotimestamp(to_date('2011-07-1511:
50:
00','yyyy-mm-ddhh24:
mi:
ss'));执行正常了。
这时我们再执行第一步count操作:
这时发现数据已经恢复成功了。
注意,经过测试发现闪回可以恢复deletefromSLAVE_ACCOUNT删除的记录,但不能闪回truncatetable SLAVE_ACCOUNT这样的操作;
2.drop掉表后的恢复
首先可以看到umaptool表里是有记录的,
现在我drop掉它,再进行select操作,报以下错误:
现在执行select*fromuser_recyclebin; --或dba_recyclebin查看oracle回收站信息,如已删除的表名等,可用于恢复。
可以看到我刚刚删除的表、主键等记录。
现在要恢复刚刚删除的表,可执行以下语句:
flashbackTableumaptoolTobeforedrop;--恢复误删除的表。
执行完成后,我们再执行第一次执行的select操作,发现表又找回来了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 oracle 技术 恢复 删除 更新 记录