Rman_Duplicate_9i_Win

需求:

在生产环境中,我们可能需要导入相同的多份数据库,如果每次都DBCA建完库后,再IMP将之前EXPDUMP文件导入,数据量小还好,数据量大的话,会很浪费时间。

 

STREAMS也是一种方式,但是我们现在的这个库是“静态”的,意思就是说是直接将“冷”的DUMP文件导入,其间并没有新的用户数据的插入,STREAMS的实时的更新数据就没有用到,我们只是为了导库这件事而已。

 

还有一种方法是,DBCA完并导完数据后,SHUTDOWNIMMEDIATE,将一份冷备的数据库文件(还有日志文件)复制到另一个地方,WINDOWS的话先注册一下“服务”,用之前备份的控制文件脚本重新创建新库的控制文件,改名字,最后开库时RESETLOGS

 

现在介绍一下,RMAN DUPLICATE方法,挺有意思的。仅仅是写出来,用我的语言,网上的,官方的文档有很多,本篇仅供参考。

 

 

 

 

1.     因为数据库处于NOARCHIVELOG(导库前一般都是置为此模式,因为导库时会产生大量的日志,会占空间,要开归档的话,一般是导完再开),而DUPLICATE需要有一份有效的备份,而NOARCHIVELOG是无法热备的,所以启动到MOUNT状态,所谓的RMAN的“冷备”。

SQL> startupmount

ORACLE 例程已经启动。

 

Total SystemGlobal Area  131145280 bytes

Fixed Size                   454208 bytes

Variable Size             104857600 bytes

DatabaseBuffers           25165824 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

C:\Documents andSettings\Administrator>set ORACLE_SID=orcl

C:\Documents andSettings\Administrator>rman target /

RMAN> backupdatabase;

 

启动 backup 04-5 -11

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=14 devtype=DISK

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

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

在备份集中包含当前的 SPFILE

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

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

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

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

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

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

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

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

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

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

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

通道 ORA_DISK_1: 正在启动段 1 04-5 -11

 

2.     创建PFILE文件,作为DUPLICATE库的PFILE文件,当然,要做相应的修改。

SQL> createpfile='C:\oracle\pfileorcl.ora' from spfile;

 

文件已创建。

 

修改的参数如下:(相应的目录要事先创建出来)

*.background_dump_dest='C:\oracle\admin\orcl\bdump'

*.control_files='C:\oracle\oradata\orcldup\CONTROL01.CTL','C:\oracle\oradata\orcldup\CONTROL02.CTL','C:\oracle\oradata\orcldup\CONTROL03.CTL'

*.core_dump_dest='C:\oracle\admin\orcldup\cdump'

*.instance_name='orcldup'

*.db_name='orcldup'

*.user_dump_dest='C:\oracle\admin\orcldup\udump'

*.log_file_name_convert=(‘C:\oracle\oradata\orcl’,’C:\oracle\oradata\orcldup’)

*.db_file_name_convert=(‘C:\oracle\oradata\orcl’,’C:\oracle\oradata\orcldup’)

3. 创建密码参数文件

C:\Documents andSettings\Administrator>cd C:\oracle\ora92\database

C:\oracle\ora92\database>orapwdfile=PWDorcldup.ora password=oracle entries=3

 

4.     然后,接下来这一步,WINDOWS会稍微复杂点,需要注册“服务”,将orcldup这个我们想用的实例名注册进去。

C:\oracle\ora92\database>oradim-new -sid orcldup -startmode manual

 

C:\oracle\ora92\database>oradim-edit -sid orcldup -startmode auto -pfile 'C:\oracle\pfileorcldup.ora'

C:\oracle\ora92\database>setORACLE_SID=orcldup

 

C:\oracle\ora92\database>sqlplus/nolog

 

SQL*Plus: Release9.2.0.8.0 - Production on 星期三 5 423:26:21 2011

 

Copyright (c)1982, 2002, Oracle Corporation.  Allrights reserved.

 

SQL> conn /assysdba

已连接到空闲例程。

SQL> startupnomount pfile='C:\oracle\pfileorcldup.ora'

ORACLE 例程已经启动。

 

