码迷,mamicode.com
首页 > 数据库 > 详细

Oracle Active Database Duplication

时间:2015-10-22 19:35:42      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:database   oracle   standby   数据库   

Active Database Duplication


简介
---------
Active database duplication功能是从11g开始引入的一个新功能,它是对比以前版本中的基于备份集的复制数据库功能。

下面简单的回顾一下关于ORACLE Duplicate Database功能,Duplicate database可以按照用途分为2种,一种是duplicate database,第二种是duplicate standby database,本文主要介绍duplicate database功能,会在以后介绍duplicate standby database。

Duplicate Database又可以按照复制数据的来源不同分为2种方式:Active Database Duplication(从正在运行的数据库上复制数据)和Backup-based duplication(基于备份集的数据复制)

1. Backup-based duplication 又分为下面3中形式:
o 复制的过程不连接到源数据库,RMAN从Catalog 数据库取得备份信息。

o 复制的过程不连接到源数据库,也不连接到Catalog数据库,RMAN从已有的备份集取得备份信息。

o 复制的过程连接到源数据库,RMAN从源数据库的控制文件取得备份信息。

2. Active Database Duplication
这种复制数据库要求源数据库是open状态或者mount状态,复制的过程一定要连接到源数据库,RMAN直接从源库复制数据库到Duplication服务器,这种方式不需要提前备份源库。

Duplicate Database 特点
------------------------
1. 复制的Database会自动分配一个新的DBID,与源数据库的DBID不同,这样Duplicate数据库和源库可以注册到同一个catalog 数据库。
如果使用操作系统的命令来做异机复制恢复的话,新创建的数据库和源库是相同的DBID。

2. 复制的数据库可以是源库的一个完全镜像,也可以是源库的一个子集。

3. 复制的数据库和源库必须是相同的操作系统平台,我们认为同平台下的32-bit 和 64-bit是同一个平台,例如Linux IA (32-bit) 和Linux IA (64-bit),认为是相同的平台,可以实施duplicate 功能,但是最后一定要运行下面的脚本来转换PL/SQL:
ORACLE_HOME/rdbms/admin/utlirp.sql

Active Database Duplication 和 Backup-based duplication对比
-------------------------------------------------------------
Active database duplication 直接复制源数据库,通过网络传输数据库到复制服务器,因此复制时对源库有一定的压力,而且数据传输时对网络条件要求较高。

Backup-based duplication :需要提前备份数据库,磁盘空间大小能够满足备份的需要。




Active Database Duplication 原理
-------------------------------------
1. 手动创建一个临时的pfile文件,pfile文件至少包括一个参数DB_NAME,然后启动到nomount状态。
2. RMAN从源库拷贝spfile文件到复制数据库上,并且修改spfile的名字。
3. RMAN从源库拷贝最新的control file到复制数据库,并且mount 复制数据库。
4. RMAN从源库拷贝datafile和必要的归档日志到复制数据库。
5. RMAN执行不完全的恢复。
6. RMAN创建新的control file,并且设置新的DBID。
7. 以RESETLOGS方式打开复制的database。



如果使用spfile,那么在pfile文件里只需要设置一个DB_NAME参数,其他参数会在duplicate 命令中自己设置。

如果使用pfile,那么需要设置如下参数:

<1> DB_NAME

<2> CONTROL_FILES

<3> DB_BLOCK_SIZE   

<4> DB_FILE_NAME_CONVERT

<5> LOG_FILE_NAME_CONVERT

<6> DB_RECOVERY_FILE_DEST



在Auxiliary库创建Password File 文件

对于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,那么该操作会重写那个文件。

如:

RMAN> DUPLICATE TARGET DATABASE TO Dave

2> FROM ACTIVE DATABASE

3> NOFILENAMECHECK

4> PASSWORD FILE

5> SPFILE;




实验步骤:
源库:10.6.0.207   test
目标库:10.6.0.179   aaa(本来想用test,但是在rman 那步骤会报错)


准备工作
1.config tnsnames.ora
2.create password file
3.mkdir necessary folder
4.create spfile to startup nomount
5.config duplicate database listener.ora
6.duplicate a database



