[原创]RMAN复制数据库

简介: RMAN复制数据库 通过使用数据库备份,DBA可以在同一服务器或其它服务器上建立副本数据库。这个副本数据库可以和主数据库有相同的名称(拷贝)或与主数据库名称不同(克隆)。ORACLE在数据库拷贝和数据库克隆之间惟一不同的是拷贝的数据库不能更改名称。

  RMAN复制数据库

通过使用数据库备份,DBA可以在同一服务器或其它服务器上建立副本数据库。这个副本数据库可以和主数据库有相同的名称(拷贝)或与主数据库名称不同(克隆)。ORACLE在数据库拷贝和数据库克隆之间惟一不同的是拷贝的数据库不能更改名称。使用RMAN的复制数据库特性,可以从RMAN备份创建一个新的数据库,并为这个副本数据库保留已有的数据库名称或者赋予新的名称。

RMAN术语和命令:

A.                辅助数据库(Auxiliary database)RMAN将目标数据库复制到该数据库实例。要创建该数据库的参数文件、路径和口令文件。必须在RMAN数据库复制之前以非加载(NOMOUNT)模式启动辅助数据库实例。

B.                 复制(Duplicate):从其它数据库的RMAN备份创建一个新的数据库。要在RMAN执行复制的位置配置数据库并启动Oracle的实例。从RMAN的角度来看,目标数据库被复制到副本数据库。

C.                设置新名称(Set newname):在一个RMAN运行块内为数据文件设置新的名称,提供给该参数的文件名称覆盖任何该数据文件的辅助数据库名(SET AUXNAME)或者辅助数据库参数(DB_FILE_NAME_CONVERT)。这个新名称的值只在运行块内有效。

D.                设置辅助名称(Set auxname):为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在。如果不希望以后的RMAN命令中使用这个设置的名称,则必须将该名称设置为NULL

E.                 日志文件(log file):可以在Duplicate命令中作用这个关键词,以指定副本数据库创建的联机重做日志文件。如果没有特别指定这个关键词,则RMAN将在辅助参数文件中的LOG_FILE_NAME_CONVERT参数决定的路径中生成日志文件。如果没有这个RMAN关键词,而且也没有设置辅助参数,则RMAN将在目标数据库同样的位置创建日志(假设已指定了NOCHECKFILENAME选项)

F.                 不检查文件名(Nocheckfilename):默认情况下,RMAN将检查在副本主机上被恢复到主目标数据文件路径下的数据文件,以确保不会被错误地覆盖。使用该选项可以覆盖这个默认的操作。这样就需要手工确保RMAN没有覆盖任何已存在的数据文件。应当谨慎使用这个命令,以防止覆盖数据文件。

Duplicate命令执行的过程中,RMAN执行了一系列工作。当连接到目标、辅助和或选的目录数据库后,RMAN将进行以下操作:

1)      根据最近发生的或者是提供的恢复停止点来决定复制操作将使用哪个基本的备份。

2)      根据辅助数据库参数或RMAN设置的命令和选项来决定将数据文件保存在辅助数据库实例的什么位置。

3)      为辅助数据库读出备份片或映像拷贝并恢复数据文件。这个RMAN的功能与执行正常的数据库还原是一样的。

4)      根据恢复停止点将任何增量备份应用于还原数据文件。这个增量方式的应用与用RMAN发布恢复数据库命令的任务是一样的。

5)      根据恢复停止点从磁盘或备份将所有归档日志文件应用于还原数据文件。

6)      为辅助数据库创建新的控制文件。

7)      当重新设置联机重做日志文件时,打开副本数据库。新的联机重做日志文件将根据RMAN复制数据库命令中指定的或者根据转换的辅助参数文件进行创建。

创建副本数据库的步骤:

1)      准备副本数据库参数文件:拷贝目标数据库的参数文件到$ORACLE_BASE/admin/clone/pfile位置。修改参数文件,替换所有目标数据库名为副本数据库名,同时增加两个参数:db_file_name_convert = (“primary”,”clone”)log_file_name_convert = (“primary”,”clone”),再在$ORACLE_HOME/dbs目录下增加参数文件的LINUX符号连接,或者%ORACLE_HOME%\database目录下增加windows参数文件。

2)      创建口令文件:

LINUX>orapwd file=$ORACLE_HOME/dbs/orapwCLONE password=clone entries=4