Total SystemGlobal Area  131145280 bytes

Fixed Size                   454208 bytes

Variable Size             104857600 bytes

DatabaseBuffers           25165824 bytes

Redo Buffers                 667648 bytes

 

5.     确认可以连接到DUPLICATE的数据库。NETMGR那要配置一下,不然就自己TNSNAMES.ORA那自己写一个。

ORCLDUP =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST =epgis-wx8qtt0jz)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcldup)

    )

  )

LISTENER.ORA中的SID_LIST_LISTENER

加入下面这一行

(SID_DESC =

      (GLOBAL_DBNAME = orcldup)

      (ORACLE_HOME = C:\oracle\ora92)

      (SID_NAME = orcldup)

    )

也就是把它注册进监听程序中

6.     开始DUPLICATE,需要设置好环境变量

很神奇的地方,WINDOWS设置这个变量不用加“‘”

C:\Documents andSettings\Administrator>set ORACLE_SID=orcl

 

C:\Documents andSettings\Administrator>set NLS_DATE_FORMAT=yyyy-mm-dd:hh24:mi:ss

 

7.     连接本地控制文件与远程的AUXILIARY库(也就是DUPLICATE的库)

C:\Documents andSettings\Administrator>rman target / auxiliary system/oracle@or

cldup

 

恢复管理器: 版本9.2.0.8.0- Production

 

Copyright (c)1995, 2002, Oracle Corporation.  Allrights reserved.

 

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

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

RMAN> listbackup;

 

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

 

备份集列表

===================

 

BS 关键字  类型 LV 大小      设备类型 经过时间 完成时间

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

1       Full   7G         DISK        00:08:25     2011-05-04:22:46:50

BP 关键字: 1   状态: AVAILABLE   标记:TAG20110504T223825

段名:C:\ORACLE\ORA92\DATABASE\02MBH3N1_1_1

  包含的 SPFILE:修改时间: 2011-04-01:14:57:52

  备份集 1 中的数据文件列表

  文件 LV 类型 Ckp SCN    Ckp 时间            名称

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

  1      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\SYSTEM01.DB

F

  2      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\UNDOTBS01.D

BF

  3      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\CWMLITE01.D

BF

  4      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\DRSYS01.DBF

 

  5      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\EXAMPLE01.D

BF

  6      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\INDX01.DBF

  7      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\ODM01.DBF

  8      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\TOOLS01.DBF

 

  9      Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\USERS01.DBF

 

  10     Full 2702759   2011-05-04:22:33:19 C:\ORACLE\ORADATA\ORCL\XDB01.DBF

 

RMAN> run {

2> set untiltime '2011-05-04:22:33:19';

3> duplicatetarget database to orcldup;

4> }

 

正在执行命令: SET until clause

 

启动 Duplicate Db 2011-05-05:00:18:22

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=14 devtype=DISK

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

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

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

RMAN-03002:failure of Duplicate Db command at 05/05/2011 00:18:22

RMAN-05501:aborting duplication of target database

RMAN-05001:auxiliary filename C:\ORACLE\ORADATA\ORCL\XDB01.DBF conflicts with a

 file used by the target database

RMAN-05001:auxiliary filename C:\ORACLE\ORADATA\ORCL\USERS01.DBF conflicts with

 a file used by the target database

报错了

改为如下

RMAN> run {

2> set untiltime '2011-05-04:22:33:19';

3>allocate auxiliarychannel c1 device type disk;

4> duplicatetarget database to orcldup nofilenamecheck;

5> }

 

正在执行命令: SET until clause

 

启动 Duplicate Db 2011-05-05:00:23:02

使用通道 ORA_AUX_DISK_1

 

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

….(开始执行了,感觉DUPLICATE这个功能很强大,感觉强大之余,其实它的本质也不过是重建控制文件,拷回数据文件,再RESETLOGS打开数据库而已)

Make sure to use auxiliary type of channel so RMANrestore take place at auxiliary database.

nofilenamecheckclause instructs rman not to check whether target database file names share thesame name as auxiliary database 

