不同配置决定不同的复制的流程。

一、 远程站点相同路径结构的复制(Duplicating a Database on a Remote Host with the Same Directory Structure)

  对于这种选择而言,操作实在太过简单,你甚至不需要修改初始化参数文件或者重命名复制的数据文 件 (可惜,做测试的话这却不能做为我们的首选,一般测试都只有一台机器,难道让我再虚拟个操作系统?)如果是 多台机器 的话,这种操作非常省事,步骤也很少:

  1 、创建辅助实例。

  2 、 Rman 连接并 运行duplicate命令,结束。

  确实太简单的是吧,好吧那我来给你找点麻烦,注意第2步,其执行是有几个先决条件的。或者说伟大的oracle大人又一次下放了它高贵的权力,而给你来做出选择 ,如下:

    • 如果没有配置自动分配通道的话,表忘记至少手工指定1条辅助通道。
    • 表忘记指定NOFILENAMECHECK参。
    • 就像前面说的,如果辅助实例并非服务器端初始化参数文件启动,表忘记指定PFILE参数。更加表忘记该文件必须在运行RMAN的客户端上。

  例如,假设你配置了自动分配通道,并且决定使用pfile启动辅助实例,那么在RMAN连接到目标库和辅助实例之后,只需要执行下列:

    DUPLICATE TARGET DATABASE TO dupdb

      PFILE = F:\oracle\product\10.2.0\admin\jssdup\pfile\init.ora

      NOFILENAMECHECK;

  最后,RMAN会 自动 以RESETLOGS方式打开数据库并重建REDO LOGS。竣工。

二、 远程站点不同路径结构的复制(Duplicating a Database on a Remote Host with a Different Directory Structure)

  如果副本数据库创建在远程站点,并且目录结构也不一致,那么你必须修改几个初始化参数值以便副本数据库的数据文件能够在新的目录结构存取。这种类型的复制又可以细分成几个小类:

    1、 在 初始化参数中重命名复制文件和日志文件, 复制步骤如下:

      a)  首先还是创建辅助实例。注意初始化参数的配置,按下列的方式进行一些调整。
      • 浏览初始化参数中以_DEST结尾的参数以及包含路径的参数,确认这些路径对即将创建的副本数据库有效。
      • 设置DB_FILE_NAME_CONVERT参数,让其自动转换数据文件路径。
      • 设置LOG_FILE_NAME_CONVERT参数,让其自动转换日志文件路径。

        所谓道有千条我取其一,除了上述方式之外呢,还有很多其它方法来指定文件存放路径,比如CONFIGURE AUXNAME或SET NEWNAME命令等等。不过此处是在写 初始化参数中重命名类型的复制 ,就不多占篇章了,后面有章节专门讲解。感兴趣的朋友不妨keep你的好奇心 ,往下看 : )

      b)  RMAN 连接并执行duplicate命令,结束。

      在这里同样需要注意辅助通道的分配和pfile的加载(如果使用pfile的话)。

      例如,我们使用自动分配通道,并且辅助实例使用服务器端初始化参数文件,这下dulicate命令更简单了:

      DUPLICATE TARGET DATABASE TO dupdb;

      这种方式主要的工作都在创建辅助实例上。

    2、 在Duplicate命令中重命名数据、日志文件,复制步骤如下:

      a.  创建辅助实例。

      b.  RMAN 连接运行Duplicate命令,注意此处需要加些参数如下:

      • 通道,还是通道!如果没有自动分配通道,则至少要手工指定一条辅助通道。
      • 通过LOGFILE子句指定副本数据库redo logs文件地址大小等。
      • 通过DB_FILE_NAME_CONVERT转换原数据文件路径到新路径。
      • pfile, 又见pfile。如果使用了pfile的话,表忘记指定pfile参数。

      例如,我们使用自动分配通道,但辅助实例未使用服务器端初始化参数文件,手工指定日志文件数据文件路径,示例如下:

      DUPLICATE TARGET DATABASE TO dupdb

        PFILE = F:\oracle\product\10.2.0\admin\jssdup\pfile\init.ora

        DB_FILE_NAME_CONVERT=(F:\oracle\oradata\jssweb\,F:\oracle\oradata\jssdup\)

        LOGFILE

          ¨F:\oracle\oradata\jssdup\redo01.log¨ SIZE 20M,

          ¨F:\oracle\oradata\jssdup\redo02.log¨ SIZE 20M,

                                                      ¨F:\oracle\oradata\jssdup\redo03.log¨ SIZE 20M;

    3 、使用SET NEWNAME命令重命名数据文件,复制步骤如下:

      a.  创建辅助实例。

      b.  RMAN 连接并按下列步骤执行:

      • 配置通道;
      • 使用SET NEWNAME命令设置数据文件新路径;
      • Duplicate 命令设置logfile,如辅助实例采用pfile要加载pfile。

      本节重点是SET NEWNAME命令格式,见例:

      RUN

      {

        # set new filenames for the datafiles

        SET NEWNAME FOR DATAFILE 1 TO ¨F:\oracle\oradata\jssdup\system01.dbf¨; 

        SET NEWNAME FOR DATAFILE 2 TO ¨F:\oracle\oradata\jssdup\undotbs01.dbf¨; 

        . . .

        # issue the duplicate command

        DUPLICATE TARGET DATABASE TO dupdb

        # create at least two online redo log groups

        . . .

      }

    4 、使用CONFIGURE AUXNAME命令重命名数据文件,复制步骤如下:

      略与上同,不详述,唯一不同处即是CONFIGURE AUXNAME命令格式,如例,而且configure命令是在run块外执行的:

      # configure the new desired filenames

       CONFIGURE AUXNAME FOR DATAFILE 1 TO ¨F:\oracle\oradata\jssdup\system01.dbf¨; 

       CONFIGURE AUXNAME FOR DATAFILE 2 TO ¨F:\oracle\oradata\jssdup\undotbs01.dbf¨; 

      # ... add more CONFIGURE AUXNAME commands as needed 

      不过需要注意的是,duplicate执行完之后,推荐清除 CONFIGURE AUXNAME 。这样就不会对未来的类似操作造成影响。

      # clear specified auxiliary names for the datafiles

      CONFIGURE AUXNAME FOR DATAFILE 1 CLEAR; 

      CONFIGURE AUXNAME FOR DATAFILE 2 CLEAR; 

三、 本地创建(Creating a Duplicate Database on the Local Host)

  与第二种"远程站点不同路径结构的复制"有95%以上的相似性。唯一不同的是,本地创建的话需要注意DB_NAME与目标数据库不可相同。这点主要体现在辅助实例中初始化参数的配置里,其它的操作步骤可以完全复制第二种中介绍的各种方法,所以也就不详述了:)

  除此之外呢,还有比如向 ASM 存储系统复制 ,或向 OMF 存储复制 等等,复制流程与上基本大同小异,不过就是初始化参数文件中设置不同的参数,或者将参数设置成不同的值罢了。

  从上面那么些废话我们能分析一下,虽然oracle细分了这么多类型的操作,但万变不离其宗有2点是其核心,第1是保证辅助实例的初始化参数文件中,文件路径的有效性,第2是执行duplicate时注意与辅助实例初始化参数设置的配合。上面洋洋洒洒的那一沱沱口水都是在向你举例各种情况下duplicate命令与初始化参数设置如何有效配合。怎么,你现在才注意到这一点?呵呵不晚不晚,马上咱们就要开始进入实战了:)