flashback

mysql误删除数据后如何恢复

随声附和 提交于 2020-03-18 17:55:10
Mysql 误删除是我最头痛的一件事,网络也有很多惨痛的教训,为了减少企业损失,应迅速恢复业务数据,后续在人员操作行为上建立完善的制度及流程,将风险扼杀在摇篮才是上上策。 本次使用的原美团开源Mysql 数据闪回工具 传送门:https://github.com/Meituan-Dianping/MyFlash 一,MyFlash简介 MyFlash的前身是binlong2,后续是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析V4版本的二进制日志,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。 该工具已经在美团点评内部使用 二,MyFlash使用限制 二进制日志格式必须为【row】行级模式 ,且binlog_row_image =full 仅支持5.6与5.7 (如果是低版本的mysql 二种方案 1,升级mysql 2,使用binlog2) [binlog2sql工具的下载地址:] 只能回滚DML(增,删,改) 三,详细说明 3.1 安装部署 git clone https://github.com/Meituan-Dianping/MyFlash.git cd MyFlash/ [root@gitlab MyFlash]# yum install glib2* [root@gitlab MyFlash]# gcc -w

Flashback Drop实例操作

ぃ、小莉子 提交于 2020-03-10 05:33:20
1、Flashback Drop Flashback Drop 是从Oracle 10g 开始出现的,用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle Bin(表空间回收站) ,这个功能和windows的回收站非常类似。 Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到。故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空。 Flashback Drop 是基于Tablespace RecycleBin 来实现恢复的。 它只支持闪回与table 相关连的对象,比如表,索引,约束,触发器等。 如果是函数或 者存储过程等,就需要使用Flashback Query来实现。 2、Tablespace Recycle Bin 从Oracle 10g 开始, 每个表空间都会有一个叫作回收站的逻辑区域,当用户执行drop命令时, 被删除的表和表的关联对象( 包括索引, 约束,触发器 ,LOB段,LOB index 段) 不会被物理删除, 这些对象先转移到回收站中,这就给用户提供了一个恢复的可能。 初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON, 可以使用OFF关闭。 SQL> show parameter recycle NAME TYPE

恢复oracle中误删除drop掉的表

爱⌒轻易说出口 提交于 2020-03-09 22:22:01
查看回收站中表 select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin; 恢复表 SQL>flashback table test_drop to before drop;或 SQL>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop; 注:必须9i或10g以上版本支持,flashback无法恢复全文索引 以下为参考资料 使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表   以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 ― 当然是意外地删除 ― 并需要尽快地恢复。(在某些时候,这个不幸的用户可能就是 DBA!)   Oracle9i Database 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作。唯一的恢复方法是在另一个数据库中使用表空间的时间点恢复,然后使用导出/导入或其他方法,在当前数据库中重新创建表。这一过程需要 DBA 进行大量工作并且耗费宝贵的时间,更不用说还要使用另一个数据库进行克隆。   请使用 Oracle Database 10g

oracle-11g-闪回技术

*爱你&永不变心* 提交于 2020-02-10 01:04:25
一.4种闪回技术: ①闪回数据库   以当前数据库为起点,在时间上回退,逐步改变知道顺序回退完成的所有工作。最终的结果就像是执行了不完整恢复,将丢失闪回点之后的所有工作,   并且实际上得使用resetlogs打开数据库。         !!!!!闪回数据库不能撤销物理损坏,只能恢复由用户错误造成的逻辑错误。 ②闪回查询、事务和表   三种闪回技术都基于使用撤销段(undo段)。     (1)闪回查询:允许查询过去某个时间的数据库,利用此技术甚至可以选取过去某段时间内一个行的所有版本,以便了解改行的历史操作,包括操作        时间、操作人和做出每个更改的事务的标识符。     (2)闪回事务自动执行修复过程。一旦使用了闪回查询确认了引起问题的事务,oracle可以构造SQL语句来反转事务中的更改。无法回滚提交的更改,       但可以构造另一事务以反转第一个错误事务的影响。与闪回数据不同的是:闪回事务并不会丢失数据,所做的其他所有工作仍然有效,并且数据库保持当前状态。     (3)闪回表:指示oracle反转从特定时间点以来对该表所做的所有更改,而保持其他所有表的当前状态。 ③闪回删除:可以撤销删除一个表,通过将drop命令映射到rename命令实现,不能实现truncate的闪回,purge的闪回,,可以还原任何相关的索引       及权限和表本身(外键约束除外)

Version Query Output after Insert, Update and Delete

萝らか妹 提交于 2020-01-24 14:42:46
问题 Following is a question related to Oracle SQL Expert exam and have 4 choices. It says the correct answer is C. But I have a doubt and think that D should be the answer as this uses Oracle FlashBack technique. Can anybody explain this please. Thank you. Q)Evaluate the following statements: CREATE TABLE digits (id NUMBER(2), description VARCHAR2(15)); INSERT INTO digits VALUES (1,'ONE'); UPDATE digits SET description='TWO' WHERE id=1; INSERT INTO digits VALUES (2, 'TWO'); COMMIT; DELETE FROM

