大佬教程收集整理的这篇文章主要介绍了Oracle OCP笔记(31)使用闪回功能,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Oracle OCP笔记(31)使用闪回功能
Oracle的闪回功能受到3个数据库结构之一的支持: 撤消数据、
闪回恢复区和回收站。 撤消
表空间中的撤销数据不仅
支持事务回滚,也支持大多数
闪回表操作。Flash
BACk Data Archives允许查询先前版本的表行,
它在撤销
表空间之外的一个或多个
表空间中提供一个区域,支持的保留期比撤销
表空间还长。闪回日志保存在
闪回恢复区中,
从而无需执行传统的还原和恢复操作,即可方
便地将整个数据库回滚到过去的时间点。每个
表空间中的回收站包含一个或多个版本的已删除的表和索引,如果
表空间中的空间充裕,用户可以方
便地将其还原。 1.从回收站还原已经删除的表
(1).启用回收站功能 alter session set recyclebin=on; -- 启用/禁用回收站(会话级) on/off alter system set recyclebin=on; -- 启用/禁用回收站(系统级) on/off 启用回收站功能后,删除对象后会在回收站视图中显示,回收站中对象名称会被改为系统指定的名称: BIN$unique_ID$version unique_ID: 全局唯一名称 version: 版本号 删除对象后,对象分配的空闲空间会显示在视图dba_free_space中,但对象仍占用用户空间配额。 (2).查看回收站的对象
SELEct * from dba_recyclebin;
SELEct * from
user_recyclebin;
SELEct * from recyclebin; -- 视图
user_recyclebin的同义词 show recyclebin; (3).使用回收站还原表 flash
BACk table "BIN$u/===$0" to before drop; 如果尝试还原删除后已经重新创建的表,需要使用r
ename to子句为已经还原的表提供一个新名称,否则将出错。 flash
BACk table tabl
ename to before drop r
ename to oldtabl
ename; 在使用r
ename选项
闪回表时,表会使用原来的名称,但表的从属对象并非如此,如果需要为索引、触发器和约束保留原来的名称,需查询回收站,在还原后闪回并重新命名其他对象。 (4).清空回收站 purge recyclebin; -- 清空当前用户的回收站对象 purge dba_recyclebin; -- 清空所有用户的回收站对象(sysdba权限) purge tablespace users; --
清空表空间的回收站对象 purge tablespace tbname user username; -- 清空特定用户
表空间的回收站对象(drop any table系统权限) (5).删除对象时绕过回收站
drop table ... purge;
drop tablespace ... including contents; drop user ... cascade; 2.执行闪回查询
(1).有关闪回查询的参数 使用闪回查询功能,需要正确配置撤销
表空间参数: undo_management=auto undo_tablespace=undotbs1 undo_retention=1800 在撤销
表空间的大小有限,确保闪回操作或长期运行的查询取得成功,必须在创建
表空间后为撤销
表空间指定retention guarantee.
alter tablespace undotbs1 retention guarantee; (2).使用闪回查询
SELEct
* FROM tabl
ename as of
timestamp to_
timestamp('2014/11/19 19:22:30','YYYY/MM/DD HH24:MI:SS'
); SELEct * from
employees as of
timestamp sys
timestamp - interval '60'
minute; -- 60分钟前
SELEct
* FROM tabl
ename as of
timestamp (sys
timestamp - 1/1440
); -- 1分钟前 (3).使用闪回版本查询
SELEct
DBMS_flash
BACk.get_system_change_
number from dual; -- 查看SCN编号
SELEct
* FROM tabl@R_
489_5595@ersions
between scn 2710111 and 2710113 where ...;
select a.*,versions_startscn,versions_starttime,versions_endscn,versions_endtime,versions_xID,versions_operation from mm
S.Usr_mstr versions
between scn 2847161 and 2847403 a 闪回版本查询伪列: ·VERSIONS_START
{SCN|TIM
E} -- SCN或时间戳 ·VERSIONS_END
{SCN|TIM
E} -- SCN或时间戳 ·VERSIONS_XID -- 事务ID ·VERSIONS_OPERATION -- 在行上执行的操作(I=插入,D=删除,U=更新) 使用闪回版本查询的限制,
无法使用VERSIONS子句查询如下对象: ·外部表 ·固定表(内部
Oracle X$表) ·临时表 ·视图 3.使用闪回事务
(1).使用闪回事务的先决条件 数据库必须为归档模式. 数据库必须启用补充日志. 补充日志: 使用闪回事务查询前,必须启用重做日志流的其他日志记录。重做日志流与Logminer使用的数据相同,只是接口不同而已。很明显,重做日志流数据是撤销
表空间中记录的信息的补充(补充日志)。闪回事务查询既需要增强的重做信息,也需要撤销信息。
v$database列相关的参数 supplemental_log_data_min supplemental_log_data_pk supplemental_log_data_ui supplemental_log_data_fk supplemental_log_data_all
SELEct supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui,supplemental_log_data_fk,supplemental_log_data_all from
v$database; -- 启用对DML更改引用的
列值和主键
值的日志记录 alter database add supplemental log data; alter database add supplemental log data (pri
Mary key)
columns; -- 授予适当权限给将要使用闪回事务查询的用户 grant execute on
DBMS_flash
BACk to hr; grant
SELEct any
transaction to hr; (2).闪回事务查询 与闪回版本查询不同,闪回事务查询不引用DML事务中涉及的表,相反,它查询数据字典视图flash
BACk_
transaction_query. 视图flash
BACk_
transaction_query的列 ·XID -- 事务ID编号 ·START_SCN -- 事务中第一个DML的SCN ·START_
timestAMP -- 事务中第一个DML的时间戳 ·COMMIT_SCN -- 提交事务时的SCN ·COMMIT_
timestAMP -- 提交事务时的时间戳 ·logoN_USER -- 拥有事务的用户 ·UNDO_CHANGE# -- 撤销SCN ·OPERATION -- 执行的DML操作:
deletE、INSERT、
updatE、BEGIN或UNKNowN ·table_name -- DML更改的表 ·table_
owneR -- DML更改的表的所有者 ·ROW_ID -- DML修改的行的ROWID ·UNDO_sql -- 撤销DML操作的
sql语句 撤销空间是有限的,因此flash
BACk_
transaction_query中只包含一部分事务。这种情况下,对于任何所选事务不再显示在撤销
表空间的DML,OPERATION列的值是UNKNowN.
SELEct xID,start_scn,commit_scn,logon_user,operation,table_
owner,table_name,undo_sql from flash
BACk_
transaction_query where table_name = tabl
ename;
SELEct xID,undo_sql from flash
BACk_
transaction_query where xID = hextoraw('030002001F060000'
); undo_sql即为生成的回退语句。 (3).撤销事务 使用过程
DBMS_flash
BACk.
transaction_
BACkout. 过程的参数: ·NumTxns: 被取消的事务处理的数量。 ·names: 被取消的事务处理的列表(按名字排序)。 ·Timehint: 如果按名字标识事务处理,则可以提供一个时间提示,如在事务处理开始前的某个时间。 ·Options: 指定某个事务处理及其依赖的事务处理被取消的顺序。 回滚的选项(Options): ·CASCADE -- 回滚所有事务及其从属事务 ·NOCASCADE -- 仅回滚指定的事务 ·NOCASCADE_FORCE -- 回滚指定的事务,忽略从属事务 ·NONCONFliCT_ONLY -- 仅回滚指定事务的非冲突行的更改
DBMS_flash
BACk.
transaction_
BACkout(numtxns=>1,xIDs=>sy
s.xID_array('050004009D0A0000'),options=>
DBMS_flash
BACk.cascad
E); commit; -- 撤销事务需要显式提交. 4.执行
闪回表操作
(1).
闪回表 Oracle的闪回功能将表行的状态还原到过去的一个时间点。它也还原表的索引、触发器和约束,
而数据库仍处于联机状态。这提高了数据库的总体可用性。 可以按时间戳或SCN还原表。如果用户错误范围小,仅限于一个或很少的几个表,则
闪回表优于其他闪回方法。 为了恢复较大数量的表的状态,闪回数据库的效果可能更好。
闪回表不适用于独立数据库,也无法重新构建所有DDL操作,如添加和删除列。 由于闪回数据库使用撤销
表空间,与其他恢复方法(如基于
RMAN的恢复或闪回数据库)相比,恢复窗口相对较小。
闪回表就地执行,
在数据库仍处于联机状态时,回滚对表及所有从属对象(例如索引)执行的更改。如果表还有其他从属对象,可以在flash
BACk table命令中指定多个表。无论在
闪回表操作中指定一个表还是多表表,都将此操作视为单个事务。所有更改要么成功,要么回滚。 (2).配置
闪回表功能 grant flash
BACk on tabl
ename to username; -- 将表的flash
BACk权限授予用户 grant flash
BACk any table to username; -- 或将flash
BACk any table权限授予用户
alter table tabl
ename enable row movement; -- 开启Row movement (3).使用
闪回表 delete from tabl
ename; flash
BACk table tabl
ename1,tabl
ename2 to
timestamp to_
timestamp('2014-12-08 15:30:01','yyyy-mm-dd hh24:mi:ss'
); flash
BACk table tabl
ename to scn 1763103; flash
BACk table tabl
ename to
timestamp sys
timestamp - interval '15'
minute; 5.设置和使用闪回数据归档
(1).闪回数据归档(Flash
BACk Data Archiv
E) Flash
BACk Data Archive创建一个或多个仓库区域(其中一个是默认区域),为仓库中的对象指定默认的保留期,然后为适当的表添加跟踪标记。 Flash
BACk Data Archive的行为与撤销
表空间类似,但是Flash
BACk Data Archive仅记录
updatE和
deletE语句,不记录INSERT语句。另外,对于撤销数据而言,所有对象的保留期限通常为数小时或数天,而Flash
BACk Data Archive中的行可以跨越多年,Flash
BACk Data Archive的关注范围更狭窄,只记录对表行的历史改动。 可以像在闪回查询的
SELECT语句中使用AS OF子句一样,访问Flash
BACk Data Archive中的数据。闪回版本查询和闪回事务查询也可以使用Flash
BACk Data Archive中的数据。 dba_flash
BACk_archive_tables -- 启用了闪回归档的表 dba_flash
BACk_archive -- 列出归档 dba_flash
BACk_archive_ts --
表空间与归档的映射关系 (2).配置归档 <1>Flash
BACk Data Archive的权限 flash
BACk archive administer -- 创建或修改Flash
BACk Data Archive的权限 flash
BACk archive -- 启用对表的跟踪的权限
SELEct * from dba_sys_privs where grantee='USERname'; grant flash
BACk archive administer to username; grant flash
BACk archive to username; <2>创建归档
create tablespace fbdata01
DATAFILE '/u01/app/
Oracle/oradata/
SALEs/fbdat01.dbf' size 500m;
create tablespace fbdata02
DATAFILE '/u01/app/
Oracle/oradata/
SALEs/fbdat02.dbf' size 500m;
create tablespace fbdata03
DATAFILE '+data01' size 1g; create flash
BACk archive default fbarcdef tablespace fbdata01 quota 400m retention 2 year; create flash
BACk archive fbarcdata tablespace fbdata03 quota 500m retention 7 year; <3>维护归档 -- 为归档添加
表空间 alter flash
BACk archive fbarcdef add tablespace fbdata02 quota 400m; -- 使用Purge清除归档数据 alter flash
BACk archive fbarcdef purge before
timestamp to_
timestamp('2014-12-12 00:00:00','YYYY-MM-DD HH24:MI:SS'
); <4>将表分配到归档中.
alter table tabl
ename flash
BACk archive fbarcdef; <5>取消表的归档.
alter table tabl
ename no flash
BACk archive; (3).查询Flash
BACk Data Archive 可以像使用撤销
表空间中的DML活动时那样,通过在表中使用AS OF子句查询Flash
BACk Data Archive中的表的历史数据。 实际上,对用户而言,查询使用撤销
表空间还是Flash
BACk Data Archive是完全透明的。
delete from
employees where enployee_ID = 169;
SELEct * from
employees as of
timestamp (sys
timestamp - interval '28' day
); SELEct * from
employees as of
timestamp (sys
timestamp - interval '2'
minutE); 6.闪回数据库
Oracle的闪回数据库功能使用Flash
BACk database命令将数据库返回到过去的时间或SCN,从而为执行不完全数据库恢复提供了快捷替代方法。 可以使用闪回数据库快速地将整个数据库还原到过去的时间点,在启用闪回数据库时,会将
经过修改的块的前映象作为闪回数据库日志保存在
闪回恢复区中,如果出现了逻辑损坏,需要恢复到过去的时间点,闪回数据库日志将还原数据块的前映像,然后使用归档和联机重做日志前滚到期望的闪回时间,由于无需还原数据库的数据文件,与执行传统的还原和恢复操作相比,此过程的执行速度通常快
很多。 启用闪回数据库时,会将前映像数据保存在闪回缓冲区中,然后使用恢复写入器(Recovery Write,RVWR)后台进程,将闪回缓冲区中的前映像信息保存在
闪回恢复区的闪回数据库日志中。循环地重用
闪回恢复区中的日志,将数据库回搠到多久远的时间取决于
闪回恢复区中的空间量以及配置的担保还原点。 要启用闪回数据库功能,必须设置数据库为归档模式,必须配置归档到快速恢复区.
(1).配置闪回数据库
db_recovery_file_dest --
闪回恢复区路径
db_recovery_file_dest_size --
闪回恢复区大小 db_flash
BACk_retention_target -- 恢复窗口目标上限(分钟) --必须配置归档日志到快速恢复区 alter system set
db_recovery_file_dest='/u01/app/
Oracle/fast_recovery_area'; alter system set log_archive_dest_3='
LOCATIOn=USE_
db_recoveRY_file_DEST mandatory'; alter system set
db_recovery_file_dest_size=40G; -- 启用闪回数据库 shutdown immediate; startup mount exclusive; alter database archivelog; alter system set db_flash
BACk_retention_target=2880; alter database flash
BACk on; alter database open; -- 关闭闪回数据库 startup mount exclusive; alter database flash
BACk off; alter database open; (2).执行闪回数据库 可以使用
RMAN和
sqlplUS执行闪回数据库 -- 线程(实例)和特定日志序列号的闪回
RMAN> flash
BACk database to sequence=307 thread=2; -- 使用
sqlplus执行flash
BACk database命令 flash
BACk [standby] database [database]
{ to
{ scn |
timestamp } expr | to before
{ scn |
timestamp } expr | to restore point expr } 除担保还原点外,还可以使用to scn或to
timestamp子句来设置将整个数据库闪回到的点。可以闪回到关键点之前,例如为多个表生成意外结果的事务。 使用特定表行的ORA_ROWSCN伪列来查看对行的最新更改的SCN:
SELEct ora_rowscn,a.
* FROM tabl
ename a; 执行闪回,确认闪回数据是可用的,然后执行闪回,闪回到之前的某一时间,将丢失这一时间后的所有事务。 执行flash
BACk database命令时,
Oracle将执行检查,以
便确保可以使用所有需要的归档和联机重做日志。如果日志可用,联机数据文件将还原到指定的时间、SCN或担保还原点。 如果归档日志和闪回区域中的联机数据不充足,就需要使用传统数据库恢复方法来恢复数据。例如,可以首先使用文件系统恢复方法,然后前滚数据。 完成闪回后,必须使用resetlogs选项打开数据库,以
便获得
对数据库的写入权限: shutdown immediate; startup mount exclusive; flash
BACk database to
timestamp
sysdate - (1/
24); flash
BACk database to scn 1790640; -- SCN:
SELEct ora_rowscn from tabl
ename; --
SELEct
DBMS_flash
BACk.get_system_change_
number from dual; alter database open resetlogs; -- 打开数据库重设日志 (3).排除
表空间闪回
alter tablespace example flash
BACk off; --
表空间关闭闪回数据库
alter tablespace example flash
BACk on; --
表空间启用闪回数据库 (4).使用担保还原点 担保还原点与普通还原点类似,执行恢复操作期间,可以将其用作SCN的别名。担保还原点的差别在于,它不会在控制文件中过期,并且必须显式删除。担保还原点适用于闪回数据库操作。如果在启用闪回日志记录时创建担保还原点,将确保在
闪回恢复区中保留闪回日志,以
便确保数据库可以回滚到创建担保还原点后的任何时间点。 -- 创建担保还原点 create restore point restore_poin
t_name guarantee flash
BACk database; -- 闪回担保还原点 shutdown immediate; startup mount exclusive; flash
BACk database to restore point restore_poin
t_name; alter database open resetlogs; -- 删除担保还原点 drop restore point restore_poin
t_name; 要使用担保还原点的先决条件 COMPATIBLE初始化参数必须为10.2或更高 必须在archivelog模式运行数据库 从第一个担保还原点开始,归档
重做日志文件必须可供使用 必须配置
闪回恢复区 由于在
闪回恢复区中保留第一个担保还原点之后的任何闪回日志,担保还原点可能导致
闪回恢复区的空间紧张。 (5).监视闪回数据库
SELEct current_scn,
flashback_on from
v$database;
SELEct * from
v$flash
BACk_database_log;
SELEct * from
v$flash
BACk_database_stat;
大佬总结
以上是大佬教程为你收集整理的Oracle OCP笔记(31)使用闪回功能全部内容,希望文章能够帮你解决Oracle OCP笔记(31)使用闪回功能所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。