迁移数据库——11gR2 使用 RMAN duplicate from active database 复制数据库

数据库版本是:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

在Oracle 10g下,我们可以使用RMAN duplicate 命令创建一个具有不同DBID 的复制库。 到了Oracle 11gR2, RMAN 的duplicate 有2种方法实现:
       1. Active database duplication 
       2. Backup-based duplication

       Active database duplication 通过网络,直接copy target 库到auxiliary 库,然后创建复制库。 这种方法就不需要先用RMAN 备份数据库,然后将备份文件发送到auxiliary端。
       这 个功能的作用是非常大的。 尤其是对T级别的库。 因为对这样的库进行备份,然后将备份集发送到备库,在进行duplicate 的代价是非常大的。 一 备份要占用时间,二要占用备份空间,三在网络传送的时候,还需要占用带宽和时间。所以Active database duplicate 很好的解决了 以上的问题。 它对大库的迁移非常有用。
       如果是从RAC duplicate 到单实例,操作是一样的。 如果是从单实例duplicate 到RAC。 那么先duplicate 到 单实例。 然后将单实例转换成RAC。

目标库(Target)信息:

ORACLE_BASE: /u01/app

ORACLE_HOME: /u01/app/oracle

ORACLE_SID:orcl

IP: 10.10.10.8

辅助库(Auxiliary)信息:

ORACLE_BASE: /u01/app

ORACLE_HOME: /u01/app/oracle

ORACLE_SID:orcl

IP: 10.10.10.9

异机复制,目录结构和SID完全一样。


1. 在Auxiliary 创建pfile 参数文件:(只有一个参数: DB_NAME)

[oracle@db dbs]$ cat initorcl.ora 

*.db_name='orcl'


2. 在Auxiliary库上创建口令文件:

对于Backup-based duplication,Password File 不是必须的,但是对于Active Database Duplication,Password File是必须的。 因为Active Database Duplication 使用相同的SYSDBA 密码直接连接到auxiliary 库。 所以,确保target 和Auxiliary库的SYSDBA 密码一样很重要。 

当然,我们也可以在duplicate 命令中加上PASSWORD FILE 选项(也是默认值), 这样RMAN 在copy 的时候也会从target 库把密码文件copy过来,如果auxiliary库上已经存在了Password file,那么该操作会重写那个文件。

$ orapwd file='/u01/app/oracle/dbs/orapworcl' password=oracle entries=10


3. 在Auxiliary库创建相关的目录结构:

$ mkdir -p /u01/app/admin/orcl/adump

$ mkdir -p /u01/app/oradata/flash_area


4. 启动Auxiliary 到nomout 状态:

SQL> startup nomount
SQL> create spfile from pfile='/u01/app/oracle/dbs/initorcl.ora';
SQL> startup force nomount
SQL> show parameter spfile
5、在 Target的tnsnames.ora中添加到 Auxiliary的配置(红色部分):
$ cat tnsnames.ora 
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

ORCL2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.9)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = orcl)
    )
  )

$ lsnrctl start
6、在 Auxiliary上配置listener.ora和tnsnames.ora(红色部分很重要)
[oracle@db admin]$ cat listener.ora 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app

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

[oracle@db admin]$ cat tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.8)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = orcl)
    )
  )

ORCL2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = orcl)
    )
  )

$ lsnrctl start

7、在Auxiliary端 或在target端开始RMAN duplicate from active database:

注意:如果target 和 Auxiliary库的目录结构相同,记得加上nofilenamecheck参数。Target数据库是open的,这里是在Auxiliary上执行。

$ rman target sys/oracle@orcl auxiliary sys/oracle@orcl2

RMAN> duplicate target database to orcl from active database nofilenamecheck;

你可能感兴趣的:(迁移数据库——11gR2 使用 RMAN duplicate from active database 复制数据库)