ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用rman复制数据库

使用rman复制数据库

原创 Linux操作系统 作者:NinGoo 时间:2019-06-18 17:42:05 0 删除 编辑

---------------------------------------------------------------
实验环境:windows + oracle 10.1.0.2.0
原数据库:ning[归档模式] 复制数据库:test
--------------------------------------------------------------

在同一台server上使用rman的Duplicate Database创建复制数据库。


1. 创建新的instance

准备好相应的目录结构
E:/oracle/product10.1.0/admin/test/bdump
E:/oracle/product10.1.0/admin/test/cdump
E:/oracle/product10.1.0/admin/test/create
E:/oracle/product10.1.0/admin/test/pfile
E:/oracle/product10.1.0/admin/test/scripts
E:/oracle/product10.1.0/admin/test/udmp

创建参数文件inittest.ini(可使用原库的pfile进行修改),置于E:/oracle/product10.1.0/admin/test/pfile或者E:/oracle/product10.1.0/db_1/database目录下。其主要参数如下:
db_name=test
background_dump_dest=E:/oracle/product10.1.0/admin/test/bdump
core_dump_dest=E:/oracle/product10.1.0/admin/test/cdump
user_dump_dest=E:/oracle/product10.1.0/admin/test/udump
control_files='E:/oracle/oradata/test/control01.ctl','E:/oracle/oradata/test/ control02.ctl','E:/oracle/oradata/test/control03.ctl'
DB_FILE_NAME_CONVERT=('E:/oracle/oradata/ning','E:/oracle/oradata/test')
LOG_FILE_NAME_CONVERT=('E:/oracle/oradata/ning','E:/oracle/oradata/test')


使用oradim创建新的instance
c:/>oradim -new -sid test

例程已创建。

使用orapwd创建password文件
c:/>orapwd file=E:/oracle/product10.1.0/db_1/database/PWDtest.ora password=test entries=10

配置好监听和tnsnames,然后使用sqlplus测试连接
c:/>sqlplus /nolog
SQL*Plus: Release 10.1.0.2.0 - Production on 星期日 3月 27 21:01:13 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.

SQL> conn sys@test as sysdba

请输入口令:

已连接到空闲例程。

2.使用rman备份原库

RMAN> connect target sys/ning@ning
连接到目标数据库: NING (DBID=1141544503)
正在使用目标数据库控制文件替代恢复目录

RMAN> backup full database tag 'fullbk' format 'e:/oracle/orabackfull%u_%s_%p';
启动 backup 于 27-3月 -05
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=E:/ORACLE/ORADATA/NING/SYSTEM01.DBF
输入数据文件 fno=00002 name=E:/ORACLE/ORADATA/NING/UNDOTBS01.DBF
输入数据文件 fno=00004 name=E:/ORACLE/ORADATA/NING/USERS01.DBF
输入数据文件 fno=00003 name=E:/ORACLE/ORADATA/NING/SYSAUX01.DBF
输入数据文件 fno=00005 name=E:/ORACLE/ORADATA/NING/TEST01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 27-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 27-3月 -05
段 handle=E:/ORACLE/ORABACKFULL03GGCQA4_3_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:45
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 27-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 27-3月 -05
段 handle=E:/ORACLE/ORABACKFULL04GGCQBH_4_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:09
完成 backup 于 27-3月 -05

备份后最好做一次alter system switch logfile,否则在后面duplicate的时候可能出现如下错误:ORA-01405: fetched column value is NULL

3.使用rman复制数据库

c:/>rman target sys/ning@ning AUXILIARY sys/test@test
恢复管理器: 版本10.1.0.2.0 - Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
连接到目标数据库: NING (DBID=1141544503)
已连接到备用数据库: test (未装载)

RMAN> DUPLICATE TARGET DATABASE TO 'test';
启动 Duplicate Db 于 27-3月 -05
使用通道 ORA_AUX_DISK_1

内存脚本的内容:
{
set until scn 169960;
set newname for datafile 1 to "E:/ORACLE/ORADATA/TEST/SYSTEM01.DBF";
set newname for datafile 2 to "E:/ORACLE/ORADATA/TEST/UNDOTBS01.DBF";
set newname for datafile 3 to "E:/ORACLE/ORADATA/TEST/SYSAUX01.DBF";
set newname for datafile 4 to "E:/ORACLE/ORADATA/TEST/USERS01.DBF";
set newname for datafile 5 to "E:/ORACLE/ORADATA/TEST/TEST01.DBF";

restore
check readonly
clone database
;
}

正在执行内存脚本

正在执行命令: SET until clause
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME

启动 restore 于 27-3月 -05
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:/ORACLE/ORADATA/TEST/SYSTEM01.DBF
正将数据文件00002恢复到E:/ORACLE/ORADATA/TEST/UNDOTBS01.DBF
正将数据文件00003恢复到E:/ORACLE/ORADATA/TEST/SYSAUX01.DBF
正将数据文件00004恢复到E:/ORACLE/ORADATA/TEST/USERS01.DBF
正将数据文件00005恢复到E:/ORACLE/ORADATA/TEST/TEST01.DBF
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = E:/ORACLE/ORABACKFULL03GGCQA4_3_1 标记 = FULLBK
通道 ORA_AUX_DISK_1: 恢复完成
完成 restore 于 27-3月 -05

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "test" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 'E:/oracle/oradata/test/redo01.log' SIZE 10 M ,
GROUP 2 'E:/oracle/oradata/test/redo02.log' SIZE 10 M ,
GROUP 3 'E:/oracle/oradata/test/redo03.log' SIZE 10 M
DATAFILE
'E:ORACLEORADATATESTSYSTEM01.DBF'
CHARACTER SET ZHS16GBK

