Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1244526
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-24 16:23:01

使用rman的duplicate命令复制数据库系列,本系列可以视为一步一步学RMAN的姊妹篇~~~~

RMAN高级应用之Duplicate复制数据库(1)概述

RMAN高级应用之Duplicate复制数据库(2)辅助实例

RMAN高级应用之Duplicate复制数据库(3)复制流程


  前面的准备工作,大展拳脚的时刻终于来临了。在正在创建复制之前,我们先来描述一下需求,一个明确的、清晰的、可实现的需求更加有助于我们操作的实施,所以语言描述能力也是一项非常高超的技巧,下面大家看我举例,一个清晰的需求描述:NOCATALOG模式本地完整复制目标库JSSWEB到副本数据库JSSDUP。

  看看,都学着点吧,什么叫言简意赅,言简意赅就是NOCATALOG模式本地完整复制目标库JSSWEB到副本数据库JSSDUP。

  我们假设实例已创建(辅助实例的创建过程见第2章)。


1、连接并启动目标数据库(至少要启动到mount状态);

F:oracle>set oracle_sid=jssweb


F:oracle>sqlplus "/ as sysdba"


SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 22 16:13:04 2007


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


已连接到空闲例程。


SQL> startup

ORACLE 例程已经启动。


Total System Global Area 113246208 bytes

Fixed Size 1247564 bytes

Variable Size 83887796 bytes

Database Buffers 20971520 bytes

Redo Buffers 7139328 bytes

数据库装载完毕。

数据库已经打开。

SQL>


2、连接并启动辅助实例到nomount状态;

F:oracle>set oracle_sid=jssdup


F:oracle>sqlplus "/ as sysdba"


SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 22 16:11:28 2007


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


已连接到空闲例程。


SQL> startup nomount

ORACLE 例程已经启动。


Total System Global Area 285212672 bytes

Fixed Size 1248552 bytes

Variable Size 226493144 bytes

Database Buffers 50331648 bytes

Redo Buffers 7139328 bytes

SQL>


3、RMAN连接到目标数据库和辅助实例。

F:oracle>set oracle_sid=jssweb

###目标数据库使用操作系统认证,所以首先设置SID

F:oracle>rman target / auxiliary sys/verysafe:)@jssdup


恢复管理器: Release 10.2.0.1.0 - Production on 星期五 10月 19 15:03:10 2007


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


连接到目标数据库: JSSWEB (DBID=3402005373)

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


RMAN>


4、首先确认目标库存在可用备份。

RMAN> list backup;


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


备份集列表

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


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

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

3 Full 443.16M DISK 00:00:51 19-10月-07

BP 关键字: 3 状态: AVAILABLE 已压缩: NO 标记: TAG20071022T161927

段名:D:BACKUP6IV54CF_1_1

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

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

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

1 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBSYSTEM01.DBF

2 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBUNDOTBS01.DBF

3 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBSYSAUX01.DBF

4 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBJSSWEB.DBF

5 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBUSERS01.DBF


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

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

4 Full 6.80M DISK 00:00:01 19-10月-07

BP 关键字: 4 状态: AVAILABLE 已压缩: NO 标记: TAG20071022T162023

段名:D:BACKUPC-3402005373-20071022-00

包括的控制文件: Ckp SCN: 1326175 Ckp 时间: 19-10月-07

包含的 SPFILE: 修改时间: 24-9月 -07


RMAN>


5、万事俱备,只欠Duplicate执行;

RMAN> duplicate target database to jssdup; ####只需要执行这一行


启动 Duplicate Db 于 22-10月-07

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=39 devtype=DISK


内存脚本的内容:

{

set newname for datafile 1 to

"F:ORACLEORADATAJSSDUPSYSTEM01.DBF";

set newname for datafile 2 to

"F:ORACLEORADATAJSSDUPUNDOTBS01.DBF";

set newname for datafile 3 to

"F:ORACLEORADATAJSSDUPSYSAUX01.DBF";

set newname for datafile 4 to

"F:ORACLEORADATAJSSDUPJSSWEB.DBF";

set newname for datafile 5 to

"F:ORACLEORADATAJSSDUPUSERS01.DBF";

restore

check readonly

clone database

;

}

正在执行内存脚本


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


启动 restore 于 22-10月-07

使用通道 ORA_AUX_DISK_1


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

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

正将数据文件00001恢复到F:ORACLEORADATAJSSDUPSYSTEM01.DBF

正将数据文件00002恢复到F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

正将数据文件00003恢复到F:ORACLEORADATAJSSDUPSYSAUX01.DBF

正将数据文件00004恢复到F:ORACLEORADATAJSSDUPJSSWEB.DBF

正将数据文件00005恢复到F:ORACLEORADATAJSSDUPUSERS01.DBF

通道 ORA_AUX_DISK_1: 正在读取备份段 D:BACKUP6IV54CF_1_1

通道 ORA_AUX_DISK_1: 已恢复备份段 1

段句柄 = D:BACKUP6IV54CF_1_1 标记 = TAG20071022T161927

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

完成 restore 于 22-10月-07

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "JSSDUP" RESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ( 'F:ORACLEORADATAJSSDUPREDO01.LOG' ) SIZE 20 M REUSE,

GROUP 2 ( 'F:ORACLEORADATAJSSDUPREDO02.LOG' ) SIZE 20 M REUSE,

GROUP 3 ( 'F:ORACLEORADATAJSSDUPREDO03.LOG' ) SIZE 20 M REUSE

DATAFILE

'F:ORACLEORADATAJSSDUPSYSTEM01.DBF'

CHARACTER SET ZHS16GBK



内存脚本的内容:

{

switch clone datafile all;

}

正在执行内存脚本


释放的通道: ORA_AUX_DISK_1

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

