oracle闪回表介绍
来源:互联网 发布:陈柏霖人品好吗 知乎 编辑:程序博客网 时间:2024/05/04 22:32
FLASHBACK TABLE
目的:
1. 使用闪回表语句恢复表到出现人为或应用错误事件之前的状态。
2. 可以闪回到过去多长时间取决于系统中undo数据量的大小。
3. 并且oracle数据库无法恢复通过DDL语句修改了结构的表。
注:oracle强烈建议设置UNDO_MANAGEMENT为AUTO(自动管理回滚数据)。另外,设置UNDO_RETENTION (回滚数据的保留时间)为一个合适的时间间隔。
详细说明请参考:the documentation on the UNDO_MANAGEMENT
andUNDO_RETENTION
initialization parameters.
还有,你不能回滚flash back语句,然而你可以使用另外一个flash back语句并且指定一个当前时间之前的时间点。
因此,在声明一个flash back语句之前最好先记录下当前的SCN号!
预备知识:
1. 我们需要有在指定表上有flashback的权限或者FLASHBACK
ANY
TABLE权限
才能闪回一个表到之前的时间点;
2.必须有对表的SELECT, INSERT
, DELETE
, andALTER
object privileges一系列权限;
3.除非是使用TO BEFORE
DROP,对于分区表的闪回都应该开启Row movement (alter table test_move enable row movement;)
一般用于分区表,某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,如果开启了这个选项,就会把这行从这个分区中delete 掉,并加到更新后所属的分区。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。如果没有开启这个选项,就会在更新时报错。
4.恢复一个表到一个还原点,必须拥有SELECT ANY
DICTIONARY
orFLASHBACK
ANY
TABLE
system privilege or theSELECT_CATALOG_ROLE
role。
语法:
语法说明:
FLASHBACK TABLE [ schema. ]table [, [ schema. ]table ]... TO { { SCN | TIMESTAMP } expr | RESTORE POINT restore_point } [ { ENABLE | DISABLE } TRIGGERS ] | BEFORE DROP [ RENAME TO table ] } ;
FLASHBACK TABLE
[方案名.] 表名
[, [方案名.] 表名]
TO { { 系统改变号 | 时间戳 } 表达式
| 恢复点 恢复点名
}
[ { 启用 | 禁用 } 触发器]
| 删除前 [重命名表]
};
例子:
1.恢复表到之前的状态:
CREATE TABLE employees_demo AS SELECT * FROM employees;
SELECT salary FROM employees_test WHERE salary < 2500; SALARY---------- 2400 2200 2100 2400 2200
注:由于是新建的表,在使用以下闪回语句之前需要等待至少5分钟让SCN传送到被闪回的映像表上。
ALTER TABLE employees_test ENABLE ROW MOVEMENT;
UPDATE employees_test SET salary = salary * 1.1 WHERE salary < 2500;5 rows updated.COMMIT;
SELECT salary FROM employees_test WHERE salary < 2500; SALARY---------- 2420 2310 2420
闪回表到更新数据之前的状态:
SQL> flashback table employees_test 2 to timestamp to_timestamp ('2012-08-02 19:12:20','yyyy-mm-dd hh24:mi:ss');闪回完成。
SQL> select salary from employees_test where salary < 2500; SALARY---------- 2400 2200 2100 2400 2200
2. 恢复被删除的表,通过表空间的Recyclebin(回收站)实现找回被删除的数据:
SQL> drop table employees_test;表已删除。SQL> select object_name, original_name, operation, type, droptime from recyclebin;OBJECT_NAME ORIGINAL_NAME OPERATION TYPE DROPTIME------------------------------ -------------------------------- --------- ------------------------- -------------------BIN$Bj8Ym5tKQR6kWeBVn9y0fA==$0 EMPLOYEES_TEST DROP TABLE 2012-08-02:19:26:54
SQL> flashback table employees_test to before drop;闪回完成。SQL> select object_name, original_name, operation, type, droptime from recyclebin;未选定行
SQL> drop table employees_test;表已删除。SQL> flashback table employees_test to before drop rename to employees_demo;闪回完成。SQL> select * from employees_test;select * from employees_test *第 1 行出现错误:ORA-00942: 表或视图不存在
以上内容为简单的闪回表操作,内容来自oracle官方文档。
made by dylan.
- oracle闪回表介绍
- Oracle介绍
- Oracle 介绍
- Oracle介绍
- oracle介绍
- Oracle介绍
- Oracle介绍
- oracle 日期函数介绍
- Oracle经典书籍介绍
- Oracle经典书籍介绍
- ORACLE SEQUENCE的介绍
- Oracle认证基本知识介绍
- Oracle ADF框架介绍
- oracle 日期函数介绍
- oracle 日期函数介绍
- Oracle Sequence简单介绍
- Oracle 主要配置文件介绍
- Oracle 体系结构介绍
- javax.naming.NameNotFoundException: Name jdbcis not bound in this Context
- 货币类型返回处理
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 批量添加联系人的方法
- JavaScript 路径字符串丢失"\" 的解决方法
- oracle闪回表介绍
- encodeURIComponent的使用
- 如何将你的linux打造成mac的桌面效果(支持Ubuntu,Debian,CentOS,Fedora,SUSE [Linux])
- JQuery Ajax 在asp.net中使用总结
- android的系统架构
- 类图
- Netbeans快捷键及相关
- JQuery Ajax 在asp.net中使用总结
- Win7 在IIS中增加MIME类型文件