有时候需要将大的数据库发布到客户现场或转移机器时,不得不考虑在异机上恢复已经调整、测试好的库。 dumpdp 全备的方法虽然易用,但在处理对象、索引、空间的时候异常的出错,比如:见有些公司,建表、索引、对象...都是指定了 nologging,dumpdp恢复是默认是指定logging,dumpdp 也没有那么神说还要帮你去检测这些事情,结果一大堆的错误创建失败,几十个动动手改改无所谓,上百个伤不起。所以理想些还是选择 rman 备份恢复。
异机上恢复前准备一个全备或零级备份(也可以用增量备份,但你要把包括从零级备份以来的备份都准备齐全),介意备份,在服务端运行如下代码备份数据库:

run
{
allocate channel dev type disk;
allocate channel dev1 type disk;
backup incremental level 0 database
format 'e:\backup\%d_%s_%U_%T.bkp'
tag 'db_incr0';
backup archivelog all
format 'E:\backup\arc_%d_%U_%T.arc'
tag 'db_arc_all';
backup archivelog from time 'sysdate-2'
tag 'db_arc_2days'
format 'e:\backup\arc_%d_%U_2days_%T.arc';
backup current controlfile
format 'e:\backup\%d_%U_contr_T.bkp'
tag 'db_controlfile';
release channel dev;
release channel dev1;
}

以上脚本,首先进行一个零级的数据库备份,指定存储路径和标记,然后对当前数据库的归档日志进行全备,完成后在对2天以来的归档日志进行备份,保证有两份归档日志备份;最后备份当前的控制文件,为什么要备份控制文件,备份数据库的时候已经自动备份一次了而且还有恢复目录?根据我个人的经验,主要出于以下缘故:
1.如果有恢复目录,那么备份信息最终会被保存到恢复目录和控制文件,如果没有恢复目录,只保存到控制文件,而归档文件又是后备份的(还原先前备份的控制文件时后面的归档备份信息并未被保存),很大程度异机恢复要靠控制文件,这样会造成异机恢复需要归档时有备份但找不到用不了;

2.异机恢复是有可能有许多别的原因,装载控制文件后恢复目录也会有出错。
所以出于各方面因素考虑,我认为还是在数据库备份、归档日志备份结束相关信息写入控制文件后备份一个控制文件,异机恢复是用它恢复。
备份结束后,进行相关验证检查:
1. 验证数据库可恢复性: restore database validate;
2.查看备份的数据文件:

list backup of database;
list backup of datafile 3;

3.查看备份归档日志:
3.1 查看所有备份归档日志: 

list backup of archivelog all;

3.2 根据归档日志序列查看备份归档日志: 

list backup of archivelog sequence 137;

3.3 查看某个序列到某个序列备份归档日志:

 list backup of archivelog sequence between 137 and 200;

3.4 根据时间查看备份归档日志: 

 list backup of archivelog from time '2013-10-06 14:00:00';
list backup of archivelog from time 'sysdate-2';

查看小于等于指定时间的备份归档日志:

list backup of archivelog until time '2013-10-06 16:00:00';

3.5 根据SCN 查看备份归档日志:

 list backup of archivelog from scn 407442698;

 查看小于等于指定SCN的备份归档日志:

list backup of archivelog until scn 407442698;

4. 查看备份的控制文件:

list backup of controlfile;

一切就绪,拷贝备份的数据文件、归档文件和pfile文件(手工创建一个,到别的机器上有可能要修改相应路径)到恢复的机器上相同路径下;

异机上恢复数据库:
1.恢复前要建立一个实例,可以用现有的(同一机器上可以有多个同名数据库,但只能有一个同名实例)
windows 平台dos下创建实例: oradim -new -sid orcl
2.根据机器环境修改手工创建的pfile(oracle环境路径、控制文件路径、诊断日志文件....),然后以sys用户进入sqlplus用修改后的pfile文件创建spfile 文件;
create spfile from pfile='dir\pfile.ora';
3.设置环境变量,启动数据库至 nomount 状态,进入 rman 管理器:
rman target /
4.还原控制文件: restore controlfile from 'e:\backup\....' to 'dir';
to 'dir' 未指定是默认使用 spfile上control_files 指定的路径;
5.装载控制文件: alter database mount; (装载控制文件时如果指定数据库名,则指定的数据库名要和spfile 文件中的db_name相同)
6.恢复数据库:

run
{
allocate channel dev type disk;
allocate channel dev1 type disk;
set newname for datafile 1 to 'e:\nsoa\SYSTEM01.dbf';
set newname for datafile 2 to 'e:\nsoa\SYSAUX01.DBF';
set newname for datafile 3 to 'e:\nsoa\TBS1.dbf';
set newname for datafile 4 to 'e:\nsoa\USERS01.DBF';
set newname for datafile 10 to 'F:\nsoa\FRDC_TABLESPACE.DBF';
set newname for datafile 11 to 'F:\nsoa\UNDOTBS02.DBF';
set newname for datafile 12 to 'F:\nsoa\UNDOTBS01.DBF';
set newname for datafile 15 to 'F:\nsoa\SYWU.DBF';
restore database;
switch datafile all;
recover database;
sql 'alter database open resetlogs';
release channel dev;
release channel dev1;
}

对于新的环境,物理路径与控制文件中数据文件的路径相同时无需进行任何操作,可 restore;
如果数据文件路径需要变更,使用 set newname for datafile 1 to 'dir' 方式重新定义,switch datafile all 的意思是切换控制文件中存储的信息(向控制文件表明:我已经重新定义了数据文件路径,请帮我更新过来);switch datafile all 和restore database 的位置不能写错,一定要遵循先 restore 后switch;

