• RMAN数据库异机迁移步骤


    --RMAN数据库异机迁移步骤
    ----------------------------2013/09/28
    测试环境:AIX+ora11g
     
    一. source数据库准备。
     
    1.获取数据文件编号和路径
     
    SQL> select file_id,file_name from dba_data_files order by file_id;
     
       FILE_ID FILE_NAME
    ---------- ------------------------------------------------------------
             1 /u01/app/oracle/oradata/august/august/system01.dbf
             2 /u01/app/oracle/oradata/august/august/sysaux01.dbf
             3 /u01/app/oracle/oradata/august/august/undotbs01.dbf
             4 /u01/app/oracle/oradata/august/august/users01.dbf
     
     
    2.获取临时文件编号和路径
     
    SQL> select file#, name from v$tempfile;
     
         FILE# NAME
    ---------- --------------------------------------------------
             1 /u01/app/oracle/oradata/august/august/temp01.dbf
     
     
    2.获取在线日志文件组和路径
     
    SQL> select group#,member from v$logfile;
     
        GROUP# MEMBER
    ---------- ------------------------------------------------------------
             3 /u01/app/oracle/oradata/august/august/redo03.log
             2 /u01/app/oracle/oradata/august/august/redo02.log
             1 /u01/app/oracle/oradata/august/august/redo01.log
     
     
    二. source数据库备份。
     
    1. rman备份脚本
     
    run {
    Allocate channel rman_1 type disk;
    Allocate channel rman_2 type disk;
    Allocate channel rman_2 type disk;
     
    sql ‘alter system switch logfile’;
    backup database format ‘/~dir/df_%T_%U.dbf’;                --备份数据文件
    backup current controlfile format ‘/~dir/cf_%T_%U.ctf’;     --备份控制文件
    backup spfile format ‘/~dir/sp_%T_%U.sp’;                   --备份参数文件
    sql ‘alter system archive log current’;                 --归档备份期间日志,手动添加到备份集中。
     
    release channel rman_1;
    release channel rman_2;
    release channel rman_3;
     
    }
     
    备份归档日志到备份集中。
     
     
    2. FTP传输备份介质到异机。
     
     
    三. 目标数据库异机恢复。
     
    1. 恢复参数文件
     
    设置目标实例名环境变量,启动rman连接。
     
    [Oracle@localhost ~]$ export ORACLE_SID=ors
    [Oracle@localhost ~]$ rman target /
     
    Recovery Manager: Release 11.2.0.1.0 - Production on Fri Sep 27 20:13:47 2013
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    connected to target database (not started)
     
    启动到实例到nomount下。
     
    RMAN> startup nomount;
     
    startup failed: ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initors.ora'
    starting Oracle instance without parameter file for retrieval of spfile
    Oracle instance started
     
    Total System Global Area     159019008 bytes
     
    Fixed Size                     1335192 bytes
    Variable Size                 75497576 bytes
    Database Buffers              79691776 bytes
    Redo Buffers                   2494464 bytes
     
    RMAN> quit
    Recovery Manager complete.
     
    [Oracle@localhost ~]$ rman target /
     
    Recovery Manager: Release 11.2.0.1.0 - Production on Fri Sep 27 20:16:56 2013
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    connected to target database: DUMMY (not mounted)
     
    RMAN>
    可以看到这里没有参数文件,rman启动连接到了DUMMY实例。(AIX平台上会报错,不会自动连接到DUMMY实例
     
     
    à*如果没能自行连接到DUMMY实例,可以按照如下方式恢复参数文件。
     
    1).如果整个数据库环境没有其他实例,则先不设置ORACLE_SID启动空实例。
    export ORACLE_SID=      --或者直接不写
    rman target /
    startup nomount;            --将启动dummy实例到nomount
     
    2). 如果环境中有其他实例,则先连接到其他实例的rman。
    export ORACLE_SID=cospndb;
    rman target /
               
     
     
    à连接到可用的rman后,恢复spfilepfile
     
    SPFILE
    RMAN> restore spfile from ‘传输过来的参数文件备份片路径和文件名’;
     
    PFILE
    RMAN> restore spfile to pfile ‘目标pfile的存储路径和文件名’ from ‘传输过来的参数文件备份片路径和文件名’;
     
    *建议先恢复参数文件PFILE,因为要做出修改,等一切都修改完成后,再由PFILE创建SPFILE
    SQL> create spfile from pfile;
     
     
    2. 修改参数文件中,对应的目录信息,并根据参数文件信息,创建系统中没有的目录,注意目录权限(oracle)。
     
    3. 有了修改好的参数文件,我们可以将rman退出DUMMY实例或者别的实例,启动链接到欲恢复的实例。
     
    export ORACLE_SID=ors;
    rman target /       --将连接到此实例
     
    à利用参数文件打开实例到nomount模式。
     
    RMAN> startup force nomount pfile=‘上一个步骤恢复回来并修改的参数文件路径和文件名

    重要:根据修改好的pfile创建新的spfile。 RMAN> create spfile from pfile;
    原因:下次重启oracle的时候,oracle优先用spfile打开数据库,如果spfile还是旧的话,那么就会报错,打不开数据库。
     
    4. 恢复控制文件
     
    RMAN> restore contorlfile from ‘传输过来的控制文件备份片路径和文件名        --恢复控制文件到参数文件指定目录
     
     
    5. 由控制文件,将数据库打开到mount模式。
     
    RMAN> alter database mount;
     
     
    6. 恢复数据库数据文件。
     
    根据实际环境设置新的数据文件恢复目录,这里要使用我们之前准备的source数据库文件结构信息。
     
    RMAN>  run {
    set newname for datafile  1 to  "/u01/oradata/system01.dbf";
    set newname for datafile  2 to  "/u01/oradata/sysaux01.dbf";
    set newname for datafile  3 to  "/u01/oradata/undotbs01.dbf";
    set newname for datafile  4 to  "/u01/oradata/users01.dbf";
    restore database;
    switch datafile all;
    }
     
    switch datafile all的说明:
    -------------------------------------------------------------------
    对于nocatalog 模式下,rman备份的信息是保存在控制文件里的,包括文件的路径信息。 这里的switch datafile all的作用,就是更新控制文
    件里的信息。
    -------------------------------------------------------------------
     
    7. 数据库介质恢复
     
    SQL> recover database using backup controlfile until cancel;
     
    --指定归档日志目录
    --cancel
    完成介质恢复
     
    注意:完成介质恢复后就可以打开数据库了alter database open resetlogs;
    需要说明的就是:open resetlogs 之后,自动在原来默认的路径创建了temp 表空间和online redo 日志文件。
    为了方便起见,我建议先在controlfile中进行这些目录的更改。
     
    8. 更改temp表空间目录
    SQL> alter database rename file '/u01/app/oracle/oradata/august/august/temp01.dbf' to '/u01/oradata/temp01.dbf';
    Database altered.
     
    9. online redo log的处理
     
    方案1: 在alter database open resetlogs之前更改contorlfile中的路径情况。
     
    SQL> alter database rename file '/dir_old/redo01.log' ,'/dir_old/redo02.log','/dir_old/orcl/redo03.log' to '/dir_new/redo01.rdo','/dir_new/redo02.rdo','/dir_new/redo03.rdo' ;
     
     
    ----修改完临时文件和在线redo日志文件后,就可以打开数据库了。< SQL> alter database open resetlogs; >
     
    方案2:采用DAVE的,打开数据库后再修改。
     
    SQL> alter database open resetlog;
     
    SQL> select group#,bytes/1024/1024||'M',status from v$log;
        GROUP# BYTES/1024/1024||'M'                      STATUS
    ---------- ----------------------------------------- ----------------
             1 50M                                       INACTIVE
             2 50M                                       CURRENT
             3 50M                                       UNUSED
    SQL> select group#,member from v$logfile;
        GROUP# MEMBER
    ---------- ---------------------------------------------------------------------
             3 /u01/app/oracle/oradata/dave/redo03.log
             2 /u01/app/oracle/oradata/dave/redo02.log
             1 /u01/app/oracle/oradata/dave/redo01.log
     
    oracle 至少有2redo log 所以我们可以将已经完成归档的redo drop掉, 重新创建。
     
    SQL> alter database drop logfile group 3;
    Database altered.
    SQL> alter database add logfile group 3 ('/u01/oradata/redo03.log') size 50m;
    Database altered.
    SQL> alter system switch logfile;
    System altered.
    SQL>  select group#,bytes/1024/1024||'M',status from v$log;
     
        GROUP# BYTES/1024/1024||'M'                      STATUS
    ---------- ----------------------------------------- ----------------
             1 50M                                       INACTIVE
             2 50M                                       ACTIVE
             3 50M                                       CURRENT
     
    SQL> alter database drop logfile group 1;
    Database altered.
    SQL> alter database add logfile group 1 ('/u01/oradata/redo01.log') size 50m;
    Database altered.
    SQL> alter system switch logfile;
    System altered.
    SQL> alter database drop logfile group 2;
    Database altered.
    SQL> alter database add logfile group 2 ('/u01/oradata/redo02.log') size 50m;
    Database altered.
     
    SQL> select group#,member from v$logfile;
        GROUP# MEMBER
    ---------- ---------------------------------------------------------------------
             3 /u01/oradata/redo03.log
             2 /u01/oradata/redo02.log
             1 /u01/oradata/redo01.log
     
    (2)处理temp 临时表空间
    SQL> select name from v$tempfile;
    NAME
    --------------------------------------------------------------------------------
    /u01/app/oracle/oradata/dave/temp01.dbf
     
    --表空间offline
    SQL> alter database tempfile '/u01/app/oracle/oradata/dave/temp01.dbf' offline;
    Database altered.
     
    --在OS 级别移动temp 的数据文件
    SQL> !mv /u01/app/oracle/oradata/dave/temp01.dbf /u01/oradata/temp01.dbf
     
    --修改控制文件中temp文件的信息
    SQL> alter database rename file '/u01/app/oracle/oradata/dave/temp01.dbf' to '/u01/oradata/temp01.dbf';
    Database altered.
     
    --temp 表空间online
    SQL> alter database tempfile '/u01/oradata/temp01.dbf' online;
    Database altered.
     
    --验证
    SQL> select name from v$tempfile;
    NAME
    --------------------------------------------------------------------------------
    /u01/oradata/temp01.dbf
     
     
     
     
     
    --------------------------------------------
    异常问题解答
    --------------------------------------------
     
    1. 如果没有更改online redo log目录的情况下打开了数据库,但是数据库在新环境中有没有这个目录,导致不能创建online redo log,oracle将当做日志损坏处理,导致数据库无法打开。
     
    解决办法:
     
    修改controlfile中的online redo log路径。
    SQL> alter database rename file '/dir_old/redo01.log' ,'/dir_old/redo02.log','/dir_old/orcl/redo03.log' to '/dir_new/redo01.rdo','/dir_new/redo02.rdo','/dir_new/redo03.rdo' ;
     
     
    重建在线日志,对于不是current redo的日志文件,用clear命令清除。
    SQL> alter database clear logfile group m;
    SQL> alter database clear logfile group n;
     
    如果是当前current redo日志组文件,由于我们是恢复的数据库,很显然当前日志组并没有未决的事务信息,使用命令
    SQL> alter database clear unarchived logfile group x;
    来重建。
     
     
    接着就可以打开数据库
     
    alter database open resetlogs;
     
     
    2. AIX磁盘不足,扩容。
     
    使用命令 # chfs -a size=+78G /oracle/BWP/oraarch
    意思是给/oracle/BWP/oraarch增加78G的空间(注意G是大写)
     
    3. 如果在没有更改temp file目录的情况下打开了数据库(alter database open resetlogs),但是在旧的目录上又没能成功创建temp file。

    此时,更改database到mount下。修改controlfile中的tempfile信息。

    SQL> alter database rename file '/orasvr/oradata/rsdp/dat/ors/temp01.dbf' to '/orasvr/oradata/cmb/dat/ors/temp01.dbf';

    然后重新打开数据库即可。

    这里应用的oracle 10g后的新特性,tempfile会自动重建。
     
    4. 如果ORACLE运行中报错ORA-25153:Temporary tablespace is empty.

    解决办法就是:添加tempfile,原有的tempfile可能损坏或丢失,在dba_temp_file中查不到此tempfile,但是对应路径我们又能看到此文件,我们可以简单的重新添加。

    SQL> alter tablespace temp add tempfile 'D:APPHUJIEORADATAAUGUSTTEMP01.DBF';

     
     
     
     
     
     
  • 相关阅读:
    .net WebApi中使用swagger
    HTTP Error 503. The service is unavailable
    python3消费rocketmq
    docker安装部署showdoc
    EasyMock.replay()有什么用
    java.lang.IllegalStateException: 1 matchers expected, 5 recorded.
    io.spring.platform继承方式和import方式更改依赖版本号的问题
    spring-boot-dependencies、spring-boot-starter-parent、io.spring.platform详解
    springboot依赖的一些配置:spring-boot-dependencies、spring-boot-starter-parent、io.spring.platform
    一个最简单的springboot
  • 原文地址:https://www.cnblogs.com/jackhub/p/3344128.html
Copyright © 2020-2023  润新知