本节将演示下rman基于时间点的不完全恢复,修改过的数据有执行commit操作的事务,只要备份文件和联机重做日志或者归档日志文件存在,理论上都是可以恢复的
1:使用rman备份test表空间,test在Oracle里面是一个保留关键字,所以备份的时候要加双引号
RMAN> backup tablespace "TEST" format '/u01/backup/test_1216.dbf' tag ts;
2:使用yang用户连接数据库实例,进行数据操作,改用户的默认表空间即为test
yang SQL>select default_tablespace from dba_users where username='YANG';
DEFAULT_TABLESPACE
------------------------------
TEST
yang SQL>conn yang/yang
Connected.
yang SQL>col object_name format a30;
yang SQL>select object_name,object_type from user_objects;
OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
TEST TABLE
yang SQL>select * from test order by 1;
ID NAME
---------- --------------------------------
1 one
2 two
3 three
3:插入一条新数据,并提交事务
yang SQL>insert into test values (4,'four');
1 row created.
yang SQL>commit;
Commit complete.
4:使用sys用户登录数据库,查看当前的联机日志组为组1
yang SQL>show user;
USER is "SYS"
yang SQL>select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 CURRENT
2 UNUSED
3 UNUSED
yang SQL>!strings /u01/app/oracle/oradata/yang/redo01.log |grep 'four' //在lgwr进程发生之前,记录是保存在redolog buffer中
yang SQL>!strings /u01/app/oracle/oradata/yang/redo01.log |grep 'four' //commit后,记录保存在当前active状态的联机重做日志文件中
four
yang SQL>!strings /u01/app/oracle/oradata/yang/test01.dbf |grep 'four'
yang SQL>alter system checkpoint; //在checkpoint发生后,记录才真实可靠的写入到数据文件中
System altered.
yang SQL>!strings /u01/app/oracle/oradata/yang/test01.dbf |grep 'four'
four,
5:继续更新一条记录,但不执行提交操作
yang SQL>insert into test values (5,'five');
1 row created.
yang SQL>select count(*) from test;
COUNT(*)
----------
5