数据库的闪回恢复

来源:互联网 发布:内卷化 知乎 编辑:程序博客网 时间:2024/05/18 00:20

----闪回技术:

1)闪回删除:闪回删除的目的是防止用户错误的删除表、索引等数据库对象。

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

回收站是一个逻辑结构,不具有物理数据结构,只要删除的表信息记录在回收站中,就可以通过闪回技术恢复删除的表;

启动闪回删除:alter system set recyclebin=on scope=both;

查看回收站信息:show recyclebin或select owner,original_name,object_name,ts_name,droptime from dba_recyclebin/user_recyclebin;

恢复删除的表:flashback table xxx to before drop;

2)闪回数据库:

这种恢复是基于用户的逻辑错误,比如对表中的数据做了错误的修改、插入了大量错误数据等;

使用闪回日志以及部分归档日志来恢复;

闪回日志由oracle自动创建,并存储在闪回恢复区中,由闪回恢复区管理(空间不足时会覆盖先前的日志);

启动闪回数据库特性必须将数据库设置为归档模式;

参数DB_FLASHBACK_RETENTION_TARGET:从当前开始计算最大可以把数据库闪回到过去的时间(以分钟为单位);

启动闪回数据库:ALTER DATABASE FLASHBACK ON,也可以针对具体的用户表空间alter tablespace users flashback on;

查看闪回的最早时间:select to_char(oldest_flashback_time,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;

闪回恢复到某个时间点:flashback database to timestamp to_date('20140909 09:09:09','yyyy-mm-dd hh24:mi:ss');

在预先知道SCN的情况下,可以:flashback database to scn xxx;

执行闪回数据库时,需要将数据库切换到mount状态,在闪回数据库结束后,必须使用ALTER DATABASE OPEN RESETLOGS打开数据库;

以下几种环境下不能使用闪回数据库特性:数据文件被删除或缩短、在闪回时间范围内复原或重建了一个控制文件、在resetlogs操作之前、表空间被删除

----针对闪回删除以及闪回数据库可以定义两种数据库的闪回级别:

1)数据库级闪回:当误删除一个用户,或者误截断一个表时,可以采用数据库级别的闪回恢复,将整个数据库恢复到过去的某个时间点;

2)表级闪回:表级闪回可将表闪回到过去的某个时间点,或恢复到过去的某个SCN,而闪回删除闪回使用drop指令删除的表;


drop一个表时,和表相关联的其他数据库对象如触发器、索引都将被删除,一旦闪回该表时相关的数据库对象将自动恢复,但是名称不是原先的名称,而是删除后系统自动重启的名称,该名称不易阅读,需要手工修改;

闪回数据库可以恢复被删除的表,但没有闪回删除简便;


----复原点:

在闪回数据库或者闪回表操作时,往往需要一个具体的时间点或者SCN等信息,说明闪回到哪里结束,而复原点就是SCN的别名;

创建复原点:create restore point rpl(无法确保闪回数据一定成功,因为闪回空间满时闪回日志采用覆盖形式保存);

查询复原点:select name,scn,storage_size,guarantee_flashback_database from v$restore_point;

----有保证的复原点:

这种技术可以保证在快闪恢复区空间可以保证的情况下,总可以闪回到该复原点。如果快闪恢复区空间不足,则数据库关闭;

并且使用有保证的复原点与是否使用闪回日志无关,一旦使用了有保证的复原点,Oracle会自动保存自复原点之后的闪回日志,并不会删除这些日志;

创建有保证金的复原点:create restore point grpl guarantee flashback database;

----

永久删除:drop table xxx purge;drop tablesapce xxx including contents;

永久删除回收站中表:purge table xxx;

永久删除同一表空间中的回收站中的表:purge tablespace xxx;

永久删除回收站中与某个表空间相关的特定用户的表:purge tablespace xxx user scott;



原创粉丝点击