输入数据文件副本 recid=1 stamp=636654235 文件名=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

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

输入数据文件副本 recid=2 stamp=636654235 文件名=F:ORACLEORADATAJSSDUPSYSAUX01.DBF

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

输入数据文件副本 recid=3 stamp=636654235 文件名=F:ORACLEORADATAJSSDUPJSSWEB.DBF

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

输入数据文件副本 recid=4 stamp=636654235 文件名=F:ORACLEORADATAJSSDUPUSERS01.DBF


内存脚本的内容:

{

recover

clone database

noredo

,

delete archivelog

;

}

正在执行内存脚本


启动 recover 于 22-10月-07

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

完成 recover 于 22-10月-07


内存脚本的内容:

{

shutdown clone;

startup clone nomount ;

}

正在执行内存脚本


数据库已卸载

Oracle 实例已关闭


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

Oracle 实例已启动


系统全局区域总计 285212672 字节


Fixed Size 1248552 字节

Variable Size 226493144 字节

Database Buffers 50331648 字节

Redo Buffers 7139328 字节

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "JSSDUP" RESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ( 'F:ORACLEORADATAJSSDUPREDO01.LOG' ) SIZE 20 M REUSE,

GROUP 2 ( 'F:ORACLEORADATAJSSDUPREDO02.LOG' ) SIZE 20 M REUSE,

GROUP 3 ( 'F:ORACLEORADATAJSSDUPREDO03.LOG' ) SIZE 20 M REUSE

DATAFILE

'F:ORACLEORADATAJSSDUPSYSTEM01.DBF'

CHARACTER SET ZHS16GBK



内存脚本的内容:

{

set newname for tempfile 1 to

"F:ORACLEORADATAJSSDUPTEMP01.DBF";

switch clone tempfile all;

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPUNDOTBS01.DBF";

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPSYSAUX01.DBF";

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPJSSWEB.DBF";

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPUSERS01.DBF";

switch clone datafile all;

}

正在执行内存脚本


正在执行命令: SET NEWNAME


临时文件 1 在控制文件中已重命名为 F:ORACLEORADATAJSSDUPTEMP01.DBF


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

数据文件副本 filename=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF recid=1 stamp=636654246


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

数据文件副本 filename=F:ORACLEORADATAJSSDUPSYSAUX01.DBF recid=2 stamp=636654246


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

数据文件副本 filename=F:ORACLEORADATAJSSDUPJSSWEB.DBF recid=3 stamp=636654246


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

数据文件副本 filename=F:ORACLEORADATAJSSDUPUSERS01.DBF recid=4 stamp=636654247


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

输入数据文件副本 recid=1 stamp=636654246 文件名=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

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

输入数据文件副本 recid=2 stamp=636654246 文件名=F:ORACLEORADATAJSSDUPSYSAUX01.DBF

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

输入数据文件副本 recid=3 stamp=636654246 文件名=F:ORACLEORADATAJSSDUPJSSWEB.DBF

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

输入数据文件副本 recid=4 stamp=636654247 文件名=F:ORACLEORADATAJSSDUPUSERS01.DBF


内存脚本的内容:

{

Alter clone database open resetlogs;

}

正在执行内存脚本


数据库已打开

完成 Duplicate Db 于 22-10月-07


RMAN>


6、连接副本数据库看看

RMAN> host;


Microsoft Windows [版本 5.2.3790]

(C) 版权所有 1985-2003 Microsoft Corp.


F:oracle>sqlplus jss/jss


SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 22 16:35:07 2007


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


连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options


SQL> select *from tab where tname like 'JSS%' and rownum<9;


TNAME TABTYPE CLUSTERID

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

JSSTMP_HC_ORC_BJ TABLE

JSSTMP_HC_ORD_PRODUCT_PACKAGE TABLE

JSSTMP_HC_ORD_PROD_PACK_ITEM TABLE

JSSTMP_HC_PRODUCT_BJ TABLE

JSSTMP_HC_PROJ_PROD_CLASS_BJ TABLE


SQL>

OK,数据都在。创建成功:)


整体来看,这是个非常简单的示例,简单是简单在我们操作的步骤上,事实上duplicate就是一个具有强大功能的简单命令,就像是一堆积木,通过各种各样的灵活组合来实现各种各样的需求,比如你可以在执行duplicate命令时通过指定UNTIL TIME 来限定恢复数据所在时间。又比如你可以通过指定PFILE参数从客户端初始化参数文件启动辅助实例,取代在创建辅助实例里创建spfile的操作。又或者通过Set Newname指定某个数据文件的存储位置等等。其它诸如异地恢复啦,复制到asm啦之类都是以duplicate命令和辅助实例为主,几个相关命令和子句为辅的综合应用,复制就是这么简单。


另外此章节中重点看看第5步,虽然我们只执行了duplicate一条命令,但你如果细细分析其执行日志的话能够得到的决不仅仅只是这些。比如执行日志第3行就看出是自动分配的通道,日志第5行开始则是将db_file_name_convert等参数转换为SET NEWNAME 命令,再接着往下看,发现有restore、clone database之类命令,看过“一步一步学RMAN”的朋友肯定还记的在该系列最后二章节中我们曾经实践过RMAN恢复备份到异机的操作。与本例对比的话操作方式有不少雷同,你完全可以把duplicate也看成是恢复操作,当然二者操作也有差异,比如duplicate命令更加简单,而且duplicate创建的副本数据库拥有独立的DBID,而RMAN手工恢复到异机创建的是与源库相同的DBID(当然duplicate也可以创建DBID与源库相同,比如standby数据库,这部分内容也许会出现在下下下下个系列中进行演示)。


命令执行完不代表操作就完了,多看看执行日志,分析分析执行原理,综合融会才能够让你的认识有更高提升。

阅读(665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~