收藏 分享(赏)

Oracle10g闪回功能实例讲解.doc

上传人:kpmy5893 文档编号:7333659 上传时间:2019-05-15 格式:DOC 页数:27 大小:192KB
下载 相关 举报
Oracle10g闪回功能实例讲解.doc_第1页
第1页 / 共27页
Oracle10g闪回功能实例讲解.doc_第2页
第2页 / 共27页
Oracle10g闪回功能实例讲解.doc_第3页
第3页 / 共27页
Oracle10g闪回功能实例讲解.doc_第4页
第4页 / 共27页
Oracle10g闪回功能实例讲解.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、Oracle 闪回特性(FLASHBACK DATABASE)- Oracle 闪回特性(FLASHBACK DATABASE)-=闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误,从闪回的方式可以分为基于数据库级别闪回、表级别闪回、事务级别闪回,根据闪回对数据的影响程度又可以分为闪回恢复,闪回查询。闪回恢复将修改数据,闪回点之后的数据将全部丢失。而闪回查询则可以查询数据被 DML 的不同版本,也可以在此基础之上确定是否进行恢复等。本文主要描述 flashback database 的使用。一、flashback database 特性flashback data1base 闪回

2、到过去的某一时刻闪回点之后的工作全部丢失使用 resetlogs 创建新的场景并打开数据库(一旦 resetlogs 之后,将不能再 flashback至 resetlogs 之前的时间点)常用的场景:truncate table、多表发生意外错误等使用闪回日志来实现数据库闪回,闪回点之后的数据将丢失二、flashback database 的组成闪回缓冲区:当启用 flashback database,则 sga 中会开辟一块新区域作为闪回缓冲区,大小由系统分配启用新的 rvwr 进程:rvwr 进程将闪回缓冲区的内容写入到闪回日志中,注意闪回日志不同于联机重做日志,闪回日志在联机重做日志基

3、础之上生成,是完整数据块映像的日志。联机日志则是变化的日志。闪回日志不能复用,也不能归档。闪回日志使用循环写方式。三、flashback database 的配置flashback database 要求数据库必须处于归档模式,且闪回之后必须使用 resetlogs 打开数据库a.查看数据库的归档模式及闪回是否启用SQL select log_mode,open_mode,flashback_on from v$database;LOG_MODE OPEN_MODE FLASHBACK_ON- - -ARCHIVELOG READ WRITE NO -FLASHBACK_ON 为 NO,则表示

4、闪回特性尚未启用b.查看及设置闪回目录、闪回目录空间大小等-下面查看恢复目录及恢复目路分配的大小-可以使用 alter system set db_recovery_file_dest 来设置新路径-可以使用 alter system set db_recovery_file_dest_size 来设定新的大小SQL show parameter db_recovery NAME TYPE VALUE- - -db_recovery_file_dest string /u01/app/oracle/flash_recovery_areadb_recovery_file_dest_size bi

5、g integer 2Gc.设置闪回保留目标生存期SQL show parameter db_flashback -缺省为分钟,即小时NAME TYPE VALUE- - -db_flashback_retention_target integer 1440SQL alter system set db_flashback_retention_target=30; -设定保留时间为半小时d.在 mount 状态下来启用 flashback,如在 open 状态下则出现下列错误提示SQL alter database flashback on;alter database flashback o

6、n*ERROR at line 1:ORA-38759: Database must be mounted by only one instance and not open.-一致性关闭数据库后,在 mount 状态下设置 flashbackSQLstartup mount exclusive;SQL select status from v$instance;STATUS-MOUNTEDSQL alter database flashback on; -开启闪回数据库功能SQL ho ps -ef | grep rvw -可以看到新增了后台进程 rvwroracle 3563 1 0 12

7、:12 ? 00:00:00 ora_rvwr_orcl-下面查看闪回区分配的大小为大约 M,闪回分钟以内的数据则需要 M 左右的空间-注意列 oldest_flashback_time 说明了允许返回的最早的时间点SQL select oldest_flashback_scn old_flhbck_scn,oldest_flashback_time old_flhbck_tim,2 retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz,3 estimated_flashback_size/1024/1024 est_fl

