实例说明:


(1)先创建2个表空间。


create tablespace user01 datafile '+DG1' size 1M;


create tablespace user02 datafile '+DG1' size 1M;



(2)在每个表空间上各创建一张表。


create table scott.customers


(cust_id int,cust_name varchar2(10)) tablespace user01;


create table scott.sales


(id int,cust_name varchar2(10),sales_amount number(8,2)) tablespace user02;



(3)在每个表中插入2条记录,提交。检查当前的时间点,待会表空间user01要恢复到当前时间点。


insert into scott.customers values(1,'SOCTT');


insert into scott.customers values(2,'SMITH');


insert into scott.sales values(1,'SCOTT',8000);


insert into scott.sales values(1,'SMITH',10000);


COMMIT;


ALTER SYSTEM SWITCH LOGFILE;


ALTER SYSTEM SWITCH LOGFILE;


ALTER SYSTEM SWITCH LOGFILE;


date


2010年 03月 11日 星期四 21:44:52 CST



(4) truncate 表1,往表2中插入2条记录。在表空间1中再创建一个表。


truncate table scott.customers;


insert into scott.sales values(3,'SCOTT',6000);


insert into scott.sales values(4,'BLAKE',6700);


commit;


create table scott.employee(id int,name varchar2(10)) tablespace user01;



(5) 利用rman进行表空间1基于时间点的恢复。


--rman部分恢复表空间


recover tablespace user01


until time "to_timestamp('2010-03-11 21:44:52','yyyy-mm-dd hh24:mi:ss')"


auxiliary destination '/home/oracle/backup';



(6)将表空间user01 联机,检查表1的数据是否找回来,检查表2的数据是否是4条,检查新创建的表是否已经不存在。


alter tablespace user01 online;


select * from scott.customers;


CUST_ID CUST_NAME


---------- ----------


1 SOCTT


2 SMITH


select * from scott.sales;


ID CUST_NAME SALES_AMOUNT


---------- ---------- ------------


1 SCOTT 8000


1 SMITH 10000


3 SCOTT 6000


4 BLAKE 6700


select * from dba_tables where owner = 'SCOTT' and table_name='EMPLOYEE';


no rows selected



一切如我们所愿,此时,表空间不完全恢复完成。



注意:


只有自包含的表空间,才能基于单独不完全恢复。所谓自包含,是指该表空间中的对象不依赖于其它表空间中的对象,如该表空间中索引的基本在其它表空间,该表中


某些表的lob列放在其它表空间。



如在上例中,执行:


create index scott.idx_customers on scott.customers(cust_name) tablespace user02;


begin


dbms_tts.transport_set_check('user02',true);


end;


select * from transport_set_violations;



会提示:Index SCOTT.IDX_CUSTOMERS in tablespace USER02 points to table SCOTT.CUSTOMERS in tablespace USER01.


begin


dbms_tts.transport_set_check('USER01,user02',true);


end;


select * from transport_set_violations;



不会有任何提示,因为user01/user02表空间作为一个集合,是自包含的。


上面这

个过程看起来简单,但是数据库在步骤5时,自己做了很多的工作,所有以前人工需要做的它一步也没有少做,具体如下:


(1)建立参数文件


(2)启动辅助instance到nomount状态


(3)恢复辅助instance控制文件


(4)启动辅助instance到mount,restore表空间对应的数据文件及辅助文件(表空间system和undo的文件)


(5)将上面的几个数据文件online,恢复表空间user01,system和undo


(6)open 辅助数据库(resetlogs)


(7)exp 导出表空间user01;


(8)关闭辅助库


(9)imp 表空间user01;


(10)删除辅助库对应的数据文件及其它文件。



oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html