recover database 命令会根据当前 restore 后的数据库状态,确认是否需要恢复,然后从控制文件存储的备份归档日志文件中恢复相应归档日志到相应路径下(默认为spfile 中指定的db_recovery_file_dest 路径下)恢复数据库,恢复完成后自动删除该文件;该步骤有可能会失败,需要备份后数据库运行的当前未归档日志。
sql 'alter database open resetlogs' 命令向数据库发出打开的请求(这里有个问题,如果控制文件中日志文件路径在新环境中不存在,打开和新建会失败);处理方法:
1.查询出当前控制文件中记录的日志文件路径: select group#,member from v$logfile;
2.重命名日志文件路径: alter database rename file '...' to '....';
3.执行alter database open resetlogs 打开数据库;
打开数据后执行相关表空间、数据文件...检测,进行一个数据库全备。 

ORACLE 异机恢复的更多相关文章

  1. rman恢复方案和oracle异机恢复

    这篇文章主要介绍了rman恢复方案和oracle异机恢复,需要的朋友可以参考下 注:①恢复的前提是已经做好备份②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复不完全恢复数 ...

  2. 使用NBU进行oracle异机恢复

    windows平台的异机恢复,目录不同 1.异机环境准备安装oracle介质安装nbu客户端在异机主机的host文件中添加nbu server主机和原主机信息 2.恢复spfile文件 C:\> ...

  3. Oracle异机恢复

    RMAN异机恢复注意事项:1.RMAN 异机恢复的时候,db_name必须相同. 如果说要想改成其他的实例名,可以在恢复成功后,用nid 命令修改. 实例名的信息会记录到控制文件里,所以如果在恢复的时 ...

  4. oracle异机恢复测试

    (一)问题背景 最近在生产环境中,开发人员误操作,使用truncate将oracle数据库某个表的数据全部删除了,在删除之后,开发人员发现自己闯祸了,于是联系值班的DBA进行紧急数据恢复. 经过分析, ...

  5. oracle异机恢复参考官方文档

    How to use Rman Duplicate on ASM/RAC/OMF/Single Instance (Doc ID 840647.1) How to perform Rman dupli ...

  6. oracle异机恢复 open resetlogs 报:ORA-00392

    参考文档:ALTER DATABASE OPEN RESETLOGS fails with ORA-00392 (Doc ID 1352133.1) 打开一个克隆数据库报以下错误: SQL> a ...

  7. Hyper-V安装Oracle Linux6_4 Oracle db 12c并使用rman做异机恢复

    本文记录在Windows Server 2012 R2上安装Oracle Enterprise Linux 6.4以及使用RMAN进行进行异机恢复的过程. Windows服务器增加Hyper-V功能 ...

  8. 使用不同用户对Oracle数据库进行异机恢复,失败,错误:Backup file not found in NetBackup catalog

    最近做某数据库恢复演练,数据库版本是10.2.0.4,恢复控制文件一直报错,报错如下,经过反复折腾,原来恢复机上oracle用户不是oracle导致(我的是oraclev4),查看源库oracle用户 ...

  9. Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复

    Oracle 官网有关单实例迁移到RAC的一个步骤说明: How to Convert 10g Single-Instance database to 10g RAC using Manual Con ...

随机推荐

  1. Appium+python自动化23-Android夜神模拟器

    前言 Android SDK虽然也自带了模拟器,但是那速度会让你怀疑人生,并且不稳定经常卡死异常.夜神模拟器可以说是android模拟器里面的一个神器. 环境安装 1.官网下载地址:https://w ...

  2. lnmp环境应用实践

    LNMP 用户通过浏览器输入域名请求nginx web服务,如果请求时静态资源,则由nginx解析返回给用户:如果是动态请求(.php结尾),那么nginx就会把它通过FastCGI接口(生产常用方法 ...

  3. 将 .NET 任务作为 WinRT 异步操作公开

    转自:http://blogs.msdn.com/b/windowsappdev_cn/archive/2012/06/22/net-winrt.aspx 在博文深入探究 Await 和 WinRT ...

  4. B2B,ERP,SCM

    B2B: B2B电子商务平台是指一个市场的领域的一种,是企业对企业之间的营销关系.电子商务是现代B2B marketing的一种具体主要的表现形式.网商通过它将企业内部网,通过B2B网站与客户紧密结合 ...

  5. Python web框架 Tornado(一)基础学习

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

  6. Disconf实践指南:改造篇

    上一篇文章Disconf实践指南:使用篇介绍了如何在项目中应用disconf,虽然实现了分布式配置的实时刷新,但是我们希望能够去除所有的配置文件,把配置都交给disconf管理,本地只需要实现配置监听 ...

  7. 论XGBOOST科学调参

    XGBOOST的威力不用赘述,反正我是离不开它了. 具体XGBOOST的原理可以参见之前的文章<比XGBOOST更快--LightGBM介绍> 今天说下如何调参. bias-varianc ...

  8. JAVASCRIPT数据类型(值类型-引用类型-类型总览)

    值类型:也称为原始数据或原始值(primitive value). 这类值存储在栈(stack)中,栈是内存中一种特殊的数据结构,也称为线性表,栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最 ...

  9. Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例

    1.定义Demo类: package com.rhythmk.spring; public class User { public void Init () { System.out.println( ...

  10. RocketMQ初探(一)

    初学RocketMQ,认识一门新技术,还是哪三问:是什么?能干什么?怎么用? 消息中间件主要是实现分布式系统中解耦.异步消息.流量销锋.日志处理等场景. Rocketmq是阿里捐赠给Apache的.3 ...