Oracle RMAN 恢复数据库到不同主机(二)

我们在recover database时报一个错误:

RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 149 and starting SCN of 3507749

这里是提醒恢复到一个未知的scn号。我们在备份时只有148号归档,149号还是online redo,所以没有copy过来,如果我们不指定recover的结束时间,最后就会提示我们上面的信息:RMAN-06054.  所以在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间,就可以避免这个错误。如:

RMAN> run{
      set until sequence 149;
      recover database;
      }

executing command: SET until clause

Starting recover at 2016-05-12 23:27:34
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 2016-05-12 23:27:34

L、恢复完成之后,还有一个十分重要的工作要做,那就是恢复redo log files.如果源库的目录结构与新库的目录结构相同的话,在open resetlogs 时,会重新创建online redo log。但是现在redo log file文件的位置变了,open resetlogs时报如下错误:

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 05/12/2016 23:37:46
ORA-00344: unable to re-create online log ‘/u01/app/oracle/oradata/scp/redo01.log‘
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1

由于源库和目标库的路径不相同,oracle试图在原来旧的位置去创建redo log file,但是却发现目标库上不存在这个路径了.解决方法仍然是将旧文件的路径重置为新的路径,但是我们怎么知道源库redo log file文件的位置呢?因为数据库已经mount上了,直接执行查询:

RMAN> select group#,type,member from v$logfile;

group#   type        MEMBER
--------------------------------------------------------------------------------
  3    online       /u01/app/oracle/oradata/scp/redo03.log
  2    online       /u01/app/oracle/oradata/scp/redo02.log
  1    online       /u01/app/oracle/oradata/scp/redo01.log

接下来我们将这些redo log file指定到新的文件位置:

RMAN>  run{
    ALTER DATABASE RENAME file ‘/u01/app/oracle/oradata/scp/redo01.log‘ TO ‘/home/OracleData/scp/redo01.log‘;
    ALTER DATABASE RENAME file ‘/u01/app/oracle/oradata/scp/redo02.log‘ TO ‘/home/OracleData/scp/redo02.log‘;
    ALTER DATABASE RENAME file ‘/u01/app/oracle/oradata/scp/redo03.log‘ TO ‘/home/OracleData/scp/redo03.log‘;
    }

Statement processed
Statement processed
Statement processed

这个时候我们以resetlogs方式打开数据库,oracle报ora-00392的错误,

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 05/13/2016 00:07:37
ORA-00392: log 2 of thread 1 is being cleared, operation not allowed
ORA-00312: online log 2 thread 1: ‘/home/OracleData/scp/redo02.log‘

我们这个时候来查询一下redo log file的状态:

RMAN>  select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
         1          0   52428800          1 CLEARING
         3          0   52428800          1 CLEARING
         2          0   52428800          1 CLEARING_CURRENT

以下是oracle的官方文档:

(1)CLEARING ---- Log is being re-created as an empty log after an ALTER DATABASE CLEAR LOGFILE statement.After the log is cleared, the status changes to UNUSED.

(2)CLEARING_CURRENT ----Current log is being cleared of a closed thread. The log can stay in this status  if there is some failure in the switch such as an I/O error writing the new log header.

解决办法:

RMAN> alter database clear logfile group 2;

Statement processed

RMAN>  select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
         1          0   52428800          1 CLEARING
         3          0   52428800          1 CLEARING
         2          0   52428800          1 CURRENT         

M、最后用open resetlogs方式打开数据库,并执行一些日志切换。

RMAN> alter database open resetlogs;

Statement processed

RMAN> alter system switch logfile;

Statement processed

RMAN> alter system switch logfile;

Statement processed

RMAN>  select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
         1          1   52428800          1 ACTIVE
         2          2   52428800          1 ACTIVE
         3          3   52428800          1 CURRENT 

N、这还没有完,我们需要创建spfile文件、临时表空间和密码文件:

RMAN> alter tablespace temp add tempfile ‘/home/OracleData/scp/temp01.dbf‘ size 29m reuse autoextend on next 640k maxsize 32767m;

Statement processed

RMAN> create spfile from pfile;

RMAN> host;

[[email protected] rmanbak]$ orapwd file=‘$ORACLE_HOME/dbs/pwdscp.ora‘ password=‘[email protected]#‘ entries=3

至此,利用rman恢复数据库到不同主机的操作就全部完成了,记得马上做一次RMAN的全备!!!

