001 理论基础
active database duplication :A duplicate database that is created over a network without restoring backups of the target database. This technique is an alternative to backup-based duplication.
意即:duplicate数据库不需要通过还原目标数据库的备份,而是直接通过网络而创建。这项技术是基于备份的duplication的替代选择。
002 实验步骤
1.创建辅助实例的Oracle口令文件
2.建立到辅助实例的Oracle Net连接
3.创建辅助实例的初始化参数文件
4.在nomount模式下启动辅助实例
5.装载或打开目标数据库
6.登录rman,执行duplicate命令
003 创建辅助实例的Oracle口令文件
第一步是在辅助实例所在的主机创建辅助实例的口令文件。创建口令文件有两种方式:
1、手动创建口令文件
对于执行duplicate ... from active database有一些额外的要求。你必须使用sys用户的ID,并且密码必须和source database的密码一致。
orapwd file=$ORACLE_HOME/dbs/orapwPROD2 password=oracle entries=30
或者将source database的口令文件拷贝过来(scp)然后改名。
004 建立到辅助实例的Oracle Net连接
在duplicate过程中会开/关auxiliary实例,因此需要对auxiliary实例配置静态监听。同时需要在source database端访问auxiliary实例,因此还需要在source database端配置tnsnames.ora。
source database端的tnsnames.ora:

PROD1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = huangrui.hhu)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PROD1)
)
)
PROD2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = huan.hhu)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PROD2)
)
)
在duplicate端tnsnames.ora:

PROD1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =huangrui.hhu )(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PROD1)
)
)
PROD2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = huan.hhu)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PROD2)
)
)

在duplicate端listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PROD2)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = PROD2)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = huan.hhu)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle

005 创建辅助实例的参数文件
    将source database端的参数文件拷贝过来,因为source database端只有spfile,所以在source database端生成一个initPROD1.ora文件。
SYS@PROD1> create pfile from spfile;
File created.
然后将initPROD1.ora传输到duplicate端:
    scp initPROD1 @huan.hhu:$ORACLE_HOME/dbs
在duplicate端编辑initPROD1文件,首先将其改名为initPROD2.ora:
    mv initPROD1.ora initPROD2.ora
    
开始编辑initPROD2.ora,将文件里的所有PROD1改为PROD2:
    %s@PROD1@PROD2@gi   
在文件尾部加上两行:
    db_file_name_convert='/u01/app/oracle/oradata/PROD1','/u01/app/oracle/oradata/PROD2'
    log_file_name_convert='/u01/app/oracle/oradata/PROD1','/u01/app/oracle/oradata/PROD2'
最终的参数文件样子:
PROD2.__db_cache_size=469762048
PROD2.__java_pool_size=16777216
PROD2.__large_pool_size=33554432
PROD2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
PROD2.__pga_aggregate_target=520093696
PROD2.__sga_target=754974720
PROD2.__shared_io_pool_size=0
PROD2.__shared_pool_size=218103808
PROD2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/PROD2/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/PROD2/control01.ctl','/u01/app/oracle/fast_recovery_area/PROD2/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='PROD2'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=PROD2XDB)'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=1261436928
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
db_file_name_convert='/u01/app/oracle/oradata/PROD1','/u01/app/oracle/oradata/PROD2'
log_file_name_convert='/u01/app/oracle/oradata/PROD1','/u01/app/oracle/oradata/PROD2'
还要将参数文件中提及的几个目录建立好:
mkdir -p /u01/app/oracle/admin/PROD2/adump
mkdir -p /u01/app/oracle/oradata/PROD2
mkdir -p /u01/app/oracle/fast_recovery_area/PROD2

006 在nomount模式下启动辅助实例
当然,是在duplicate端:
SQL>startup nomount pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initPROD2.ora';
007 装载或打开目标数据库
    将source database启动到mount或open状态即可。
008 登录rman,执行duplicate命令
    当然,是在source database端登录。
    先登录rman:rman target sys/oracle@PROD1 auxiliary sys/oracle@PROD2
