当前位置: 首页 > news >正文

flashback使用记录

作者:gtlions 【转载时请以超链接心事标明文章出处 和作者 信息,谢谢.】

链接:http://blog.csdn.net/gtlions/archive/2010/03/29/5430076.aspx

今天中午同事误操作了一个动作,导致生产环境的550多条的业务数据丢失,折腾了10-15分钟把数据给恢复了。

晚上回到酒店在本机稍微小结和还原下操作过程,在此记录下。

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as crmii

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> create table flashback_table_test1 (id number(4),name varchar2(10));

Table created

SQL> create table flashback_table_test2 as select * from flashback_table_test1 where 1=0;

Table created

SQL> insert into flashback_table_test1 values(1,'张三');

1 row inserted

SQL> insert into flashback_table_test1 values(2,'李四');

1 row inserted

SQL> insert into flashback_table_test1 values(3,'王五');

1 row inserted

SQL> insert into flashback_table_test2 select * from flashback_table_test1;

3 rows inserted

SQL> commit;

Commit complete

SQL> select sysdate from dual;

SYSDATE
-----------
2010/3/29 2

SQL> show parameter undo;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 1800
undo_tablespace string UNDOTBS1

SQL>
SQL> select * from flashback_table_test1;

ID NAME
----- ----------
1 张三
2 李四
3 王五

SQL> select * from flashback_table_test2;

ID NAME
----- ----------
1 张三
2 李四
3 王五

SQL>

1、DELETE情况下的恢复

SQL> delete from flashback_table_test1;

3 rows deleted

SQL> commit;

Commit complete

SQL> select * from flashback_table_test1;

ID NAME
----- ----------

SQL> select * from flashback_table_test1 as of timestamp (sysdate-3/1440);

ID NAME
----- ----------
1 张三
2 李四
3 王五

SQL> insert into flashback_table_test1 select * from flashback_table_test1 as of timestamp (sysdate-3/1440);

3 rows inserted

SQL> commit;

Commit complete

SQL> select * from flashback_table_test1;

ID NAME
----- ----------
1 张三
2 李四
3 王五

SQL>

数据成功恢复。

2、Truncate情况下的恢复

SQL> truncate table flashback_table_test2;

Table truncated

SQL> select * from flashback_table_test2 as of timestamp (sysdate-3/1440);

select * from flashback_table_test2 as of timestamp (sysdate-3/1440)

ORA-01466: 无法读取数据 - 表定义已更改

SQL> select * from flashback_table_test2 as of timestamp (sysdate-2/1440);

select * from flashback_table_test2 as of timestamp (sysdate-2/1440)

ORA-01466: 无法读取数据 - 表定义已更改

SQL> select * from flashback_table_test2 as of timestamp (sysdate-1/1440);

select * from flashback_table_test2 as of timestamp (sysdate-1/1440)

ORA-01466: 无法读取数据 - 表定义已更改

SQL> flashback table flashback_table_test2 to before drop rename to test2_r;

Done

SQL> select * from test2_r;

ID NAME
---------- --------------------
2 test 2

SQL> drop table flashback_table_test2;

Table dropped

SQL> flashback table flashback_table_test2 to before drop rename to test2_r_2;

Done

SQL> select * from test2_r_2;

ID NAME
----- ----------

SQL>

恢复以失败告终;

3、Drop情况下恢复


SQL> select * from flashback_table_test1;

ID NAME
----- ----------
1 张三
2 李四
3 王五

SQL> drop table flashback_table_test1;

Table dropped

SQL> select * from flashback_table_test1;

select * from flashback_table_test1

ORA-00942: 表或视图不存在

SQL> flashback table flashback_table_test1 to before drop to rename flashback_table_test1_r;

flashback table flashback_table_test1 to before drop to rename flashback_table_test1_r

ORA-00933: SQL 命令未正确结束

SQL> flashback table flashback_table_test1 to before drop rename to flashback_table_test1_r;

Done

SQL> select * from flashback_table_test1_r;

ID NAME
----- ----------
1 张三
2 李四
3 王五

SQL>
数据也成功恢复。

初步总结:

1、正常的Delete情况下是可以完全恢复数据的;

2、Truncate情况下使用普通的Flashback似乎无能为了;

3、Drop情况下也是可以恢复数据的;

4、有修改过表结构的情况下不能使用正常的查找SCN和timestamp来操作了,建议的操作是使用flashback复制到临时表;

5、遇到数据被误删除、表误删除的情况下,视情况以最快的数据停掉前段服务,停止任何数据操作,避免UNDO空间被覆盖、循环覆盖写。


才学疏浅,错误之处或看官有更好的建议和总结请多指教。

-The End-

相关文章:

  • 打印表格php,php – 如何使用简单的html dom打印表格的单元格
  • Winforms: Windows 7中Taskbar的新效果(3)——进度条
  • java题有两个矩阵A和B,java_java解一个比较特殊的数组合并题,给定两个排序后的数组A和B,其 - phpStudy...
  • QQ游戏到底是如何实现百万人同时在线并保持游戏高效率的呢?
  • matlab随机生成点图,matlab随机生成散点图
  • 菊子曰
  • php编写异常处理,PHP实现异常处理类的方法
  • Linux + FreeTDS + unixODBC + Haskell 访问 SQL Server 数据库
  • matlab函数accumarray,MATLAB常用函数
  • ora-12514问题解决
  • mysql数据库全文本搜索,MySQL必知必会——第18章 全文本搜索 读书笔记
  • 淘宝定制手机:移动电子商务战略及其背后
  • matlab里a1不能做变量,matlab成员函数不能修改成员变量值,求助
  • Haskell 中使用 BloomFilter(布隆过滤器)处理大规模数据
  • java 一元稀疏多项式简单计算器,一元稀疏多项式计算器
  • CSS 三角实现
  • CSS 提示工具(Tooltip)
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Invalidate和postInvalidate的区别
  • Java 网络编程(2):UDP 的使用
  • Node项目之评分系统(二)- 数据库设计
  • pdf文件如何在线转换为jpg图片
  • SpingCloudBus整合RabbitMQ
  • vagrant 添加本地 box 安装 laravel homestead
  • Web Storage相关
  • 对象引论
  • 前端面试之CSS3新特性
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用Gradle第一次构建Java程序
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #控制台大学课堂点名问题_课堂随机点名
  • (C语言)fgets与fputs函数详解
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net 7 上传文件踩坑
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET面试题(二)
  • @Mapper作用
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [20140403]查询是否产生日志
  • [Android Pro] Notification的使用
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [C++打怪升级]--学习总目录
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • [Docker]十.Docker Swarm讲解
  • [ffmpeg] aac 音频编码
  • [Google Guava] 2.1-不可变集合
  • [HJ56 完全数计算]
  • [IE编程] IE8 新增的C++开发接口
  • [java]删除数组中的某一个元素
  • [JavaScript] JavaScript事件注册,事件委托,冒泡,捕获,事件流