时间: 2024-12-12 06:20:05

Oracle RMAN 恢复数据库到不同主机(二)的相关文章

ORACLE中没有参数文件和控制文件如何通过rman恢复数据库

场景: 一个DEV告诉我生产环境下某个用户的表都看不到了,需要恢复,而此时生产库上存储自动备份的参数文件控制文件的磁盘目录文件坏块,所以导致rman备份的只有数据文件和归档日志文件,这种情况下,如何在测试服务器上利用rman恢复数据呢?google了很多资料,咨询了朋友,恢复过程如下: 前期准备工作:事先查询好先查询下原来的数据文件路径SQL> select name from v$datafile; NAME-------------------------------------------

oracle rman恢复到异地、异机

原来的数据库服务器使用rman进行全库的备份,然后再异地的服务器上恢复一模一样的数据库 1.1      原服务器备份数据库 第一步,查看数据库的实例名和DBID connected to target database: DB3 (DBID=2060124769, not open) 第二步,进行全备份 backup AS COMPRESSED BACKUPSET database include current controlfile format '/orabak/db_%d_%T_%s'

异地rman恢复数据库

Source db端: ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 ORACLE_SID=ygdg 数据文件位置:/u01/app/oracle/oradata/ygdg Target db端: ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 ORACLE_SID=ygdg 数据文件位置

RMAN恢复数据库实战

预设场景: 一般企业数据库的数据都用rman工具进行了全库备份,那么当数据库里面的控制文件,重做日志文件等全部丢失了之后怎么办呢?以下是解答思路: 1.利用全库备份的备份片恢复控制文件 2.恢复数据文件 3.挂载数据库 以下是详细步骤: 1 .先用rman restore备份的全库,找回控制文件: RMAN>  restore controlfile from '/u01/app/oracle/flash_recovery_area/JIAGULUN/backupset/2016_02_01/o

oracle rman恢复数据文件路径不一致

编辑恢复脚本:vi recover.txt run{allocate channel c1 type sbt;allocate channel c2 type sbt;allocate channel c3 type sbt;allocate channel c4 type sbt;allocate channel c5 type sbt;allocate channel c6 type sbt;allocate channel c7 type sbt;allocate channel c8 t

Oracle 11g R2 rac通过rman 恢复到单实例数据库

生产环境是2个节点的rac + dataguard(物理备库也是两个节点的rac),通过rman每天进行备份,现在需要定期对生产库进行恢复操作 恢复步骤如下: 1.      把生产库的备份拷贝到目标端 建立存放备份的目录修改目录属主属组 mkdir /oracle/backup chown oracle:oinstall /oracle/backup 2.      拷贝备份到目标端 scp -P 22 incremental_level*  [email protected]:/oracle

ORACLE中采用rman备份异机恢复数据库详细过程

场景:        有一个生产库的用户下面所有的表都不见了,怀疑人为被删除了,现在需要用备份去恢复下,找出原来的表,线上是oracle dataguard环境,有全库备份文件,准备去测试库恢复一下. 1,从生产库上copy好全备份文件恢复数据库需要准备的文件:rman完整备份(包括数据文件.日志文件.控制文件.参数文件),记录源数据库的DBID 安装的测试数据库ORACLE数据库软件并创建跟源数据库同名和数据库SID并修改数据库DBID跟源数据库DBID一样,创建跟源数据库服务器相同的数据文件

oracle rman异机恢复

  Oracle源主机 Oracle目标主机 主机平台 CentOS6.2(final) CentOs6.2(FInal) 主机名 vick rman IP地址 192.168.1.11 192.168.1.10 实例名字 orcl orcl Oracle版本 11.2.0.4 11.2.0.4 Oracle数据文件存储 filesystem filesystem 控制文件路径 /u01/app/oracle/oradata /u01/app/oracle/oradata 数据文件路径 /u01

Oracle 11g单实例RMAN恢复到Oracle 11g RAC

一.环境说明 操作系统版本: RHEL 6.5 x64 1. 源数据库服务器 Oracle版本: Oracle 11g 11.2.0.4 64位(单机)Oracle_SID: orcl db_name   : orcl 背景:一台生产oracle10g(10.2.0.5)数据库计划迁移到Oracle 11.2.0.4.0 RAC.1) 先oracle10g(10.2.0.5)升级到Oracle 11.2.0.4(过程略)2)再Oracle 11.2.0.4单实例迁移到Oracle 11.2.0.