zoukankan      html  css  js  c++  java
  • Linux平台下使用rman进行oracle数据库迁移

       
    实验目的:将oracle数据库从一台机器迁移到另外的一台机器(同为linux平台),设置为不同的路径,不同的实例名
    源端:
    ORACLE_BASE=/u01/app/oracle
    ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
    ORACLE_SID=test
    数据文件位置:/oradata/test
    目标端:
    ORACLE_BASE=/u02/app/oracle
    ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1
    ORALCE_SID=test2
    数据文件位置:/oradata2/test2
    注:两台主机非一台,但是主机名一致均为model.rhel5

    第一步:在源端取得备份数据

    查询一下MAI用户下的数据,做最后校验使用
    MAI@test > select * from tab;
    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    BONUS                          TABLE
    DEPT                           TABLE
    EMP                            TABLE
    SALGRADE                       TABLE
    TEST                           TABLE
    TEST01                         TABLE
    开始备份:
    $ oracle@model /mnt/hgfs/software/backup> rman target /
    RMAN> run{
    2> allocate channel c1 device type disk format '/mnt/hgfs/software/backup/%T_%U';
    3> backup database;
    4> backup current controlfile format '/mnt/hgfs/software/backup/%T_CTL_%U';
    5> backup spfile format '/mnt/hgfs/software/backup/%T_SPFILE_%U';
    6> release channel c1;
    7> }
    备份集信息:
    $ oracle@model /mnt/hgfs/software/backup> ls -lh
    total 304M
    -rwxrwxrwx 1 root root 594M Aug 29 20:31 20120829_02njsrtb_1_1*
    -rwxrwxrwx 1 root root 6.9M Aug 29 20:31 20120829_03njss0b_1_1*
    -rwxrwxrwx 1 root root 6.8M Aug 29 20:31 20120829_CTL_04njss0k_1_1*
    -rwxrwxrwx 1 root root  96K Aug 29 20:31 20120829_SPFILE_05njss0m_1_1*

    第二步:备端的准备
    1、安装数据库软件,基位置参考上文说明。
    2、创建相关的目录:
    $ oracle@model ~> env | grep ORACLE
    ORACLE_BASE=/u02/app/oracle
    ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1
    $ oracle@model ~> cd $ORACLE_BASE
    $ oracle@model /u02/app/oracle> mkdir flash_recovery_area
    $ oracle@model /u02/app/oracle> mkdir -p admin/test2
    $ oracle@model /u02/app/oracle> cd admin/test2
    $ oracle@model /u02/app/oracle/admin/test2> mkdir {a,b,c,d,u}dump

    第三步:开始恢复,此时恢复的实例名为test
    $ oracle@model ~> export ORACLE_SID=test
    $ oracle@model ~> rman target /
    RMAN> startup nomount
    1、恢复spfile:
    RMAN> restore spfile from '/mnt/hgfs/software/backup/20120829_SPFILE_05njss0m_1_1';
    RMAN> shutdown immediate;
    2、编辑参数文件,使参数中的相关路径变更为新路径
    $ oracle@model ~> sqlplus / as sysdba
    SYS@test > create pfile from spfile;
    编辑生成的$ORACLE_HOME/dbs/inittest.ora文件,将文件中的路径改为新的路径,即:
    /oradata/test/修改为/oradata2/test2/
    /u01/app/oracle/修改为/u02/app/oracle
    /u01/app/oracle/admin/test修改为/u02/app/oracle/admin/test2
    $ oracle@model ~> sqlplus / as sysdba
    SYS@test > create spfile from pfile;
    3、恢复控制文件:
    $ oracle@model ~> rman target /
    RMAN> startup nomount
    RMAN> restore controlfile from '/mnt/hgfs/software/backup/20120829_CTL_04njss0k_1_1';
    4、恢复数据文件:
    RMAN> alter database mount;
    RMAN> run {
    2> set newname for datafile 1 to '/oradata2/test2/system01.dbf';
    3> set newname for datafile 2 to '/oradata2/test2/undotbs01.dbf';
    4> set newname for datafile 3 to '/oradata2/test2/sysaux01.dbf';
    5> set newname for datafile 4 to '/oradata2/test2/users01.dbf';
    6> set newname for datafile 5 to '/oradata2/test2/example01.dbf';
    7> restore database;
    8> }
    5、重建控制文件,更新控制文件中的数据文件路径
    $ oracle@model ~> sqlplus / as sysdba
    SYS@test > alter database backup controlfile to trace;
    到$ORACLE_BASE/admin/udump中找到刚才生成的TRACE文件,复制出其中的创建文件集的片段,修改其中的路径信息为新的路径信息,备用
    SYS@test > shutdown immediate;
    SYS@test > startup nomount
    利用刚才修改过的控制文件创建脚本重建控制文件:
    SYS@test > CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS  ARCHIVELOG
      2      MAXLOGFILES 16
      3      MAXLOGMEMBERS 3
      4      MAXDATAFILES 100
      5      MAXINSTANCES 8
      6      MAXLOGHISTORY 292
      7  LOGFILE
      8    GROUP 1 '/oradata2/test2/redo01.log'  SIZE 50M,
      9    GROUP 2 '/oradata2/test2/redo02.log'  SIZE 50M,
     10    GROUP 3 '/oradata2/test2/redo03.log'  SIZE 50M
     11  -- STANDBY LOGFILE
     12  DATAFILE
     13    '/oradata2/test2/system01.dbf',
     14    '/oradata2/test2/undotbs01.dbf',
     15    '/oradata2/test2/sysaux01.dbf',
     16    '/oradata2/test2/users01.dbf',
     17    '/oradata2/test2/example01.dbf'
     18  CHARACTER SET ZHS16GBK
     19  ;
    SYS@test > alter database open resetlogs;
    至此,数据库已经能够正常启动了,但是此时的实例名以及数据库名均为test,需要将其更改为test2,继续向下走

    第四部分:修改实例名,以及数据库名

    相关内容可以参见先前的文章:ORACLE数据库实例的重命名( http://blog.sina.com.cn/s/blog_67be3b4501016dgu.html )
    SYS@test > shutdown immediate;
    SYS@test > startup mount
    修改数据文件、控制文件中的数据库名称,修改之后会关闭数据库
    SYS@test > !nid target=sys/oracle dbname=test2 logfile=/tmp/change_name2test2.log
    启动数据库,这个时候会报数据库名称不一致的错误,不去管他(ORA-01103: database name 'MAI' in control file is not 'TEST')
    SYS@test > startup mount
    将数据库名更新到spfile文件中
    SYS@test > alter system set db_name='test2' scope=spfile;
    SYS@test > create pfile from spfile;
    SYS@test > shutdown immediate;
    $ oracle@model ~> export ORACLE_SID=test2
    $ oracle@model ~> sqlplus / as sysdba
    SYS@test2 > startup pfile='/u02/app/oracle/product/10.2.0/db_1/dbs/inittest.ora'
    SYS@test2 > create spfile from pfile='/u02/app/oracle/product/10.2.0/db_1/dbs/inittest.ora';
    SYS@test2 > shutdown immediate;
    SYS@test2 > startup mount;
    SYS@test2 > create pfile from spfile;
    SYS@test2 > alter database open resetlogs;
    将ORACLE_SID=test2写入到oracle用户的.bash_profile文件中:
    $ oracle@model ~> echo export ORACLE_SID=test2 >> .bash_profile
    至此呢,数据库迁移才算是彻底的完成了。

    第五部分:最后的校验
    1、MAI用户验证:
    MAI@test2 > select * from tab;
    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    BONUS                          TABLE
    DEPT                           TABLE
    EMP                            TABLE
    SALGRADE                       TABLE
    TEST                           TABLE
    TEST01                         TABLE
    2、数据库名验证:
    SYS@test2 > select name,open_mode from v$database;
    NAME      OPEN_MODE
    --------- ----------
    TEST2     READ WRITE
    3、实例名验证:
    SYS@test2 > select instance_name,status from v$instance;
    INSTANCE_NAME    STATUS
    ---------------- ------------
    test2            OPEN
    4、进程验证:
    $ oracle@model ~> ps aux | grep ora_ | grep -v grep
    oracle   25592  0.0  1.2 261864 12756 ?        Ss   00:23   0:00 ora_pmon_test2
    oracle   25594  0.0  1.0 261252 11104 ?        Ss   00:23   0:00 ora_psp0_test2
    oracle   25596  0.0  1.3 261252 13848 ?        Ss   00:23   0:00 ora_mman_test2
    oracle   25598  0.0  1.3 263320 13708 ?        Ss   00:23   0:00 ora_dbw0_test2
    oracle   25600  0.0  2.9 276804 30644 ?        Ss   00:23   0:00 ora_lgwr_test2
    oracle   25602  0.0  1.6 261236 16956 ?        Ss   00:23   0:00 ora_ckpt_test2
    oracle   25604  0.0  3.4 261784 35812 ?        Ss   00:23   0:00 ora_smon_test2
    oracle   25606  0.0  1.6 261252 17224 ?        Ss   00:23   0:00 ora_reco_test2
    oracle   25608  0.0  2.2 262812 22948 ?        Ss   00:23   0:00 ora_cjq0_test2
    oracle   25610  0.1  4.2 262988 43768 ?        Ss   00:23   0:00 ora_mmon_test2
    oracle   25612  0.0  1.2 261252 12832 ?        Ss   00:23   0:00 ora_mmnl_test2
    oracle   25614  0.0  1.0 261248 10672 ?        Ss   00:23   0:00 ora_d000_test2
    oracle   25616  0.0  1.0 261248 10656 ?        Ss   00:23   0:00 ora_d001_test2
    oracle   25626  0.0  2.6 276804 27168 ?        Ss   00:24   0:00 ora_arc0_test2
    oracle   25628  0.0  2.6 276804 27040 ?        Ss   00:24   0:00 ora_arc1_test2
    oracle   25630  0.0  2.6 276804 26920 ?        Ss   00:24   0:00 ora_arc2_test2
    oracle   25632  0.0  1.5 261252 15660 ?        Ss   00:24   0:00 ora_qmnc_test2
    oracle   25638  0.0  1.1 261248 11656 ?        Ss   00:24   0:00 ora_q000_test2
    oracle   25640  0.0  1.3 261248 13912 ?        Ss   00:24   0:00 ora_q001_test2
    5、oracle用户的变量验证:
    $ oracle@model ~> env | grep ORACLE
    ORACLE_SID=test2
    ORACLE_BASE=/u02/app/oracle
    ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1
    验证完成,验证的结果表明,迁移确实已经成功,并且已经达到了预期的目的。
  • 相关阅读:
    关系数据理论之第三范式
    关系数据理论之第二范式
    关系数据理论之第一范式
    排序之外部排序
    排序之选择排序
    排序之希尔排序
    排序之基数排序
    排序之计数排序
    排序之堆排序
    排序之归并排序
  • 原文地址:https://www.cnblogs.com/lcword/p/5854081.html
Copyright © 2011-2022 走看看