Oracle闪回详解
1、问题定义
闪回是dba做的工作。现在也可授权给某个用户。
闪回的定义:就是将用户错误的操作回恢到以前的状态。即使你的事务提交的commit。
如果你删除了一个表。Drop table(DDL) 不用commit直接生效的。
闪回:flashback。
概念:
Oracle默认有2G硬盘空间,这2G的数据,保存的是用户的某些操作记录。如果用户操作的数据在这2G之内的。则可以条件闪回。
这个区域可以设置为最大10G。
在Oracle中,默认还有一个选项,时间选项。默认是900秒。
通过以下方式可以查询这个时间选项:
可以修改这个值:
2、闪回
闪回分类:
1:闪回表中的数据 –
闪回执行错误的CRUD语句。
且是提交以后的数据。
即对insert,update,delete有效。且已经提交了,则可以使用闪回。
2:闪回删除
错误的执行了drop table语句。则通过闪回删除可以找回以前数据。
3:闪回版本查询
向一个表中,做的任何一个commit语句。Oracle数据库,都会给你记录一个版本。
4:闪回事务查询
执行了多条sql语句,且是对多个表,或是对一个表的多次操作。
闪回的语法:
Flashback table {tableName} to
{
(scn|timestamp)
|
Before drop
}
SCN :System Changement Number – 其实就是一个时间。与时间一一对应的
Timestamp: 时间点 ,sysdate
--如何获取时间号:SCN
通过一个函数:
2.1、闪回表
必须要打开行移动功能,为rowid设置移动空间。
根据SCN时间号闪回:
根据时间闪回:
2.2、闪回删除
就是闪回通过drop删除到回收站中的表数据。
Flashback table tableName to before drop;
SQL> --删除stud这表
SQL> drop table stud;
表已删除。
SQL> select *from tab;
TNAME TABTYPE CLUSTERID
--------------- ---------------- ----------
BIN$O1guMhXtQtK TABLE
BrmH0wA44/Q==$0
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
SYS_TEMP_FBT TABLE
已选择6行。
SQL> --通过show 可以查看回收站中信息
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
STUD BIN$O1guMhXtQtKBrmH0wA44/Q==$0 TABLE 2013-03-28:19:29:16
SQL> --闪回
SQL> flashback table stud to before drop;
闪回完成。
SQL> show recyclebin;
SQL> select *from tab;
TNAME TABTYPE CLUSTERID
--------------- ---------------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
STUD TABLE
SYS_TEMP_FBT TABLE
已选择6行。
SQL> select * from stud;
ID NAME
---------- ----------
1 Jack
2 张三
3 Rose
表如果重名:
SQL> drop table stud;
表已删除。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -----------------
STUD BIN$jMt4lVtBQXieHhRHitV3KA==$0 TABLE 2013-03-28:19:33:
STUD BIN$4mfx44bSSo+NPkgEhU/Mig==$0 TABLE 2013-03-28:19:31:
SQL> --通过表名闪回,只会删除最近删除的那一个
SQL> flashback table stud to before drop;
闪回完成。
SQL> select * from stud;
AGE ADDR
---------- ------------------------------------------------------------
90 山东
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -----------------
STUD BIN$4mfx44bSSo+NPkgEhU/Mig==$0 TABLE 2013-03-28:19:31:
SQL> flashback table stud to before drop rename to stud2;
闪回完成。
SQL> select * from stud2;
ID NAME
---------- ----------
1 Jack
2 张三
3 Rose
还有一种闪加方式:
2.3、闪回版本查询
在Oracle数据库中,有一个对象versions记录的是对某个表的commit操作。
记录下的信息
1:versions_starttime – 什么时间开始的。对insert
2:versions_endtime – 什么时间数据就没有了,当执行delete,update时。
3:versions_startscn – 与1对应
4:versions_endscn – 与2对应
5:versions_xid – 操作的事务的id。
2.3.1、在Oracle中事务的边界
开始:
在Oracle中以insert,update,delete为事务的开始标记。
结束:
在执行rollback,commit.
在执行DDL(create ,drop ,alter)语句时,也是事务的结束。Commit
示例:
SQL> select *from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL> insert into stud values(12,'BJ');
已创建 1 行。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
12 BJ
SQL> create table stss(iii int);
表已创建。
SQL> rollback;
回退已完成。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
12 BJ
SQL> commit;
提交完成。
SQL> delete from stud where age=12;
已删除 1 行。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL> drop table st;
drop table st
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL> rollback;
回退已完成。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL>
2.3.2、查询一个表的版本信息
对于versions而言语法:
Select id,name,
Versions_xid
From person
Versions between ( scn | timestamp) minvalue and maxvalue;
SQL> select id,name,versions_xid from person versions between timestamp minvalue
and maxvalue;
ID NAME VERSIONS_XID
---------- ---------- ----------------
22 BCCCCC 0500130099020000
2 BBBBB 0500130099020000
11 ABBBB 0700020080020000
1 AAA 0700020080020000
2.4、闪回事务查询
原则就是根据某个versions_xid- 事务id
对应这versionss_id会有一个撤销的sql==== undo_sql
即对于insert的commit来说,则撤销应该是delete
在oracle中,有一个表
Flashback_transaction_query表。保存了所有用户可撤销的sql语句。
以下是这个表的结构:
Table_name
Undo_sql
Xid对应的就是versions_xid
Grant select any transaction to scott;
转载于:https://www.cnblogs.com/xiaweifeng/p/3688911.html
Oracle闪回详解相关推荐
- oracle闪回ddl,Oracle闪回详解
Oracle 9i 开始支持闪回,Oracle10g开始全面支持闪回功能,Oracle11g有所完善,为大家快速的恢复数据,查询历史数据提供了很大的便捷方法. 本文主要对Oracle常用闪回使用做些详 ...
- oracle数据库闪回详解
Oracle 9i 开始支持闪回,Oracle10g开始全面支持闪回功能,Oracle11g有所完善,为大家快速的恢复数据,查询历史数据提供了很大的便捷方法. 本文主要对Oracle常用闪回使用做些详 ...
- Oracle Flashback(闪回) 详解
通常我们对数据库进行了误操作时, 需要把数据库Rollback到之前的版本. 一个常用的方法就是使用日志来进行数据库恢复. 这个方法虽然强大有效, 但是花费时间等成本高. 例如当我们只是误提交了1个d ...
- Oracle Flashback(闪回) 详解.
通常我们对数据库进行了误操作时, 需要把数据库Rollback到之前的版本. 一个常用的方法就是使用日志来进行数据库恢复. 这个方法虽然强大有效, 但是花费时间等成本高. 例如当我们只是误提交了1个d ...
- Oracle 闪回技术详解
概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...
- oracle闪回数据库详解
--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...
- oracle 闪回表定义,oracle闪回表详解
--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...
- Oracle 闪回特性 详解
Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...
- oracle参数文件initorcl位置,oracle 参数文件详解
参数文件 两类参数文件: pfile:文本文件的参数文件,可以使用vi,vim等编辑器修改,文件名通常为init.ora spfile:二进制的参数文件,不能直接修改,只能存放在Oracle服务器端, ...
最新文章
- 使用Asp.net MVC, Jquery, Jquery UI构建基于Ajax的RIA应用.(更新Demo下载)
- TF之DD:实现输出Inception模型内的某个卷积层或者所有卷积层的形状
- 会计记忆总结之四:会计凭证
- 笔记-信息化与系统集成技术-人工智能基础知识
- Sturt2做表单重复提交
- IntelliJ IDEA 常用快捷键和设置
- Linux下安装Redis及搭建主从
- Python中的回文详解
- 与非CCR代码互操作
- 深度访谈Amazon员工与HR:华裔因pip跳楼背后(图)
- JAVA中如何取map的值_如何在java中取map中的键值 的两种方法
- Linux中sql*loader-350,SqlLoader
- Strassen矩阵乘法
- 生成随机的姓名、电话
- 【白皮书】以太坊 (Ethereum ):下一代智能合约和去中心化应用平台
- React爬坑之路三:Dva
- excel表格如何把含有数字的单元格筛选出来?
- moviepy音视频开发:使用credits1给视频加片头片尾字幕
- 初学HTML5:Web workers
- 011-Java代理模式
热门文章
- javascript 查看变量类型
- 查看进程状态信息命令 jps - (Java Virtual Machine Process Status Tool)
- Oracle中joint,oracle support
- java迪杰斯特拉算法介绍_178-迪杰斯特拉(Dijkstra)算法基本介绍
- java 字符串赋值_灵魂拷问:为什么 Java 字符串是不可变的?
- android按下enter键如何让光标跳到下一个edittext,我们如何知道光标已经移动到edittext的下一行android...
- linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍df...
- java bidi_Java Bidi createLineBidi()用法及代码示例
- window 程序报错 自动重启_好程序员web前端教程之详解JavaScript严格模式
- mysql注入写一句话_Mysql注入root权限直接写一句话马