zoukankan      html  css  js  c++  java
  • linux下仅仅有rman备份集的异机不同文件夹恢复

    昨天在客户那里做了一次rman异机的恢复,把生产库弄一份给測试库用,总库大概80G,总共花费了2个小时,当时客户的环境是windows 11.2.0.3,今天早晨在linux下又一次測试了一下,记录下来供大家參考

    环境:

    全部操作都是按主机名区分

    源库:

    主机名  bre1  实例名为bre1  数据文件文件夹在/u01/app/oradata下

    目标库:

    主机名 bre2   数据文件准备放在/bre1/oradata下

    废话不多说,以下是实际操作步骤

    1.在源库创建备份集,而且复制到目标库

    拷贝的文件夹可用和原来的备份的时候的文件夹一致,也能够不一致

    备份system表空间rman会自己主动备份參数文件和控制文件

    RMAN> backup database format '/home/oracle/%U.bak';
    
    Starting backup at 21-AUG-2014 10:03:35
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    input datafile file number=00001 name=/u01/app/oracle/oradata/bre1/system01.dbf
    input datafile file number=00002 name=/u01/app/oracle/oradata/bre1/sysaux01.dbf
    input datafile file number=00003 name=/u01/app/oracle/oradata/bre1/undotbs01.dbf
    input datafile file number=00005 name=/u01/app/oracle/oradata/bre1/test.dbf
    input datafile file number=00004 name=/u01/app/oracle/oradata/bre1/users01.dbf
    channel ORA_DISK_1: starting piece 1 at 21-AUG-2014 10:03:36
    channel ORA_DISK_1: finished piece 1 at 21-AUG-2014 10:03:51
    piece handle=/home/oracle/03pggb7o_1_1.bak tag=TAG20140821T100336 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    including current control file in backup set
    including current SPFILE in backup set
    channel ORA_DISK_1: starting piece 1 at 21-AUG-2014 10:03:52
    channel ORA_DISK_1: finished piece 1 at 21-AUG-2014 10:03:53
    piece handle=/home/oracle/04pggb87_1_1.bak tag=TAG20140821T100336 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
    Finished backup at 21-AUG-2014 10:03:53
    
    [oracle@bre2 ~]$ scp bre1:/home/oracle/03pggb7o_1_1.bak .
    The authenticity of host 'bre1 (192.168.56.45)' can't be established.
    RSA key fingerprint is 73:56:4c:3a:01:3f:50:c8:d8:3a:5d:d5:21:00:6a:fe.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'bre1,192.168.56.45' (RSA) to the list of known hosts.
    oracle@bre1's password: 
    03pggb7o_1_1.bak                                                                                     100%  336MB  37.3MB/s   00:09    
    [oracle@bre2 ~]$ scp bre1:/home/oracle/04pggb87_1_1.bak .
    oracle@bre1's password: 
    04pggb87_1_1.bak                                                                                     100% 9600KB   9.4MB/s   00:00  


    2.还原spfile,使用nomount打开数据库

    编辑一个最简单的pfile,仅仅有db_name就可以:

    [oracle@bre2 dbs]$ vi initbre1.ora
    [oracle@bre2 dbs]$ cat initbre1.ora 
    db_name=bre1

    然后就能够nomount打开数据库了:

    SQL> startup nomount;
    ORACLE instance started.
    
    Total System Global Area  229683200 bytes
    Fixed Size		    2251936 bytes
    Variable Size		  171967328 bytes
    Database Buffers	   50331648 bytes
    Redo Buffers		    5132288 bytes
    SQL> 

    再使用rman来恢复spfile:

    RMAN> restore spfile from '/home/oracle/backup/04pggb87_1_1.bak';
    
    Starting restore at 21-AUG-2014 9:39:31
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=171 device type=DISK
    
    channel ORA_DISK_1: restoring spfile from AUTOBACKUP /home/oracle/backup/04pggb87_1_1.bak
    channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
    Finished restore at 21-AUG-2014 9:39:32
    
    RMAN> 

    使用spfile来打理数据库试试

    [oracle@bre2 ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 21 10:08:01 2014
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup nomount;
    ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initbre1.ora'
    SQL> startup nomount;
    ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initbre1.ora'
    SQL> startup nomount;
    ORA-09925: Unable to create audit trail file
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 9925
    有非常多相关文件夹没有创建,能够使用strings spfilebre1.ora来查看一下spfile里面的内容,建好相关的文件夹,而且赋予权限。。这些都搞好后nomount打开数据库不再报错。

    3.恢复控制文件

    登陆到rman,控制文件还原的时候将还原到參数文件指定的位置,所以參数文件指定的控制文件文件夹必须存在,否则报错,比如以下一開始我没有创建就报错,后来创建完毕就不报错了,假设你想还原到其它地方,能够改动參数文件指定到对应地址。

    RMAN> restore controlfile from '/home/oracle/04pggb87_1_1.bak';
    
    Starting restore at 21-AUG-2014 10:26:14
    using channel ORA_DISK_1
    
    channel ORA_DISK_1: restoring control file
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 08/21/2014 10:26:15
    ORA-19870: error while restoring backup piece /home/oracle/04pggb87_1_1.bak
    ORA-19504: failed to create file "/u01/app/oracle/oradata/bre1/control01.ctl"
    ORA-27040: file create error, unable to create file
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 1
    
    RMAN> restore controlfile from '/home/oracle/04pggb87_1_1.bak';
    
    Starting restore at 21-AUG-2014 10:26:50
    using channel ORA_DISK_1
    
    channel ORA_DISK_1: restoring control file
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 08/21/2014 10:26:51
    ORA-19504: failed to create file "/u01/app/oracle/fast_recovery_area/bre1/control02.ctl"
    ORA-27040: file create error, unable to create file
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 1
    ORA-19600: input file is control file  (/u01/app/oracle/oradata/bre1/control01.ctl)
    ORA-19601: output file is control file  (/u01/app/oracle/fast_recovery_area/bre1/control02.ctl)
    
    RMAN> restore controlfile from '/home/oracle/04pggb87_1_1.bak';
    
    Starting restore at 21-AUG-2014 10:27:24
    using channel ORA_DISK_1
    
    channel ORA_DISK_1: restoring control file
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    output file name=/u01/app/oracle/oradata/bre1/control01.ctl
    output file name=/u01/app/oracle/fast_recovery_area/bre1/control02.ctl
    Finished restore at 21-AUG-2014 10:27:25

    4.mount数据库,注冊备份集

    重新启动数据库,直接就能够启动到mount

    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area  835104768 bytes
    Fixed Size		    2257840 bytes
    Variable Size		  503319632 bytes
    Database Buffers	  322961408 bytes
    Redo Buffers		    6565888 bytes
    Database mounted.
    SQL> 

    假设此时备份集所在文件文件夹改变,须要手工catalog注冊备份集,这里我们将拷过来的备份文件拷贝到/home/oracle/backup下,演示一下手工catalog备份集

    [oracle@bre2 ~]$ ls
    03pggb7o_1_1.bak  04pggb87_1_1.bak  pfile.ora  test
    [oracle@bre2 ~]$ mkdir backup
    [oracle@bre2 ~]$ mv *.bak backup
    [oracle@bre2 ~]$ ls backup
    03pggb7o_1_1.bak  04pggb87_1_1.bak
    
    RMAN> catalog backuppiece '/home/oracle/backup/03pggb7o_1_1.bak';
    
    Starting implicit crosscheck backup at 21-AUG-2014 10:32:10
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=10 device type=DISK
    Crosschecked 1 objects
    Finished implicit crosscheck backup at 21-AUG-2014 10:32:10
    
    Starting implicit crosscheck copy at 21-AUG-2014 10:32:10
    using channel ORA_DISK_1
    Finished implicit crosscheck copy at 21-AUG-2014 10:32:11
    
    searching for all files in the recovery area
    cataloging files...
    no files cataloged
    
    cataloged backup piece
    backup piece handle=/home/oracle/backup/03pggb7o_1_1.bak RECID=2 STAMP=856175531
    
    RMAN>  catalog backuppiece '/home/oracle/backup/04pggb87_1_1.bak';
    
    cataloged backup piece
    backup piece handle=/home/oracle/backup/04pggb87_1_1.bak RECID=3 STAMP=856175550

    5.使用set newname将数据文件还原到不同文件夹

    原来的数据文件文件夹在/u01/admin/oradata以下,我们将数据文件恢复到/bre1/oradata以下,%b的意思是仅仅获取文件名称,没有文件夹信息

    [root@bre2 ~]# mkdir -p /bre1/oradata
    [root@bre2 ~]# chown -R oracle:oinstall /bre1
    
    
    [oracle@bre2 ~]$ rman target /
    
    Recovery Manager: Release 11.2.0.4.0 - Production on Thu Aug 21 10:36:10 2014
    
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    
    connected to target database: BRE1 (DBID=2522432392, not open)
    
    run{
    allocate channel ch1 device type disk;
    set newname for database to '/bre1/oradata/%b';
    restore database;
    release channel ch1;
    6> }
    
    using target database control file instead of recovery catalog
    allocated channel: ch1
    channel ch1: SID=396 device type=DISK
    
    executing command: SET NEWNAME
    
    Starting restore at 21-AUG-2014 10:38:03
    
    channel ch1: starting datafile backup set restore
    channel ch1: specifying datafile(s) to restore from backup set
    channel ch1: restoring datafile 00001 to /bre1/oradata/system01.dbf
    channel ch1: restoring datafile 00002 to /bre1/oradata/sysaux01.dbf
    channel ch1: restoring datafile 00003 to /bre1/oradata/undotbs01.dbf
    channel ch1: restoring datafile 00004 to /bre1/oradata/users01.dbf
    channel ch1: restoring datafile 00005 to /bre1/oradata/test.dbf
    channel ch1: reading from backup piece /home/oracle/backup/03pggb7o_1_1.bak
    channel ch1: piece handle=/home/oracle/backup/03pggb7o_1_1.bak tag=TAG20140821T100336
    channel ch1: restored backup piece 1
    channel ch1: restore complete, elapsed time: 00:00:45
    Finished restore at 21-AUG-2014 10:38:48
    
    released channel: ch1
    
    
    数据文件都在了:
    [root@bre2 ~]# ls -l /bre1/oradata
    total 1564468
    -rw-r----- 1 oracle oinstall 629153792 Aug 21 10:38 sysaux01.dbf
    -rw-r----- 1 oracle oinstall 734011392 Aug 21 10:38 system01.dbf
    -rw-r----- 1 oracle oinstall  20979712 Aug 21 10:38 test.dbf
    -rw-r----- 1 oracle oinstall 209723392 Aug 21 10:38 undotbs01.dbf
    -rw-r----- 1 oracle oinstall   6561792 Aug 21 10:38 users01.dbf

    资料上说能够使用switch datafile all来直接改动控制文件里的文件文件夹,可是我试了一下貌似不行,还是须要在手工rename,以下是我手工改动控制文件里的数据文件文件夹,先看一下当前的数据文件文件夹

    SQL> select name from v$datafile;
    
    NAME
    --------------------------------------------------------------------------------
    /u01/app/oracle/oradata/bre1/system01.dbf
    /u01/app/oracle/oradata/bre1/sysaux01.dbf
    /u01/app/oracle/oradata/bre1/undotbs01.dbf
    /u01/app/oracle/oradata/bre1/users01.dbf
    /u01/app/oracle/oradata/bre1/test.dbf
    
    SQL> select name from v$tempfile;
    
    NAME
    --------------------------------------------------------------------------------
    /u01/app/oracle/oradata/bre1/temp01.dbf
    
    SQL> select member from v$logfile;
    
    MEMBER
    --------------------------------------------------------------------------------
    /u01/app/oracle/oradata/bre1/redo01.log
    /u01/app/oracle/oradata/bre1/redo02.log
    /u01/app/oracle/oradata/bre1/redo03.log

    我自己写了一个拼接sql来将数据文件文件夹做转换:

    select 'alter database rename file '''||name||''' to ''/bre1/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$datafile
    union all
    select 'alter database rename file '''||name||''' to ''/bre1/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$tempfile
    union all
    select 'alter database rename file '''||member||''' to ''/bre1/oradata'||substr(member,length(member)-INSTR(reverse(member),'/')+1,INSTR(reverse(member),'/'))||''';' from v$logfile
    ;

    select 'alter database rename file '''||name||''' to ''/bre1/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$datafile
    union all
    select 'alter database rename file '''||name||''' to ''/bre1/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$tempfile
    union all
    select 'alter database rename file '''||member||''' to ''/bre1/oradata'||substr(member,length(member)-INSTR(reverse(member),'/')+1,INSTR(reverse(member),'/'))||''';' from v$logfile
      6  ;
    
    'ALTERDATABASERENAMEFILE'''||NAME||'''TO''/BRE1/ORADATA'||SUBSTR(NAME,LENGTH(NAME)-INSTR(REVERSE(NAME),'/')+1,INSTR(REVERSE(NAME),'/'))||''';'
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    alter database rename file '/bre1/oradata/system01.dbf' to '/bre1/oradata/system01.dbf';
    alter database rename file '/bre1/oradata/sysaux01.dbf' to '/bre1/oradata/sysaux01.dbf';
    alter database rename file '/bre1/oradata/undotbs01.dbf' to '/bre1/oradata/undotbs01.dbf';
    alter database rename file '/bre1/oradata/users01.dbf' to '/bre1/oradata/users01.dbf';
    alter database rename file '/bre1/oradata/test.dbf' to '/bre1/oradata/test.dbf';
    alter database rename file '/u01/app/oracle/oradata/bre1/temp01.dbf' to '/bre1/oradata/temp01.dbf';
    alter database rename file '/bre1/oradata/redo01.log' to '/bre1/oradata/redo01.log';
    alter database rename file '/bre1/oradata/redo02.log' to '/bre1/oradata/redo02.log';
    alter database rename file '/bre1/oradata/redo03.log' to '/bre1/oradata/redo03.log';
    
    
    alter database rename file '/u01/app/oracle/oradata/bre1/system01.dbf' to '/bre1/oradata/system01.dbf';
    alter database rename file '/u01/app/oracle/oradata/bre1/sysaux01.dbf' to '/bre1/oradata/sysaux01.dbf';
    alter database rename file '/u01/app/oracle/oradata/bre1/undotbs01.dbf' to '/bre1/oradata/undotbs01.dbf';
    alter database rename file '/u01/app/oracle/oradata/bre1/users01.dbf' to '/bre1/oradata/users01.dbf';
    alter database rename file '/u01/app/oracle/oradata/bre1/test.dbf' to '/bre1/oradata/test.dbf';
    alter database rename file '/u01/app/oracle/oradata/bre1/redo01.log' to '/bre1/oradata/redo01.log';
    alter database rename file '/u01/app/oracle/oradata/bre1/redo02.log' to '/bre1/oradata/redo02.log';
    
    Database altered.
    
    SQL> 
    Database altered.
    
    SQL> 
    Database altered.
    
    SQL> 
    Database altered.
    
    SQL> 
    Database altered.
    SQL> 
    Database altered.
    
    SQL> 
    Database altered.
    
    SQL> alter database rename file '/u01/app/oracle/oradata/bre1/redo03.log' to '/bre1/oradata/redo03.log';
    
    Database altered.
    rename之后控制文件里的数据文件文件夹都已经改到了/bre1/oradata下,那么就能够进行恢复了。
    6.恢复数据库

    我这里是測试就没有恢复什么归档日志,假设是正式生产库,还须要恢复归档日志,可能还须要使用到CATALOG ARCHIVELOG 来注冊归档的备份集和在RMAN中使用
    RUN

      SET ARCHIVELOG DESTINATION TO '/home/oracle';
      RESTORE ARCHIVELOG all;       
    }    
    来还原出归档日志。
    或者还能够在controlfile中改动归档文件夹来恢复。恢复出归档日志之后,就能够进行数据库恢复。

    [oracle@bre2 ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 21 11:16:06 2014
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> recover database using backup controlfile until cancel;
    ORA-00279: change 830841 generated at 08/21/2014 10:03:36 needed for thread 1
    ORA-00289: suggestion : /arch1_42_851018056.dbf
    ORA-00280: change 830841 for thread 1 is in sequence #42
    
    
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    cancel
    Media recovery cancelled.
    SQL> alter database open resetlogs;
    
    Database altered.
    open 过程中可能会遇到ora-00392错误,
    解决的方法:
    使用SQL> alter database clear logfile group 2;
    到此恢复成功!

    总结:
    基本的难点是须要对rman比較熟悉,须要使用语句改动控制文件里的文件位置,否则会报错找不到相关文件。
    假设备份集的文件夹改变了,须要手工catalog注冊备份集到控制文件,而且rename file。

  • 相关阅读:
    asp.net实现页面的一般处理程序(CGI)学习笔记
    .NET下的状态(State)模式 行为型模式
    (插件Plugin)AssemblyLoader解决方案(插件开发)
    SQL基础编写基本的SQL SELECT 语句
    在查询语句中使用NOLOCK和READPAST(ZT)
    C# 3.0语言增强学习笔记(一)
    ram,rom,flash
    自动激活你的ActiveX控件
    用C#编写ActiveX控件(二)
    用C#编写ActiveX控件(一)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4308805.html
Copyright © 2011-2022 走看看