目标库和复制库环境:
OS: Linux Red Hat AS 4
DB Version: 10.2.0.1
 
1.目标库和复制库信息
Rman 中的目标库(target database)指的是被复制的库,复制库(duplicate database)是指复制后生成的新库.这里为了测试方便,复制库和目标库的目录结构设置相同.
 
目标库:
IP:192.168.30.37
SID:oracl
 
复制库:
IP:192.168.30.43
SID:oraclbak
 
2.在复制库上的的操作步骤
执行以下操作的前提是需要安装oracle软件(不创建数据库),需要创建oracle用户.
 
2.1: 创建密码文件(注意linux下密码文件的命名格式是orapw+sid)
[oracle@hxl01 dbs]$cd $ORACLE_HOME/dbs
[oracle@hxl01 dbs]$orapwd file=orapworaclbak password=oracle entries=10 force=y
 
2.2:创建如下目录
mkdir -p /u01/app/oracle/admin/oracl/adump
mkdir -p /u01/app/oracle/admin/oracl/bdump
mkdir -p /u01/app/oracle/admin/oracl/cdump
mkdir -p /u01/app/oracle/admin/oracl/dpdump
mkdir -p /u01/app/oracle/admin/oracl/pfile
mkdir -p /u01/app/oracle/admin/oracl/udump
mkdir -p /u01/app/oracle/oradata/oracl
mkdir -p /u01/app/oracle/flash_recovery_area
 
2.3:创建spfile文件
将在target上创建的pfile(initoracl.ora,具体创建步骤参考3.1)拷贝到Duplicate,修改参数(*.db_name='oraclbak'),其他跟目标库保持一致,然后创建spfile.
Sql>connect /as sysdba;
Sql>create spfile from pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initoracl.ora';
 
2.4:启动数据库到nomount状态
Sql>startup nomount;
2.5:创建监听
[oracle@hxl01 dbs]$netca
2.6:配置tnsname
[oracle@hxl01 dbs]$netmgr
注意要配置到复制duplicate库的连接和到目标target库的连接.
 
3.在目标库上的的操作步骤
3.1:创建pfile文件
SQL>create pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initoracl.ora' from spfile;
3.2:将数据库置于归档模式(若数据库已经在归档模式,该步骤可以省略)
Sql>shutdown immediate;
Sql>startup mount;
Sql>alter database archivelog;
sql>alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/duplicate' scope=both;
sql>alter database open;
 
3.3:备份数据库(我的库有坏块,指定了maxcorrupt)
$rman target /
Rman>run{
set maxcorrupt for datafile 5 to 20;
allocate channel dup type disk;
backup format '/u01/app/oracle/duplicate/df_t%t_s%s_p%p' database;
sql 'alter system archive log current';
backup format '/u01/app/oracle/duplicate/al_t%t_s%s_p%p' archivelog all delete input;
release channel dup;
}
 
3.4:传送文件
将备份好的备份集文件传送到复制库的/app/oracle/duplicate/下.

4.复制数据库
以下操作在复制库duplicate主机上执行.
[oracle@hxl01 duplicate]$ rman target sys/sys@tar_oracl --(这里的tar_oracl是在连接到目标库的tnsname)
RMAN>connect auxiliary sys/oracle@dup_oracl --(这里的dup_oracl是在连接到复制库的tnsname)
 
RMAN>run{
duplicate target database to oraclbak nofilenamecheck
logfile group 1 ('/u01/app/oracle/oradata/oracl/redo1_1.log','/u01/app/oracle/oradata/oracl/redo1_2.log') size 512M,
group 2 ('/u01/app/oracle/oradata/oracl/redo2_1.log','/u01/app/oracle/oradata/oracl/redo2_2.log') size 512M,
group 3 ('/u01/app/oracle/oradata/oracl/redo3_1.log','/u01/app/oracle/oradata/oracl/redo3_2.log') size 512M;
}
-- 这里使用了nofilenamecheck,是因为复制库和目标库的各文件目录一致.
Starting Duplicate Db at 13-FEB-12
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK

contents of Memory Script:
{
   set until scn  1556049;
   set newname for datafile  1 to
 "/u01/app/oracle/oradata/oracl/system01.dbf";
   set newname for datafile  2 to
 "/u01/app/oracle/oradata/oracl/undotbs01.dbf";
   set newname for datafile  3 to
 "/u01/app/oracle/oradata/oracl/sysaux01.dbf";
   set newname for datafile  4 to
 "/u01/app/oracle/oradata/oracl/users01.dbf";
   set newname for datafile  5 to
 "/u01/app/oracle/oradata/oracl/hxl01.dbf";
   restore
   check readonly
   clone database
   ;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 13-FEB-12
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/oracl/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/oracl/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/oracl/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/oracl/users01.dbf
restoring datafile 00005 to /u01/app/oracle/oradata/oracl/hxl01.dbf
channel ORA_AUX_DISK_1: reading from backup piece /u01/app/oracle/duplicate/df_t775114282_s89_p1
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/duplicate/df_t775114282_s89_p1 tag=TAG20120213T053120
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:47
Finished restore at 13-FEB-12
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ORACL" RESETLOGS ARCHIVELOG
  MAXLOGFILES     16
  MAXLOGMEMBERS      3
  MAXDATAFILES      100
  MAXINSTANCES     8
  MAXLOGHISTORY      292
 LOGFILE
  GROUP  1 ( '/u01/app/oracle/oradata/oracl/redo1_1.log', '/u01/app/oracle/oradata/oracl/redo1_2.log' ) SIZE 512 M ,
  GROUP  2 ( '/u01/app/oracle/oradata/oracl/redo2_1.log', '/u01/app/oracle/oradata/oracl/redo2_2.log' ) SIZE 512 M ,
  GROUP  3 ( '/u01/app/oracle/oradata/oracl/redo3_1.log', '/u01/app/oracle/oradata/oracl/redo3_2.log' ) SIZE 512 M
 DATAFILE
  '/u01/app/oracle/oradata/oracl/system01.dbf'
 CHARACTER SET AL32UTF8

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

released channel: ORA_AUX_DISK_1
datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=775102986 filename=/u01/app/oracle/oradata/oracl/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=775102987 filename=/u01/app/oracle/oradata/oracl/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=775102987 filename=/u01/app/oracle/oradata/oracl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=4 stamp=775102987 filename=/u01/app/oracle/oradata/oracl/hxl01.dbf

contents of Memory Script:
{
   set until scn  1556049;
   recover
   clone database
    delete archivelog
   ;
}
executing Memory Script

executing command: SET until clause

Starting recover at 13-FEB-12
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK

starting media recovery

channel ORA_AUX_DISK_1: starting archive log restore to default destination
channel ORA_AUX_DISK_1: restoring archive log
archive log thread=1 sequence=47
channel ORA_AUX_DISK_1: restoring archive log
archive log thread=1 sequence=48
channel ORA_AUX_DISK_1: reading from backup piece /u01/app/oracle/duplicate/al_t775114352_s91_p1
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/duplicate/al_t775114352_s91_p1 tag=TAG20120213T053230
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:16
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_47_7mj0wydg_.arc thread=1 sequence=47
channel clone_default: deleting archive log(s)
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_47_7mj0wydg_.arc recid=2 stamp=775103016
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_48_7mj0x0qm_.arc thread=1 sequence=48
channel clone_default: deleting archive log(s)
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_48_7mj0x0qm_.arc recid=1 stamp=775103009
media recovery complete, elapsed time: 00:00:09
Finished recover at 13-FEB-12

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

database dismounted
Oracle instance shut down

connected to auxiliary database (not started)

Oracle instance started

Total System Global Area     524288000 bytes

Fixed Size                     1220360 bytes
Variable Size                138412280 bytes
Database Buffers             381681664 bytes
Redo Buffers                   2973696 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ORACL" RESETLOGS ARCHIVELOG
  MAXLOGFILES     16
  MAXLOGMEMBERS      3
  MAXDATAFILES      100
  MAXINSTANCES     8
  MAXLOGHISTORY      292
 LOGFILE
  GROUP  1 ( '/u01/app/oracle/oradata/oracl/redo1_1.log', '/u01/app/oracle/oradata/oracl/redo1_2.log' ) SIZE 512 M ,
  GROUP  2 ( '/u01/app/oracle/oradata/oracl/redo2_1.log', '/u01/app/oracle/oradata/oracl/redo2_2.log' ) SIZE 512 M ,
  GROUP  3 ( '/u01/app/oracle/oradata/oracl/redo3_1.log', '/u01/app/oracle/oradata/oracl/redo3_2.log' ) SIZE 512 M
 DATAFILE
  '/u01/app/oracle/oradata/oracl/system01.dbf'
 CHARACTER SET AL32UTF8

contents of Memory Script:
{
   set newname for tempfile  1 to
 "/u01/app/oracle/oradata/oracl/temp01.dbf";
   switch clone tempfile all;
   catalog clone datafilecopy  "/u01/app/oracle/oradata/oracl/undotbs01.dbf";
   catalog clone datafilecopy  "/u01/app/oracle/oradata/oracl/sysaux01.dbf";
   catalog clone datafilecopy  "/u01/app/oracle/oradata/oracl/users01.dbf";
   catalog clone datafilecopy  "/u01/app/oracle/oradata/oracl/hxl01.dbf";
   switch clone datafile all;
}
executing Memory Script

executing command: SET NEWNAME

renamed temporary file 1 to /u01/app/oracle/oradata/oracl/temp01.dbf in control file

cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/undotbs01.dbf recid=1 stamp=775103080

cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/sysaux01.dbf recid=2 stamp=775103081

cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/users01.dbf recid=3 stamp=775103083

cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/hxl01.dbf recid=4 stamp=775103084

datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=775103080 filename=/u01/app/oracle/oradata/oracl/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=775103081 filename=/u01/app/oracle/oradata/oracl/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=775103083 filename=/u01/app/oracle/oradata/oracl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=4 stamp=775103084 filename=/u01/app/oracle/oradata/oracl/hxl01.dbf

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

database opened
Finished Duplicate Db at 13-FEB-12

小插曲:
数据库打开后使用sysdba登陆提示ORA-01031: insufficient privileges,找了半天原因是密码文件命名问题, 之前创建密码文件名为orapwdoraclbak,将其修改为orapworaclbak,问题解决,注意在linux下密码文件的命名格式为orapw+sid.
SQL> connect sys/oracle@dup_oracl as sysdba
ERROR:
ORA-01031: insufficient privileges
 
常见问题:
1.恢复的时候找不到某个归档日志
在复制数据库恢复的过程中找不到具体某个归档日志会报如下错误:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 02/14/2012 01:01:41
RMAN-03015: error occurred in stored script Memory Script
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of log thread 1 seq 53 lowscn 1597845 found to restore
 
这个时候需要将目标库的该归档日志拷贝过来或是在做复制的时候使用set until指定具体恢复到某个sequence或是scn,如:
 
run{
SET until sequence 52;
duplicate target database to oraclbak nofilenamecheck
logfile group 1 ('/u01/app/oracle/oradata/oracl/redo1_1.log','/u01/app/oracle/oradata/oracl/redo1_2.log') size 512M,
group 2 ('/u01/app/oracle/oradata/oracl/redo2_1.log','/u01/app/oracle/oradata/oracl/redo2_2.log') size 512M,
group 3 ('/u01/app/oracle/oradata/oracl/redo3_1.log','/u01/app/oracle/oradata/oracl/redo3_2.log') size 512M;
}
 
--The End--
转:http://blog.chinaunix.net/uid-77311-id-3066925.html

使用rman中的duplicate复制数据库的更多相关文章

  1. 11g 使用rman duplicate复制数据库,创建辅助实例

    一,创建所需目录 1)创建审计文件目录 PROD1@dbrac1 /dsg/oracle11$ cd $ORACLE_BASE/admin PROD1@dbrac1 /u01/app/oracle/a ...

  2. Oracle 11gR2使用RMAN duplicate复制数据库

    11g的RMAN duplicate 个人感觉比10g的先进了很多,10g需在rman备份的基础上进行复制,使用RMAN duplicate创建一个数据完全相同但DBID不同的数据库.而11g的RMA ...

  3. Oracle 11gR2 使用RMAN Duplicate复制数据库

    Oracle 11gR2 使用RMAN Duplicate复制数据库     前言:     上周刚做完一个项目,用户要求RAC的数据库可以自己主动备份到另外一个单节点上,单节点可以正常拿起来就能用. ...

  4. Duplicate复制数据库并创建物理StandBy(spfile+不同实例名+不同路径)

    过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...

  5. Duplicate复制数据库并创建物理StandBy(spfile+不同实例名)

    过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...

  6. Duplicate复制数据库并创建物理StandBy(spfile版本)

    过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...

  7. Duplicate 复制数据库 搭建Dataguard

    1 操作系统环境 此处隐藏具体信息 System IP-address db_name db_version Comment         Target DB         Auxiliary D ...

  8. RMAN_学习实验2_RMAN Duplicate复制数据库过程(案例)

    待整理 对于基于生产环境下的数据库的版本升级或者测试新的应用程序的性能及其影响,备份恢复等等,我们可以采取从生产环境以克隆的方式将其克隆到本地而不影响生产数据库的正常使用.实现这个功能我们可以借助rm ...

  9. RMAN中建立Catalog 用数据库的例子

    RMAN中可以备份metadata到control文件,也可以备份metadata到数据库中,此数据库称为catalog database. 本文参考网上文章,建立一个例子: 使用机器: 机器1:ta ...

