oracle创建克隆数据库卡在2,如何使用RMAN在两机器间克隆数据库[原创]

本文详细介绍了如何使用RMAN在两台Windows2000SERVERSP4环境下,通过ORACLE9205数据库进行全库备份、参数文件修改、克隆数据库的过程。关键步骤包括:目标数据库备份、参数文件备份与修改、克隆数据库实例创建、监听器配置、日志备份、RMAN克隆操作等。特别强调了备份日志的重要性及备份集的位置一致性。最后,文章总结了克隆过程中应注意的两点:备份日志和备份集的位置。
摘要由CSDN通过智能技术生成

关键字:目标、目录、克隆、日志、

目标数据库和克隆数据库分别在两台机器,其环境都一样:

WINDOWS 2000 SERVER SP4、IE6.1,  ORACLE9205

在本文中,使用的是目标数据库上的RMAN,目录数据库在第3台机器上,

操作步骤:

1、连接目标数据库,对目标数据库做全库备份

D:\ORACLE\BIN>rman

恢复管理器: 版本9.2.0.5.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

RMAN> connect catalog rman/rman@187

连接到恢复目录数据库

RMAN> connect target /

连接到目标数据库: ENCORE (DBID=3146513770)

RMAN> run

2> {allocate channel d1 type disk maxpiecesize = 500m;

3>  backup full database

4>  format 'E:\rmanbak\db_%d_%s_%p_%t';

5>  release channel d1;

6> }

分配的通道: d1

通道 d1: sid=16 devtype=DISK

启动 backup 于 2004-06-28 21:03:31

通道 d1: 正在启动 full 数据文件备份集

通道 d1: 正在指定备份集中的数据文件

在备份集中包含当前的 SPFILE

备份集中包括当前控制文件

输入数据文件 fno=00001 name=D:\ORACLE\ORADATA\ENCORE\SYSTEM01.DBF

输入数据文件 fno=00002 name=D:\ORACLE\ORADATA\ENCORE\UNDOTBS01.DBF

输入数据文件 fno=00005 name=D:\ORACLE\ORADATA\ENCORE\EXAMPLE01.DBF

输入数据文件 fno=00008 name=D:\ORACLE\ORADATA\ENCORE\TOOLS01.DBF

输入数据文件 fno=00010 name=D:\ORACLE\ORADATA\ENCORE\XDB01.DBF

输入数据文件 fno=00006 name=D:\ORACLE\ORADATA\ENCORE\INDX01.DBF

输入数据文件 fno=00009 name=D:\ORACLE\ORADATA\ENCORE\USERS01.DBF

输入数据文件 fno=00003 name=D:\ORACLE\ORADATA\ENCORE\CWMLITE01.DBF

输入数据文件 fno=00004 name=D:\ORACLE\ORADATA\ENCORE\DRSYS01.DBF

输入数据文件 fno=00007 name=D:\ORACLE\ORADATA\ENCORE\ODM01.DBF

通道 d1: 正在启动段 1 于 2004-06-28 21:03:37

通道 d1: 已完成段 1 于 2004-06-28 21:05:02

段 handle=E:\RMANBAK\DB_ENCORE_1_1_530053412 comment=NONE

通道 d1: 正在启动段 2 于 2004-06-28 21:05:02

通道 d1: 已完成段 2 于 2004-06-28 21:06:07

段 handle=E:\RMANBAK\DB_ENCORE_1_2_530053412 comment=NONE

通道 d1: 备份集已完成, 经过时间:00:02:35

完成 backup 于 2004-06-28 21:06:07

释放的通道: d1

RMAN>

2、备份目标数据库的参数文件

SQL> create pfile from spfile;

文件已创建

SQL>

3、--将目标数据库的参数文件(第2步创建)拷贝到克隆机器上,修改相应的参数(主要是实例名和

数据库名,和bdump、udump、cdump 等后台进程的跟踪文件存放的路径,本文中,克隆数据库

的实例名为 CLONE,数据库名为 CLONE_DB),然后在克隆机器上创建实例

