ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用RMAN创建Duplicate数据库

使用RMAN创建Duplicate数据库

原创 Linux操作系统 作者:byfree 时间:2009-04-22 13:17:52 0 删除 编辑

主要操作步骤:

1.       创建auxiliary instance的口令文件

2.       配置auxiliary instance的监听和tnsnames.ora

3.       创建auxiliary instance的参数文件

4.       启动auxiliary instancenomount状态

5.       target database open or mount

6.       保证备份文件和归档文件可用

7.       RMAN中执行DUPLICATE命令

 

环境:

Windows xp

Oracle 10.2.0.1

同一台机器做duplicate

 

1.      创建auxiliary instance的口令文件

先创建aux实例:

C:\>oradim -NEW -SID aux

实例已创建。

 

创建口令文件:

C:\>orapwd file=D:\oracle\product\10.2.0\db_1\database\PWDaux.ora password=sys

 

2.      配置auxiliary instance的监听和tnsnames.ora

listener.ora中增加:

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

      (SID_NAME = aux)

)

tnsnames.ora中增加:

aux =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SID = aux)

    )

  )

使用tnsping验证:

C:\>tnsping aux

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-4 -2009 09:47:35

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

已使用的参数文件:

D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = aux))) OK (10 毫秒)

 

3.      创建auxiliary instance的参数文件

创建参数文件d:\initaux.ora,内容如下:

compatible='10.2.0.1.0'

db_name='aux'

db_block_size=8192

SHARED_POOL_SIZE=50M

CONTROL_FILES='D:\oracle\product\10.2.0\oradata\auxi\control01.ctl'

DB_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\orcl','D:\oracle\product\10.2.0\oradata\auxi'

LOG_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\orcl','D:\oracle\product\10.2.0\oradata\auxi'

还必须创建D:\oracle\product\10.2.0\oradata\auxi目录

 

4. 启动auxiliary instancenomount状态

C:\>set oracle_sid=aux

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 4 22 09:35:00 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

已连接到空闲例程。

 

SQL> startup nomount pfile=d:\initaux.ora

ORACLE 例程已经启动。

 

Total System Global Area  117440512 bytes

Fixed Size                  1247588 bytes

Variable Size              58721948 bytes

Database Buffers           50331648 bytes

Redo Buffers                7139328 bytes

SQL> create spfile from pfile='d:\initaux.ora';

 

文件已创建。

 

再用spfile重启auxiliary instance,并exit

SQL> shutdown immediate

ORA-01507: ??????

 

 

ORACLE 例程已经关闭。

SQL> startup nomount

ORACLE 例程已经启动。

 

Total System Global Area  138412032 bytes

Fixed Size                  1247708 bytes

Variable Size              79693348 bytes

Database Buffers           50331648 bytes

Redo Buffers                7139328 bytes

SQL> exit

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 断开

 

5. target database open or mount

确认target database状态为open mount

 

6. 保证备份文件和归档文件可用

备份target database

C:\>rman target /

RMAN> backup as compressed backupset database format='d:\full_%U.ora' plus archivelog;

RMAN> exit

由于是在同一台机器做duplicate,备份文件和归档日志不用复制。

 

7. RMAN中执行DUPLICATE命令

C:\>rman target / auxiliary sys/sys@aux

 

恢复管理器: Release 10.2.0.1.0 - Production on 星期三 4 22 11:40:03 2009

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

连接到目标数据库: ORCL (DBID=1212147403)

已连接到辅助数据库: AUX (未装载)

 

RMAN> duplicate target database to aux;

 

启动 Duplicate Db 22-4 -09

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=36 devtype=DISK

 

内存脚本的内容:

{

   set until scn  771578;

   set newname for datafile  1 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF";

   set newname for datafile  2 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF";

   set newname for datafile  3 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF";

   set newname for datafile  4 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF";

   set newname for datafile  5 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF";

   restore

   check readonly

   clone database

   ;

}

正在执行内存脚本

 

正在执行命令: SET until clause

 

正在执行命令: SET NEWNAME

 

正在执行命令: SET NEWNAME

 

正在执行命令: SET NEWNAME

 

正在执行命令: SET NEWNAME

 

正在执行命令: SET NEWNAME

 

启动 restore 22-4 -09

使用通道 ORA_AUX_DISK_1

 

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集

通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件

正将数据文件00001恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF

正将数据文件00002恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF

正将数据文件00003恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF

正将数据文件00004恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF

正将数据文件00005恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF

通道 ORA_AUX_DISK_1: 正在读取备份段 D:\FULL_0EKD3RRO_1_1.ORA

通道 ORA_AUX_DISK_1: 已恢复备份段 1

段句柄 = D:\FULL_0EKD3RRO_1_1.ORA 标记 = TAG20090422T111608

通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:46

完成 restore 22-4 -09

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "AUX" RESETLOGS ARCHIVELOG

  MAXLOGFILES     16

  MAXLOGMEMBERS      3

  MAXDATAFILES      100

  MAXINSTANCES     8

  MAXLOGHISTORY      292

 LOGFILE

  GROUP  1 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO01.LOG' ) SIZE 50 M  REUSE,

  GROUP  2 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO02.LOG' ) SIZE 50 M  REUSE,

  GROUP  3 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO03.LOG' ) SIZE 50 M  REUSE

 DATAFILE

  'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF'

 CHARACTER SET ZHS16GBK

 

 

