zoukankan      html  css  js  c++  java
  • oracle rman 异机恢复pitr的具体步骤

    rman 使用备份集进行异机还原、恢复。大家应该清楚还原和恢复的差异。

    $ rman target  /

    /*
    测试用,发现测试失败,如果需要还原spfile时就很有用
    没有参数文件,在RMAN的命令下会生成一个DUMMY的实例
    RMAN> set dbid=1234567890;
    */
    启动数据库到nomunt状态

    RMAN> startup nomount pfile='/ebsfs/EBSPROD2/db/tech_st/11.2.0/dbs/initEBSPROD.ora';

    还原控制文件

    RMAN> run {
      ALLOCATE CHANNEL ch00 TYPE disk;
      restore controlfile to '/ebsfs/EBSPROD2/db/apps_st/data/cntrl01.dbf' from '/ebstar/ebsclonetar2/CTL_c-xxxxxxxx-04';
      restore controlfile to '/ebsfs/EBSPROD2/db/apps_st/data/cntrl02.dbf' from '/ebstar/ebsclonetar2/CTL_c-xxxxxxxx-04';
      restore controlfile to '/ebsfs/EBSPROD2/db/apps_st/data/cntrl03.dbf' from '/ebstar/ebsclonetar2/CTL_c-xxxxxxxx-04';
      RELEASE CHANNEL ch00;
    }

    修改数据库到mount状态

    RMAN> alter database mount;

    效验备份集

    RMAN> crosscheck backupset;

    删除备份集

    RMAN> delete expired backup;

    注册本地目录,一定要最后一个’/’

    RMAN>catalog start with '/ebstar/ebsclonetar2/';

    做还原的检查

    RMAN> run{
       ALLOCATE CHANNEL ch00 TYPE disk;
       restore database preview summary;
       RELEASE CHANNEL ch00;
    }
    
    Media recovery start SCN is xxxxxxxx
    Recovery must be done beyond SCN xxxxxxxx to clear datafile fuzziness
    Finished restore at xx-xxx-xx
    
    released channel: ch00

    新开一个shell会话,拼接还原SQL

    $ Sqlplus /nolog 
    
    SQL> conn / as sysdba;
    Connected.
    
    SQL> set lines 500;
    SQL> set pages 500;
    
    SQL> select 'set newname for datafile '''||dd.name||''' to '''||replace(replace(dd.name,'/EBSPROD/','/EBSPROD2/'),'/ebsfs2/','/ebsfs/')||''';' as set_dbname
    from v$datafile dd
    where 1=1
    order by dd.name
    ; 

    还原数据库,一般开4个channel是比较快了。如果io不错,可以开6个、8个channel试试。
    把上面输出的语句粘贴到下面 ———- 处

    RMAN> run{
      ALLOCATE CHANNEL ch00 TYPE disk;
      ALLOCATE CHANNEL ch01 TYPE disk;
      ALLOCATE CHANNEL ch02 TYPE disk;
      ALLOCATE CHANNEL ch03 TYPE disk;
      ----------
      ----------
      restore database;
      switch datafile all;
      RELEASE CHANNEL ch00;
      RELEASE CHANNEL ch01;
      RELEASE CHANNEL ch02;
      RELEASE CHANNEL ch03;
    }

    尽可能多的应用归档,切记不要贸然打开数据库

    RMAN> run{
      ALLOCATE CHANNEL ch00 TYPE disk;
      recover database ;
      RELEASE CHANNEL ch00;
    }
    
    或者指定一个时间点
    RMAN> run{
      ALLOCATE CHANNEL ch00 TYPE disk;
      set until time "to_date('2006-12-01 15:00:00','yyyy-mm-dd hh24:mi:ss')";
      recover database ;
      RELEASE CHANNEL ch00;
    }
    

    结束后会报一个ora错误提示无法找到指定的归档文件
    这时可以从源库拷贝生成的归档文件

    再次注册本地目录,一定要最后一个’/’

    RMAN> catalog start with '/ebstar/ebsclonetar2/';
    RMAN> list backup summary;
    RMAN> list backup ;

    再次恢复数据库

    RMAN> run{
      ALLOCATE CHANNEL ch00 TYPE disk;
      recover database ;
      RELEASE CHANNEL ch00;
    }

    新开一个sqlplus会话,修改文件

    sqlplus /nolog
    
    SQL*Plus: Release 11.2.0.1.0 Production on Mon Feb 24 09:34:38 2016
    
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    
    SQL> conn / as sysdba;
    Connected.
    
    SQL> select instance_name,status from v$instance;
    
    
    SQL> set lines 500;
    SQL> set pages 500;
    
    SQL> select 'alter database rename file '''||dd.file_name||''' to '''||replace(replace(dd.file_name,'/EBSPROD/','/EBSPROD2/'),'/ebsfs2/','/ebsfs/')  ||''';' as alter_tmpname
    from (
          select name as file_name from v$tempfile
          union all
          select member as file_name from v$logfile l 
          ) dd
    Order by dd.file_name

    拷出来执行就行了

    打开数据库

    SQL> select instance_name,status from v$instance;
    
    SQL> alter database open resetlogs;

    调整TEMP 表空间

    select 'alter database tempfile '''||dtf.file_name||''' autoextend on next 100m maxsize 30g; ', dtf.*
    from dba_temp_files dtf
    where 1=1
    ;

    关闭数据库的归档模式

    如果源数据库是RAC,目标恢复机是单实例的话还需要做如下操作

    禁止thread

    SQL> select thread#,status,enabled from v$thread;
    SQL> alter database disable thread 2;

    删除被禁止thread 的 logfile group

    SQL> select group#,thread#,archived,status from v$log;
    SQL> alter database clear unarchived logfile group 5;
    SQL> alter database drop logfile group 5;

    清除多余的undo

    SQL> select name from v$tablespace where name like 'UNDO%';
    SQL> show parameter undo_tablespace;
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    undo_tablespace                      string      UNDOTBS1
    
    SQL> drop tablespace undotbs2 including contents and datafiles;
    
    Tablespace dropped.
    

    再检查tnsnames.ora 及 listener.ora

  • 相关阅读:
    [ZROI 9.16模拟赛] Tutorial
    [ZROI 9.15模拟赛] Tutorial
    [USACO 2017 Open Gold] Tutorial
    [USACO 2017 Feb Gold] Tutorial
    [USACO 2017 Jan Gold] Tutorial
    [BZOJ 1208] 宠物收养所
    [BZOJ 1500] 维护序列
    多表查询
    sql查询语句查询顺序
    单表查询
  • 原文地址:https://www.cnblogs.com/ctypyb2002/p/9793072.html
Copyright © 2011-2022 走看看