内存脚本的内容:
{
switch clone datafile all;
}

正在执行内存脚本

数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=1 stamp=554071105 文件名=E:/ORACLE/ORADATA/TEST/UNDOTBS01.DBF

数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=2 stamp=554071105 文件名=E:/ORACLE/ORADATA/TEST/SYSAUX01.DBF

数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=3 stamp=554071105 文件名=E:/ORACLE/ORADATA/TEST/USERS01.DBF

数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=4 stamp=554071105 文件名=E:/ORACLE/ORADATA/TEST/TEST01.DBF

内存脚本的内容:
{
set until scn 169960;
recover
clone database
delete archivelog;
}

正在执行内存脚本

正在执行命令: SET until clause
启动 recover 于 27-3月 -05
使用通道 ORA_AUX_DISK_1

正在开始介质的恢复
存档日志线程 1 序列 16 已作为文件 E:/ORACLE/ARCHARC00016_0553949015.001 存在于磁盘上
存档日志文件名 =E:/ORACLE/ARCHARC00016_0553949015.001 线程 =1 序列 =16

完成介质的恢复
完成 recover 于 27-3月 -05

内存脚本的内容:
{
shutdown clone;
startup clone nomount ;
}

正在执行内存脚本

数据库已卸载
Oracle 例程已关闭

已连接到备用数据库 (未启动)
Oracle 例程已启动
系统全局区域总计 142606336 字节
Fixed Size 787848 字节
Variable Size 116390520 字节
Database Buffers 25165824 字节
Redo Buffers 262144 字节

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "test" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 'E:/oracle/oradata/test/redo01.log' SIZE 10 M ,
GROUP 2 'E:/oracle/oradata/test/redo02.log' SIZE 10 M ,
GROUP 3 'E:/oracle/oradata/test/redo03.log' SIZE 10 M
DATAFILE
'E:ORACLEORADATATESTSYSTEM01.DBF'
CHARACTER SET ZHS16GBK

内存脚本的内容:
{
catalog clone datafilecopy "E:/ORACLE/ORADATA/TEST/UNDOTBS01.DBF";
catalog clone datafilecopy "E:/ORACLE/ORADATA/TEST/SYSAUX01.DBF";
catalog clone datafilecopy "E:/ORACLE/ORADATA/TEST/USERS01.DBF";
catalog clone datafilecopy "E:/ORACLE/ORADATA/TEST/TEST01.DBF";
switch clone datafile all;
}

正在执行内存脚本

已将数据文件副本列入目录
数据文件副本 filename=E:/ORACLE/ORADATA/TEST/UNDOTBS01.DBF recid=1 stamp=554071673

已将数据文件副本列入目录
数据文件副本 filename=E:/ORACLE/ORADATA/TEST/SYSAUX01.DBF recid=2 stamp=554071673

已将数据文件副本列入目录
数据文件副本 filename=E:/ORACLE/ORADATA/TEST/USERS01.DBF recid=3 stamp=554071673

已将数据文件副本列入目录
数据文件副本 filename=E:/ORACLE/ORADATA/TEST/TEST01.DBF recid=4 stamp=554071673

数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=1 stamp=554071673 文件名=E:/ORACLE/ORADATA/TEST/UNDOTBS01.DBF

数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=2 stamp=554071673 文件名=E:/ORACLE/ORADATA/TEST/SYSAUX01.DBF

数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=3 stamp=554071673 文件名=E:/ORACLE/ORADATA/TEST/USERS01.DBF

数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=4 stamp=554071673 文件名=E:/ORACLE/ORADATA/TEST/TEST01.DBF

内存脚本的内容:
{
Alter clone database open resetlogs;
}

正在执行内存脚本
数据库已打开
完成 Duplicate Db 于 27-3月 -05

4.检查复制库的状态
C:>sqlplus /nolog
SQL*Plus: Release 10.1.0.2.0 - Production on 星期日 3月 27 21:05:52 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.

SQL> conn sys@test as sysdba
请输入口令:
已连接。

SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
--------------- ------------
test OPEN

去掉inittest.ora的DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数,使用该文件生成spfile
SQL> create spfile from pfile='E:/oracle/product10.1.0/db_1/database/inittest.ora';
文件已创建。

另外,同一个ORACLE_HOME下,不能使用duplicate来复制相同db_name的库,否则在创建控制文件一步会报如下错误:

RMAN-06136: 来自辅助数据库的 ORACLE 错误: ORA-01503: CREATE CONTROLFILE 失败
ORA-01158: 数据库 已装载

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

请登录后发表评论 登录
全部评论

注册时间:2004-12-07

  • 博文量
    200
  • 访问量
    129212