当前位置 博文首页 > LuciferLiu_DBA:Active Database Duplication

    LuciferLiu_DBA:Active Database Duplication

    作者:[db:作者] 时间:2021-06-15 21:39

    一、介绍

    当源数据库不存在备份集,并且磁盘空间不足的情况下,可以通过Active Database Duplication来实现对数据库的复制。

    Active Database Duplication不需要源数据库的备份。 通过网络将数据库文件复制到辅助实例,它将实时源数据库复制到目标主机。 RMAN可以将所需文件复制为映像副本或备份集。

    Note:For active database duplication, the source database must use a server parameter file(SPFILE).

    在这种方法中,RMAN客户端作为TARGET连接到源数据库,而作为AUXILIARY连接到辅助实例。

    有以下两种方式:

    Active Database Duplication Using Image Copies

    Active Database Duplication Using Backup Sets

    Notes:12.1之后开始支持备份集(Backup Sets)复制。

    在某些场景下,使用备份集(Backup Sets)进行主动数据库复制比映像副本(Image Copies)可能更为可取:

    a.在复制数据库时想要使用并行多段备份,压缩或加密

    See Also:

    • About Compressing Backup Sets During Active Database Duplication

    • About Parallelizing Backup Set Creation During Active Database Duplication

    • About Encrypting Backup Sets During Active Database Duplication

    b.源数据库没有足够的网络资源来传输所需的数据库文件到目标数据库。

    c.在源数据库上使用的资源最少,最小化影响源数据库的性能。

    二、Active Database Duplication Using Image Copies(push-based method)

    源数据库通过网络将所需的数据库文件传输到辅助实例。

    Description of Figure 25-4 follows

    三、Active Database Duplication Using Backup Sets(pull-based method)

    辅助实例通过Oracle Net Services连接到源数据库,并通过网络从源数据库检索所需的数据库文件。

    Description of Figure 25-5 follows

    满足以下任一条件时,RMAN使用备份集(Backup Sets)执行活动数据库复制,否则,RMAN使用映像副本(Image Copies)执行活动数据库复制。

    1、Compressing Backup Sets During Active Database Duplication

    DUPLICATE TARGET DATABASE TO dup_db
    FROM ACTIVE DATABASE
    PASSWORD FILE
    USING COMPRESSED BACKUPSET;

    2、Parallelizing Backup Set Creation During Active Database Duplication

    DUPLICATE TARGET DATABASE TO dup_db
    FROM ACTIVE DATABASE
    PASSWORD FILE
    SECTION SIZE 400M;

    3、Encrypting Backup Sets During Active Database Duplication

    ##在DUPLICATE命令之前使用SET ENCRYPTION ALGORITHM命令来指定加密算法。
    SET ENCRYPTION ON IDENTIFIED BY password;

    四、注意点

    1、需要复制后保持数据库文件名称一致

    a.复制数据库配置为使用与源数据库相同的目录结构和文件名

    b.如果源数据库使用ASM磁盘组,则重复的数据库必须使用具有相同名称的ASM磁盘组。

    c.如果源数据库文件是Oracle Managed Files,则辅助实例必须将DB_CREATE_FILE_DEST参数设置为与源数据库相同的目录位置。

    d.如果源数据库中数据库文件的名称包含路径,则该路径名称在重复数据库中必须相同。

    e.对于Oracle Real Application Clusters(RAC)环境,请对源数据库和目标数据库的ORACLE_SID参数使用相同的值。

    2、源库与复制库目录不一致的情况

    a.SET NEWNAME命令

    VariableDescription

    %b

    Specifies the file name stripped of directory paths. For example, if a data file is named?/oradata/prod/financial.dbf, then?%b?results in?financial.dbf.

    %f

    Specifies the absolute file number of the data file for which the new name is generated. For example, if data file 2 is duplicated, then?%f?generates the value 2.

    %I

    Specifies the DBID.

    %N

    Specifies the tablespace name.

    %U

    Specifies the following format:?data-D-%d_id-%I_TS-%N_FNO-%f

    ##按优先级排序
    1.SET NEWNAME FOR DATAFILE and SET NEWNAME FOR TEMPFILE
    2.SET NEWNAME FOR TABLESPACE
    3.SET NEWNAME FOR DATABASE
    
    ##Example
    ##1.该脚本为数据文件1至5和临时文件1指定了新名称。该脚本未为数据文件6设置新名称,因为它位于TOOLS表空间中,该表空间已从重复数据库中排除。
    RUN
    {
    SET NEWNAME FOR DATAFILE 1 TO '/oradata1/system01.dbf'; 
    SET NEWNAME FOR DATAFILE 2 TO '/oradata2/sysaux01.dbf';
    SET NEWNAME FOR DATAFILE 3 TO '/oradata3/undotbs01.dbf';
    SET NEWNAME FOR DATAFILE 4 TO '/oradata4/users01.dbf'; 
    SET NEWNAME FOR DATAFILE 5 TO '/oradata5/users02.dbf';
    SET NEWNAME FOR TEMPFILE 1 TO '/oradatat/temp01.dbf'; 
    DUPLICATE TARGET DATABASE TO dupdb
      SKIP TABLESPACE tools
      LOGFILE
         GROUP 1 ('/duplogs/redo01a.log','/duplogs/redo01b.log') SIZE 4M REUSE, 
         GROUP 2 ('/duplogs/redo02a.log', '/duplogs/redo02b.log') SIZE 4M REUSE;
    }
    
    ##2.并使用单个SET NEWNAME命令命名表空间用户中的所有数据文件。 示例完成后,表空间用户的文件名设置为:/oradata4/users01.dbf和/oradata5/users02.dbf。
    {
    SET NEWNAME FOR TABLESPACE users TO '/oradata%f/%b';
    SET NEWNAME FOR DATAFILE 1 TO '/oradata1/system01.dbf';
    SET NEWNAME FOR DATAFILE 2 TO '/oradata2/sysaux01.dbf';
    SET NEWNAME FOR DATAFILE 3 TO '/oradata3/undotbs01.dbf';
    SET NEWNAME FOR TEMPFILE 1 TO '/oradatat/temp01.dbf';
    DUPLICATE TARGET DATABASE TO dupdb
    SKIP TABLESPACE tools
    LOGFILE
       GROUP 1 ('/duplogs/redo01a.log','/duplogs/redo01b.log') SIZE 4M REUSE,
       GROUP 2 ('/duplogs/redo02a.log','/duplogs/redo02b.log') SIZE 4M REUSE;
    }
    
    ##3.使用单个SET命令命名数据库中的所有数据文件。
    RUN
    {
    SET NEWNAME FOR DATABASE TO '/oradata/%U';
    DUPLICATE TARGET DATABASE TO dupdb
      SKIP TABLESPACE tools
      LOGFILE
        GROUP 1 ('/duplogs/redo01a.log','/duplogs/redo01b.log') SIZE 4M REUSE,
        GROUP 2 ('/duplogs/redo02a.log','/duplogs/redo02b.log') SIZE 4M REUSE;
    }

    对于OMF和ASM数据库文件,必须使用SET NEWNAME ... TO NEW命令,而不能显式提供数据库文件的名称。

    ##Example
    
    ##1.USER表空间的文件是用OMF托管,因此使用set newname to new
    RUN
    {
    SET NEWNAME FOR TABLESPACE users TO NEW;
    SET NEWNAME FOR DATAFILE 3 TO NEW;
    SET NEWNAME FOR DATAFILE 1 TO '/oradata1/system01.dbf';
    SET NEWNAME FOR DATAFILE 2 TO '/oradata2/sysaux01.dbf';
    SET NEWNAME FOR TEMPFILE 1 TO '/oradatat/temp01';
    DUPLICATE TARGET DATABASE TO dupdb
      SKIP TABLESPACE tools
      LOGFILE
        GROUP 1 ('/duplogs/redo01a.log','/duplogs/redo01b.log') SIZE 4M REUSE,
        GROUP 2 ('/duplogs/redo02a.log','/duplogs/redo02b.log') SIZE 4M REUSE;
    }
    
    ##2.用SET NEWNAME在ASM创建文件
    RUN
    {
    SET NEWNAME FOR DATAFILE 1 TO "+DGROUP1";
    SET NEWNAME FOR DATAFILE 2 TO "+DGROUP2";
    .
    .
    .
    DUPLICATE TARGET DATABASE
    TO dupdb
    FROM ACTIVE DATABASE
    SPFILE SET DB_CREATE_FILE_DEST +DGROUP3;
    }

    b.AUXNAME命令

    为重复的数据库文件指定非OMF和非ASM替代名称。

    ##Example:
    
    ##1.以指定文件数据文件1到5的名称
    CONFIGURE AUXNAME FOR DATAFILE 1 TO '/oradata1/system01.dbf';
    CONFIGURE AUXNAME FOR DATAFILE 2 TO '/oradata2/sysaux01.dbf';
    CONFIGURE AUXNAME FOR DATAFILE 3 TO '/oradata3/undotbs01.dbf';
    CONFIGURE AUXNAME FOR DATAFILE 4 TO '/oradata4/users01.dbf'; 
    CONFIGURE AUXNAME FOR DATAFILE 5 TO '/oradata5/users02.dbf';
    SET NEWNAME FOR TEMPFILE 1 TO '/oradatat/temp01.dbf'; 
    DUPLICATE TARGET DATABASE
      TO dupdb
      SKIP TABLESPACE tools
      LOGFILE
         GROUP 1 ('/duplogs/redo01a.log','/duplogs/redo01b.log') SIZE 4M REUSE,
         GROUP 2 ('/duplogs/redo02a.log','/duplogs/redo02b.log') SIZE 4M REUSE;
    

    c.DUPLICATE命令的SPFILE子句

    设置与重复的数据库文件名相关的所有必需的初始化参数,但DB_FILE_NAME_CONVERT参数除外。

    ##Example
    
    ##1.假设源数据库prod在host1上,并将其数据文件存储在非ASM文件系统中。 prod的控制文件位于/ oracle / oradata / prod /中。 您要将源数据库复制到远程主机host2上的数据库dupdb中。 您要将重复的数据库文件存储在ASM磁盘组+ DISK1中。
    
    DUPLICATE TARGET DATABASE TO dupdb
    FROM ACTIVE DATABASE
    SPFILE
    PARAMETER_VALUE_CONVERT '/oracle/oradata/prod/', '+DISK1'
    SET DB_CREATE_FILE_DEST +DISK1;
    
    ##DUPLICATE命令完成后,将创建重复数据库,其中包含ASM磁盘组+DISK1中的数据文件,联机重做日志文件和控制文件。
    
    
    ##2.假定源数据库prod在host1上,并将其数据文件存储在ASM磁盘组+DISK1中。 您要将目标复制到远程主机host2上的数据库dupdb。 您想要将dupdb的数据文件存储在ASM中。
    
    DUPLICATE TARGET DATABASE
    TO dupdb
    FROM ACTIVE DATABASE
    SPFILE PARAMETER_VALUE_CONVERT '+DISK1','+DISK2'
    SET DB_RECOVERY_FILE_DEST_SIZE='750G';
    
    ##当DUPLICATE命令完成时,将创建重复的数据库,其中包含较大ASM磁盘组+DISK2中的数据文件,联机重做日志和控制文件。

    d.DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT初始化参数(Non-MOF)

    限制:

    1.不能使用DUPLICATE命令的DB_FILE_NAME_CONVERT选项来控制源数据库实例中OMF格式的辅助实例中文件的新名称的生成。
    2.不能使用LOG_FILE_NAME_CONVERT初始化参数来控制源数据库实例中OMF格式的重复实例中文件的新名称的生成。
    3.如果设置OMF初始化参数,请不要指定LOG_FILE_NAME_CONVERT参数。
    4.LOG_FILE_NAME_CONVERT参数不能在DUPLICATE命令中指定为子句,而只能在辅助实例的初始化参数中指定。

    注意当复制到没有NOFILENAMECHECK子句的本地主机或远程主机时,请确保不使用源数据库当前正在使用的联机重做日志文件的名称。

    3、NOFILENAMECHECK

    CONFIGURE AUXNAME命令,SET NEWNAME命令或DB_FILE_NAME_CONVERT参数可能会生成已在目标数据库中使用的名称。 在这种情况下,RMAN在复制期间显示错误。 复制到远程主机时,请使用NOFILENAMECHECK选项来避免出现此错误消息。

    Notes:复制到本地主机时使用NOFILENAMECHECK会覆盖目标数据库文件

    4、目标端Oracle安装

    Notes:请确保在源主机和目标主机上都安装了具有相同补丁程序级别的相同版本的Oracle数据库软件。

    5、NOOPEN

    通过指定NOOPEN参数,防止打开复制数据库到resetlogs。

    6、static?listener

    DG需要使用静态监听。

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = orcl)
          (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db)
          (SID_NAME = orcl)
        )
      )

    ?

    下一篇:没有了