然后就是第一条也是最后一条duplicate命令:duplicate target database to PROD2 from active database;
009 下面是执行完第8步之后出现的整个duplicate流程:
RMAN> duplicate target database to PROD2 from active database;
Starting Duplicate Db at 11-JAN-16
using target database control file instead of recovery catalog  #使用目标数据库控制文件而不是恢复目录
allocated channel: ORA_AUX_DISK_1                    #分配通道
channel ORA_AUX_DISK_1: SID=10 device type=DISK
contents of Memory Script:   #内存脚本内容
{
sql clone "create spfile from memory";    #创建spfile
}
executing Memory Script
sql statement: create spfile from memory
contents of Memory Script:                #关闭然后开启克隆实例到nomount状态
{
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    1269366784 bytes
Fixed Size                     2252864 bytes
Variable Size                822087616 bytes
Database Buffers             436207616 bytes
Redo Buffers                   8818688 bytes
contents of Memory Script:
{
sql clone "alter system set  db_name = 
''PROD1'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set  db_unique_name = 
''PROD2'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
backup as copy current controlfile auxiliary format  '/u01/app/oracle/oradata/PROD2/control01.ctl';  #拷贝控制文件
restore clone controlfile to  '/u01/app/oracle/fast_recovery_area/PROD2/control02.ctl' from 
'/u01/app/oracle/oradata/PROD2/control01.ctl';
alter clone database mount;
}
executing Memory Script
sql statement: alter system set  db_name =  ''PROD1'' comment= ''Modified by RMAN duplicate'' scope=spfile
sql statement: alter system set  db_unique_name =  ''PROD2'' comment= ''Modified by RMAN duplicate'' scope=spfile
Oracle instance shut down
Oracle instance started
Total System Global Area    1269366784 bytes
Fixed Size                     2252864 bytes
Variable Size                822087616 bytes
Database Buffers             436207616 bytes
Redo Buffers                   8818688 bytes
Starting backup at 11-JAN-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=144 device type=DISK
channel ORA_DISK_1: starting datafile copy
copying current control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_PROD1.f tag=TAG20160111T160715 RECID=4 STAMP=900864435
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 11-JAN-16
Starting restore at 11-JAN-16
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=133 device type=DISK
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 11-JAN-16
database mounted
contents of Memory Script:   #改变数据文件路径
{
set newname for datafile  1 to 
"/u01/app/oracle/oradata/PROD2/system01.dbf";
set newname for datafile  2 to 
"/u01/app/oracle/oradata/PROD2/sysaux01.dbf";
set newname for datafile  3 to 
"/u01/app/oracle/oradata/PROD2/undotbs01.dbf";
set newname for datafile  4 to 
"/u01/app/oracle/oradata/PROD2/users01.dbf";
set newname for datafile  5 to 
"/u01/app/oracle/oradata/PROD2/example01.dbf";
backup as copy reuse
datafile  1 auxiliary format 
"/u01/app/oracle/oradata/PROD2/system01.dbf"   datafile 
2 auxiliary format 
"/u01/app/oracle/oradata/PROD2/sysaux01.dbf"   datafile 
3 auxiliary format 
"/u01/app/oracle/oradata/PROD2/undotbs01.dbf"   datafile 
4 auxiliary format 
"/u01/app/oracle/oradata/PROD2/users01.dbf"   datafile 
5 auxiliary format 
"/u01/app/oracle/oradata/PROD2/example01.dbf"   ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 11-JAN-16    #复制数据文件
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/PROD1/system01.dbf
output file name=/u01/app/oracle/oradata/PROD2/system01.dbf tag=TAG20160111T160722
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/PROD1/sysaux01.dbf
output file name=/u01/app/oracle/oradata/PROD2/sysaux01.dbf tag=TAG20160111T160722
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/PROD1/example01.dbf
output file name=/u01/app/oracle/oradata/PROD2/example01.dbf tag=TAG20160111T160722
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/PROD1/undotbs01.dbf
output file name=/u01/app/oracle/oradata/PROD2/undotbs01.dbf tag=TAG20160111T160722
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/PROD1/users01.dbf
output file name=/u01/app/oracle/oradata/PROD2/users01.dbf tag=TAG20160111T160722
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 11-JAN-16
sql statement: alter system archive log current
contents of Memory Script:   #将source database端的归档日志复制过来
{
backup as copy reuse
archivelog like  "/u01/app/oracle/fast_recovery_area/PROD1/archivelog/2016_01_11/o1_mf_1_7_c96rsdhz_.arc" auxiliary format 
"/u01/app/oracle/fast_recovery_area/PROD2/archivelog/2016_01_11/o1_mf_1_7_%u_.arc"   ;
catalog clone recovery area;
switch clone datafile all;
}
executing Memory Script
Starting backup at 11-JAN-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=7 RECID=3 STAMP=900864558
output file name=/u01/app/oracle/fast_recovery_area/PROD2/archivelog/2016_01_11/o1_mf_1_7_09qr46hf_.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03
Finished backup at 11-JAN-16
searching for all files in the recovery area
List of Files Unknown to the Database
=====================================
File Name: /u01/app/oracle/fast_recovery_area/PROD2/archivelog/2016_01_11/o1_mf_1_7_09qr46hf_.arc
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /u01/app/oracle/fast_recovery_area/PROD2/archivelog/2016_01_11/o1_mf_1_7_09qr46hf_.arc
List of files in Recovery Area not managed by the database
==========================================================
File Name: /u01/app/oracle/fast_recovery_area/PROD2/control02.ctl
RMAN-07526: Reason: File is not an Oracle Managed File
number of files not managed by recovery area is 1, totaling 9.28MB
datafile 1 switched to datafile copy
input datafile copy RECID=4 STAMP=900864562 file name=/u01/app/oracle/oradata/PROD2/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=5 STAMP=900864562 file name=/u01/app/oracle/oradata/PROD2/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=6 STAMP=900864562 file name=/u01/app/oracle/oradata/PROD2/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=7 STAMP=900864562 file name=/u01/app/oracle/oradata/PROD2/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=8 STAMP=900864562 file name=/u01/app/oracle/oradata/PROD2/example01.dbf
contents of Memory Script:   #恢复数据库,不完全恢复
{
set until scn  1053451;
recover
clone database
delete archivelog
;
}
executing Memory Script
executing command: SET until clause
Starting recover at 11-JAN-16
using channel ORA_AUX_DISK_1
starting media recovery
archived log for thread 1 with sequence 7 is already on disk as file /u01/app/oracle/fast_recovery_area/PROD2/archivelog/2016_01_11/o1_mf_1_7_09qr46hf_.arc
archived log file name=/u01/app/oracle/fast_recovery_area/PROD2/archivelog/2016_01_11/o1_mf_1_7_09qr46hf_.arc thread=1 sequence=7
media recovery complete, elapsed time: 00:00:00
Finished recover at 11-JAN-16
Oracle instance started
Total System Global Area    1269366784 bytes
Fixed Size                     2252864 bytes
Variable Size                822087616 bytes
Database Buffers             436207616 bytes
Redo Buffers                   8818688 bytes
contents of Memory Script:
{
sql clone "alter system set  db_name = 
''PROD2'' comment=
''Reset to original value by RMAN'' scope=spfile";
sql clone "alter system reset  db_unique_name scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
sql statement: alter system set  db_name =  ''PROD2'' comment= ''Reset to original value by RMAN'' scope=spfile
sql statement: alter system reset  db_unique_name scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area    1269366784 bytes
Fixed Size                     2252864 bytes
Variable Size                822087616 bytes
Database Buffers             436207616 bytes
Redo Buffers                   8818688 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "PROD2" RESETLOGS ARCHIVELOG   #重建控制文件
MAXLOGFILES     16
MAXLOGMEMBERS      3
MAXDATAFILES      100
MAXINSTANCES     8
MAXLOGHISTORY      292
LOGFILE
GROUP   1 ( '/u01/app/oracle/oradata/PROD2/redo01.log' ) SIZE 50 M  REUSE,
GROUP   2 ( '/u01/app/oracle/oradata/PROD2/redo02.log' ) SIZE 50 M  REUSE,
GROUP   3 ( '/u01/app/oracle/oradata/PROD2/redo03.log' ) SIZE 50 M  REUSE
DATAFILE
'/u01/app/oracle/oradata/PROD2/system01.dbf'
CHARACTER SET AL32UTF8
contents of Memory Script:
{
set newname for tempfile  1 to 
"/u01/app/oracle/oradata/PROD2/temp01.dbf";
switch clone tempfile all;
catalog clone datafilecopy  "/u01/app/oracle/oradata/PROD2/sysaux01.dbf", 
"/u01/app/oracle/oradata/PROD2/undotbs01.dbf", 
"/u01/app/oracle/oradata/PROD2/users01.dbf", 
"/u01/app/oracle/oradata/PROD2/example01.dbf";
switch clone datafile all;
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/PROD2/temp01.dbf in control file
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/PROD2/sysaux01.dbf RECID=1 STAMP=900864572
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/PROD2/undotbs01.dbf RECID=2 STAMP=900864572
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/PROD2/users01.dbf RECID=3 STAMP=900864572
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/PROD2/example01.dbf RECID=4 STAMP=900864572
datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=900864572 file name=/u01/app/oracle/oradata/PROD2/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=900864572 file name=/u01/app/oracle/oradata/PROD2/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=900864572 file name=/u01/app/oracle/oradata/PROD2/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=4 STAMP=900864572 file name=/u01/app/oracle/oradata/PROD2/example01.dbf
contents of Memory Script:
{
Alter clone database open resetlogs;   #打开数据库
}
executing Memory Script
database opened
Finished Duplicate Db at 11-JAN-16

Oracle Active database duplication相关推荐

  1. 使用Oracle 11g新特性 Active Database Duplication 搭建Dataguard环境

    Duplication Database 介绍 Duplicate database可以按照用途分为2种:duplicate database(复制出一个数据库)duplicate standby d ...

  2. Oracle 11g Data Guard 使用duplicate from active database 创建 standby database

    用这种方式来搭建DG ,主库的停机时间很少,只需要重启一下,使参数生效.也可以用这种方法进行DB迁移.DG搭建好,然后把备库激活就可以了. 这样整个迁移中宕机时间也比较短. Oracle 11g的py ...

  3. Oracle 11g 使用duplicate from active database 创建物理ADG

    1.概述: 之前使用冷备的方式搭建了一个物理ADG环境,但是由于冷备需要停库.因此在一些大型库上使用这种技术就不怎么实用了,而使用duplicatefrom active database则必免了这种 ...

  4. oracle 11g duplicate active database 建立物理DG

    环境: primary: OS: Red Hat Enterprise 5.8 IP: 10.131.119.118 DBVersion: 11.2.0.3.0 db_name: orcl db_un ...

  5. oracle copy database,oracle 11g duplicate from active database 复制数据库(二)

    下面介绍将数据库复制到远程主机相同目录结构的操作步骤 1.创建辅助实例的密码文件(这里辅助实例名为dup) ,在目的主机上为辅助实例创建密码文件可以有以下选项: .手动创建密码文件,对于duplica ...

  6. mysql2ora datacopy,Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库

    我们看一个完整的复制示例: Target DB: IP: 192.168.2.42 SID:orcl Auxiliary: IP:192.168.2.43 SID:orcl 我这里复制的目录相同. 如 ...

  7. 通过RMAN克隆11g数据库(基于active database)

    11g的RMAN duplicate 可以通过Active databaseduplicate和Backup-based duplicate两种方法实现.这里的测试使用的是Active databas ...

  8. Duplicate standby database from active database

    11g Release1 中引入了新的RMAN duplicate命令,即duplicate from active database命令.利用该命令可以更加便捷地创建Data Guard环境,你甚至 ...

  9. Oracle Duplicate database

    Oracle Duplicate database duplicate分为2种模式,1.直接从active状态的库直接复制:2.从目标库的备份文件来复制:现在两种方法都介绍下,直接上干货. 试验环境( ...

  10. Database Appliance并非Mini版的Exadata-还原真实的Oracle Unbreakable Database Appliance

    Oracle甲骨文系统有限公司在北京时间9月23日发布了一款Oracle数据库机即Oracle Database Appliance.Oracle Database Appliance是一款面向中小型 ...

最新文章

  1. 【视频】V4L2之ioctl
  2. Java并发学习之玩转线程池
  3. 西部开源学习笔记BOOK2-《unit 4》
  4. nginx子请求并发处理
  5. C#后台访问前台Html控件的方法
  6. Android One和Android Go有什么区别?
  7. Android studio之导入新库提示Add library ‘Gradle*****@aar‘ to classpath
  8. Linux中软件安装使用的命令是,Linux软件安装命令
  9. 使用C++控制台程序或Python调用Dll创建Qt界面(dll中创建QApplication,qtwinmigrate的使用)
  10. java 通用对象_java 通用对象排序
  11. HTTP 304状态码
  12. 有关Unity编辑器
  13. dos2unix 安装和使用
  14. Mac电脑没有声音,苹果电脑没有声音怎么办
  15. 人生历程中的几个观念瓶颈
  16. 程序员之间的鄙视链,太真实了!
  17. Access denied for user 'mysql用户名'@'主机或IP' (using password: YES)'
  18. 开关稳压DC—DC降压电路简介
  19. 开机后自动关机的功能
  20. 吉林大学 超星慕课 高级语言程序设计 实验05 指针及其在程序设计中的应用(2022级)

热门文章

  1. Atitit. Ati IDE 开发平台的第一版规划
  2. Atitit.手机验证码的破解---伪随机数
  3. atitit..国富论 在现代it企业项目管理中的作用attialx 总结---国富论读后感 attialx
  4. Atitit.故障排除系列---NoClassDefFoundError NoClassDefFoundError
  5. paip.python错误解决20
  6. 呼之欲出的“7万亿”往哪儿去?
  7. 迄今以来在硅谷的最大押注:摩根大通雇超千人专注金融科技
  8. 知乎:tomcat 与 nginx,apache的区别是什么?
  9. 中国民生银行借助Kubernetes的转型 | 凌云时刻
  10. 【深度】中国半导体行业如何从芯片到生态整体突围?