1,构建测试用户及专用表空间zxy
create tablespace zxy datafile 'c:\zxy.dbf' size 10m;
create user zxy identified by system default tablespace zxy account
unlock;
grant resource,connect to zxy;
2,以zxy用户身份构建表tt,同时插入数据
conn zxy/system
create table tt(a int);
insert into tt values(1);
commit;
conn /as sysdba
alter system switch logfile;
alter system archivelog current;
3,通过rman对数据库进行一个全备(一并备份所有的归档日志及控制文件)
rman target /
backup database format 'c:\%d_%u_fulldbbak' tag='fulldbbak';
backup current controlfile format 'c:\%d_%u_contolfilebak'
tag='controlbak';
--因为在实际生产环境中,当你备份后,数据库结构及相关内容是一直动态变化的,我一会还原恢复时,是从这个控制文件备份为基础的
backup archivelog all delete input format 'c:\%d_%u_archivebak'
tag='archbak';
4,为了实行不完全恢复,登陆数据库查看dbid及current_scn
---大家可以想下,为何要它们的信息,因为当你采用控制文件备份,恢复控制文件时,此时要恢复的目标数据库并没有加载controlfile(它存储dbid及current_scn),所以要得到它的信息,你必须手工指定它们
sqlplus '/as sysdba'
select current_scn,dbid from
v$database;
5,为了模拟生产环境的数据变更,继续创建表空间及用户haha,并插入测试数据
create tablespace haha datafile 'c:\ha1.dbf' size 10m;
create user haha identified by system default tablespace haha
account unlock;
grant resource,connect to zxy;
conn haha/system
create table ha1(a varchar(2));
insert into ha1 values('xi');
commit;
conn /as sysdba
alter system switch logfile;
alter system archivelog current;
6,dba一个drop
tablespace或者损坏zxy用户的对应动作,马上恢复zxy用户对应的数据(注意:不含之后创建的haha用户数据)
分为几个小步骤:
a,rman target /
b,set dbid=第4步查到的dbid;要不然会报错
c,restore controlfile from '第3步控制文件备份的具体路径';
--注:你要通过from tag会报错,原因很简单,备份信息存储在控制文件中, 此时控制文件未打开
d,alter database mount;--mount 数据库,为下面工作打好基础
e,restore database;--还原数据库,维护观察过程,就是应用以上全库备份的过程
f,recover database until scn ' 第4步查到的scn';--大量应用归档及在线日志
g,sql 'alter database open
resetlogs';--不完全恢复后,必须以resetlogs打开数据库
后记:
不完全恢复,请马上对数据库进行全库备份,因为之前的备份全然失效
通过此测试,我们可以发现,没有配置catalog库的生产库或者测试库,一旦出故障,是多么的脆弱及恢复麻烦