`

oracle 10G flashback 学习

阅读更多
项目开发中,前台人员不小心删除了配置表数据,我用此方法把删除的数据恢复过,具体步骤如下
--首先启动行移动
alter table table_name enable row movement;
-- 进行时间点恢复(此处只是基于时间点进行恢复的,另外scn恢复以后介绍)
flashback table table_name to timestamp to_timestamp('2010-03-27 9:00:00','yyyy-mm-dd hh24:mi:ss');
-- 查看恢复方法
select * from table_name

-- 下面是一些相关资料  

flashback:即回闪,是从oracle9i就开始提出的一种操作恢复的功能,在oracle10g中进行了增强和修改,通过回闪,用户可以完成许多不可能恢复的工作,目前oracle10g的回闪包括以下特性;

1〉oracle falshback Database. 特性允许oracle通过Flashback database语句,将数据库会滚到前一个时间点或者scn上,而不需要作时间点的恢复工作!
2〉oracle falshback table. 特性允许oracle通过flashback table语句,将表会滚到前一个时间点或者scn上。
3〉oracle falshback drop. 特性允许oracle把恢复drop掉的table或者索引。
4〉oracle falshback version query. 特性可以得到特定的表在某一个时间段内的任何修改记录!
5〉oracle falshback transaction query 特性可以限制用户在某一个事务级别上检查数据库的修改操作,适用于诊断问题、分析性能、审计事务。

一:oracle falshback table

oracle flashback table即回闪表
可以进行的操作:操作1>flashback table tablename to befor drop;
对于误drop的table此可以使用本操作,还原drop的table!
此操作需要用户有以下的权限:
A:falshback any table的系统权限或者是某一个表的flashback权限。
B:有table的select、insert、delect、alter权限。
C:有table的row Movement权限
SQL> set serveroutput on
SQL> set time on
11:24:37 SQL> set feadback off;
11:24:59 SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
A1 TABLE
A TABLE
----------------------
可以看到本用户下有table A,现在drop它;
-----------------------
11:25:01 SQL> drop table a;
11:26:18 SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
BIN$dFFlS6jJQLShRwRQ+kLJMg==$0 TABLE
A1 TABLE
----------------------
table已经删除,可以看到table并不是真正意义上的删除掉了,而是多了一个"BIN$dFFlS6jJQLShRwRQ+kLJMg==$0"的表,这个表是原来的A表,这是oracle的recyclebin,一个类似垃圾回收站的机制。当用户删除表以后把表放到recyclebin中,而不是删除掉!
----------------------
现在使用命令恢复表A
11:26:29 SQL> flashback table a to before drop;
11:30:45 SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
A1 TABLE
A TABLE
可以看到表A已经恢复!

可以进行的操作:操作2>flashback table tablename to scn/timestamp(a timestamp);
此操作可以利用scn(在后面介绍)或者timestamp将table恢复到某一个时间点!
-----给table row movement权限
11:41:49 SQL> alter table a enable row movement;
----插入一条记录
11:44:16 SQL> insert into a values('www',11);
11:45:15 SQL> commit;
----得到该记录的scn:1576479
11:45:20 SQL> select a.*,ora_rowscn from a;

NAME AGE ORA_ROWSCN
---------- ---------- ----------
500 65 1576479
600 65 1576479
111 10 1576479
222 100 1576479
333 30 1576479
444 40 1576479
555 50 1576479
www 11 1576479
888 34 1573035
---删除一条记录
11:45:55 SQL> delete from a where name ='www';
11:46:19 SQL> commit;
---利用scn命令恢复删掉的纪录!
11:46:20 SQL> flashback table a to scn 1576479;
11:46:49 SQL> select * from a;

NAME AGE
---------- ----------
500 65
600 65
111 10
222 100
333 30
444 40
555 50
www 11
888 34
---利用timestamp命令恢复删掉的纪录!
11:46:54 SQL> flashback table a to timestamp to_timestamp('2007-04-27 11:45:20','yyyy-mm-dd hh24:mi:ss');
11:56:28 SQL> select * from a;

NAME AGE
---------- ----------
500 65
600 65
111 10
222 100
333 30
444 40
555 50
888 34

附:--关于scn的介绍:
SCN:system change numbers,oracle10g的每一个表都有ora_rowscn列!但是desc是看不到改列的。
可以通过select ora_rowscn from table 得到每一条结果集当前的SCN,timestamp_to_scn()将scn转换到stmestamp;scn_to_timestamp()将timestamp转换到scn。
二:flashback drop
利用flashback drop oracle10g可以对DDL操作进行恢复,oracla提供类似回收站的recyclebin来收集被删除的对象,其实对象在删除的时候oracle把对象写到一个数据字典表中,当用户不需要该对象的时候,可以利用purge命令来从回收站进行清除。
--察看用户下所有表
SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
SYS_TEMP_FBT TABLE
A1 TABLE
A TABLE

Executed in 0.078 seconds
--drop 表A1
SQL> drop table a1;

Executed in 0.047 seconds
--再察看此时用户所拥有的所有表;
SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
SYS_TEMP_FBT TABLE
A TABLE
BIN$fPHKLxsBTBq6+bjBLPEJaw==$0 TABLE

Executed in 0.078 seconds

--如上可以看到A1表drop的同时,当前用户下又产生了一个以BIN开头的新表BIN$fPHKLxsBTBq6+bjBLPEJaw==$0,这就是原来的A1表
SQL> set timing off
SQL> set time on
14:25:40 SQL> select t.object_name,t.original_name from recyclebin t;

OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$fPHKLxsBTBq6+bjBLPEJaw==$0 A1
---采用flashback table命令恢复刚才删除的表A1
14:29:45 SQL> flashback table a1 to before drop;
14:29:49 SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
SYS_TEMP_FBT TABLE
A1 TABLE
A TABLE
--当用户确实不需要该对象时候,可以采用pruge来彻底删除改对象
14:29:55 SQL> drop table a1;
14:31:13 SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
SYS_TEMP_FBT TABLE
A TABLE
BIN$N+i42FTvSSemvMrH6frCQg==$0 TABLE

14:31:32 SQL> purge table "BIN$N+i42FTvSSemvMrH6frCQg==$0";
14:31:49 SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B TABLE
STEST TABLE
TA TABLE
GROUPINGTEST TABLE
COLTABLE TABLE
ROWTABLE TABLE
COLTABLE1 TABLE
ROWTABLE1 TABLE
SYS_TEMP_FBT TABLE
A TABLE
--用purge命令收站想清空回收站里的别的表
14:31:56 SQL> purge recyclebin;
14:34:02 SQL> select object_name from recyclebin;

OBJECT_NAME
------------------------------

三:oracle falshback version query--闪回版本查询
oracle10g falshback 能将所有做了提交的行进行记录,就类似于审计的功能,通过falshback可以查询什么时候执行了什么操作,非常方便,包括闪回版本的查询和审计等。
1〉闪回版本的查询
14:41:22 SQL> insert into a values('zhao',24);
14:42:01 SQL> commit;
--查询当前版本
14:34:45 SQL> select a.*,ora_rowscn from a;

NAME AGE ORA_ROWSCN
---------- ---------- ----------
500 65 1577059
600 65 1577059
111 10 1577059
222 100 1577059
333 30 1577059
444 40 1577059
555 50 1577059
888 34 1573035

14:41:22 SQL> insert into a values('zhao',24);
14:42:01 SQL> commit;
14:42:03 SQL> select a.*,ora_rowscn from a;

NAME AGE ORA_ROWSCN
---------- ---------- ----------
500 65 1577059
600 65 1577059
111 10 1577059
222 100 1577059
333 30 1577059
444 40 1577059
555 50 1577059
888 34 1573035
zhao 24 1585133
--A:利用scn查询以前版本的记录
14:42:18 SQL> select * from a as of scn 1577059;

NAME AGE
---------- ----------
500 65
600 65
111 10
222 100
333 30
444 40
555 50
888 34
--B:利用timestamp查询以前版本的记录
14:42:51 SQL> select * from a as of timestamp scn_to_timestamp(1577059);

NAME AGE
---------- ----------
500 65
600 65
111 10
222 100
333 30
444 40
555 50
www 11
888 34
2〉审计的功能:
14:50:06 SQL> select a.*,versions_operation,versions_xid,versions_starttime from a
2 versions between timestamp minvalue and maxvalue;

NAME AGE VERSIONS_OPERATION VERSIONS_XID VERSIONS_STARTTIME
---------- ---------- ------------------ ---------------- --------------------
600 65
111 10
222 100
333 30
444 40
555 50
888 34
zhao 24 I 0500110006030000 27-4月 -07 02.42.00 下午
--可以看出 在27-4月 -07 02.42.00 下午插入(I)了一条记录

14:50:53 SQL> a order byversions_starttime;
14:51:23 SQL> run;

NAME AGE VERSIONS_OPERATION VERSIONS_XID VERSIONS_STARTTIME
---------- ---------- ------------------ ---------------- ----------------------
500 65
600 65
111 10
222 100
333 30
444 40
555 50
888 34
zhao 24 I 0500110006030000 27-4月 -07 02.42.00 下午

四:oracle falshback transaction query回闪事务查询
oracle10回闪事务功能提供对过去某段时间内所完成的事务的查询和撤销!
14:59:56 SQL> select undo_sql,table_name from flashback_transaction_query x where x.table_owner=upper('zxt') and x.xid ='0500110006030000';

UNDO_SQL TABLE_NAME
-------------------------------------------------------------------------------- --------------
delete from "ZXT"."A" where ROWID = 'AAANOsAAGAAAAMWAAA'; A
--其中UNDO_SQL 就是当时对表A的DML操作;

五:oracle falshback Database:闪回数据库
oracle10g提供数据库级别的闪回,可以使整个数据库的数据恢复到某一个时间点或者SCN上!由于牵扯到数据库的批量操作,这个方面的知识暂时无法研究了!
分享到:
评论

相关推荐

    精通Oracle 10g SQL和PL/SQL

     本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    精通Oracle 10g SQL和PL SQL.pdf

    通过学习《精通Oracle 10g SQL和PL/SQL》,读者不仅可以掌握SQL和PL/SQL的基础知识,而且还可以掌握SQL高级特征(正则表达式、Flashback查询、MERGE语句、SQL:1999连接)和PL/SQL高级特征(记录类型、集合类型、对象...

    Oracle 10g应用指导

    第10章 数据库管理,包括导出数据库模式的DDL脚本,管理Oracle数据库实例的方法、数据恢复与Flashback以及更改数据库字符集等具体方法。第11章 数据库的安全管理。包括加密Oracle子程序,存储应用程序用户名和口令,...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    精通Oracle.10g.PLSQL编程

    br>精通Oracle 10g PL/SQL编程 <br> 【作 者】王海亮 林立新 于三禄 郑建茹 【丛 书 名】 万水Oracle技术丛书 <br>http://images.china-pub.com/ebook20001-25000/21975/shupi.jpg<br><br>PL/SQL是...

    Oracle.RMAN.11g.Backup.and.Recovery.2010(Oracle RMAN 11g 备份和恢复)

    英文原版图书,Oracle官方出版,学习Oracle Rman备份和恢复的最佳学习资料,与大家一起分享 Master Oracle Recovery MasterProtect your databases from hardware, software, and operator failures using the ...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

     第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sql和pl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 ...

    Oracle入门教程.三思笔记.一步一步学Oracle

    [三思笔记]全面学习oracle的flashback特性.pdf [三思笔记]全面学习Scheduler.pdf [三思笔记]全面学习分区表及分区索引.pdf [三思笔记]全面学习和应用ORACLE+ASM特性.pdf [三思笔记]日期时间及数字的格式化参数大全....

    Oracle 11g SQL和PL SQL从入门到精通〖送源代码〗

    通过学习本书,读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,而且可以掌握SQL语句和PL/SQL的各种基础知识和高级特征(记录...

    Oracle 11g SQL和PL SQL从入门到精通.part1

     第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sql和pl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 ...

    Oracle+10g应用指导与案例精讲

    第10章 数据库管理,包括导出数据库模式的DDL脚本,管理Oracle数据库实例的方法、数据恢复与Flashback以及更改数据库字符集等具体方法。第11章 数据库的安全管理。包括加密Oracle子程序,存储应用程序用户名和口令,...

    Oracle 11g SQL和PL SQL从入门到精通part2 pdf格式电子书 下载(二)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    【三思笔记】Oracle学习资料整合汇总

    个人在itpub中将:Linux5版本安装Oracle11gR2、全面学习分区表及分区索引、一步一步学rman、全面学习oracle的flashback特性、手把手教你用VMware在linux下安装oracle10g RAC,这6个部分搜集整合,分享给大家!

    深入解析Oracle.DBA入门进阶与诊断案例

    9.5.7 Oracle 10g/11g Latch机制的变化 467 第10章 性能诊断与SQL优化 471 10.1 使用AUTOTRACE功能辅助SQL优化 471 10.1.1 AUTOTRACE功能的启用 471 10.1.2 Oracle 10g AUTOTRACE功能的增强 473 10.1.3 ...

    深入解析OracleDBA入门进阶与诊断案例 4/4

     8.5 Oracle 10g的UNDO_RETENTION管理增强   8.6 UNDO_RETENTION的内部实现   8.7 Oracle 10g In Memory Undo新特性   8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle...

    深入解析OracleDBA入门进阶与诊断案例 3/4

     8.5 Oracle 10g的UNDO_RETENTION管理增强   8.6 UNDO_RETENTION的内部实现   8.7 Oracle 10g In Memory Undo新特性   8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle...

    深入解析OracleDBA入门进阶与诊断案例 2/4

     8.5 Oracle 10g的UNDO_RETENTION管理增强   8.6 UNDO_RETENTION的内部实现   8.7 Oracle 10g In Memory Undo新特性   8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle...

    本科毕业设计开题报告(校园初恋网的设计与实现)

    Oracle 10g的增强有对高可用性的增强、新的 Flashback 能力、支持回滚更新操作;对安全性的增强,便于管理大量的用户; BI 方面的增强 , 包括改进的 SQL 能力、分析功能、 OLAP 、数据挖掘的能力等;对非关系型数据...

Global site tag (gtag.js) - Google Analytics