测试步骤:
1、sqlplus / as sysdba;
2、建立一张新表xyz:
SQL> create table xyz(a number);
Table created.
3、在表xyz中插入一点数据:
SQL> insert into xyz values(66);
1 row created.
SQL> select * from xyz;
A
----------
66
SQL> insert into xyz values(99);
1 row created.
SQL> select * from xyz;
A
----------
66
99
4、提交:
SQL> commit;
RMAN连接:
5、进行数据库的全备:
RMAN> run {
2> backup database format='/export/home/oracle/backup/db_full_%U';
3> }
//oracle10g下磁盘似乎不需要分配channel,完成后也会自动release;
6、进入sqlplus删除数据,做备份测试
SQL> select * from xyz;
A
----------
66
99
删除数据:
SQL> delete from xyz;
2 rows deleted.
提交:
SQL> commit;
查看:
SQL> select * from xyz;
no rows selected
7、恢复:
若在恢复数据库时出现:
RMAN-03002: failure of restore command at 03/08/2007 15:36:43
ORA-19573: cannot obtain exclusive enqueue for datafile 1
则可以先shutdown后再startup
还原数据库:
RMAN> restore database;
恢复到某一时间点:
RMAN> recover database until time='2007-03-08 15:29:54';
此处时间点的选择:
list backup;
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
37 Full 479M DISK 00:03:11 2007-03-08 15:29:54
BP Key: 37 Status: AVAILABLE Compressed: NO Tag: TAG20070308T152643
Piece Name: /export/home/oracle/backup/db_full_17ic3ulj_1_1
List of Datafiles in backup set 37
File LV Type Ckp SCN Ckp Time Name
有时time无时间显示,若备份文件格式中包含当前时间,如上图:Tag:TAG20070308T152643,用此处时间加上:Elapsed Time即可。
若在执行恢复时出现如下错误:
RMAN> recover database until time '2006-09-14 19:00:00'
2> ;
Starting recover at 14-SEP-06
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/14/2006 22:49:54
ORA-01861: literal does not match format string
RMAN> exit
Recovery Manager complete.
这个错误是由于时间日期格式设置的问题。
需要按如下方式设置正确的时间格式
[oracle@stat ~]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
[oracle@stat ~]$ rman target /
然后再进行恢复。
8、resetlog:
SQL> alter database open resetlogs;
//完成了不完全恢复后,必须重新设置联机重做日志。当使用resetlogs选项打开数据库时,所有的数据文件都获得一个新的resetlogs scn(系统更改号)和时间戳。已归档的重做日志在它们的头部也有这两个值。oracle通过为数据库提供与重做日志文件相匹配的resetlogs scn和时间戳,来防止用旧的归档日志破坏数据文件。
在使用此命令后,联机重做日志文件被还原,每个数据文件的头部文件都被更新,控制文件也被更新。所有这些工作完成之后,数据库打开。注意每个联机重做日志文件 的新序号。
9、查看恢复情况:
SQL> alter database open resetlogs;
SQL> select * from xyz;
A
----------
66
99
至此恢复成功。
说明:在使用resetlogs选项打开数据库之后,必须做一个完整的数据库备份。要还原一个以前的数据库并将它前滚到resetlogs执行后的某个时间几乎是不可能的。
又注:据说oracle10g以后可以实现resetlogs后的按时间恢复,但是未测试过。
此处备份的前提是控制文件未曾损坏。如果是控制文件损坏或是重新装过系统则首先需要恢复控制文件(因为mount模式启动数据库必须要有控制文件),而控制文件的恢复需要在nomount模式下进行。大致步骤如下:
$ export ORACLE_SID=ora10g
$ rman target /
RMAN> set DBID=1341966532
RMAN> startup nomount;
RMAN> restore controlfile from autobackup;
RMAN> alter database mount;
阅读(1829) | 评论(0) | 转发(0) |