oracle 数据恢复-闪回

  无意中update了全表数据,并且坑爹的commit掉了

网上查询了一些资料,结合这些资料把数据闪回恢复了;、

个人总结:有两种形式的数据恢复


一: 表级别的数据恢复

这类问题比较简单,不要去搞的太复杂,不需要用什么管理员用户登录啥的;

1 开启表行移动功能

alter table tablename enable row movement;


2 果断闪回到某个时间点

flashback table tablename to timestamp to_timestamp('2015-06-23 18:20:10','yyyy-mm-dd hh24:mi:ss');


二: 数据库级别的数据恢复

这类闪回稍微复杂些,需要权限控制,还有日志的问题;

1)一般用户下执行:
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24);
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24)
ORA-01031: 权限不足
2)采用sys用户执行:
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24); 
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24)
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。
3)关闭数据库并装载数据库
C:\Users\thinkpad>sqlplus/nolog
SQL*Plus: Release 11.1.0.7.0 - Production on 星期四 12月 29 16:05:16 2011
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
SQL> conn sys/fyzh@fgisdb as SYSDBA --sys用户登录
已连接。
SQL> SHUTDOWN IMMEDIATE;--关闭数据库
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup MOUNT;--装载数据库,无法识别监听,退出重新以sys登录可解决
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

C:\Users\thinkpad>sqlplus/nolog
SQL*Plus: Release 11.1.0.7.0 - Production on 星期四 12月 29 16:06:19 2011
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
SQL> conn sys/fyzh as SYSDBA --再次登录
已连接到空闲例程。
SQL> startup mount; --装载数据库
ORACLE 例程已经启动。

Total System Global Area  535662592 bytes
Fixed Size                  1348508 bytes
Variable Size             251661412 bytes
Database Buffers          276824064 bytes
Redo Buffers                5828608 bytes
数据库装载完毕。

4)再次执行还是报错
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24);
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24)
ORA-38726: 未启用闪回数据库事件记录。
SQL> flashback database to restore point BEFORE_DROP;
flashback database to restore point BEFORE_DROP 
ORA-38780: 还原点 'BEFORE_DROP' 不存在。

5)开启闪回功能
SQL> alter database flashback on;
alter database flashback on
ORA-38706: 无法启用 FLASHBACK DATABASE 事件记录。
ORA-38707: 尚未启用介质恢复。

6)开启归档和闪回
SQL> alter database archivelog;
Database altered
SQL> alter database flashback on;
Database altered

7)再次执行
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 0.1/24);
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 0.1/24)
ORA-38729: 执行 FLASHBACK 的闪回数据库日志数据不足。
 
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 0.01/24);
Done

8)开启数据库
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open noresetlogs;
alter database open noresetlogs
*
第 1 行出现错误:
ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

SQL> alter database open resetlogs;
数据库已更改。

9)查看 表还存在,数据2条

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值