8、hbck_size4 from v$flashback_database_log;OLD_FLHBCK_SCN OLD_FLHBC RETE_TRGT FLHBCK_SIZ EST_FLHBCK_SIZE- - - - -915137 24-OCT-10 30 7.8125 11.2519531SQL select * from v$flashback_database_stat; -查看闪回BEGIN_TIM END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE- - - - - -24-OCT-10 24-OC

9、T-10 7905280 86802432 96329728 0SQL select * from v$sgastat where name like flashback%; -查看 sga中分配的闪回空间大小POOL NAME BYTES- - -shared pool flashback generation buff 3981204shared pool flashback_marker_cache_si 9196SQL ho ls -hlt $ORACLE_BASE/flash_recovery_area/ORCL/flashback -查看生成的闪回日志total 7.9M-rw-r

10、- 1 oracle oinstall 7.9M Oct 24 12:37 o1_mf_6d7dkogw_.flb四、使用 flashback database 闪回数据库步骤(前提归档日志可用)关闭数据库启动数据库到 mount 状态(exclusive 模式)闪回至某个时间点,SCN 或 log sequence number使用 resetlogs 打开数据库1.使用 sqlplus 实现闪回可以接受一个时间标记或一个系统改变号实参sqlplus 几种常用的闪回数据库方法FLASHBACK STANDBY DATABASE TO BEFORE SCN -基于 SCN 闪回FLASHBAC

11、K STANDBY DATABASE TO BEFORE TIMESTMP -基于时间戳闪回FLASHBACK STANDBY DATABASE TO BEFORE RESTORE POINT -基于时点闪回如下面的示例:SQL flashback database to timestamp(2010-10-24 13:04:30,yyyy-mm-dd hh24:mi:ss); SQL flashback database to scn 918987;SQL flashback database ro restore point b1_load;a.基于时间戳闪回SQL select coun

12、t(1) from usr1.tb1; -查询用户 usr1 下表 tb1 中的记录数COUNT(1)-404944SQL select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) tm from dual; -获得系统当前的时间TM-2010-10-24 13:04:30SQL drop user usr1 cascade; -删除帐户 usr1,同时帐户 usr1 下的所有对象将被删除SQL conn scott/tiger; -使用 scott 帐户登陆SQL create table tb_emp as select * from emp; -新创建表

13、 tb_empSQL shutdown immediate; -关系系统SQL startup mount ; -重新到 mount 状态SQL flashback database to timestamp -实施闪回2 to_timestamp(2010-10-24 13:04:30,yyyy-mm-dd hh24:mi:ss) ;SQL alter database open resetlogs;SQL select count(1) from usr1.tb1; -帐户 usr1 及其对象 tb1 被成功闪回COUNT(1)-404944SQL select count(1) from

14、 scott.tb_emp; -闪回成功后,在闪回点之后修改的数据全部丢失select count(1) from scott.tb_emp*ERROR at line 1:ORA-00942: table or view does not existb.基于 SCN 号闪回SQL select current_scn from v$database; -获得当前的 SCN 号CURRENT_SCN-918987SQL drop table usr1.tb1; -删除用户 usr1 下的表 tb1SQL alter system checkpoint; -手动执行检查点SQL select f

15、ile#,checkpoint_change# from v$datafile;FILE# CHECKPOINT_CHANGE#- -5 921478SQL shutdown abort;SQL startup mount;SQL flashback database to scn 918987;SQL select count(1) from usr1.tb1;COUNT(1)-404944c.基于时点闪回SQL create table t(id int,col varchar2(20); -创建表 tSQL insert into t values(1,ABC);SQL insert i

16、nto t values(2,DEF);SQL commit;SQL create restore point bef_damage; -创建闪回点SQL insert into t values(3,GHI);SQL select ora_rowscn,id,col from t; -查看表 t 的记录ORA_ROWSCN ID COL- - -1874406 1 ABC1874406 2 DEF1874406 3 GHISQL shutdown immediate;SQL startup mount exclusive;SQL flashback database to restore p

17、oint bef_damage; -实施时点闪回SQL alter database open resetlogs;SQL select * from t; -闪回成功后,闪回点之后的数据丢失ID COL- -1 ABC2 DEF2.使用 RMAN 进行 flashback database使用 RMAN 进行闪回数据库的几种常用办法RMAN flashback database to scn=918987;RMAN flashback database to sequence=85 thread=1;SQL create table scott.tb_emp as select * from

