zoukankan      html  css  js  c++  java
  • Oracle RMAN 恢复数据库到不同主机(一)

    一、RMAN 备份的内容

    RMAN做数据库全备时包含了 数据文件、归档日志、控制文件和参数文件和备份日志,如下:

    arch_20160223_08qukp2t_1_1  arch_20160223_0bqukp92_1_1  ctl_c-3234695588-20160223-01  rmanbak-20160223-0852.log  scp_20160223_09qukp2u_1_1  scp_20160223_0aqukp2u_1_1

    二、测试环境

    OS:CentOS release 6.4 (Final)

    Database:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

    原平台与当前平台环境一致,但是oracle数据库目录结构不一致。

    三、开始恢复

    1、  确认原数据库的DBID(通过RMAN的备份日志,或者通过RMAN备份的控制文件名来识别),同时确认一下原数据库的实例名;

    2、 将RMAN备份的内容拷贝到目标数据库上;

    3、 设置好环境变量:

    [oracle@dg1 ~]$ export NLS_DATA_FORMAT='YYYY-MM-DD HH24:MI:SS'
    [oracle@dg1 ~]$ export ORACLE_SID=scp
    [oracle@dg1 ~]$ rman target /
    
    Recovery Manager: Release 12.1.0.2.0 - Production on Fri May 6 22:18:52 2016

    4、装载数据库并进行恢复

        A、装载数据库

    RMAN> set dbid=3234695588;
    
    executing command: SET DBID
    
    RMAN> startup nomount;
    
    startup failed: ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/dbs/initscp.ora'
    
    starting Oracle instance without parameter file for retrieval of spfile
    Oracle instance started
    

      B、先恢复spfile文件(或者是pfile文件,可以修改各项参数),因为在spfile 文件中包含了控制文件的位置

    RMAN> restore spfile to pfile '$ORACLE_HOME/dbs/initscp.ora' from '/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01';
    

    OR:

    RMAN> restore spfile to '$ORACLE_HOME/dbs/spfilescp.ora' from '/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01';
    

    C、根据pfile文件中的相关参数去修改本地系统目录,或者修改这个pfile文件来匹配本地系统中的路径和目录,我们选择后者

    需要修改:oracle_base、*.audit_file_dest、*.control_files、*.db_recovery_file_dest、*.db_recovery_file_dest_size、*.diagnostic_dest、*.log_archive_dest_1

    memory_target、undo_tablespace等。并在当前系统中创建好相关的目录和权限。

    [oracle@dg1 dbs]$ vim initscp.ora 
    
    scp.__data_transfer_cache_size=0
    scp.__db_cache_size=822083584
    scp.__java_pool_size=16777216
    scp.__large_pool_size=33554432
    scp.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
    scp.__pga_aggregate_target=654311424
    scp.__sga_target=1241513984
    scp.__shared_io_pool_size=50331648
    scp.__shared_pool_size=301989888
    scp.__streams_pool_size=0
    *.audit_file_dest='/u01/app/oracle/admin/scp/adump'
    *.audit_trail='db'
    *.compatible='12.1.0.2.0'
    *.control_files='/u01/app/oracle/oradata/scp/control01.ctl','/u01/app/oracle/fast_recovery_area/scp/control02.ctl'
    *.db_block_size=8192
    *.db_domain=''
    *.db_name='scp'
    *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
    *.db_recovery_file_dest_size=4560m
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=scpXDB)'
    *.log_archive_dest_1='LOCATION=/OracleArch'
    *.memory_target=1800m
    *.open_cursors=300
    *.processes=300
    *.remote_login_passwordfile='EXCLUSIVE'
    *.undo_tablespace='UNDOTBS1'

    D、从修改后的pfile文件启动数据库,进行控制文件的恢复

    RMAN> shutdown abort;
    RMAN> startup nomount pfile='$ORACLE_HOME/dbs/initscp.ora';
    RMAN> restore controlfile from '/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01';
    
    Starting restore at 06-MAY-16
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=243 device type=DISK
    
    channel ORA_DISK_1: restoring control file
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    output file name=/home/OracleData/scp/control01.ctl
    output file name=/home/OracleArch/fast_recovery_area/control02.ctl
    Finished restore at 06-MAY-16

    E、控制文件恢复后就可以mount数据库了

    RMAN> alter database mount;
    
    Statement processed
    released channel: ORA_DISK_1

    F、至此,控制文件已经恢复,数据库已经mount,所有的RMAN配置参数均已设置,您应该验证路径以确保它们适用于该主机。

    RMAN> show all;
    
    RMAN configuration parameters for database with db_unique_name SCP are:
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/orabackup/RmanBackupSet/20160223/ctl_%F';
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
    CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
    CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
    CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/12.1.0.2/dbs/snapcf_scp.f'; # default

    G、为了能让RMAN找到恢复文件的位置,我们有两种途径可以实现:一是修改RMAN配置以符合当前备份文件所在位置,其次是将RMAN备份文件拷贝到配置文件中设定的位置  (需要参考RMAN的备份日志)。在第一个方法中,为了让RMAN知道备份文件位置 /home/OracleBack/rmanbak ,我们使用catalog命令:

    RMAN> catalog start with '/home/OracleBack/rmanbak';
    
    Starting implicit crosscheck backup at 06-MAY-16
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=243 device type=DISK
    Crosschecked 4 objects
    Finished implicit crosscheck backup at 06-MAY-16
    
    Starting implicit crosscheck copy at 06-MAY-16
    using channel ORA_DISK_1
    Finished implicit crosscheck copy at 06-MAY-16
    
    searching for all files in the recovery area
    cataloging files...
    no files cataloged
    
    searching for all files that match the pattern /home/OracleBack/rmanbak
    
    List of Files Unknown to the Database
    =====================================
    File Name: /home/OracleBack/rmanbak/scp_20160223_09qukp2u_1_1
    File Name: /home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1
    File Name: /home/OracleBack/rmanbak/scp_20160223_0aqukp2u_1_1
    File Name: /home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01
    File Name: /home/OracleBack/rmanbak/arch_20160223_08qukp2t_1_1
    
    Do you really want to catalog the above files (enter YES or NO)? yes
    cataloging files...
    cataloging done
    
    List of Cataloged Files
    =======================
    File Name: /home/OracleBack/rmanbak/scp_20160223_09qukp2u_1_1
    File Name: /home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1
    File Name: /home/OracleBack/rmanbak/scp_20160223_0aqukp2u_1_1
    File Name: /home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01
    File Name: /home/OracleBack/rmanbak/arch_20160223_08qukp2t_1_1

    H、对备份集做交叉检查,否则还原数据库时可能会报错

    RMAN> crosscheck backup;
    
    using channel ORA_DISK_1
    crosschecked backup piece: found to be 'EXPIRED'
    backup piece handle=/orabackup/RmanBackupSet/20160223/arch_20160223_08qukp2t_1_1 RECID=8 STAMP=904553565
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/home/OracleBack/rmanbak/arch_20160223_08qukp2t_1_1 RECID=16 STAMP=911172456
    crosschecked backup piece: found to be 'EXPIRED'
    backup piece handle=/orabackup/RmanBackupSet/20160223/scp_20160223_0aqukp2u_1_1 RECID=9 STAMP=904553567
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/home/OracleBack/rmanbak/scp_20160223_0aqukp2u_1_1 RECID=14 STAMP=911172456
    crosschecked backup piece: found to be 'EXPIRED'
    backup piece handle=/orabackup/RmanBackupSet/20160223/scp_20160223_09qukp2u_1_1 RECID=10 STAMP=904553567
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/home/OracleBack/rmanbak/scp_20160223_09qukp2u_1_1 RECID=12 STAMP=911172456
    crosschecked backup piece: found to be 'EXPIRED'
    backup piece handle=/orabackup/RmanBackupSet/20160223/arch_20160223_0bqukp92_1_1 RECID=11 STAMP=904553762
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1 RECID=13 STAMP=911172456
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/home/OracleBack/rmanbak/ctl_c-3234695588-20160223-01 RECID=15 STAMP=911172456
    Crosschecked 9 objects

    I、通过控制文件获得表空间及数据文件列表

    RMAN> report schema;
    
    RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
    Report of database schema for database with db_unique_name SCP
    
    List of Permanent Datafiles
    ===========================
    File Size(MB) Tablespace           RB segs Datafile Name
    ---- -------- -------------------- ------- ------------------------
    1    0        SYSTEM               ***     /u01/app/oracle/oradata/scp/system01.dbf
    2    0        ZYTK_AC              ***     /u01/app/oracle/oradata/scp/zytk_ac01.dbf
    3    0        SYSAUX               ***     /u01/app/oracle/oradata/scp/sysaux01.dbf
    4    0        UNDOTBS1             ***     /u01/app/oracle/oradata/scp/undotbs01.dbf
    5    0        EXAMPLE              ***     /u01/app/oracle/oradata/scp/example01.dbf
    6    0        USERS                ***     /u01/app/oracle/oradata/scp/users01.dbf
    7    0        ZYTK_AC              ***     /u01/app/oracle/oradata/scp/zytk_ac02.dbf
    8    0        ZYTK_ID              ***     /u01/app/oracle/oradata/scp/zytk_id01.dbf
    9    0        ZYTK_ID              ***     /u01/app/oracle/oradata/scp/zytk_id02.dbf
    10   0        ZYTK_OP              ***     /u01/app/oracle/oradata/scp/zytk_op01.dbf
    11   0        ZYTK_OP              ***     /u01/app/oracle/oradata/scp/zytk_op02.dbf
    12   0        ZYTK_TEST01          ***     /u01/app/oracle/oradata/scp/zytk_test01.dbf
    
    List of Temporary Files
    =======================
    File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
    ---- -------- -------------------- ----------- --------------------
    1    60       TEMP                 32767       /u01/app/oracle/oradata/scp/temp01.dbf

    注意:restore 的时候不会对temp 表空间进行restore。所以等restore 之后,我们需要手工创建temp表空间。

        J、为了将数据文件恢复到不同于原来的目录结构中,必须编写脚本,重新命名数据文件的位置,最后进行全库的恢复。

      (如果数据文件路径和原来的相同则直接还原数据库

    run{
    set newname for datafile 1 to '/home/OracleData/scp/system01.dbf';
    set newname for datafile 2 to '/home/OracleData/scp/zytk_ac01.dbf';
    set newname for datafile 3 to '/home/OracleData/scp/sysaux01.dbf';
    set newname for datafile 4 to '/home/OracleData/scp/undotbs01.dbf';
    set newname for datafile 5 to '/home/OracleData/scp/example01.dbf';
    set newname for datafile 6 to '/home/OracleData/scp/users01.dbf';
    set newname for datafile 7 to '/home/OracleData/scp/zytk_ac02.dbf';
    set newname for datafile 8 to '/home/OracleData/scp/zytk_id01.dbf';
    set newname for datafile 9 to '/home/OracleData/scp/zytk_id02.dbf';
    set newname for datafile 10 to '/home/OracleData/scp/zytk_op01.dbf';
    set newname for datafile 11 to '/home/OracleData/scp/zytk_op02.dbf';
    set newname for datafile 12 to '/home/OracleData/scp/zytk_test01.dbf';
    restore database;
    switch datafile all;  
    }

    对switch datafile all命令的说明:

    --对于nocatalog 模式下,rman备份的信息是保存在控制文件里的,包括数据文件的路径信息。 这里的  switch datafile all  的作用,就是更新控制文件里的信息。如果不更新控制文件的话,则进行recover操作时还在原来的位置找文件。

    K、还原数据库以后,进行 recover 操作

    RMAN> recover database;
    
    Starting recover at 06-MAY-16
    using channel ORA_DISK_1
    
    starting media recovery
    
    channel ORA_DISK_1: starting archived log restore to default destination
    channel ORA_DISK_1: restoring archived log
    archived log thread=1 sequence=148
    channel ORA_DISK_1: reading from backup piece /home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1
    channel ORA_DISK_1: piece handle=/home/OracleBack/rmanbak/arch_20160223_0bqukp92_1_1 tag=ZYTK_DB_FULL
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    archived log file name=/home/OracleArch/ArchiveLog/1_148_899483175.dbf thread=1 sequence=148
    unable to find archived log
    archived log thread=1 sequence=149
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 05/06/2016 23:53:58
    RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 149 and starting SCN of 3507749

      

      

      

  • 相关阅读:
    Android 开发 深入理解Handler、Looper、Messagequeue 转载
    Android 开发 Handler的基本使用
    Java 学习 注解
    Android 开发 AlarmManager 定时器
    Android 开发 框架系列 百度语音合成
    Android 开发 框架系列 Google的ORM框架 Room
    Android 开发 VectorDrawable 矢量图 (三)矢量图动画
    Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制
    Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图
    Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
  • 原文地址:https://www.cnblogs.com/wqswjx/p/5465760.html
Copyright © 2011-2022 走看看