您的位置:首页 > 数据库 > Oracle

oracle-dba-ORACLE闪回技术

2017-03-03 23:27 423 查看
一种数据库恢复技术,具有恢复时间快,不需要备份文件的特点,他使得数据库可以回到过去的某个状态,可以满足用户的逻辑错误的快速恢复。

闪回级别

闪回级别(闪回粒度)

 数据库级闪回:允许将整个数据库恢复到过去的某个时间点。如误删用户,误截断表,可以使用此恢复。

 表级闪回:将表闪回到过去的某个时间点,或恢复到过去的某个SCN,闪回删除通过DROP指令删除的表

闪回数据库

使用闪回日志来恢复用户的逻辑错误,值针对用户逻辑错误的恢复。不涉及到整个数据库,恢复更具有针对性而且恢复时间大大减少。

闪回日志由oracle自动创建,并存储在闪回恢复区中,由闪回恢复区管理。快闪恢复区空间不足时会自动删除旧的闪回日志文件以腾出空间,所以不能保证闪回日志被保存的数据的可靠性。快闪恢复区中备份文件的存储优先。由RVWR进程负责。

闪回数据库,闪回日志不会被归档。

启动闪回数据库

默认不启动,启动需要将数据库设置为归档模式,并启用闪回恢复区,因为闪回日志文件存储在此。如果在RAC环境下,必须将闪回恢复区储在集群文件或ASM文件中。

查看数据库归档状态

Archive log list;

Archive destination:快速恢复区目录。

确定归档的操作系统存储位置

Show parameter db_recovery_file_dest;

启动归档模式

Startup mount;

Alter database archivelog;

查看将数据闪回到过去的最长时间

Show parameter db_flashretention;

修改数据闪回到过去的最长时间, 60*24*2=2880保留2天

Alter system set db_flashback_retention_target=2880 scope=both;

为避免由于备份数据库空间不足,删除较早的闪回日志,导致不能闪回到某个时间段的某个点。所以通过数据字典,评估需要的快闪恢复空间

Select estimated_flashback_size,retention_target,flashback_size from vflashbackdatabaselog;estimatedflashbacksize:系统估计的快闪恢复区大小flashbacksize:当前闪回数据大小启动闪回数据库,需要启动数据库到mount状态Startupmount;Alterdatabaseflashbackon;查看启动状态Selectdbid,name,flashbackonfromvdatabase;

启动后,数据库永久表空间都会受到闪回数据库保护。

关闭闪回数据库

禁用对某个表表空间的闪回特性

Alter tablespace users flashback off;

查看该表空间是否不被闪回保护

Select name,flashback_on from vtablespace;该表空间启用闪回数据库Startupmount;Altertablespaceuserflashon;关闭数据库级别的闪回数据库特性,关闭后闪回日志自动删除Startupmount;Alterdatabaseflashbackoff;闪回数据方法使用RMAN闪回闪回到过去某个时间点FLASHBACK DATABASE TO TIME=TO_DATE(‘2010-5-25 10:01:11’,’yyyy-MM-dd HH23:MI:SS’);

闪回到过去某个系统SCN

Flashbackdatabasetoscn=638832;闪回到特定日志序列号之前的状态,不包括序列号345;Flashback databse to sequence=345 thread=1;

 使用SQL闪回

需要切换到mount状态

Flashback database to timestamp(sysdate-1/24);

Flash back database to scn 678854;

闪回后需要重新设置重做日志打开数据库,使得重做日志序列号重新计数

Alter database open resetlogs;

闪回数据库

模拟

创建用户创建表并插入数据删除该用户和数据闪回数据库恢复

Create user vfast identified by vfast account unlock;

Create table vtest(id number,name varchar2(20));

Insert into vtest vales(1,’20’);

Select to_char(sysdate,’yyyy-MM-dd hh24:mi:ss’) from duan;

Drop user vfast cascade;

删除用户后,闪回日志中记录了相关数据,假设SCN为1111

Select * from vflashbackdatabaselog;记录闪回日志区域可以闪回的最早SCN以及最早时间,并且评估所需要闪回恢复区大小。查询可以闪回到的最早时间,假设为2015−10−30Selecttochar(oldestflashbacktime,′yyyy−MM−ddhh24:mi:ss′)fromvflashback_database_log;

闪回数据库恢复误删除用户vfast

Startup mount;

Flashback database to timespace to_date(‘2015-10-30’,’yyyy-MM-dd’);

使用read only模式打开数据库,验证是否恢复。如果没恢复,可以继续使用闪回数据库恢复。

Alter database open read only;

Select username,account_status from dba_users where username like ‘VF%’;

使用resetlogs打开数据库,闪回日志依然有效,可以继续山回到以前某时间点OR SCN

Startup mount;

Alter database open resetlogs;

闪回数据库到某个scn

Flashback database to scn 1111;

使用RMAN也可以闪回,但是不能使用to_char and to_date;因此需要提前设置

NLS_DATE_FORMAT OR NLS_LANG

如果闪回没有达到要求,撤销闪回操作

Recovery database ;

闪回太多,可以将数据库恢复到以前的某个时间

Recover database until;

监控闪回数据库

查看可以闪回到的最小SCN号以及可以闪回到的时间点

Select oldest_flashback_scn,oldest_flashback_time from vflashbackdatabaselog;查看系统当前scnSELECTCURRENTSCNFROMVDATABASE;

查看闪回日志开销,监控闪回日志写入闪回数据的各种开销。每一行记录一小时间隔状态

Select * from vFLASHBACKDATABASESTAT;Begintime:当前闪回记录开始时间Endtime:当前闪回记录结束时间Flashbackdata:在时间间隔内记录的多少闪回数据(字节)Dbdata:记录时间间隔内有多少数据块读写(单位数据块)Redodata:时间间隔内记录了多少重做数据(字节)监控快闪恢复区变化Selectname,spacelimit,spaceused,spacereclaimable,numberoffilesfromvrecovery_file_dest;