(友情提示:在LOG_FILE_NAME_CONVERTDB_FILE_NAME_CONVERT上要注意标点符号,“‘”要写,不然后面再DUPLICATE时会不成功)

这样才是成功的

启动 restore 2011-05-05:00:42:27

 

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

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

正将数据文件00001恢复到C:\ORACLE\ORADATA\ORCLDUP\SYSTEM01.DBF

正将数据文件00002恢复到C:\ORACLE\ORADATA\ORCLDUP\UNDOTBS01.DBF

正将数据文件00003恢复到C:\ORACLE\ORADATA\ORCLDUP\CWMLITE01.DBF

正将数据文件00004恢复到C:\ORACLE\ORADATA\ORCLDUP\DRSYS01.DBF

正将数据文件00005恢复到C:\ORACLE\ORADATA\ORCLDUP\EXAMPLE01.DBF

正将数据文件00006恢复到C:\ORACLE\ORADATA\ORCLDUP\INDX01.DBF

正将数据文件00007恢复到C:\ORACLE\ORADATA\ORCLDUP\ODM01.DBF

正将数据文件00008恢复到C:\ORACLE\ORADATA\ORCLDUP\TOOLS01.DBF

正将数据文件00009恢复到C:\ORACLE\ORADATA\ORCLDUP\USERS01.DBF

正将数据文件00010恢复到C:\ORACLE\ORADATA\ORCLDUP\XDB01.DBF

(你看它的整个恢复的过程,其实就是类似常规的备份恢复)

但是,报错了

正在执行脚本: Memory Script

 

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

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

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

RMAN-03002:failure of Duplicate Db command at 05/05/2011 02:02:43

RMAN-03015: erroroccurred in stored script Memory Script

RMAN-06136: ORACLEerror from auxiliary database: ORA-01013: 用户请求取消当前的

操作

查了一下ALERT日志  发现后台大量的

Restarting deadbackground process QMN0

QMN0 started withpid=15, OS id=2128

上网搜了一下

我做出了如下的修改,改动PFILEORCLDUP.ORA

*.aq_tm_processes=0

这个主要是与STREAMS的队列相关的参数,也许是BUG,谁知道呢,反正我们做的不是STREAMS,把它禁掉也没问题。

重新从STARTUP NOMOUNT PFILE=’c:\oracle\pfileorcldup.ora’开始执行。

后来,发现还是出现了上面的错误,本来觉得实验失败了,准备关掉虚拟机了,但是好奇心使我尝试看了一下,我做了下面的事情:

C:\Documents andSettings\Administrator>set ORACLE_SID=orcldup

 

C:\Documents andSettings\Administrator>sqlplus /nolog

Copyright (c)1982, 2002, Oracle Corporation.  Allrights reserved.

 

SQL> conn /assysdba

已连接。

SQL> selectopen_mode from v$database;

 

OPEN_MODE

----------

MOUNTED

看来MOUNTED是成功了,控制文件已经起来了,不甘心,还是想尝试RESETLOS一下,我会这么想不是我仅仅是想尝试,而是看截图:

控制文件是被DUPLICATE重建的,DATAFILEREDOFILE是拷过来的,它们时间戳是2240分,是因为我正是在那时RESETLOGS的。

SQL> alterdatabase open resetlogs;

 

数据库已更改。

 

SQL> showparameter ins

 

NAME                                 TYPE        VALUE

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

active_instance_count                integer

cluster_database_instances           integer     1

instance_groups                      string

instance_name                        string      orcldup

instance_number                      integer     0

open_links_per_instance              integer     4

parallel_instance_group              string

parallel_server_instances            integer     1

SQL> selectopen_mode from v$database;

 

OPEN_MODE

----------

READ WRITE

 

OK了,我不知道是BUG还是什么的原因,DUPLICATE它没有帮我RESETLOGS成功,而是靠我的手工,也许是需要较大的内存而我做实验是在虚拟机中,它自己崩掉了,也许是BUG,总之手工RESETLOGSDUPLICATE实验也算是成功了。这个实验,我曾经一度想放弃了,因为我查了METALINK,查了文档,没觉得实验有什么不对的地方,也许这就是大师们所说的差一点点吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值