随机推荐

  1. 解决使用IIS5.0配置的FTP服务器,客户端浏览器访问时无法获取目录列表的问题。

    我在windows xp sp3下利用iis构架了FTP服务器,允许且只允许匿名用户登陆.但刚开始配置好后,不管是使用命令行模式还是使用浏览器都发现无法访问. 于是怀疑防火墙屏蔽端口所致,果不其然,在 ...

  2. Matlab单一变量曲线拟合-cftool

    2.启动曲线拟合工具箱>cftool 3.进入曲线拟合工具箱界面“Curve Fitting tool”(1)点击“Data”按钮,弹出“Data”窗口:(2)利用X data和Y data的下 ...

  3. 网络图片下载缓存库SDWebImage的使用

    SDWebImage导入问题 最新的SDWebImage由于是基于ARC模式写的,如果创建的是非ARC醒目的童鞋们注意,导入文件夹之后,先添加ImageIO.framework,mapKit.fram ...

  4. LeetCode----3 Sum

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  5. Editplus 正则表达式 删除含有指定字符串的行 删除注释

    1.删除含有指定字符串的行 替换:  ^.*(指定字符串).*$  为空 例如,删除含有"JOIN"的行, 替换:  ^.*JOIN.*$   为空 2.删除//行注释 替换: / ...

  6. 第一个Sprint冲刺事后诸葛报告

    用户反馈:软件一般般,比较传统. 用户数量:5 团队改进建议:选择题与填空题太没有新意了,需要新的创新功能. 1.每个成员第一个sprint阶段有何需要改进? 成员 需要改进 邵家文 需要更多的技术的 ...

  7. socket() failed (13: Permission denied) while connecting to upstream

    /*************************************************************************** * socket() failed (13: ...

  8. I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking

    /******************************************************************** * I.MX6 mfgtool2-android-mx6q- ...

  9. 命令行创建畸形文件夹+畸形目录管理工具(DeformityPath)

    命令行创建畸形文件夹: 第一步:在运行中输入cmd,回车,打开命令行窗口 第二步:在命令行窗口中切换到想要建立文件夹的硬盘分区,如D盘(输入d:) 第三步:输入 MD 123..\ 回车,注意文件夹名 ...

  10. Ubuntu下adb的安装

    1.adb简述: adb全称Android Debug Bridge,安卓调试桥接器.它是Android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备 ...