内存脚本的内容:

{

   switch clone datafile all;

}

正在执行内存脚本

 

释放的通道: ORA_AUX_DISK_1

数据文件 2 已转换成数据文件副本

输入数据文件副本 recid=1 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF

数据文件 3 已转换成数据文件副本

输入数据文件副本 recid=2 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF

数据文件 4 已转换成数据文件副本

输入数据文件副本 recid=3 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF

数据文件 5 已转换成数据文件副本

输入数据文件副本 recid=4 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF

 

内存脚本的内容:

{

   set until scn  771578;

   recover

   clone database

    delete archivelog

   ;

}

正在执行内存脚本

 

正在执行命令: SET until clause

 

启动 recover 22-4 -09

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=36 devtype=DISK

 

正在开始介质的恢复

 

存档日志线程 1 序列 16 已作为文件 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_16_4YX3191Y_.ARC 存在于磁盘上

存档日志线程 1 序列 17 已作为文件 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_17_4YX34WH4_.ARC 存在于磁盘上

存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_16_4YX3191Y_.ARC 线程 =1 序列 =16

存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_17_4YX34WH4_.ARC 线程 =1 序列 =17

介质恢复完成, 用时: 00:00:02

完成 recover 22-4 -09

 

内存脚本的内容:

{

   shutdown clone;

   startup clone nomount ;

}

正在执行内存脚本

 

数据库已卸载

Oracle 实例已关闭

 

已连接到辅助数据库 (未启动)

Oracle 实例已启动

 

系统全局区域总计     138412032 字节

 

Fixed Size                     1247708 字节

Variable Size                 79693348 字节

Database Buffers              50331648 字节

Redo Buffers                   7139328 字节

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "AUX" RESETLOGS ARCHIVELOG

  MAXLOGFILES     16

  MAXLOGMEMBERS      3

  MAXDATAFILES      100

  MAXINSTANCES     8

  MAXLOGHISTORY      292

 LOGFILE

  GROUP  1 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO01.LOG' ) SIZE 50 M  REUSE,

  GROUP  2 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO02.LOG' ) SIZE 50 M  REUSE,

  GROUP  3 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO03.LOG' ) SIZE 50 M  REUSE

 DATAFILE

  'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF'

 CHARACTER SET ZHS16GBK

 

 

内存脚本的内容:

{

   set newname for tempfile  1 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\TEMP01.DBF";

   switch clone tempfile all;

   catalog clone datafilecopy  "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF";

   catalog clone datafilecopy  "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF";

   catalog clone datafilecopy  "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF";

   catalog clone datafilecopy  "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF";

   switch clone datafile all;

}

正在执行内存脚本

 

正在执行命令: SET NEWNAME

 

临时文件 1 在控制文件中已重命名为 D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\TEMP01.DBF

 

已将数据文件副本列入目录

数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF recid=1 stamp=684848472

 

已将数据文件副本列入目录

数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF recid=2 stamp=684848473

 

已将数据文件副本列入目录

数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF recid=3 stamp=684848473

 

已将数据文件副本列入目录

数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF recid=4 stamp=684848473

 

数据文件 2 已转换成数据文件副本

输入数据文件副本 recid=1 stamp=684848472 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF

数据文件 3 已转换成数据文件副本

输入数据文件副本 recid=2 stamp=684848473 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF

数据文件 4 已转换成数据文件副本

输入数据文件副本 recid=3 stamp=684848473 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF

数据文件 5 已转换成数据文件副本

输入数据文件副本 recid=4 stamp=684848473 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF

 

内存脚本的内容:

{

   Alter clone database open resetlogs;

}

正在执行内存脚本

 

数据库已打开

完成 Duplicate Db 22-4 -09

 

这个过程中可能会出现如下报错:

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: Duplicate Db 命令 ( 04/22/2009 10:41:16 ) 失败

RMAN-03015: 在存储的脚本Memory Script中出现错误

RMAN-06026: 有些目标没有找到 - 终止恢复

RMAN-06023: 没有找到数据文件5的副本来恢复

RMAN-06023: 没有找到数据文件4的副本来恢复

RMAN-06023: 没有找到数据文件3的副本来恢复

RMAN-06023: 没有找到数据文件2的副本来恢复

RMAN-06023: 没有找到数据文件1的副本来恢复

 

错误指出的是无法找到相关备份文件,可通过

RMAN> restore validate database;

检查备份的有效性,如不是备份问题,则说明需要通过切换一个归档解决

RMAN> sql 'alter system switch logfile';

 

此错误在metalink中的描述如下:

Doc ID:  Note:108883.1

Subject:  RMAN-06023 when Duplicating a Database

Solution Description

--------------------

You must issue a log switch and backup the archivelogs as well. This error is indicating that all pieces required to perform. the duplication are not present.When you issue a backup script. which backs up all of the archivelogs (after a log switch), the duplicate database script. completes successfully.

 

Explanation

-----------

You must also back up the archivelogs in order to perform. a duplicate from a hot backup.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17997/viewspace-591401/,如需转载,请注明出处,否则将追究法律责任。

上一篇: DATAGUARD SWITCHOVER
下一篇: RMAN全自动TSPITR
请登录后发表评论 登录
全部评论

注册时间:2008-04-16

  • 博文量
    65
  • 访问量
    212920