我们在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:

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:

由于源库和目标库的路径不相同,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;

[oracle@scpdb rmanbak]$ orapwd file='$ORACLE_HOME/dbs/orapwscp'  password='abc123!@#'  entries=3

关于密码文件,要注意文件名格式  orapw$ORACLE_SID  (注意不需要后缀名),具体请参照Oracle官方文档:
https://docs.oracle.com/cd/B28359_01/server.111/b28310/dba007.htm
本文转自:http://www.cnblogs.com/wqswjx/p/5485817.html

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

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

  1. Oracle RMAN 恢复数据库到不同主机(一)

    一.RMAN 备份的内容 RMAN做数据库全备时包含了 数据文件.归档日志.控制文件和参数文件和备份日志,如下: arch_20160223_08qukp2t_1_1  arch_20160223_0 ...

  2. oracle rman恢复数据库 方式恢复到异地数据库

    目的:从某个环境中,获取相关文件,放到异地机器使用rman 恢复.   情况说明:XX系统使用的是oracle数据库,现已从服务器拉下来相关文件,依靠这些文件来早本地的测试机上恢复数据库,方便进行数据 ...

  3. 使用RMAN恢复数据库

    使用RMAN恢复数据库 由于需要搭建一个测试环境,把上周末的一个全备拿出来做恢复,首先备份一下测试库上现有的重要表: exp banping/bangping@ERPTEST file=f:\2009 ...

  4. oracle RMAN复制数据库

    列出创建副本数据库的目的 • 选择用于复制数据库的方法 • 使用RMAN 复制数据库 • 使用RMAN 备份复制数据库 • 基于正在运行的实例复制数据库   使用副本数据库 • 使用副本数据库可执行以 ...

  5. Oracle RMAN 恢复控制文件到指定的路径

    Oracle 数据库通过RMAN恢复控制文件到指定的路径 --------------------------------------------------------- 先查询备份集信息,再指定备 ...

  6. Oracle Rman恢复

    (转自:http://blog.chinaunix.net/uid-14779297-id-1988309.html) RMAN的基本概念 Target Database:就是需要RMAN对其进行备份 ...

  7. linux 6.4平台利用rman迁移oracle 11g r2数据库

    测试环境分别在虚拟机安装A,B主机 系统:linux 6.4, 数据库:oracle 11g r2 A主机:安装oracle 11g r2数据库 B主机:只安装oracle 11g r2软件 第一步, ...

  8. 使用 RMAN 同步数据库

    使用 RMAN同步数据库 使用 RMAN 同步数据库 一.概述 二 操作步骤 (一).把生产库置为归档模式 (二).启动rman做数据库0级备份 (三).修改生产库数据库到未归档 (四).拷贝备份集到 ...

  9. oracle备份恢复之rman恢复到异机

    注意事项: 1 此处实验环境为同平台,同字节序,同版本,源机器和目标机器相同的目录结构. 2 目标机器只需要安装oracle数据库软件即可. 3 第一次利用备份恢复测试环境,之后从源机器拷贝备份到目标 ...

随机推荐

  1. Java基础——ArrayList与LinkedList(二)

    今天练习ArrayList与LinkedList,在网上看到有关它俩应用效率的题型.觉得很有价值,保留一下. import java.util.ArrayList; import java.util. ...

  2. centos 中设置网卡等相关参数

    转:Centos启动和禁用网卡命令 ifup.ifdown:linux命令 实时地手动修改一些网络接口参数,可以利用ifconfig来实现,如果是要直接以配置文件,在  /etc/sysconfig/ ...

  3. 221. 链表求和 II

    假定用一个链表表示两个数,其中每个节点仅包含一个数字.假设这两个数的数字顺序排列,请设计一种方法将两个数相加,并将其结果表现为链表的形式. 样例 样例 1: 输入t:6->1->7 2-& ...

  4. java中那些类是线程安全的?

    Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...

  5. 深入理解Java虚拟机--阅读笔记二

    垃圾收集器与内存分配策略 一.判断对象是否已死 1.垃圾收集器在对堆进行回收前,要先判断对象是否已死.而判断的算法有引用计数算法和可达性分析算法: 2.引用计数算法是给对象添加引用计数器,有地方引用就 ...

  6. C#进行数据筛选(二)

    这里介绍LINQ+Lambda表达式进行数据筛选的方式 这里是第一种方式,还是使用了if条件语句去判断,根据选择的条件去筛选出我所需要的数据 public GxAnaly SelectDay(stri ...

  7. php+redis实战留言板(todolist)与互粉功能

    目的:通过留言板(todolist)与互粉功能,掌握php操作redis的方法 相关数据操作命令 1,keys * 查看数据库所有的key 2,type + key: 如 type uid     查 ...

  8. mysql 添加用户

    CREATE USER 'user_name'@'%' IDENTIFIED BY '12345';      -- %  代表所有ip可以访问 GRANT all ON *.* TO 'user_n ...

  9. C++调用IDL程序的做法(三)

     作者:朱金灿 来源:http://blog.csdn.net/clever101 在C++调用IDL程序的做法(二)一文中介绍了如何动态创建IDLDrawWidgetControl的做法.假如我 ...

  10. linux下安装jenkins实现自动化部署

    安装 开始 1.安装之前,必须先安装JDK 可以参考  http://www.cnblogs.com/ericli-ericli/p/7070874.html 2.使用相关命令: wget -q -O ...