Oracle学习笔记:drop table 和 purge

故事扮演 提交于 2020-01-15 00:48:14
操作 Oracle 时,经常会删除一个表,当删除错误后,希望能够恢复该表,有时也希望删除表之后能够立刻释放表的空间。 通过 purge 的使用可以在 Oracle 中删除表、恢复表和空间释放。 drop table 当在 Oracle 中删除(drop)一个表时,数据库不会立刻释放表的空间,而是重命名这个表然后将其放入回收站,可以通过以下方式查询: select object_name, original_name from user_recyclebin where original_name = 'TEMP' OBJECT_NAME ORIGINAL_NAME ------------------------------------------------------- BIN$C1LT5U0DaV7gVAAhKENZ5A==$0 TEMP object_name:对象在回收站中的名称; original_name:对象的原始名称。 表放入回收站后,Oracle 不会将该表的空间给其它对象使用,表所占用的空间依然占用,除非用户手工进行 Purge 或者因为存储空间不够而被数据库清掉。如果你发现错误的删除了表,可以通过 flashback table 将表恢复。 flashback table 可以使用 flashback table 恢复已删除的表。 flashback

Use of FLASHBACK in Oracle

随声附和 提交于 2019-12-28 07:06:07
问题 I have searched for the flashback command. Somewhere it is written we can rollback the truncate operation, and somewhere it is written we can't rollback. Can the FLASHBACK command in Oracle used to rollback the truncate table operation? 回答1: You need to have Flashback Data Archive enabled. Then the truncate could be reversed with a statement like this: insert into <truncated_table> select * from <truncated_table> as of timestamp <some time>; Thanks to @Jon Heller for adding this useful

MySQL Flashback 闪回功能详解

邮差的信 提交于 2019-12-22 03:06:20
阅读目录 1. 简介 2. 闪回原理 3. flashback安装 4. 使用简介 5. Flashback工具使用注意点 回到顶部 1. 简介 mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据。在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos)。比如忘了带where条件的update、delete操作,传统的恢复方式是利用全备+二进制日志前滚进行恢复,相比于传统的全备+增备,flashback显然更为快速、简单。 目前MySQL的flashback功能是利用binlog完成的,第一个实现该功能的是阿里云的 彭立勋 , 他在MySQL 5.5版本上就已实现,并将其提交给MariaDB。 回到顶部 2. 闪回原理 原理:flashback工具(-B 参数)可对rows格式的binlog可以进行逆向操作,delete反向生成insert、update生成反向的update、insert反向生成delete。 MySQL的binlog以event的形式,记录了MySQL中所有的变更情况,利用binlog我们就能够重现所记录的所有操作。 MySQL引入binlog主要有两个用途/目的:一是为了主从复制;二是用于备份恢复后需要重新应用部分binlog,从而达到全备+增备的效果。 MySQL的binlog有三种格式:

MySQL Flashback 闪回功能详解

只愿长相守 提交于 2019-12-22 03:05:38
1. 简介 mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据。在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos)。比如忘了带where条件的update、delete操作,传统的恢复方式是利用全备+二进制日志前滚进行恢复,相比于传统的全备+增备,flashback显然更为快速、简单。 目前MySQL的flashback功能是利用binlog完成的,第一个实现该功能的是阿里云的 彭立勋 , 他在MySQL 5.5版本上就已实现,并将其提交给MariaDB。 2. 闪回原理 原理:flashback工具(-B 参数)可对rows格式的binlog可以进行逆向操作,delete反向生成insert、update生成反向的update、insert反向生成delete。 MySQL的binlog以event的形式,记录了MySQL中所有的变更情况,利用binlog我们就能够重现所记录的所有操作。 MySQL引入binlog主要有两个用途/目的:一是为了主从复制;二是用于备份恢复后需要重新应用部分binlog,从而达到全备+增备的效果。 MySQL的binlog有三种格式: statement,基于SQL语句的模式,一般来说生成的binlog尺寸较小,但是某些不确定性SQL语句或函数在复制过程可能导致数据不一致甚至出错;

How to rollback my DB changes after a commit?

99封情书 提交于 2019-12-20 10:58:08
问题 I did a DB update without using a where clause and commit without taking any backup. All the rows in the table are updated. Is there any way to rollback the changes? The DB is a Oracle SQL one. Please help. 回答1: You could do it using Flashback feature. 1.Flashback by SCN SELECT column_list FROM table_name AS OF SCN scn_number; 2.Flashback by TIMESTAMP SELECT column_list FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('the timestamp value'); To get current_scn and systimestamp, query : SELECT