18、 scott.emp;SQL select count(1) from scott.tb_emp;COUNT(1)-14SQL select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) tm from dual;TM-2010-10-24 13:59:38SQL drop table scott.tb_emp;SQL shutdown abort;SQL startup mount;RMAN flashback database 2 to time=“to_date(2010-10-24 13:59:00,yyyy-mm-dd hh24:mi:ss)“;SQL

19、 select count(1) from scott.tb_emp;COUNT(1)-14查询视图:v$recovery_file_dest 将显示闪回区的使用情况SQL select name,space_limit/1024/1024 sp_limt2 ,space_used/1024/1024 sp_usd,space_reclaimable/1024/1024 sp_recl,3 number_of_files num_fils from v$recovery_file_dest;NAME SP_LIMT SP_USD SP_RECL NUM_FILS- - - - -/u01/ap

20、p/oracle/flash_recovery_area 2048 472.070313 380.671875 18可以将某些表空间排除在闪回之外SQL alter tablespace users flashback off;SQL select name,flashback_on from v$tablespace where ts#=4;NAME FLA- -USERS NO如果需要对上述表空间启用闪回功能,则需要在 mount 模式下对该表空间进行开启该功能。五、总结闪回策略是针对 Oracle 撤销功能的增强,为快速恢复数据库提供了更多的便利。数据库的闪回恢复的速度要快于 RMAN