Name:快闪恢复区目录

Space_limit:空间最大使用上限

Space_used:已经使用空间

Space_reclaimable:可以回收空间

使用闪回数据库限制

以下几个只能使用不完全恢复将数据库恢复到过去某个时段

 数据文件被删除or缩短

 闪回时间范围内复原or重建一个控制文件

 在resetlogs操作之前

 表空间被删除

闪回删除

启动闪回后,删除表,物理没被删除,只是占用的空间回到空闲列表,也就是这段空间在某种条件下是可以被占用的

闪回删除原理

使用drop table删除表时,该表不会被删除,而是保持原表位置,但是将删除的表重新命名,并将删除的表信息存储在回收站中,回收站记录了被删除表的新名字和原名字。此时被删除的表占有的空间没有被立即释放,变成数据库可以使用的潜在空间。记录在回收站中的信息会保留一段时间,直到回收站不足or使用purge指令删除回收站记录。

查看oracle是否启用闪回删除

Show parameter recyclebin;

开启闪回删除

Alter system set recyclebin=on scope=both;

回收站使用

查看数据字典dba_recyclebin结构

Desc recyclebin;

 OBJECT_NAME:删除的表重命名

 ORIGINAL_NAME:删除表原始名

 OPERATION:对表的操作,如删除表,所以显示为drop

 TYPE:删除的数据库对象类型,如表,索引

 TS_NAME:删除的数据库对象对应的表空间

 CREATETIME:被删除对象的创建时间

 DROPTIME:删除时间

 CAN_UNDROP:是否能闪回删除

 CAN_PURGE:是否可以永久删除

select * from Dba_recyclebin; select * from user_recyclebin;show recyclebin;(是user_recyclebin的同义词)

恢复删除表

create table tempS(name number(10));

drop table tempS;

Flashback table tempS to before drop;

Select table_name from user_tables;

Flashback table tempS to before drop rename to new_temp;

永久删除表

Drop table test purge;

永久删除表空间,同时会触发将回收站中和表空间相关联的全部删除

Drop tablespace test including contents;

永久删除回收站表

Purge table test1;

永久删除回收站表空间,同时删除回收站中与该表空间联系的所有表

Purge tablespace users;

永久删除回收站中和某个表空间相关的某个用户的表

Purge tablespace test user scott;

闪回表(回到历史某一刻时间)

闪回表,将表里的数据回退到历史上某个时间点。闪回表利用undo记录的数据就映像。

指定undo表空间retention guarantee保证闪回成功

Show parameter undo;

Alter system set undo_retention=86400 scope=spfile;

Alter tablespace undotbs1 retention guarantee;

闪回表的操作会修改表里的数据,从而可能引起数据行的移动。比如某一行数据在当前A数据块里面,而在表闪回到以前的某个时间点上,在哪个时间点上该行数据位于B数据块里面,针对这种情况,需要启动数据行的移动特性

Alter table 表名 enable row movement;

Flashback table 表名 to timestamp to_date (‘’,’’);

局限性:假设当前时间为B,需要将表回到历史上的A点,如果AB这段时间内对表执行了DDL操作,则闪回表失败。

闪回版本查询

版本:每次事务引起的数据行的变化情况,每一次变化就是一个版本。

闪回版本查询使用的是undo表空间里记录的undo数据

Select 伪列1,伪列2,伪列3…from version scn between … where 伪列1;

伪列:

 Versions_starttime:事务开始时间

 Versions_startscm:事务开始的SCN号

 Versions_endtime:事务结束时间

 Versions_endscn:事务结束的SCN

 Versions_xid:事务的ID号

 Versions_operation:事务所进行的操作类型,包括输入(显示为1),删除(显示0),更新(显示U)

Versions between scn minvalue and maxvalue:显示数据行所有变化

Select versions_starttime,versions_startscn,versions_endtime,versions_endscn,versions_xid,versions_operation,id,name from 表名 versions between scn minvalue and maxvalue;

闪回事务查询

Flashback_transaction_query显示那些事务引起数据变化,并提供撤销事务的sql语句。闪回事务查询利用的是undo表空间undo数据

Select xid, operation,undo_sql from flashback_transaction_query where table_name=’表名’ order by xid;

闪回查询

查询该表过去某个时刻的数据情况。

Select count(*) from 表名 as of timestamp to_date(‘’,’’);

复原点技术

将数据恢复到该点时状态,复原点是SCN别名

创建一个复原点

Create restore point rpl;

查看创建复原点

Select name,scn,storage_size,guarantee_flashback_database from vrestorepoint;此还原点无法保证闪回数据成功,因为这依赖于需要的闪回日志数据文件是否存在,而闪回日志依赖于闪回恢复区。如下还原点,使得在快闪恢复区空间保证的情况下总可以闪回到该还原点,如果快闪恢复区空间不足则数据库关闭。与还原日志无关,还原日志还是会保存自复原点之后的闪回日志不删除。创建一个有保证的还原点Createrestorepoint还原点名guaranteeflashbackdatabase;查看是否创建,Selectname,scn,storagesize,guaranteeflashbackdatabasefromvrestore_point;

guarantee_flashback_database表示是否是保证的还原点

storage_size:有值,说明为保证的复原点指定的存储空间

删除还原点

Drop restore point 还原点名;

闪回删除不是直接将数据从数据库中删除放入回收站,而是将数据库对象的定义从数据字典中删除,数据存储在原处,在回收站中记录这个被删除的数据库对象。一旦需要闪回到删除前的状态,使用回收站中记录的对象信息进行闪回
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: