oracle-dba-ORACLE闪回技术

时间:2023-01-24 08:14:31

一种数据库恢复技术,具有恢复时间快,不需要备份文件的特点,他使得数据库可以回到过去的某个状态,可以满足用户的逻辑错误的快速恢复。
闪回级别
闪回级别(闪回粒度)
 数据库级闪回:允许将整个数据库恢复到过去的某个时间点。如误删用户,误截断表,可以使用此恢复。
 表级闪回:将表闪回到过去的某个时间点,或恢复到过去的某个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 v flashbackdatabaselog;estimatedflashbacksize:flashbacksizemountStartupmount;Alterdatabaseflashbackon;Selectdbid,name,flashbackonfromv database;
启动后,数据库永久表空间都会受到闪回数据库保护。
关闭闪回数据库
禁用对某个表表空间的闪回特性
Alter tablespace users flashback off;
查看该表空间是否不被闪回保护
Select name,flashback_on from v tablespace;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 v flashbackdatabaselog;SCN,20151030Selecttochar(oldestflashbacktime,yyyyMMddhh24:mi:ss)fromv flashback_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 v flashbackdatabaselog;scnSELECTCURRENTSCNFROMV DATABASE;
查看闪回日志开销,监控闪回日志写入闪回数据的各种开销。每一行记录一小时间隔状态
Select * from v FLASHBACKDATABASESTAT;BegintimeEndtime:Flashbackdata:()Dbdata:()Redodata:()Selectname,spacelimit,spaceused,spacereclaimable,numberoffilesfromv recovery_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 v restorepoint;使Createrestorepointguaranteeflashbackdatabase;,Selectname,scn,storagesize,guaranteeflashbackdatabasefromv restore_point;
guarantee_flashback_database表示是否是保证的还原点
storage_size:有值,说明为保证的复原点指定的存储空间
删除还原点
Drop restore point 还原点名;

闪回删除不是直接将数据从数据库中删除放入回收站,而是将数据库对象的定义从数据字典中删除,数据存储在原处,在回收站中记录这个被删除的数据库对象。一旦需要闪回到删除前的状态,使用回收站中记录的对象信息进行闪回