21、以及基于用户管理的备份与恢复,其主要原因是因为数据库闪回使用的是闪回日志,而闪回日志中保存的是数据块的完整镜像。其次闪回能够恢复的程度取决于闪回空间的大小以及闪回的保留策略,闪回空间大小会被循环使用,而闪回的保留策略则决定了闪回日志保留的时间长度。总之,合理的平衡恢复速度与可用空间依赖于具体服务要求.Oracle 闪回特性(FLASHBACK DROP alter session set recyclebin = on | off;drop table(oracle 10g)命令并不真正删除表,在内部被映射为 rename 命令,即是将其重命名之后放入回收站。二、理解表重名的过程scottOR

22、CL create table tb_emp as select * from emp; -基于 emp 表来创建表 tb_empscottORCL alter table tb_emp add constraint empno_pk -添加主键约束,将产生主键索引2 primary key(empno);scottORCL alter table tb_emp add constraint ename_uk -添加唯一约束,将产生唯一索引2 unique(ename);scottORCL alter table tb_emp add constraint sal_ck check(sal0)

23、; -添加 check 约束scottORCL alter table tb_emp modify job constraint job_nn not null; -添加非空约束scottORCL alter table tb_emp add constraint dept_fk -添加外键约束2 foreign key(deptno) references dept(deptno) on delete cascade;scottORCL select constraint_name,constraint_type -查看 tb_emp 表上的所有约束2 from user_constrain

24、ts where table_name=TB_EMP;CONSTRAINT_NAME C- -EMPNO_PK PENAME_UK USAL_CK CJOB_NN CDEPT_FK R-下面查看表 tb_emp 所在文件的 id,块的起始 id,大小,以及该对象的对象 id 等sysORCL select file_id,block_id,bytes from dba_extents where segment_name=TB_EMP;FILE_ID BLOCK_ID BYTES- - -4 393 65536sysORCL select object_name,object_id from

25、dba_objects -查看表 tb_emp 的对象ID2 where object_name = TB_EMP; OBJECT_NAME OBJECT_ID- -TB_EMP 54493-对表进行重命名scottORCL alter table tb_emp rename to tb_employees;sysORCL select file_id,block_id,bytes from dba_extents -重命名后所在文件的id,块的起始 id,大小没有发生变化2 where segment_name=TB_EMPLOYEES;FILE_ID BLOCK_ID BYTES- - -

26、4 393 65536sysORCL select object_name,object_id from dba_objects -重命名后对象 ID 没有发生变化2 where object_name = TB_EMPLOYEES;OBJECT_NAME OBJECT_ID- -TB_EMPLOYEES 54493scottORCL select index_name,index_type -重命名后索引和约束也没有发生变化2 from user_indexes where table_name=TB_EMPLOYEES3 union all 4 select constraint_name

27、,constraint_type5 from user_constraints where table_name=TB_EMPLOYEES;INDEX_NAME INDEX_TYPE- -EMPNO_PK NORMALENAME_UK NORMALEMPNO_PK PENAME_UK USAL_CK CJOB_NN CDEPT_FK R从上面的演示可以看出对于表的重命名仅仅是修改了表名,而对于表对象的 ID,以及表存放的位置,块的起始,大小等并未发生实质性的变化三、删除表并实施闪回1.删除表 tb_employees 并查看回收站的信息scottORCL drop table tb_emplo

28、yees;scottORCL select object_name,original_name,can_undrop,2 base_object from user_recyclebin;OBJECT_NAME ORIGINAL_NAME CAN BASE_OBJECT- - - -BIN$k1zC3yEiwZvgQAB/AQBRVw=$0 TB_EMPLOYEES YES 54493BIN$k1zC3yEhwZvgQAB/AQBRVw=$0 ENAME_UK NO 54493BIN$k1zC3yEgwZvgQAB/AQBRVw=$0 EMPNO_PK NO 54493scottORCL se

29、lect count(1) from “BIN$k1zC3yEiwZvgQAB/AQBRVw=$0“; -可以使用回收站名来访问对象,但要对对象加双引号COUNT(1)-132.实施闪回并查看闪回后的情况scottORCL flashback table tb_employees to before drop; -进行闪回Flashback complete.scottORCL select count(1) from tb_employees; -闪回后表存在并且可以访问COUNT(1)-13scottORCL select index_name,index_type -查看闪回后索引,约束

30、的情况,发现其名称仍然为 BIN$名称2 from user_indexes where table_name=TB_EMPLOYEES3 union all 4 select constraint_name,constraint_type5 from user_constraints where table_name=TB_EMPLOYEES;INDEX_NAME INDEX_TYPE- -BIN$k1zC3yEgwZvgQAB/AQBRVw=$0 NORMALBIN$k1zC3yEhwZvgQAB/AQBRVw=$0 NORMALBIN$k1zC3yEcwZvgQAB/AQBRVw=$0

31、PBIN$k1zC3yEdwZvgQAB/AQBRVw=$0 UBIN$k1zC3yEewZvgQAB/AQBRVw=$0 CBIN$k1zC3yEfwZvgQAB/AQBRVw=$0 C从上面的查询可以看出闪回之后索引约束的名字还是使用了以 BIN 开头,由系统生成的名字,可以将其改回,但外键约束已经不存在了。3.尝试对表 DML 操作scottORCL insert into tb_employees(empno,ename,job,sal,deptno)2 select 9999,Robinson,DBA,3000,50 from dual;1 row created. -可以成功插入,

32、deptno 列的外键约束已经被删除,故 deptno 为号成功插入scottORCL alter index “BIN$k1zC3yEgwZvgQAB/AQBRVw=$0“ rename to EMPNO_PK;Index altered. -将 BIN 开头的索引改回原来的名字,其余的约束名修改在此省略4.下面演示表空间不足时无法闪回表删除的问题sysORCL select tablespace_name,sum(bytes/1024/1024) | M2 from dba_free_space where tablespace_name=TBS13 group by tablespace

33、_name; -表空间 tbs1 的可用空间为 MTABLESPACE_NAME SUM(BYTES/1024/1024)|M- -TBS1 .9375 MflasherORCL create table tb1 tablespace tbs1 as select * from dba_objects 2 where rownum select tablespace_name,sum(bytes/1024/1024) | M2 from dba_free_space where tablespace_name=TBS13 group by tablespace_name; -在该表空间创建表

34、tb1 之后,可用空间为.25MTABLESPACE_NAME SUM(BYTES/1024/1024)|M- -TBS1 .25 MflasherORCL drop table tb1; -将表 tb1 删除flasherORCL show recyclebin; -删除后的对象位于回收站中ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME- - - -TB1 BIN$k2oZsEiaG7LgQAB/AQAZMA=$0 TABLE 2010-10-25:12:05:18flasherORCL select object_name,origi

35、nal_name,can_undrop,2 base_object from user_recyclebin;OBJECT_NAME ORIGINAL_N CAN BASE_OBJECT- - - -BIN$k2oZsEiaG7LgQAB/AQAZMA=$0 TB1 YES 54531sysORCL select tablespace_name,sum(bytes/1024/1024) | M2 from dba_free_space where tablespace_name=TBS13 group by tablespace_name; -表空间 tbs1 显示的可用空间已返还为 1M -

36、但并不是真正为 M,在需要表空间时,将自动清除回收站最老的对象,以满足当前空间需求TABLESPACE_NAME SUM(BYTES/1024/1024)|M- -TBS1 .9375 MsysORCL select tablespace_name,autoextensible -这个查询可以看出表空间tbs1 不能自动扩展2 from dba_data_files where tablespace_name =TBS1;TABLESPACE_NAME AUT- -TBS1 NOflasherORCL create table tb2 tablespace tbs1 as select * f

37、rom dba_objects -再次在表空间创建新表 tb22 where rownum show recyclebin; -此时回收站中原来的表 tb1 记录被自动清除flasherORCL select object_name,original_name,can_undrop,2 base_object from user_recyclebin;no rows selectedflasherORCL flashback table tb1 to before drop; -此时表 tb1 不能被闪回flashback table tb1 to before drop*ERROR at l

38、ine 1:ORA-38305: object not in RECYCLE BIN四、回收站的管理每个用户都拥有自己的回收站,且可以查看在自己模式中删除的表使用 purge 命令可以永久删除对象,回收空间purge 命令的几种常用形式drop table tbname purge -直接删除表,而不置于回收站purge table tbname -清除回收站中的 tbname 表purge index idx_name -清除回收站中的索引 idx_namepurge tablespace tablespace_name -清除该表空间中所有已删除的对象purge tablespace ta

39、blespace_name user user_name -清除表空间中指定用户删除的对象purge user_recyclebin -清除指定用户已删除的所有对象purge dba_recyclebin -清除所有已删除的对象五、总结通过对上述表的删除及空间分配情况,总结如下:1.表的删除被映射为将表的重命名,然后将其置于回收站2.表的索引,触发器,授权闪回后将不受到影响.索引,触发器名字可以根据需要进行更改回原来名称3.对于约束,如果是外键约束,表删除之后将不可恢复,其余的约束不受影响4.如果要查询回收站中的对象,建议将对象名使用双引号括起来5.闪回的实质并不能撤销已提交的事务,而是构造倒

40、退原有事务影响的另一个事务6.对于已经删除的表如果在所在的表空间新增对象由于空间不足的压力而被重用将导致闪回失败7.对于表空间不足时,系统会自动清除回收站中最老的对象,以满足当前需求,即采用 FIFO 原则8.闪回表的常用方法flashback table tbname to before drop ;flashback table tbname to before drop rename to newtbname;第二条语句用于被删除的表名已经被再次重用,故闪回之前必须将其改名为新表名,schema 不变化9.如回收站中存在两个相同的原表名,则闪回时总是闪回最近的版本,如果闪回特定的表,需要

41、指定该表在回收站中的名称。如flashback table “BIN$k1zC3yEiwZvgQAB/AQBRVw=$0“ to before drop;10.flashback drop 不能闪回 truncate 命令截断的表,而是只能恢复 drop 之后的表11.flashback drop 不能闪回 drop user scott cascade 删除方案的操作,此只能用 flashback database12.在 system 表空间中存储的表无法启用 flashback drop,且这些表会被立即删除与回收站相关两个重要的视图dba_recyclebinuser_recycleb

42、inOracle 闪回特性(Flashback Query、Flashback Table)- Oracle 闪回特性(Flashback Query、Flashback Table)-=Oracle 闪回查询是指针对特定的表来查询特定的时间段内的数据变化情况来确定是否将表闪回到某一个特定的时刻以保证数据无讹误存在。这个特性大大的减少了采用时点恢复所需的工作量以及数据库脱机的时间。 闪回查询通常分为 Flashback Query(闪回查询),Flashback Table Query(闪回表查询),Flashback Version Query(闪回版本查询),Flashback Transaction Query(闪回事务查询)。本文主要讲述 Flashback Query(闪回查询),Flashback Table Query(闪回表查询)。其余闪回请参考后续文章。一、Flashback Query(闪回查询)通常用于检索一条记录的所有版本,倒退单独的事务或者倒退从指定时间以来对特定表的所有变化Flashback Query 的所有形式取决于 UNDO 表表空间,关于 UDNO 表空间请参考:O

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报