WINNT>orapwd file=%ORACLE_HOME%\database\PWDCLONE.ORA password=clone

3)      创建windows服务(linux不需要)

WINNT>oradim –new –sid clone –intpwd clone

4)      建立NET8连接

5)      启动辅助实例:在RMAN创建副本数据库以前,辅助实例需要以非加载模式启动

6)      加载或打开目标数据库

7)      创建副本数据库

C:\Documents and Settings\Administrator>rman

Recovery Manager: 版本 9.2.0.1.0 - Production

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

RMAN> connect target sys/oracle@mydb ;

已联机到目标数据库: MYDB (DBID=2567199153)

RMAN> connect catalog rman/rman@standby

已联机至复原目录数据库

RMAN> connect auxiliary sys/clone;

联机至辅助数据库: clone (未挂载)

RMAN> run{

2>   SET UNTIL logseq 3 THREAD 1;

3>   ALLOCATE auxiliary channel d1 TYPE DISK;

4>   duplicate target DATABASE TO "CLONE";

5>   }

执行命令: SET until clause

已配置信道: d1

通道 d1: sid=14 devtype=DISK

开始 Duplicate Db, 07-5 -08

打印储存的命令档: Memory Script

{

   set until scn 1077491;

   set newname for datafile 1 to "C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF";

   set newname for datafile 2 to "C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF";

   set newname for datafile 3 to "C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF";

   set newname for datafile 4 to "C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF";

   set newname for datafile 5 to "C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF";

   set newname for datafile 6 to "C:\ORACLE\ORADATA\CLONE\INDX1.DBF";

   set newname for datafile 7 to "C:\ORACLE\ORADATA\CLONE\ODM01.DBF";

   set newname for datafile 8 to "C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF";

   set newname for datafile 9 to "C:\ORACLE\ORADATA\CLONE\USERS01.DBF";

   set newname for datafile 10 to "C:\ORACLE\ORADATA\CLONE\XDB01.DBF";

   set newname for datafile 11 to "C:\ORACLE\ORADATA\CLONE\MYTS01.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

执行命令: SET NEWNAME

开始 restore, 07-5 -08

通道 d1: 启动数据文件备份集的还原

通道 d1: 正在设定要从备份集还原的数据文件

正在将资料文件 00001 还原为 C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF

正在将资料文件 00002 还原为 C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF

正在将资料文件 00003 还原为 C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF

正在将资料文件 00004 还原为 C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF

正在将资料文件 00005 还原为 C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF

正在将资料文件 00006 还原为 C:\ORACLE\ORADATA\CLONE\INDX1.DBF

正在将资料文件 00007 还原为 C:\ORACLE\ORADATA\CLONE\ODM01.DBF

正在将资料文件 00008 还原为 C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF

正在将资料文件 00009 还原为 C:\ORACLE\ORADATA\CLONE\USERS01.DBF

正在将资料文件 00010 还原为 C:\ORACLE\ORADATA\CLONE\XDB01.DBF

正在将资料文件 00011 还原为 C:\ORACLE\ORADATA\CLONE\MYTS01.DBF

通道 d1: 还原备份片 1

处理片=D:\ORACLEBAK\DBMYDB_10_1_653973100 标志=WHOLE_INC0 参数=NULL

通道 d1: 还原完成

完成 restore, 07-5 -08

sql 叙述句: CREATE CONTROLFILE REUSE SET DATABASE "CLONE" RESETLOGS ARCHIVELOG

 MAXLOGFILES     50

 MAXLOGMEMBERS      5

 MAXDATAFILES      100

 MAXINSTANCES     1

 MAXLOGHISTORY      226

 LOGFILE

 GROUP 1 ( 'C:\ORACLE\ORADATA\CLONE\REDO01.LOG' ) SIZE 104857600 REUSE,

 GROUP 2 ( 'C:\ORACLE\ORADATA\CLONE\REDO02.LOG' ) SIZE 104857600 REUSE,

 GROUP 3 ( 'C:\ORACLE\ORADATA\CLONE\REDO03.LOG' ) SIZE 104857600 REUSE

 DATAFILE

 'C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF'

 CHARACTER SET AL32UTF8

打印储存的命令档: Memory Script

{

   switch clone datafile all;

}

执行命令档: Memory Script

数据文件 2 已切换至数据文件复制本

输入数据文件复本 recid=1 戳记=654059846 文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01

.DBF

数据文件 3 已切换至数据文件复制本

输入数据文件复本 recid=2 戳记=654059846 文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01

.DBF

数据文件 4 已切换至数据文件复制本

输入数据文件复本 recid=3 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.D

BF

数据文件 5 已切换至数据文件复制本

输入数据文件复本 recid=4 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01

.DBF

数据文件 6 已切换至数据文件复制本

输入数据文件复本 recid=5 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF

数据文件 7 已切换至数据文件复制本

输入数据文件复本 recid=6 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF

数据文件 8 已切换至数据文件复制本

输入数据文件复本 recid=7 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.D

BF

数据文件 9 已切换至数据文件复制本

输入数据文件复本 recid=8 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.D

BF

数据文件 10 已切换至数据文件复制本

输入数据文件复本 recid=9 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF

数据文件 11 已切换至数据文件复制本

输入数据文件复本 recid=10 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.D

BF

打印储存的命令档: Memory Script

{

   set until scn 1077491;

   recover

   clone database

    delete archivelog

   ;

}

执行命令档: Memory Script

执行命令: SET until clause

开始 recover, 07-5 -08

启动媒体恢复

通道 d1: 启动存盘日志还原到预设目的

通道 d1: 还原存盘日志

存盘日志系线=1 顺序=1

通道 d1: 还原存盘日志

存盘日志系线=1 顺序=2

通道 d1: 还原备份片 1

处理片=D:\ORACLEBAK\ARCHMYDB_11_1_654043289 标志=TAG20080506T224129 参数=NULL

通道 d1: 还原完成

存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_1.DBF 系线=1 顺序=1

通道 clone_default: 删除存盘日志

存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_1.DBF recid=2 戳记=654059855

存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_2.DBF 系线=1 顺序=2

通道 clone_default: 删除存盘日志

存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_2.DBF recid=1 戳记=654059854

媒体恢复完成

完成 recover, 07-5 -08

打印储存的命令档: Memory Script

{

   shutdown clone;

   startup clone nomount ;

}

执行命令档: Memory Script

已卸下数据库

已关闭 Oracle 执行处理

联机至辅助数据库 (未启动)

已启动 Oracle 执行处理

系统整体区域总共是     122755896 个字节

Fixed Size                      453432 个字节

Variable Size                 96468992 个字节

Database Buffers              25165824 个字节

Redo Buffers                    667648 个字节

sql 叙述句: CREATE CONTROLFILE REUSE SET DATABASE \CLONE\ RESETLOGS ARCHIVELOG

 MAXLOGFILES     50

 MAXLOGMEMBERS      5

 MAXDATAFILES      100

 MAXINSTANCES     1

 MAXLOGHISTORY      226

 LOGFILE

 GROUP 1 ( 'C:\ORACLE\ORADATA\CLONE\REDO01.LOG' ) SIZE 104857600 REUSE,

 GROUP 2 ( 'C:\ORACLE\ORADATA\CLONE\REDO02.LOG' ) SIZE 104857600 REUSE,

 GROUP 3 ( 'C:\ORACLE\ORADATA\CLONE\REDO03.LOG' ) SIZE 104857600 REUSE

 DATAFILE

 'C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF'

 CHARACTER SET AL32UTF8

打印储存的命令档: Memory Script

{

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\INDX1.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\ODM01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\USERS01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\XDB01.DBF";

   catalog clone datafilecopy "C:\ORACLE\ORADATA\CLONE\MYTS01.DBF";

   switch clone datafile all;

}

执行命令档: Memory Script

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF recid=1 戳记=654059903

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF recid=2 戳记=654059903

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF recid=3 戳记=654059903

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF recid=4 戳记=654059904

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF recid=5 戳记=654059904

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF recid=6 戳记=654059904

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF recid=7 戳记=654059904

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.DBF recid=8 戳记=654059905

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF recid=9 戳记=654059905

数据文件备份已加入目录

数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.DBF recid=10 戳记=654059905

数据文件 2 已切换至数据文件复制本

输入数据文件复本 recid=1 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01

.DBF

数据文件 3 已切换至数据文件复制本

输入数据文件复本 recid=2 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01

.DBF

数据文件 4 已切换至数据文件复制本

输入数据文件复本 recid=3 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.D

BF

数据文件 5 已切换至数据文件复制本

输入数据文件复本 recid=4 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01

.DBF

数据文件 6 已切换至数据文件复制本

输入数据文件复本 recid=5 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF

数据文件 7 已切换至数据文件复制本

输入数据文件复本 recid=6 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF

数据文件 8 已切换至数据文件复制本

输入数据文件复本 recid=7 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.D

BF

数据文件 9 已切换至数据文件复制本

输入数据文件复本 recid=8 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.D

BF

数据文件 10 已切换至数据文件复制本

输入数据文件复本 recid=9 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF

数据文件 11 已切换至数据文件复制本

输入数据文件复本 recid=10 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.D

BF

打印储存的命令档: Memory Script

{

   Alter clone database open resetlogs;

}

执行命令档: Memory Script

已开启数据库

完成 Duplicate Db, 07-5 -08

RMAN>

使用RMAN的关键词和命令来控制数据文件和日志文件的名称和位置 

可以如下控制数据文件的位置并设置新名称或设置辅助名称

SET auxname FOR DATAFILE 2 TO 'c:\oracle\oradata\clone\auxname02.dbf';#为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在,如果不希望以后的RMAN使用这个设置的名称,则必须将该名称设置为NULL

SET auxname FOR DATAFILE 2 TO 'c:\oracle\oradata\clone\auxname02.dbf';#为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在,如果不希望以后的RMAN使用这个设置的名称,则必须将该名称设置为NULL
SET auxname FOR DATAFILE 4 TO 'c:\oracle\oradata\clone\auxname03.dbf';
SET auxname FOR DATAFILE 6 TO 'c:\oracle\oradata\clone\auxname04.dbf';
run{
 ALLOCATE auxiliary channel d1 TYPE DISK;
 SET UNTIL logseq 3 THREAD 1;
 SET newname FOR DATAFILE 1 TO 'c:\oracle\oradata\clone\newname01.dbf'; #RMAN运行块内为数据文件设置新的名称,这个新名称的值只在运行块内有效
 SET newname FOR DATAFILE 3 TO 'c:\oracle\oradata\clone\newname03.dbf';
 SET newname FOR DATAFILE 5 TO 'c:\oracle\oradata\clone\newname05.dbf';
 SET newname FOR DATAFILE 7 TO 'c:\oracle\oradata\clone\newname07.dbf';
 duplicate target DATABASE TO \CLONE\ LOGFILE
    GROUP 1 ('c:\oracle\oradata\clone\redo1_1.log',
             'c:\oracle\oradata\clone\redo1_2.log') SIZE 10M REUSE,
    GROUP 2 ('c:\oracle\oradata\clone\redo2_1.log',
             'c:\oracle\oradata\clone\redo2_2.log') SIZE 10M REUSE,
    GROUP 3 ('c:\oracle\oradata\clone\redo3_1.log',
             'c:\oracle\oradata\clone\redo3_2.log') SIZE 10M REUSE;
 }
SET auxname FOR DATAFILE 2 TO NULL;
SET auxname FOR DATAFILE 4 TO NULL;
SET auxname FOR DATAFILE 6 TO NULL;              

在复制期间为clone数据库的每个数据文件指定一个新的文件名(或位置)。这样,当将目标数据库备份还原到复制数据库位置时,

每个鞴憟韫i以被重新命名,日志文件可以指定为附加到DUPLICATE TARGER DATABASE命令,在以上的示例中,每个数据文件都被重命名,

并且日志文件也被重新定义大小、重命名和镜像,对单数的数据文件重命名而对偶数的数据文件辅助命名。

目录
相关文章
|
7天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
31 5
|
11月前
|
数据库 内存技术
rman 恢复数据库一个小时多了也没有动静 implicit crosscheck
The Problem After restoring a controlfile, the restore database can take a long time to restore due to implicit croscchecking and cataloging.
|
Oracle 关系型数据库 数据库
Oracle21C--使用RMAN备份和恢复容器数据库
Oracle 21C不再支持非容器数据库,在容器数据库下怎样备份和恢复数据库,本文做了说明和演示。
276 0
|
Oracle 关系型数据库 数据库
oracle数据库控制文件的备份和恢复之三RMAN自动备份和恢复
使用RMAN自动备份的控制文件向数据库中恢复控制文件
308 0
|
Oracle 关系型数据库 数据库
|
存储 Oracle 关系型数据库
|
Oracle 关系型数据库 数据库