




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
总结oracle flashback 特性王力20090401Oracle 9i只能够使用flashback query。10G依然可以使用闪回查询,与9i没有变化。但flashback功能大幅强化,新增很多特性;如闪回表,闪回数据库等等。11g又增加了flashback archive ,可以提供不依靠undo的闪回功能。通过实验完成闪回功能测试,仅供参考。10g默认启用除了闪回数据库之外的所有闪回功能,如果想打开Flashback database,要使用闪回区。Flashback database使用flashbacklog & onlinelog/archivelog 实现数据库闪回,flashbackarchive通过永久tablespace实现闪回。其他都是通过undo段实现闪回。1 ONE - Flashback query1.1 基于scn的查询SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 1032013SQL select sal from emp where ename=SCOTT; SAL- 3000SQL UPDATE EMP SET SAL=5000 WHERE ENAME=SCOTT;已更新 1 行。SQL COMMIT;提交完成。SQL select sal from emp as of scn 1032013 where ename=SCOTT; SAL- 30001.2 基于时间的查询SQL select sal from scott.emp as of timestamp 2 to_timestamp(20090330 09:02:00,yyyymmdd hh24:mi:ss) 3 where ename=SCOTT; SAL- 30001.3 可以创建闪回表SQL create table f_emp as select * from emp as of scn 1032013;表已创建。说明:1.要求,使用自动管理的undo表空间,但不要求DB处于归档模式;2.使用当前数据字典,所以如果表结构发生变化,无法闪回;3.drop truncate等ddl操作无法闪回;4.受到参数undo_retention的限制,之前的数据,不能保证闪回成功;2 TWO - Flashback drop必须打开回收站SQL show parameter recyclebin;NAME TYPE VALUE- - -recyclebin string on2.1 flashback drop tableSQL conn scott/tiger已连接。SQL drop table emp;表已删除。SQL show recyclebin;ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME- - - -EMP BIN$t0EW1G2HQTGSEtruT+sqGA=$0 TABLE 2009-03-31:09:20:33SQL flashback table emp to before drop;闪回完成。2.2 如果有多张表重名,先恢复后删除的SQL create table emp2 as select * from emp;表已创建。SQL drop table emp2;表已删除。SQL create table emp2 as select * from emp;表已创建。SQL drop table emp2;表已删除。SQL show recyclebin;ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME- - - -EMP2 BIN$7nkDVtHfTJKzFro8rW6TVg=$0 TABLE 2009-03-31:09:21:57EMP2 BIN$hHe4RkC/TDOTiuUbrpvXlQ=$0 TABLE 2009-03-31:09:21:43SQL flashback table emp2 to before drop;闪回完成。SQL show recyclebin;ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME- - - -EMP2 BIN$hHe4RkC/TDOTiuUbrpvXlQ=$0 TABLE 2009-03-31:09:21:43SQL flashback table emp2 to before drop;flashback table emp2 to before drop*第 1 行出现错误:ORA-38312: 原始名称已被现有对象使用SQL flashback table emp2 to before drop rename to emp3;闪回完成。2.3 索引会同时恢复,但是名字不会更改;SQL create index test on emp2(ename);索引已创建。SQL drop table emp2;表已删除。SQL flashback table emp2 to before drop;闪回完成。SQL select table_name,index_name,status from user_indexes 2 where table_name=EMP2;TABLE_NAME INDEX_NAME STATUS- - -EMP2 BIN$QBtcZKDFSVShF2Pi5ygBPg=$0 VALIDSQL ALTER INDEX BIN$QBtcZKDFSVShF2Pi5ygBPg=$0 rename to test;索引已更改。2.4 说明1.purge recyclebin;清空回收站2.drop tablespace including contents and datafiles;数据不入回收站3.drop user cascade;数据不入回收站3 Three - flashback table3.1 Flashback dmlSQL create table emp2 as select * from emp;表已创建。SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 1034237SQL update emp2 set sal=1 where ename=SCOTT;已更新 1 行。SQL COMMIT;提交完成。SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 1034247SQL update emp2 set sal=2 where ename=SCOTT;已更新 1 行。SQL commit;提交完成。SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 1034258SQL update emp2 set sal=3 where ename=SCOTT;已更新 1 行。SQL COMMIT;提交完成。SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 1034271SQL update emp2 set sal=4 where ename=SCOTT;已更新 1 行。SQL COMMIT;提交完成。SQL flashback table emp2 to scn 1034258;flashback table emp2 to scn 1034258 *第 1 行出现错误:ORA-08189: 因为未启用行移动功能, 不能闪回表SQL alter table emp2 enable row movement;表已更改。SQL flashback table emp2 to scn 1034258;闪回完成。SQL select sal from emp2 where ename=SCOTT; SAL- 2SQL flashback table emp2 to scn 1034247;闪回完成。SQL select sal from emp2 where ename=SCOTT; SAL- 1SQL flashback table emp2 to scn 1034271;闪回完成。SQL select sal from emp2 where ename=SCOTT; SAL- 3 也可以根据时间闪回- 闪回到5分钟之前flashback table emp to timestamp systimestamp - interval 5 minute;flashback table emp to timestamp to_timestamp(20080610 10:05:00,yyyymmdd hh24:mi:ss)2.Ddl 无法闪回SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 1033975SQL truncate table emp2;表被截断。SQL flashback table emp2 to scn 1033975;flashback table emp2 to scn 1033975 *第 1 行出现错误:ORA-01466: 无法读取数据 - 表定义已更改3.2 说明1.DDL操作无法闪回2.必须enable row movement;3.索引同时闪回4.如果表上有触发器,触发器实效。可以使用enable triggers关键字使flashback同时启动trigger;4 Four - Flashback version通过flashback version 可以查到表上发生了哪些dml操作SQL truncate table test;表被截断。SQL insert into test values(sysdate);已创建 1 行。SQL /已创建 1 行。SQL /已创建 1 行。SQL commit;提交完成。SQL insert into test values(sysdate);已创建 1 行。SQL /已创建 1 行。SQL /已创建 1 行。SQL commit;提交完成。SQL insert into test values(sysdate);已创建 1 行。SQL /已创建 1 行。SQL /已创建 1 行。SQL commit;提交完成。SQL alter session set nls_date_format=yyyy-mm-dd hh24:mi:ss;会话已更改。伪列(pseudo_columns)包括以下:VERSIONS_STARTSCN:创建行时具有的SCNVERSIONS_STARTTIME:创建行时此版本的时间标记VERSIONS_ENDSCN:此行的最后一次操作的SCNVERSIONS_ENDTIME:此行的最后一次操作的时间VERSIONS_XID:创建此版本的事务IDVERSIONS_OPERATION:此事务完成的操作:I:INSERT、U:UPDATE、D:DELETESQL select versions_starttime,versions_startscn,versions_xid,versions_operation 2 from test versions between timestamp minvalue and maxvalue 3* order by 1SQL /VERSIONS_STARTTIME VERSIONS_STARTSCN VERSIONS_XID V- - - -31-3月 -09 02.02.29 下午 1043469 04000C0062010000 I31-3月 -09 02.02.29 下午 1043469 04000C0062010000 I31-3月 -09 02.02.29 下午 1043469 04000C0062010000 I31-3月 -09 02.02.38 下午 1043473 05001D0093010000 I31-3月 -09 02.02.38 下午 1043473 05001D0093010000 I31-3月 -09 02.02.38 下午 1043473 05001D0093010000 I31-3月 -09 02.02.44 下午 1043476 03000D007C010000 I31-3月 -09 02.02.44 下午 1043476 03000D007C010000 I31-3月 -09 02.02.44 下午 1043476 03000D007C010000 I已选择9行。SQL truncate table test;表被截断。SQL select versions_starttime,versions_startscn,versions_xid,versions_operation 2 from test versions between timestamp minvalue and maxvalue 3 order by 1 4 /未选定行说明:1.只能分析dml操作2.如果发生了ddl操作,之前dml操作,无法查询3.查询也可以指定scn 或者timestampversions between scn xxx and xxx;versions between timestamp to_date(xxxxxxx) and to_date(xxxxxxx);5 Five - Flashback transaction query通过flashback version 可以找到事物id,而flashback transaction则可以找到事物的undo sql通过undosql可以会滚已经提交的事物;SQL delete from emp where ename=SCOTT;已删除 1 行。SQL COMMIT;提交完成。SQL delete from emp where deptno=10;已删除3行。SQL commit;提交完成。SQL select versions_starttime,versions_startscn,versions_xid,versions_operation 2 from emp versions between timestamp minvalue and maxvalue 3* order by 1SQL /VERSIONS_STARTTIME VERSIONS_STARTSCN VERSIONS_XID V- - - -31-3月 -09 02.19.53 下午 1044196 0A001C0067010000 D31-3月 -09 02.20.23 下午 1044207 030029007C010000 D31-3月 -09 02.20.23 下午 1044207 030029007C010000 D31-3月 -09 02.20.23 下午 1044207 030029007C010000 DSQL desc flashback_transaction_query ; 名称 是否为空? 类型 - - - XID RAW(8) START_SCN NUMBER START_TIMESTAMP DATE COMMIT_SCN NUMBER COMMIT_TIMESTAMP DATE LOGON_USER VARCHAR2(30) UNDO_CHANGE# NUMBER OPERATION VARCHAR2(32) TABLE_NAME VARCHAR2(256) TABLE_OWNER VARCHAR2(32) ROW_ID VARCHAR2(19) UNDO_SQL VARCHAR2(4000)SQL select undo_sql from flashback_transaction_query 2 where xid=hextoraw(0A001C0067010000);select undo_sql from flashback_transaction_query *第 1 行出现错误:ORA-01031: 权限不足SQL conn / as sysdbagrant SELECT ANY TRANSACTION to scottSQL conn scott/tiger已连接。SQL select undo_sql from flashback_transaction_query 2 where xid=hextoraw(0A001C0067010000);UNDO_SQL-insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7788,SCOTT,ANALYST,7566,TO_DATE(19-4月 -87, DD-MON-RR),5000,NULL,20);SQL select undo_sql from flashback_transaction_query 2 where xid=hextoraw(030029007C010000);UNDO_SQL-insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7934,MILLER,CLERK,7782,TO_DATE(23-1月 -82, DD-MON-RR),1300,NULL,10);insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7839,KING,PRESIDENT,NULL,TO_DATE(17-11月-81, DD-MON-RR),5000,NULL,10);insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7782,CLARK,MANAGER,7839,TO_DATE(09-6月 -81, DD-MON-RR),2450,NULL,10);SQL insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) 2 values (7788,SCOTT,ANALYST,7566,TO_DATE(19-4月 -87,DD-MON-RR),5000,NULL,20);已创建 1 行。 SQL insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) 2 values (7934,MILLER,CLERK,7782,TO_DATE(23-1月 -82,DD-MON-RR),1300,NULL,10);已创建 1 行。SQL insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) 2 values (7839,KING,PRESIDENT,NULL,TO_DATE(17-11月-81, DD-MON-RR),5000,NULL,10);已创建 1 行。SQL insert into SCOTT.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) 2 values (7782,CLARK,MANAGER,7839,TO_DATE(09-6月 -81, DD-MON-RR),2450,NULL,10);已创建 1 行。SQL COMMIT;至此,已经提交的事物成功会滚;6 Six - Flashback Databaseflashback database 在sqlplus or rman中都可以使用,命令略有不同RMANRMAN FLASHBACK DATABASE TO TIME = 2 TO_DATE(2004-05-27 16:00:00,YYYY-MM-DD HH24:MI:SS);RMAN FLASHBACK DATABASE TO SCN=23565;RMAN FLASHBACK DATABASE TO SEQUENCE=223 THREAD=1;SQLPLUSSQL FLASHBACK DATABASE TO TIMESTAMP(SYSDATE-1/24); SQL FLASHBACK DATABASE TO SCN 53943;SQL FLASHBACK DATABASE TO RESTORE POINT b4_load; 6.1 打开flashback数据库必须处于归档模式可以完成数据库的前滚必须打开flashbackshutdown immediate;startup mount;alter system set db_recovery_file_dest_size=10g;alter system set db_recovery_file_dest =e:oraclerecover;alter database flashback on;alter database open;6.2 比较重要的数据字典SQL select * from v$flash_recovery_area_usage;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES- - - -CONTROLFILE 0 0 0ONLINELOG 0 0 0ARCHIVELOG 0 0 0BACKUPPIECE .07 0 1IMAGECOPY 0 0 0FLASHBACKLOG .08 0 1SQL select OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME,RETENTION_TARGET from v$flashback_database_log;OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET- - - 1086948 2009-03-31 15:38:25 1440 SQL select current_scn from v$database;CURRENT_SCN- 10879946.3 测试删除用户的flashbackdrop user scott cascade;startup mount force;flashback database to scn 1087994;alter database open resetlogs;conn scott/tiger 成功连接scott- flashback database to timestamy(to_date(xxxxxxxxxx,xxxxxxxxxxx);- flashback database to timestamp(sysdate-1/24);6.4 Incarnation 问题同不完全恢复一样,Flashback database也有incarnation的问题需要注意如果OLDEST_FLASHBACK_SCN小于v$database.resetlog_scn。那么就可以闪会到上一个incarnation,可以指定incarnation,或者使用下面命令到上一个incarnation。FLASHBACK DATABASE TO BEFORE RESETLOGS;6.4.1 准备工作SQL select OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME,RETENTION_TARGET 2 from v$flashback_database_log;OLDEST_FLASHBACK_SCN OLDEST_FLASHBA RETENTION_TARGET- - - 1086948 31-3月 -09 1440SQL select incarnation# from v$database_incarnation 2 where status=CURRENT;INCARNATION#- 19SQL begin 2 for i in 1 . 10000 loop 3 insert into scott.t values(dbms_flashback.get_system_change_number); 4 commit; 5 end loop; 6 end; 7 /PL/SQL 过程已成功完成。SQL select min(tscn),max(tscn) from scott.t; MIN(TSCN) MAX(TSCN)- - 1130562 11492376.4.2 恢复到某一点,并reseglogs打开数据库SQL startup mount force;SQL flashback database to scn 1140000;SQL alter database open resetlogs;SQL select min(tscn),max(tscn) from scott.t; MIN(TSCN) MAX(TSCN)- - 1130562 11399976.4.3 尝试恢复到上次resetlogs点之前SQL startup mount force;SQL flashback database to scn 1135000;SQL alter database open resetlogs;SQL select min(tscn),max(tscn) from scott.t; MIN(TSCN) MAX(TSCN)- - 1130562 1134999- 恢复成功SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 11664216.4.4 我们想恢复t表里面所有数据,所以决定恢复到scn 1149239SQL startup mount forceSQL flashback database to scn 1149239;SQL alter database open resetlogs;SQL select min(tscn),max(tscn) from scott.t; MIN(TSCN) MAX(TSCN)- - 1130562 1134999- 数据没有恢复6.4.5 reset database 成功恢复数据SQL startup mount force;RMANreset database to incarnation 19;SQL flashback database to scn 1149239;SQL alter database open resetlogs;SQL select min(tscn),max(tscn) from scott.t; MIN(TSCN) MAX(TSCN)- - 1130562 1149237- 数据成功恢复6.5 闪回与归档/* 补充 20090701注意,闪回不仅需要闪回日志,并且需要归档日志的存在。如下案例1.-查找能够闪回的最早的scnSQL select OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME,RETENTION_TARGET from v$flashback_database_log;OLDEST_FLASHBACK_SCN OLDEST_FLASHBA RETENTION_TARGET- - - 301202568 01-7月 -09 14402.-切换并且归档日志alter system archive log current;/3.- 删除所有归档日志4.-再次查询,没有变化SQL select OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME,RETENTION_TARGET 2 from v$flashback_database_log;OLDEST_FLASHBACK_SCN OLDEST_FLASHBA RETENTION_TARGET- - - 301202568 01-7月 -09 14405.-尝试闪回startup mount force;flashback database to scn 301202568 ;flashback database to scn 301202568*第 1 行出现错误:ORA-38754: FLASHBACK DATABASE 没有启动; 所需的重做日志不可用ORA-38761: 无法访问重做日志序列 84 (在线程 1, 原型 2 中)*/6.6 Flashback database read only - 补充于 20090907使用flashdatabase 如果以resetlogs模式打开数据库,会造成部分数据丢失。10g支持flashback database后,以readonly模式打开数据库,而不必resetlogs对于删除表的错误操作,可以使用下面步骤startup mount forceflashback database to scn 1149239;alter database open readonly;expstartup mount force;recover database;alter database open;imp7 Seven - flashback archive- 补充于 20090703- 11g提供了不再依赖undo的flashback archive- 必须建立flashback archive,将闪回信息存放到永久表空间7.1 准备首先创建三个测试测试闪回归档的表空间create tablespace tbs_flash datafile E:oracleoradataorclflash.dbf size 200m;create tablespace tbs_flash2 datafile E:oracleoradataorclflash2.dbf size 200m;create tablespace tbs_flash3 datafile E:oracleoradataorclflash3.dbf size 200m;7.2 创建并管理 flashback archive- 必须有一个默认的archive- 每个archive 可以对应多个表空间,每个archive 有一个主表空间- 不同的archive可以设定不同的保留策略create flashback archive default flash1 tablespace tbs_f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行忻州市定襄县2025秋招英文面试题库及高分回答
- 农发行烟台市福山区2025秋招笔试价值观测评题专练及答案
- 2025年文化教育职业技能鉴定全真模拟模拟题及答案详解(各地真题)
- 农发行沈阳市沈河区2025秋招笔试综合模拟题库及答案
- 农发行抚州市宜黄县2025秋招笔试性格测试题专练及答案
- 加法乘法考试题目及答案
- 垂直大模型流程规范指导
- 坚持目标导向实现工作突破
- 智能教育平台商铺租赁终止与教育资源合作协议
- 空飘球租赁活动安全保障责任书
- 危重患者皮肤管理课件
- 2025年国防教育知识竞赛试题(附答案)
- 工伤受伤经过简述如何写
- 银行现金取款申请书
- 人事外包招聘代理合同
- 数字经济学-课件 第3章 数字技术
- AI引领时尚设计新潮-个性化需求的新一代解决方案
- 高二数学直线倾斜角与斜率同步练习题
- 2024-2030年全球及中国热障涂层(TBC)行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 大轻质泡沫混凝土研究报告
- 室内装修工程质量保障措施方案
评论
0/150
提交评论