D:\oracle\bin>oradim -new -sid clone -PFILE D:\ORACLE\database\INITCLONE.ORA -INTPWD SYS1

D:\oracle\bin>

4、--修改克隆数据库的监听器,增加对克隆数据库的监听(第3段)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = D:\ORACLE)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = ORACLE)

(ORACLE_HOME = D:\ORACLE)

(SID_NAME = ORACLE92)

)

(SID_DESC =

(GLOBAL_DBNAME = clone_db)

(ORACLE_HOME = D:\ORACLE)

(SID_NAME = clone)

)

)

5、修改RMAN机器上的TNSNAMES.ORA文件,增加此连接串,保证RMAN使用此连接串能够连接到

克隆数据库的实例

CLONE =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = CLONE_DB)

)

)

5、将目标数据库的备份集拷贝到克隆数据库机器的同一位置,并启动克隆数据库(nomount 状态)

6、由于第1步骤中没有备份日志,在使用

RMAN> run

2> {allocate auxiliary channel d1 type disk;

3>  set newname for datafile 1  to 'F:\CLONE\data\SYSTEM01.DBF';

脚本克隆数据库时,出现 NO BACKUP COPY 之类的错误,

之后补充备份目标数据库的日志,

RMAN> run

2> {allocate channel d1 type disk maxpiecesize = 500m;

3>  backup archivelog all

4>  format 'E:\rmanbak\log_%d_%s_%p_%t';

5>  release channel d1;

6> }

分配的通道: d1

通道 d1: sid=11 devtype=DISK

启动 backup 于 2004-06-28 21:42:18

当前日志已存档

通道 d1: 正在启动存档日志备份集

通道 d1: 正在指定备份集中的存档日志

输入存档日志线程 =1 序列 =107 记录 ID=107 时间戳=528371132

输入存档日志线程 =1 序列 =108 记录 ID=108 时间戳=530053839

输入存档日志线程 =1 序列 =109 记录 ID=109 时间戳=530054855

输入存档日志线程 =1 序列 =110 记录 ID=110 时间戳=530055437

输入存档日志线程 =1 序列 =111 记录 ID=111 时间戳=530055540

输入存档日志线程 =1 序列 =112 记录 ID=112 时间戳=530055739

通道 d1: 正在启动段 1 于 2004-06-28 21:42:23

通道 d1: 已完成段 1 于 2004-06-28 21:42:26

段 handle=E:\RMANBAK\LOG_ENCORE_2_1_530055742 comment=NONE

通道 d1: 备份集已完成, 经过时间:00:00:04

完成 backup 于 2004-06-28 21:42:26

释放的通道: d1

7、将日志备份集拷贝到克隆机器的同一目录后,回到RMAN处,连接辅助(克隆)数据库,

执行脚本,剩下的RMAN自己会做

RMAN> connect auxiliary sys/sys1@clone

已连接到备用数据库: CLONE_DB (未安装)

RMAN> run

2> {allocate auxiliary channel d1 type disk;

3>  set newname for datafile 1  to 'F:\CLONE\data\SYSTEM01.DBF';

4>  set newname for datafile 2  to 'F:\CLONE\data\UNDOTBS01.DBF';

5>  set newname for datafile 3  to 'F:\CLONE\data\CWMLITE01.DBF';

6>  set newname for datafile 4  to 'F:\CLONE\data\DRSYS01.DBF';

7>  set newname for datafile 5  to 'F:\CLONE\data\EXAMPLE01.DBF';

8>  set newname for datafile 6  to 'F:\CLONE\data\INDX01.DBF';

9>  set newname for datafile 7  to 'F:\CLONE\data\ODM01.DBF';

10>  set newname for datafile 8  to 'F:\CLONE\data\TOOLS01.DBF';

11>  set newname for datafile 9  to 'F:\CLONE\data\USERS01.DBF';

12>  set newname for datafile 10 to 'F:\CLONE\data\XDB01.DBF';

13>  DUPLICATE TARGET DATABASE TO CLONE_DB

14>  LOGFILE

15>     GROUP 1 ('F:\clone\data\REDO01.DBF') SIZE 10M,

16>     GROUP 2 ('F:\clone\data\REDO02.DBF') SIZE 10M,

17>     GROUP 3 ('F:\clone\data\REDO03.DBF') SIZE 10M;

18>  }

分配的通道: d1

通道 d1: sid=8 devtype=DISK

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

启动 Duplicate Db 于 2004-06-28 21:43:51

正在打印存储的脚本: Memory Script

{

set until scn  261688166;

set newname for datafile  1 to

"F:\CLONE\DATA\SYSTEM01.DBF";

set newname for datafile  2 to

"F:\CLONE\DATA\UNDOTBS01.DBF";

set newname for datafile  3 to

"F:\CLONE\DATA\CWMLITE01.DBF";

set newname for datafile  4 to

"F:\CLONE\DATA\DRSYS01.DBF";

set newname for datafile  5 to

"F:\CLONE\DATA\EXAMPLE01.DBF";

set newname for datafile  6 to

"F:\CLONE\DATA\INDX01.DBF";

set newname for datafile  7 to

"F:\CLONE\DATA\ODM01.DBF";

set newname for datafile  8 to

"F:\CLONE\DATA\TOOLS01.DBF";

set newname for datafile  9 to

"F:\CLONE\DATA\USERS01.DBF";

set newname for datafile  10 to

"F:\CLONE\DATA\XDB01.DBF";

restore

check readonly

clone database

;

}

正在执行脚本: Memory Script

正在执行命令: SET until clause

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

启动 restore 于 2004-06-28 21:43:54

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

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

正将数据文件00001恢复到F:\CLONE\DATA\SYSTEM01.DBF

正将数据文件00002恢复到F:\CLONE\DATA\UNDOTBS01.DBF

正将数据文件00003恢复到F:\CLONE\DATA\CWMLITE01.DBF

正将数据文件00004恢复到F:\CLONE\DATA\DRSYS01.DBF

正将数据文件00005恢复到F:\CLONE\DATA\EXAMPLE01.DBF

正将数据文件00006恢复到F:\CLONE\DATA\INDX01.DBF

正将数据文件00007恢复到F:\CLONE\DATA\ODM01.DBF

正将数据文件00008恢复到F:\CLONE\DATA\TOOLS01.DBF

正将数据文件00009恢复到F:\CLONE\DATA\USERS01.DBF

正将数据文件00010恢复到F:\CLONE\DATA\XDB01.DBF

通道 d1: 已恢复备份段 1

段 handle=E:\RMANBAK\DB_ENCORE_1_1_530053412 tag=TAG20040628T210331 params=NULL

通道 d1: 已恢复备份段 2

段 handle=E:\RMANBAK\DB_ENCORE_1_2_530053412 tag=TAG20040628T210331 params=NULL

通道 d1: 恢复完成

完成 restore 于 2004-06-28 21:46:35

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

MAXLOGFILES     50

MAXLOGMEMBERS      5

MAXDATAFILES      100

MAXINSTANCES     1

MAXLOGHISTORY      226

LOGFILE

GROUP  1 ( 'F:\clone\data\REDO01.DBF' ) SIZE   10485760 ,

GROUP  2 ( 'F:\clone\data\REDO02.DBF' ) SIZE   10485760 ,

GROUP  3 ( 'F:\clone\data\REDO03.DBF' ) SIZE   10485760

DATAFILE

'F:\CLONE\DATA\SYSTEM01.DBF'

CHARACTER SET ZHS16GBK

正在打印存储的脚本: Memory Script

{

switch clone datafile all;

}

正在执行脚本: Memory Script

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

输入数据文件副本 recid=1 stamp=530056505 文件名=F:\CLONE\DATA\UNDOTBS01.DBF

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

输入数据文件副本 recid=2 stamp=530056505 文件名=F:\CLONE\DATA\CWMLITE01.DBF

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

输入数据文件副本 recid=3 stamp=530056505 文件名=F:\CLONE\DATA\DRSYS01.DBF

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

输入数据文件副本 recid=4 stamp=530056505 文件名=F:\CLONE\DATA\EXAMPLE01.DBF

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

输入数据文件副本 recid=5 stamp=530056505 文件名=F:\CLONE\DATA\INDX01.DBF

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

输入数据文件副本 recid=6 stamp=530056505 文件名=F:\CLONE\DATA\ODM01.DBF

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

输入数据文件副本 recid=7 stamp=530056505 文件名=F:\CLONE\DATA\TOOLS01.DBF

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

输入数据文件副本 recid=8 stamp=530056505 文件名=F:\CLONE\DATA\USERS01.DBF

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

输入数据文件副本 recid=9 stamp=530056505 文件名=F:\CLONE\DATA\XDB01.DBF

正在打印存储的脚本: Memory Script

{

set until scn  261688166;

recover

clone database

delete archivelog

;

}

正在执行脚本: Memory Script

正在执行命令: SET until clause

启动 recover 于 2004-06-28 21:46:37

正在开始介质的恢复

通道 d1: 正在启动到默认目标的存档日志恢复

通道 d1: 正在恢复存档日志

存档日志线程 =1 序列=108

通道 d1: 正在恢复存档日志

存档日志线程 =1 序列=109

通道 d1: 正在恢复存档日志

存档日志线程 =1 序列=110

通道 d1: 正在恢复存档日志

存档日志线程 =1 序列=111

通道 d1: 正在恢复存档日志

存档日志线程 =1 序列=112

通道 d1: 已恢复备份段 1

段 handle=E:\RMANBAK\LOG_ENCORE_2_1_530055742 tag=TAG20040628T214221 params=NULL

通道 d1: 恢复完成

存档日志文件名 =F:\CLONE\LOG\ARC00108.001 线程 =1 序列 =108

通道 clone_default: 正在删除存档日志

存档日志文件名 =F:\CLONE\LOG\ARC00108.001 记录 ID=3 时间戳 =530056510

存档日志文件名 =F:\CLONE\LOG\ARC00109.001 线程 =1 序列 =109

通道 clone_default: 正在删除存档日志

存档日志文件名 =F:\CLONE\LOG\ARC00109.001 记录 ID=4 时间戳 =530056510

存档日志文件名 =F:\CLONE\LOG\ARC00110.001 线程 =1 序列 =110

通道 clone_default: 正在删除存档日志

存档日志文件名 =F:\CLONE\LOG\ARC00110.001 记录 ID=5 时间戳 =530056510

存档日志文件名 =F:\CLONE\LOG\ARC00111.001 线程 =1 序列 =111

通道 clone_default: 正在删除存档日志

存档日志文件名 =F:\CLONE\LOG\ARC00111.001 记录 ID=2 时间戳 =530056510

存档日志文件名 =F:\CLONE\LOG\ARC00112.001 线程 =1 序列 =112

通道 clone_default: 正在删除存档日志

存档日志文件名 =F:\CLONE\LOG\ARC00112.001 记录 ID=1 时间戳 =530056510

完成介质的恢复

完成 recover 于 2004-06-28 21:46:47

正在打印存储的脚本: Memory Script

{

shutdown clone;

startup clone nomount ;

}

正在执行脚本: Memory Script

数据库已卸载

Oracle 例程已关闭

已连接到备用数据库 (未启动)

Oracle 例程已启动

系统全局区域总计     319889436 字节

Fixed Size                      454684 字节

Variable Size                109051904 字节

Database Buffers             209715200 字节

Redo Buffers                    667648 字节

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

MAXLOGFILES     50

MAXLOGMEMBERS      5

MAXDATAFILES      100

MAXINSTANCES     1

MAXLOGHISTORY      226

LOGFILE

GROUP  1 ( 'F:\clone\data\REDO01.DBF' ) SIZE   10485760 ,

GROUP  2 ( 'F:\clone\data\REDO02.DBF' ) SIZE   10485760 ,

GROUP  3 ( 'F:\clone\data\REDO03.DBF' ) SIZE   10485760

DATAFILE

'F:\CLONE\DATA\SYSTEM01.DBF'

CHARACTER SET ZHS16GBK

正在打印存储的脚本: Memory Script

{

catalog clone datafilecopy  "F:\CLONE\DATA\UNDOTBS01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\CWMLITE01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\DRSYS01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\EXAMPLE01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\INDX01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\ODM01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\TOOLS01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\USERS01.DBF";

catalog clone datafilecopy  "F:\CLONE\DATA\XDB01.DBF";

switch clone datafile all;

}

正在执行脚本: Memory Script

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

数据文件副本 filename=F:\CLONE\DATA\UNDOTBS01.DBF recid=1 stamp=530056530

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

数据文件副本 filename=F:\CLONE\DATA\CWMLITE01.DBF recid=2 stamp=530056530

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

数据文件副本 filename=F:\CLONE\DATA\DRSYS01.DBF recid=3 stamp=530056531

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

数据文件副本 filename=F:\CLONE\DATA\EXAMPLE01.DBF recid=4 stamp=530056531

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

数据文件副本 filename=F:\CLONE\DATA\INDX01.DBF recid=5 stamp=530056531

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

数据文件副本 filename=F:\CLONE\DATA\ODM01.DBF recid=6 stamp=530056531

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

数据文件副本 filename=F:\CLONE\DATA\TOOLS01.DBF recid=7 stamp=530056532

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

数据文件副本 filename=F:\CLONE\DATA\USERS01.DBF recid=8 stamp=530056532

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

数据文件副本 filename=F:\CLONE\DATA\XDB01.DBF recid=9 stamp=530056532

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

输入数据文件副本 recid=1 stamp=530056530 文件名=F:\CLONE\DATA\UNDOTBS01.DBF

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

输入数据文件副本 recid=2 stamp=530056530 文件名=F:\CLONE\DATA\CWMLITE01.DBF

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

输入数据文件副本 recid=3 stamp=530056531 文件名=F:\CLONE\DATA\DRSYS01.DBF

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

输入数据文件副本 recid=4 stamp=530056531 文件名=F:\CLONE\DATA\EXAMPLE01.DBF

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

输入数据文件副本 recid=5 stamp=530056531 文件名=F:\CLONE\DATA\INDX01.DBF

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

输入数据文件副本 recid=6 stamp=530056531 文件名=F:\CLONE\DATA\ODM01.DBF

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

输入数据文件副本 recid=7 stamp=530056532 文件名=F:\CLONE\DATA\TOOLS01.DBF

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

输入数据文件副本 recid=8 stamp=530056532 文件名=F:\CLONE\DATA\USERS01.DBF

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

输入数据文件副本 recid=9 stamp=530056532 文件名=F:\CLONE\DATA\XDB01.DBF

正在打印存储的脚本: Memory Script

{

Alter clone database open resetlogs;

}

正在执行脚本: Memory Script

数据库已打开

RMAN>

--执行此步骤需要注意:避免连接克隆数据库,否则,RMAN将无法正常关闭克隆数据库

(shutdown clone),剩下的步骤无法继续执行。

8、测试克隆数据库

D:\oracle\bin>sqlplus

SQL*Plus: Release 9.2.0.5.0 - Production on Mon Jun 28 22:01:46 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Enter user-name: sys/sys1@clone as sysdba

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production

With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options

JServer Release 9.2.0.5.0 - Production

SQL> select status from v$instance;

STATUS

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

OPEN

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            F:\CLONE\log

Oldest online log sequence     0

Next log sequence to archive   1

Current log sequence           1

SQL>

总结:在两台机器间用RMAN克隆数据库,个人认为,有两点需要注意:

1、在对目标数据库做全库备份时,要注意同时备份日志,缺少此步骤,RMAN在克隆时

将报 NO BACKUP COPY 之类的错误

2、要将目标数据库备份的备份集拷贝到克隆机器的同一个目录(同备份目标数据库时

备份集存放的目录)下,否则,RMAN将报:找不到XXXX备份集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值