Oracle备份与恢复基础篇
一、 oracle闪回技术
oracle闪回技术在9i中开始使用提供flashback queue操作,在10G中得到很大提升,增加了flashback table、flashbackdrop、flashback version query、flashback transaction query、flashback database、在11G中又增加了flashback data archive功能。
注意:除了flashback database 之外其他的闪回操作都是以undo segment中的内容为基础的,因此受限于undo_retenton参数,而且要启用flashback特性,必须启动自动撤销管理表空间。如下所示:
SQL> showparameter undo_
NAME TYPE VALUE
----------------------------------------------- ------------------------------
_optimizer_undo_cost_change string 11.1.0.6
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL>
一) flashbacktable
闪回表的操作可以根据时间点,也可以根据具体的scn进行闪回操作,如下是根据时间点的操作。注意:这个过程完全是依赖于undo进行的,注意undo_retention和undo_management的设置。如下是操作内容:
如下是进行scn的恢复;
Select timestamp_to_scn(to_date(‘2012-12-24 18:01:27’,’yyyy-mm-ddhh24:mi:ss’));
Flashback to test9 to scn xxxxxx;
注意:如果进行闪回表的操作时,提示需要启用行移动那么使用如下命令:
Altertable test9 enable row movement;
二) flashbackdrop
当我们使用drop table删除一个表的时候,那么这个表只是形式上被删除了,那么如果前提是启用了oracle的回收站,那么该表则将放入回收站中。我们可以使用如下命令查看,是否启用了回收站:
此图表示已经启用。那么oracle的回收站到底在那呢?其实他就是在用户所在表空间中划分出来的一个逻辑的空间,其所能存储的数据依赖于该用户下的表空间。(当然此项功能对sys/system用户无效)
当发生空间不够时,Oracle会按照先入先出的顺序覆盖Recycle Bin中的对象。也可以手动的删除Recycle Bin占用的空间。
1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin
2). Purge tablespace tablespace_name useruser_name: 清空指定表空间的Recycle Bin中指定用户的对象
3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象
4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限
5). Drop table table_name purge: 删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。
6). Purge index recycle_bin_object_name:当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。因为索引是可以重建的
如下是一个使用实例:
上边所要操作的其实在一个用户数据字典中存在的一个数据事务。
当然我们可以通过user-recyclebin,查看更加详细的信息,如dropscn,operation等等。
思考:如果我删除的2个表明一样,那么我们怎么恢复呢。答案是通过ject_name进行查询事务,然后区别进行检索内容进行恢复,或是根据删除的时间orscn等等。
三) flashback queue
Flashback 是ORACLE 自9i 就开始提供的一项特性,在9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback Query。Oracle就是采用多版本查询的一致性,应用undo的数据前镜像来保障查询的一致性,或者说通过undo进行构建一个查询的一个记录集,在此过程中不许要等待事务被提交或是事务回滚完成。Oracle有多中方式构建这个查询记录集,那么我们最简单的就是使用asof timestamp 或是as of scn。采用我的操作案例如下:
第一种方法:
SQL> select count(*) from test9;
COUNT(*)
----------
6
SQL> delete from test9 where rownum<3;
已删除2行。
SQL> commit;
提交完成。
SQL> select count(*) from test9;
COUNT(*)
----------
4
SQL> select count(*) from test9 as of timestampsysdate-3/1440;
COUNT(*)
----------
6
SQL> insert into test9 select * from test9 as oftimestamp sysdate-3/1440;
已创建6行。
SQL> select count(*) from test9;
COUNT(*)
----------
10
可以看出这个闪回操作比较适合delete from table;这样的语句。
当然我们这个技术使用也可以完全基于scn,那么在系统中就有一个smon_scn_time,我们可以通过如下命令进行查询:
Select scn,to_char(time_dp,’yyyy-mm-ddhh24:mi:ss’) from smon_scn_time;
这个scn和time是每隔5分钟进行一次同步。
可以看到我们已经发现具体操作的相关信息。注意,这个查询可以使基于时间的也可以使基于scn的。Starttime代表一行记录被执行时的时间,endtime代表被替代的时间。另外,我们还可以基于一段时间或是scn进行查询。当然了,这个功能也是受限于undo表空间的设置的。
四) flashbackversion query
通过flash query可以看出它只能看到某个时间点的操作变化,那么flashback version query就是在一个时间段内的操作变化。如:
Selectempno,versions_operation,versions_starttime,versions_endtime,versions_xid fromtest9 versions between timestamp minvalue and maxvalue;
另外注意ORA_ROWSCN伪劣的相关内容。当每次修改需要记录ORA_ROWSCN时可以在创建表时,使用rowdependencies.
五) flashbacktransaction query
同样该功能的实现都需要使用undo。那么该功能就是依赖于一个flashback_transaction_query这个视图,然后进行事务的修改。
我的操作如下:
SQL>select * from test9;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
-------------------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7777 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
SQL>update test9 set empno=3333 where empno=7369;
已更新 1 行。
SQL>commit;
提交完成。
SQL>select versions_operation,versions_xid from test9 versions between timestampminvalue and maxvalue;
VVERSIONS_XID
-----------------
U05001600200E0000
I 05001A001E0E0000
SQL>select xid,undo_sql from flashback_transaction_query wherexid='05001600200E0000';
XID
----------------
UNDO_SQL
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
05001600200E0000
update"SCOTT"."TEST9" set "EMPNO" = '7369' where ROWID= 'AAASE1AAEAAAABeAAA';
05001600200E0000
SQL>
然后我们就可以给予某个事务进行撤销恢复了。
六) flashbackdatabase
flashbackdatabase 与其他flashback操作有所不同,那么flashbackdatabase是基于flashback log的,我们可以通过使用flashback日志把整个数据库闪回到以前一个状态,注意:此过程中需要涉及到数据库重启操作。那么我们可以通过配置相关参数然后启动此项功能。默认是被关闭的,在开启此功能后会在后台进程增加一个rvwr日志写入进程。注意;此项功能是需要启动数据库归档模式。
操作如下;关闭此功能如下:
开启此功能如下:
另外我们也可以再告警日志中查看到如下信息:
db_recovery_file_dest_size of 5120 MB is 43.82% used.
看出我们的区用了43.82%。当达到峰值时,需要使用rman进行删除。
以下是操作:
另外还有db_flashback_retention_target参数。
常用的视图有:
V$flashback_recovery_area_usage、v$database、v$flashback_database_log、v$flashback_database_logfile、v$flashback_database_stat
1466

被折叠的 条评论
为什么被折叠?



