ITPub博客

首页 > 数据库 > Oracle > RMAN恢复实践(转)

RMAN恢复实践(转)

原创 Oracle 作者:post0 时间:2007-08-14 20:05:44 0 删除 编辑
RMAN恢复实践(转)[@more@]

  关键词:Oracle、恢复、RMAN

  

  谈恢复肯定离不开备份,不过今天我们的重点不在于此,我在在这里将备份分为两类:操作系统备份和数据库备份,而数据库备份工作我们大部分都是用RMAN 来做。对于使用RMAN 我强烈建议使用catalog mode。

  

  测试环境:WIN2K ADV+ORACLE817

  

  RMAN:target database named ORA,catalog database named RCVDB

  

  

  

  一、Control file的恢复

  

  说明:RMAN 的备份必须在catalog mode下进行,否则备份了control file也没有用;但即使是这样有时候可能还会出现很多问题。建议:control file 用SQL或操作系统的方式做备份和恢复。

  

  1、RMAN备份的恢复

  

  备份:

  

  run {

  

  allocate channel c1 type disk;

  

  backup current controlfile;

  

  }

  

  恢复:

  

  run {

  

  allocate channel c1 type disk;

  

  restore controlfile to '/oracle/oradata/ora/control01.ctl';

  

  replicate controlfile from '/oracle/oradata/ora/control01.ctl';

  

  restore database;

  

  sql 'alter database mount';

  

  recover database until cancel;

  

  sql 'alter database open resetlogs';

  

  release channel c1;

  

  }

  

  使用resetlogs之后需在catalog database 上进行reset database,原有备份信息将不可用,所以要及时进行新的完全备份。

  

  2、SQL备份的恢复

  

  备份:

  

  alter database backup controlfile to trace;

  

  恢复:

  

  先将数据库shutdown,然后从备份所产生的trace文件中拷出创建恢复所用的SQL执行一遍

  

  即可。如果你之前没有做这样的备份那也没关系,形式如下你可以照着写一个:

  

  #--------------------------------BEGIN-----------------------------------------

  

  # The following commands will create a new control file and use it

  

  # to open the database.

  

  # Data used by the recovery manager will be lost. Additional logs may

  

  # be required for media recovery of offline data files. Use this

  

  # only if the current version of all online logs are available.

  

  STARTUP NOMOUNT

  

  CREATE CONTROLFILE REUSE DATABASE "ORA" NORESETLOGS

  

  NOARCHIVELOG

  

  MAXLOGFILES 32

  

  MAXLOGMEMBERS 2

  

  MAXDATAFILES 32

  

  MAXINSTANCES 16

  

  MAXLOGHISTORY 680

  

  LOGFILE

  

  GROUP 1 (

  

  'C:ORACLEORADATAORAREDO01.LOG',

  

  'C:ORACLEORADATAORAREDO01_1.LOG'

  

  ) SIZE 1M,

  

  GROUP 2 (

  

  'C:ORACLEORADATAORAREDO02.LOG',

  

  'C:ORACLEORADATAORAREDO02_1.LOG'

  

  ) SIZE 1M,

  

  GROUP 3 (

  

  'C:ORACLEORADATAORAREDO03_1.LOG',

  

  'C:ORACLEORADATAORAREDO03_2.LOG'

  

  ) SIZE 1M

  

  DATAFILE

  

  'C:ORACLEORADATAORASYSTEM01.DBF',

  

  'C:ORACLEORADATAORARBS01.DBF',

  

  'C:ORACLEORADATAORAUSERS01.DBF',

  

  'C:ORACLEORADATAORATEMP01.DBF',

  

  'C:ORACLEORADATAORATOOLS01.DBF',

  

  'C:ORACLEORADATAORAINDX01.DBF'

  

  CHARACTER SET ZHS16GBK

  

  ;

  

  # Recovery is required if any of the datafiles are restored backups,

  

  # or if the last shutdown was not normal or immediate.

  

  RECOVER DATABASE

  

  # Database can now be opened normally.

  

  ALTER DATABASE OPEN;

  

  #----------------------------------END-----------------------------------------

  

  3、OS 备份的恢复

  

  备份:

  

  OS copy

  

  恢复:

  

  OS copy回来即可,要注意的是这个备份必须是最新有效的。

  

  二、Database的恢复

  

  A、To restore the database from host_a to host_b with the same file system

  

  #此处使用recovery catalog;

  

  #如果不是catalog mode,就用OS COPY直接将control file

  

  #copy过来并mount database。

  

  1、copy the init.ora file from host_a to host_b using o/s utility

  

  2、rman target sys/sys@host_b catalog rman/rman@rcat

  

  3、startup nomount

  

  4、run {

  

  allocate channel c1 type disk;

  

  restore controlfile;

  

  sql ‘alter database mount’;

  

  }

  

  5、select min(scn) from (

  

  select max(next_change#) scn from v$archived_log

  

  group by thread#);

  

  6、run {

  

  set until scn=500; #use appropriate SCN for incomplete recovery

  

  allocate channel c1 type ‘sbt_type’;

  

  restore database;

  

  recover database;

  

  sql ‘alter database open resetlogs’;

  

  }

  

  B、To restore the database from host_a to host_b with a different filesystem

  

  步骤和A差不多,不同的是在启动数据库之前要修改init.ora文件中所有和路径相关的参数,

  

  如:*_DEST,*_PATH 等。然后执行如下脚本:

  

  run {

  

  set until scn=500;

  

  allocate channel c1 type disk;

  

  set newname for datafile 1 to ‘/disk’/%U’;

  

  set newname for datafile 2 to ‘/disk’/%U’;

  

  set newname for datafile 3 to ‘/disk’/%U’;

  

  set newname for datafile 4 to ‘/disk’/%U’;

  

  set newname for datafile 5 to ‘/disk’/%U’;

  

  set newname for datafile 6 to ‘/disk’/%U’;

  

  set newname for datafile 7 to ‘/disk’/%U’;

  

  sql ‘alter database mount’;

  

  restore database;

  

  switch datafile all; #points the control file to the renamed datafiles

  

  recover database;

  

  .... ....

  

  sql ‘alter database open resetlogs’;

  

  }

  

  三、Tablespace and datafile的恢复

  

  run {

  

  allocate channel c1 type disk;

  

  sql ‘alter tablespace users offline immediate’; #must be in archive log mode

  

  #如下改变datafile位置

  

  set newname for datafile 'c:/oracle/oradata/ora/users01.dbf'

  

  to 'c:/oracle/oradata/orabk/user01.dbf';

  

  restore tablespace users;

  

  switch datafile all;

  

  recover tablespace users;

  

  sql ‘alter tablespace users online’;

  

  }

  

  如果不在archive log mode下,执行以上SQL时会出错:ORA-01145。你将不得不shutdown。

  

  四、关于set until 选项

  

  set until后面可以跟time、scn和logseq三个不同的选项,当数据库运行在noarchivelog

  

  mode 下时可以使用until cancel选项进行数据库的不完全恢复。所有这些的具体过程和以上

  

  的数据库恢复都差不多,不再赘述。

  


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8225414/viewspace-956976/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    2018
  • 访问量
    8225131