度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 863|回复: 3
打印 上一主题 下一主题

[分享] Flashback 技术

[复制链接]

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
跳转到指定楼层
楼主
发表于 2020-4-24 15:56:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当某个错误的 UPDATE 或 DELETE 语句被提交之后,如果想要把数据恢复到提交之前的某个时间点,通过逻辑备份或日志理论上也是可以做到的,但过程往往比较繁琐,而且需要花费较长时间才能恢复过来。
为了让数据库能从任何逻辑误的操作中迅速地恢复,Oracle 推出了 Flashback(闪回)技术。Flashback 技术是以 undo segment 中的内容为基础的,因此受限于 UNDO_RETENTON 参数。要使用 Flashback 的特性,就必须启用自动撤销管理表空间(默认即开启)。
Oracle 10g 中的闪回技术主要包含闪回数据库、闪回删除、闪回表、闪回事务及闪回查询等一系列功能,本节将简要介绍其中比较实用的 3 个功能——闪回查询、闪回表及闪回删除。
注意:SCN(System Change Number)是在 Oracle 数据库更新后,用于定义数据库事务提交版本的一个数字,由 DBMS 自动维护(自动递增)。
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL; -- 查询当前的 SCNSELECT SCN_TO_TIMESTAMP(2817281) FROM DUAL;               -- SCN 转换成时间点SELECT TIMESTAMP_TO_SCN('2017-05-20 13:14:51') FROM DUAL; -- 时间点转换成 SCN
当时间点转换成 SCN 时可能会失败,因为那个时间点也许并没有有效的事务操作。
闪回查询(Flashback Query)
利用 SCN 号来进行闪回查询,查询最近一个事务操作之前t_course表中的数据:
SELECT * FROM demo.t_course AS OF SCN DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
利用时间点来进行闪回查询,查询'2017-05-20 13:14:51'这一秒t_course表中的数据:
SELECT * FROM demo.t_course AS OF TIMESTAMP TO_TIMESTAMP('2017-05-20 13:14:51','yyyy-mm-dd hh24:mi:ss');
闪回表(Flashback Table)
开启行转移功能(必须要开启行转移功能,否则将无法闪回表)。
ALTER TABLE demo.t_course ENABLE ROW MOVEMENT;  -- 开启行转移功能ALTER TABLE demo.t_course DISABLE ROW MOVEMENT; -- 关闭行转移功能
利用 SCN 号来进行闪回表操作,将demo.t_course表的数据恢复到 2869642:
FLASHBACK TABLE demo.t_course TO SCN 2869642;
利用时间点来进行闪回表操作,将demo.t_course表的数据恢复到'2017-05-22 18:00:00':
FLASHBACK TABLE demo.t_course TO TIMESTAMP TO_TIMESTAMP('2017-05-22 18:00:00','yyyy-mm-dd hh24:mi:ss');
闪回删除(Flashback Drop)
普通的 DROP TABLE 操作并不会彻底的删除表,而是把表放入了回收站(RecycleBin)。放入回收站实际上就是保存原表的位置,然后将要删除的表重新命名为前缀是“BIN$”的表,并将删除的表信息(包括被删除表的新名字和原名字)存储在回收站中。
回收站是一个逻辑结构,不具有物理数据结构。记录在回收站中信息会保留一段时间,直到回收站空间不足(会自动删除一些表信息)或者使用 PURGE 指令清除回收站中的记录。只要被删除表的信息仍在回收站中,就可以通过闪回技术将这些表恢复。
闪回删除类似于操作系统的垃圾回收站功能,可以从中恢复被 DROP 的表或者索引。无论是将回收站里的表恢复为原名称或指定新名称,表中的数据都不会丢失。可以通过USER_RECYCLEBIN视图或DBA_RECYCLEBIN来查询回收站中有那些被删除的表信息。
语法:
FLASHBACK TABLE user_recyclebin.object_name TO BEFORE DROP[RENAME TO new_table_name];
示例:
FLASHBACK TABLE "BIN$/AwWTga9PSHgQKjACgoQJA==$0" TO BEFORE DROP;FLASHBACK TABLE "BIN$Vm9deG4nRjatKqnWpQ+RBA==$0" TO BEFORE DROP RENAME TO tt;
补充示例:
PURGE DBA_RECYCLEBIN;           -- 清空当前数据库的回收站PURGE RECYCLEBIN;               -- 清空当前用户的回收站PURGE TABLE demo.t_course;      -- 清空 demo.t_course 表在回收站中的信息DROP TABLE demo.t_course PURGE; -- 彻底删除 demo.t_course 表,不进入回收站
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
沙发
发表于 2020-4-24 17:52:36 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
板凳
 楼主| 发表于 2020-4-25 14:12:30 | 只看该作者
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
地板
发表于 2020-5-1 17:48:34 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-1 19:23 , Processed in 0.127800 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表