RMAN> duplicate target database to newdb
      from active database
      db_file_name_convert ‘/nf/‘,‘/duptest/‘
      spfile
        parameter_value_convert ‘/db/‘,‘/newdb/‘
      set log_file_name_convert ‘/db/‘,‘/newdb/‘
     
     
     


1.源库上创建pfile并且SCP到目标库上   
SQL> create pfile=‘/tmp/pfile20151022.ora‘ from spfile;

scp /tmp/pfile20151022.ora oracle@10.6.0.179:/u01/app/oracle/12.1.0.1/db_1/dbs/inittest.ora



目标库上


SQL> select name  from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/test/system01.dbf
/u01/app/oracle/oradata/test/sysaux01.dbf
/u01/app/oracle/oradata/test/undotbs01.dbf
/u01/app/oracle/oradata/test/users01.dbf
/u01/app/oracle/oradata/test/qwerty.dbf
/u01/app/oracle/oradata/test/testbig.dbf
/u01/app/oracle/oradata/test/data_01.dbf
/u01/app/oracle/oradata/test/cai.dbf




SQL> select MEMBER from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/test/redo01.log
/u01/app/oracle/oradata/test/redo02.log
/u01/app/oracle/oradata/test/redo03.log


配置好源库的linstener.ora

[oracle@test admin]$ cat listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = test)
      (ORACLE_HOME = /u01/app/oracle/12.1.0.1/db_1)
      (SID_NAME = test)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = test)(PORT = 1521))
  )



配置好源库上的tnsname.ora
[oracle@test admin]$ cat tnsnames.ora
test =
   (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.207)(PORT = 1521))
   (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = test)
    )
   )
   
test2 =
   (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.179)(PORT = 1521))
   (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = test)
    )
   )
 








因为源库跟目标库数据文件,日志文件,控制文件放的位置都不一样,所以要修改目标库上的pfile,
增加db_file_name_convert和log_file_name_convert


在目标库上修改pfile

vi /u01/app/oracle/12.1.0.1/db_1/dbs/inittest.ora

修改controlfile路径

增加
db_file_name_convert=‘/u01/app/oracle/oradata/test‘,‘/u01/app/oracle/oradata/test/datafile‘
log_file_name_convert=‘/u01/app/oracle/oradata/test‘,‘/u01/app/oracle/oradata/test/onlinelog‘




配置好目标库上的listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = test)
      (ORACLE_HOME = /u01/app/oracle/12.1.0.1/db_1)
      (SID_NAME = test)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.179)(PORT = 1521))
  )





   
   

配置好目标库上的tnsname.ora
[oracle@test admin]$ cat tnsnames.ora
test =
   (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.207)(PORT = 1521))
   (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = test)
    )
   )
   
test2 =
   (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.179)(PORT = 1521))
   (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = test)
    )
   )
 



 
 


rman target sys/123456@test auxiliary sys/123456@test2
   
   
   
--rman这里对test字符有限制,加上单引号后解决问题


RMAN> duplicate target database to ‘test‘ from active database;

Starting Duplicate Db at 22-OCT-15
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=12 device type=DISK
current log archived

contents of Memory Script:
{
   sql clone "create spfile from memory";
}
executing Memory Script

sql statement: create spfile from memory

contents of Memory Script:
{
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area     838860800 bytes
.....

datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=893782472 file name=/u01/app/oracle/oradata/test/datafile/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=893782472 file name=/u01/app/oracle/oradata/test/datafile/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=893782472 file name=/u01/app/oracle/oradata/test/datafile/users01.dbf

contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

database opened
Cannot remove created server parameter file
Finished Duplicate Db at 22-OCT-15

RMAN> exit



以上就是Active Database Duplication测试过程

本文出自 “Sysdba” 博客,请务必保留此出处http://sysdba.blog.51cto.com/10492366/1705317

Oracle Active Database Duplication

标签:database   oracle   standby   数据库   

原文地址:http://sysdba.blog.51cto.com/10492366/1705317

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!