各位大侠请指教,我用RMAN备份了数据库,我想在另外一台机器上建立一个完全一样的数据库,请问使用RMAN备份的那两个数据文件可不可以做到?如果能做到,应该怎么做?如果做不到,有什么办法可以在另一台机器上建立一个完全一样的数据库?是否要用到其他方式的备份?请各位大侠把操作的过程说的详细一些,我ORACLE是个二把刀,谢谢了

解决方案 »

  1.   

    RMAN复制数据库虽然麻烦些,但是与EXP相比,不用在新库建相应的数据文件就能得到与原库一样物理结构的新库。
    具体过程步骤还是比较多,不好写可以去网上搜搜一大堆。
    帮你搜个:http://hi.baidu.com/dbaeyes/blog/item/78d08d1fc6e5600f304e15bf.html
      

  2.   

    rman能不能恢复一个复制环境,主要看你rman备份是否完全并正确。
    给你一个例子,讲的比较详细(zt):
    注意:没有catalog也可以duplicate
    要确保一个database full backup!
    9i 下大致过程!
    C:>rman catalog rman/rman@dmt target sys/system@lmt
    恢复管理器: 版本9.2.0.1.0 - Production
    Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
    连接到目标数据库: LMT (DBID=2004730922)
    连接到恢复目录数据库
    RMAN> run {
    2> set newname for datafile 1 to 'c:oracleoradatadupsystem01.dbf';
    3> set newname for datafile 2 to 'c:oracleoradatadupundotbs01.dbf';
    4> duplicate target database to dup
    5> pfile='c:oracleadminduppfileinit.ora'
    6> logfile
    7> 'c:oracleoradatadupredo01.log' size 1m,
    8> 'c:oracleoradatadupredo02.log' size 1m,
    9> 'c:oracleoradatadupredo03.log' size 1m;
    10> }
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    启动 Duplicate Db 于 03-6月 -06
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of Duplicate Db command at 06/03/2006 20:39:38
    RMAN-06174: not connected to auxiliary database
    RMAN> connect auxiliary sys/system@dup
    已连接到备用数据库: DUP (未安装)
    RMAN> run {
    2> set newname for datafile 1 to 'c:oracleoradatadupsystem01.dbf';
    3> set newname for datafile 2 to 'c:oracleoradatadupundotbs01.dbf';
    4> duplicate target database to dup
    5> pfile='c:oracleadminduppfileinit.ora'
    6> logfile
    7> 'c:oracleoradatadupredo01.log' size 1m,
    8> 'c:oracleoradatadupredo02.log' size 1m,
    9> 'c:oracleoradatadupredo03.log' size 1m;
    10> }
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    启动 Duplicate Db 于 03-6月 -06
    分配的通道: ORA_AUX_DISK_1
    通道 ORA_AUX_DISK_1: sid=10 devtype=DISK
    正在打印存储的脚本: Memory Script
    {
    set until scn 51885;
    set newname for datafile 1 to
    "C:ORACLEORADATADUPSYSTEM01.DBF";
    set newname for datafile 2 to
    "C:ORACLEORADATADUPUNDOTBS01.DBF";
    restore
    check readonly
    clone database
    ;
    }
    正在执行脚本: Memory Script
    正在执行命令: SET until clause
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    启动 restore 于 03-6月 -06
    使用通道 ORA_AUX_DISK_1
    通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
    通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
    正将数据文件00001恢复到C:ORACLEORADATADUPSYSTEM01.DBF
    正将数据文件00002恢复到C:ORACLEORADATADUPUNDOTBS01.DBF
    通道 ORA_AUX_DISK_1: 已恢复备份段 1
    段 handle=C:ORACLEORA92DATABASE8HKNE2A_1_1 tag=TAG20060603T181538 params=NU
    LL
    通道 ORA_AUX_DISK_1: 恢复完成
    完成 restore 于 03-6月 -06
    sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "dup" RESETLOGS ARCHIVELOG
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 453
    LOGFILE
    GROUP 1 'c:oracleoradatadupredo01.log' SIZE 1048576 ,
    GROUP 2 'c:oracleoradatadupredo02.log' SIZE 1048576 ,
    GROUP 3 'c:oracleoradatadupredo03.log' SIZE 1048576
    DATAFILE
    'C:ORACLEORADATADUPSYSTEM01.DBF'
    CHARACTER SET ZHS16GBK正在打印存储的脚本: Memory Script
    {
    switch clone datafile all;
    }
    正在执行脚本: Memory Script
    数据文件 2 已转换成数据文件副本
    输入数据文件副本 recid=1 stamp=592173637 文件名=C:ORACLEORADATADUPUNDOTBS01.
    DBF
    正在打印存储的脚本: Memory Script
    {
    set until scn 51885;
    recover
    clone database
    delete archivelog
    ;
    }
    正在执行脚本: Memory Script
    正在执行命令: SET until clause
    启动 recover 于 03-6月 -06
    使用通道 ORA_AUX_DISK_1
    正在开始介质的恢复
    存档日志线程 1 序列 2 已作为文件 C:ORACLEORA92RDBMSARC00002.001 存在于磁盘上
    存档日志文件名 =C:ORACLEORA92RDBMSARC00002.001 线程 =1 序列 =2
    完成介质的恢复
    完成 recover 于 03-6月 -06
    正在打印存储的脚本: Memory Script
    {
    shutdown clone;
    startup clone nomount pfile= 'c:oracleadminduppfileinit.ora';
    }
    正在执行脚本: Memory Script
    数据库已卸载
    Oracle 例程已关闭
    已连接到备用数据库 (未启动)
    Oracle 例程已启动
    系统全局区域总计 101784276 字节
    Fixed Size 453332 字节
    Variable Size 75497472 字节
    Database Buffers 25165824 字节
    Redo Buffers 667648 字节
    sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "dup" RESETLOGS ARCHIVELOG
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 453
    LOGFILE
    GROUP 1 'c:oracleoradatadupredo01.log' SIZE 1048576 ,
    GROUP 2 'c:oracleoradatadupredo02.log' SIZE 1048576 ,
    GROUP 3 'c:oracleoradatadupredo03.log' SIZE 1048576
    DATAFILE
    'C:ORACLEORADATADUPSYSTEM01.DBF'
    CHARACTER SET ZHS16GBK正在打印存储的脚本: Memory Script
    {
    catalog clone datafilecopy "C:ORACLEORADATADUPUNDOTBS01.DBF";
    switch clone datafile all;
    }
    正在执行脚本: Memory Script
    已将数据文件副本列入目录
    数据文件副本 filename=C:ORACLEORADATADUPUNDOTBS01.DBF recid=1 stamp=59217380
    1
    数据文件 2 已转换成数据文件副本
    输入数据文件副本 recid=1 stamp=592173801 文件名=C:ORACLEORADATADUPUNDOTBS01.
    DBF
    正在打印存储的脚本: Memory Script
    {
    Alter clone database open resetlogs;
    }
    正在执行脚本: Memory Script
    数据库已打开
    完成 Duplicate Db 于 03-6月 -06
    RMAN>
      

  3.   

    --==============================================
    10g下大致过程:
    duplicate database时没有catalog也行!
    C:>rman target sys/system@orcl catalog rman/rman@test auxiliary sys/system@dup
    恢复管理器: Release 10.2.0.1.0 - Production on 星期一 12月 25 14:09:14 2006
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    连接到目标数据库: ORCL (DBID=1136768294)
    连接到恢复目录数据库
    已连接到辅助数据库: DUP (未装载)
    RMAN> run{
    2> set newname for datafile 1 to 'E:ORACLEPRODUCT10.2.0ORADATAdupSYSTEM01.
    DBF';
    3> set newname for datafile 2 to 'E:ORACLEPRODUCT10.2.0ORADATAdupUNDOTBS01
    .DBF';
    4> set newname for datafile 3 to 'E:ORACLEPRODUCT10.2.0ORADATAdupSYSAUX01.
    DBF';
    5> set newname for datafile 4 to 'E:ORACLEPRODUCT10.2.0ORADATAdupUSERS01.D
    BF';
    6> set newname for datafile 5 to 'E:ORACLEPRODUCT10.2.0ORADATAdupTEST.DBF'
    ;
    7> set newname for datafile 8 to 'E:ORACLEPRODUCT10.2.0ORADATAdupTEST3.DBF
    ';
    8> duplicate target database to dup skip tablespace test1
    9> logfile
    10> 'E:ORACLEPRODUCT10.2.0ORADATAdupredo01.log' size 10m,
    11> 'E:ORACLEPRODUCT10.2.0ORADATAdupredo02.log' size 10m,
    12> 'E:ORACLEPRODUCT10.2.0ORADATAdupredo03.log' size 10m;
    13> }
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    启动 Duplicate Db 于 25-12月-06
    分配的通道: ORA_AUX_DISK_1
    通道 ORA_AUX_DISK_1: sid=24 devtype=DISK
    根据请求跳过数据文件 6
    根据请求跳过数据文件 7
    内存脚本的内容:
    {
    set until scn 742507;
    set newname for datafile 1 to
    "E:ORACLEPRODUCT10.2.0ORADATADUPSYSTEM01.DBF";
    set newname for datafile 2 to
    "E:ORACLEPRODUCT10.2.0ORADATADUPUNDOTBS01.DBF";
    set newname for datafile 3 to
    "E:ORACLEPRODUCT10.2.0ORADATADUPSYSAUX01.DBF";
    set newname for datafile 4 to
    "E:ORACLEPRODUCT10.2.0ORADATADUPUSERS01.DBF";
    set newname for datafile 5 to
    "E:ORACLEPRODUCT10.2.0ORADATADUPTEST.DBF";
    set newname for datafile 8 to
    "E:ORACLEPRODUCT10.2.0ORADATADUPTEST3.DBF";
    restore
    check readonly
    clone database
    skip tablespace TEST1 ;
    }
    正在执行内存脚本
    正在执行命令: SET until clause
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    启动 restore 于 25-12月-06
    使用通道 ORA_AUX_DISK_1
    通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
    通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
    正将数据文件00001恢复到E:ORACLEPRODUCT10.2.0ORADATADUPSYSTEM01.DBF
    正将数据文件00002恢复到E:ORACLEPRODUCT10.2.0ORADATADUPUNDOTBS01.DBF
    正将数据文件00003恢复到E:ORACLEPRODUCT10.2.0ORADATADUPSYSAUX01.DBF
    正将数据文件00004恢复到E:ORACLEPRODUCT10.2.0ORADATADUPUSERS01.DBF
    正将数据文件00005恢复到E:ORACLEPRODUCT10.2.0ORADATADUPTEST.DBF
    正将数据文件00008恢复到E:ORACLEPRODUCT10.2.0ORADATADUPTEST3.DBF
    通道 ORA_AUX_DISK_1: 正在读取备份段 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREA
    ORCLBACKUPSET2006_12_23O1_MF_NNNDF_TAG20061223T164719_2RSV8VM1_.BKP
    通道 ORA_AUX_DISK_1: 已恢复备份段 1
    段句柄 = E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLBACKUPSET2006_12_23
    O1_MF_NNNDF_TAG20061223T164719_2RSV8VM1_.BKP 标记 = TAG20061223T164719
    通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:55
    完成 restore 于 25-12月-06
    sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "DUP" RESETLOGS ARCHIVELOG
    MAXLOGFILES 4220
    MAXLOGMEMBERS 5
    MAXDATAFILES 65534
    MAXINSTANCES 1055
    MAXLOGHISTORY 10225
    LOGFILE
    GROUP 1 'E:ORACLEPRODUCT10.2.0ORADATAdupredo01.log' SIZE 10 M ,
    GROUP 2 'E:ORACLEPRODUCT10.2.0ORADATAdupredo02.log' SIZE 10 M ,
    GROUP 3 'E:ORACLEPRODUCT10.2.0ORADATAdupredo03.log' SIZE 10 M
    DATAFILE
    'E:ORACLEPRODUCT10.2.0ORADATADUPSYSTEM01.DBF'
    CHARACTER SET ZHS16GBK内存脚本的内容:
    {
    switch clone datafile all;
    }
    正在执行内存脚本
    释放的通道: ORA_AUX_DISK_1
    数据文件 2 已转换成数据文件副本
    输入数据文件副本 recid=1 stamp=610121450 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPUNDOTBS01.DBF
    数据文件 3 已转换成数据文件副本
    输入数据文件副本 recid=2 stamp=610121450 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPSYSAUX01.DBF
    数据文件 4 已转换成数据文件副本
    输入数据文件副本 recid=3 stamp=610121450 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPUSERS01.DBF
    数据文件 5 已转换成数据文件副本
    输入数据文件副本 recid=4 stamp=610121450 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPTEST.DBF
    数据文件 8 已转换成数据文件副本
    输入数据文件副本 recid=5 stamp=610121450 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPTEST3.DBF
    内存脚本的内容:
    {
    set until scn 742507;
    recover
    clone database
    delete archivelog
    ;
    }
    正在执行内存脚本
    正在执行命令: SET until clause
    启动 recover 于 25-12月-06
    分配的通道: ORA_AUX_DISK_1
    通道 ORA_AUX_DISK_1: sid=23 devtype=DISK
    数据文件6未被处理, 因为文件已脱机
    数据文件7未被处理, 因为文件已脱机
    正在开始介质的恢复
    存档日志线程 1 序列 5 已作为文件 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAOR
    CLARCHIVELOG2006_12_24O1_MF_1_5_2RVZ8K8S_.ARC 存在于磁盘上
    存档日志线程 1 序列 6 已作为文件 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAOR
    CLARCHIVELOG2006_12_25O1_MF_1_6_2RYQRF0Z_.ARC 存在于磁盘上
    存档日志文件名 =E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG200
    6_12_24O1_MF_1_5_2RVZ8K8S_.ARC 线程 =1 序列 =5
    存档日志文件名 =E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG200
    6_12_25O1_MF_1_6_2RYQRF0Z_.ARC 线程 =1 序列 =6
    介质恢复完成, 用时: 00:00:10
    完成 recover 于 25-12月-06
    内存脚本的内容:
    {
    shutdown clone;
    startup clone nomount ;
    }
    正在执行内存脚本
    数据库已卸载
    Oracle 实例已关闭
    已连接到辅助数据库 (未启动)
    Oracle 实例已启动
    系统全局区域总计 167772160 字节
    Fixed Size 1247900 字节
    Variable Size 58721636 字节
    Database Buffers 104857600 字节
    Redo Buffers 2945024 字节
    sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "DUP" RESETLOGS ARCHIVELOG
    MAXLOGFILES 4220
    MAXLOGMEMBERS 5
    MAXDATAFILES 65534
    MAXINSTANCES 1055
    MAXLOGHISTORY 10225
    LOGFILE
    GROUP 1 'E:ORACLEPRODUCT10.2.0ORADATAdupredo01.log' SIZE 10 M ,
    GROUP 2 'E:ORACLEPRODUCT10.2.0ORADATAdupredo02.log' SIZE 10 M ,
    GROUP 3 'E:ORACLEPRODUCT10.2.0ORADATAdupredo03.log' SIZE 10 M
    DATAFILE
    'E:ORACLEPRODUCT10.2.0ORADATADUPSYSTEM01.DBF'
    CHARACTER SET ZHS16GBK内存脚本的内容:
    {
    catalog clone datafilecopy "E:ORACLEPRODUCT10.2.0ORADATADUPUNDOTBS01.D
    BF";
    catalog clone datafilecopy "E:ORACLEPRODUCT10.2.0ORADATADUPSYSAUX01.DB
    F";
    catalog clone datafilecopy "E:ORACLEPRODUCT10.2.0ORADATADUPUSERS01.DBF
    ";
    catalog clone datafilecopy "E:ORACLEPRODUCT10.2.0ORADATADUPTEST.DBF";
    catalog clone datafilecopy "E:ORACLEPRODUCT10.2.0ORADATADUPTEST3.DBF";
    switch clone datafile all;
    }
    正在执行内存脚本
    已将数据文件副本列入目录
    数据文件副本 filename=E:ORACLEPRODUCT10.2.0ORADATADUPUNDOTBS01.DBF recid=1
    stamp=610122070
    已将数据文件副本列入目录
    数据文件副本 filename=E:ORACLEPRODUCT10.2.0ORADATADUPSYSAUX01.DBF recid=2
    stamp=610122072
    已将数据文件副本列入目录
    数据文件副本 filename=E:ORACLEPRODUCT10.2.0ORADATADUPUSERS01.DBF recid=3 s
    tamp=610122073
    已将数据文件副本列入目录
    数据文件副本 filename=E:ORACLEPRODUCT10.2.0ORADATADUPTEST.DBF recid=4 stam
    p=610122074
    已将数据文件副本列入目录
    数据文件副本 filename=E:ORACLEPRODUCT10.2.0ORADATADUPTEST3.DBF recid=5 sta
    mp=610122076
    数据文件 2 已转换成数据文件副本
    输入数据文件副本 recid=1 stamp=610122070 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPUNDOTBS01.DBF
    数据文件 3 已转换成数据文件副本
    输入数据文件副本 recid=2 stamp=610122072 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPSYSAUX01.DBF
    数据文件 4 已转换成数据文件副本
    输入数据文件副本 recid=3 stamp=610122073 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPUSERS01.DBF
    数据文件 5 已转换成数据文件副本
    输入数据文件副本 recid=4 stamp=610122074 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPTEST.DBF
    数据文件 8 已转换成数据文件副本
    输入数据文件副本 recid=5 stamp=610122076 文件名=E:ORACLEPRODUCT10.2.0ORADATA
    DUPTEST3.DBF
    内存脚本的内容:
    {
    Alter clone database open resetlogs;
    }
    正在执行内存脚本
    数据库已打开
    内存脚本的内容:
    {
    # drop offline and skipped tablespaces
    sql clone "drop tablespace TEST1 including contents cascade constraints";
    }
    正在执行内存脚本
    sql 语句: drop tablespace TEST1 including contents cascade constraints
    完成 Duplicate Db 于 25-12月-06
    RMAN>
      

  4.   

    当然你也可以使用dg方式直接生成一个数据库,然后使用failover方式切换成primary database.
      

  5.   

    不太会用RMAN,不熟悉这个的情况我一般用 exp/imp 来实现从一台机器到另一台机器的数据库移动。
      

  6.   

    完全可以。不过想简单点的话,oracle安装路径,参数设置需要和原来的一模一样
      

  7.   

    如果急的话,可以用imp/exp来做,简单一些
      

  8.   

    我现在就有用RMAN备份的两个文件,和一台新的机器啊,请问如何恢复,谢谢了
      

  9.   

    http://ningoo.itpub.net/post/2149/190772
      

  10.   

    实际上也不一定需要clone。直接restore也是可以的,从原库将控制文件备份一个复制过去,然后就和原库损坏要做恢复一样的操作。看看rman的手册吧,会备份,还要会恢复才行,不要要备份做什么用
      

  11.   

    我做了次实验,按以下步骤成功了:1. 首先我们需要创建新的instance 请准备好相应的目录结构。2.然后需要创建参数文件pfile(你可以使用原库的pfile进行修改)
    新增(后为备库):
    DB_FILE_NAME_CONVERT=('E:\oracle\oradata\ning\','E:\oracle\oradata\test\') 
    LOG_FILE_NAME_CONVERT=('E:\oracle\oradata\ning\','E:\oracle\oradata\test\')3.使用oradim创建新的instance 4.使用orapwd创建password文件 5.配置好监听和tnsnames6.使用rman备份原库:backup full database;7.备库nomount8.使用rman复制数据库:
    rman target sys/ning@ning AUXILIARY sys/test@test 
    DUPLICATE TARGET DATABASE TO '备库sid';9.然后去掉inittest.ora的DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数,再使用该文件生成spfile 
      

  12.   

    8.使用rman复制数据库:
    rman target sys/ning@ning AUXILIARY sys/test@test
    DUPLICATE TARGET DATABASE TO '备库sid'; 这是22楼朋友回复里的一条,看这个样子,还需要用到原库啊?我前面说了,只有RMAN备份的文件和一台新服务器啊