RMAN 数据库克隆文件位置转换方法

      在使用RMAN克隆数据库时,如果辅助数据库(新数据库)使用了与目标数据库(原数据库)使用了不同的路径,那么就存在位置转换的问题。在Oracle中,控制文件用于定位数据文件以及联机重做日志文件,如果没有正确的转换,控制文件压根就找不到相应的数据文件,日志文件。对此Oralce为我们提供了三种文件位置的转换方法。本文即是对这三种转换方法的描述。

 

1、使用db_file_name_convert与log_file_name_convert参数

--我们可以在辅助数据库参数文件spfile/pfile中定义这两个参数用于Oracle来根据这个值进行自动转换文件位置
--该参数也可以用于配置dataguard是主数据库与standby数据库文件位置转换
--第一个字符串用于定义目标数据库文件位置,第二个字符串用于定义辅助数据库文件位置
--如下面的示例
*.db_file_name_convert =('/u01/database/sybo3','/u02/database/sybo5')
*.log_file_name_convert =('/u01/database/sybo3','/u02/database/sybo5')

--如果辅助数据库文件的位置有关的其他信息,如加载点都是相同的,可以直接使用下面的方式来定义参数
--target db path: /u01/database/sybo3
--auxiliary db path: /u01/database/sybo5
--做如下定义
*.db_file_name_convert =('sybo3','sybo5')
*.log_file_name_convert =('sybo3','sybo5')

--如果是下面的情形
--target db path:
  /u01/database/sybo3/oradata/system01.dbf
  /u01/database/sybo3/oradata/sysaux01.dbf
  /u02/database/sybo3/oradata/undotbs01.dbf
  /u02/database/sybo3/oradata/users01.dbf
  /u02/database/sybo3/oradata/example01.dbf

--auxiliary db path:
    /u01/database/sybo5/oradata/system01.dbf
  /u01/database/sybo5/oradata/sysaux01.dbf
  /u02/database/sybo5/oradata/undotbs01.dbf
  /u02/database/sybo5/oradata/users01.dbf
  /u02/database/sybo5/oradata/example01.dbf

--如前所述,由于加载点是相同的,依旧可以按上面的方式定义
*.db_file_name_convert =('sybo3','sybo5') 
*.log_file_name_convert =('sybo3','sybo5') 

--下面是克隆之后的情形,最好清除这个两个参数
[oracle@linux3 ~]$ rman target sys/oracle@sybo3 auxiliary sys/oracle@sybo5

RMAN> duplicate target database to sybo5;  --发布该命令后,Oracle会根据目标数据库自动创建辅助数据库日志文件以及临时表空间数据文件

SQL> select name,dbid,open_mode from v$database;

NAME            DBID OPEN_MODE
--------- ---------- --------------------
SYBO5     2292457546 READ WRITE

SQL> show parameter name_conve

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string      sybo3, sybo5
log_file_name_convert                string      sybo3, sybo5
SQL> alter system reset db_file_name_convert;

System altered.

SQL> alter system reset log_file_name_convert;

System altered.

2、使用RMAN set newname子句

RMAN 为我们提供了set newname 子句用于指定辅助数据库数据文件以及临时表空间数据文件的位置。
该命令也可以用于特定表空间或数据文件因加载点失败将数据文件恢复到非故障加载点。
如下:
  set newname for datafile m to '<new_dir>/file_name'
  set newname for tempfile n to '<new_dir>/file_name'
  
如我们可以使用下面的命令来克隆数据库

RMAN> run
{
set newname for datafile 1  to '/u01/database/sybo5/oradata/system01.dbf';     -->为数据文件指定新路径              
set newname for datafile 2  to '/u01/database/sybo5/oradata/sysaux01.dbf';                        
set newname for datafile 3  to '/u01/database/sybo5/oradata/undotbs01.dbf';                       
set newname for datafile 4  to '/u01/database/sybo5/oradata/users01.dbf';                         
set newname for datafile 5  to '/u01/database/sybo5/oradata/example01.dbf';                       
set newname for tempfile 1  to '/u01/database/sybo5/oradata/temp01.dbf';       -->为日志文件指定新路径
duplicate target database to sybo5                                             -->duplicate 命令用于克隆数据库
logfile
group 1 ('/u01/database/sybo5/redo/redo01a.log','/u01/database/sybo5/redo/redo01b.log') size 10m, -->可自行指定日志组及成员数,size
group 2 ('/u01/database/sybo5/redo/redo02a.log','/u01/database/sybo5/redo/redo02b.log') size 10m, -->如未指定logfile部分则其组数与
group 3 ('/u01/database/sybo5/redo/redo03a.log','/u01/database/sybo5/redo/redo03b.log') size 10m; -->成员数,size等同于与目标数据库
switch datafile all;                                                   -->用于将上述新路径更新到控制文件,此句可省略(会自动更新)                                 
}

3、使用configure auxname命令

configure auxname是在Oracle 11g开始提供的新命令,该配置命令会将其值存储在目标数据库的控制文件中
用法如下:
  configure auxname for datafile n to '<new_dir>/file_name';
  configure auxname for datafile n clear;

--Author : Robinson
--Blog   : http://blog.csdn.net/robinson_0612

如下面是设置之后的结果:  
RMAN> show auxname;

RMAN configuration parameters for database with db_unique_name SYBO3 are:
CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/system01.dbf' TO '/u01/database/sybo5/oradata/system01.dbf';
CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/sysaux01.dbf' TO '/u01/database/sybo5/oradata/sysaux01.dbf';
CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/undotbs01.dbf' TO '/u01/database/sybo5/oradata/undotbs01.dbf';
CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/users01.dbf' TO '/u01/database/sybo5/oradata/users01.dbf';
CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/example01.dbf' TO '/u01/database/sybo5/oradata/example01.dbf'; 

RMAN>run 
{
set until time = "to_date('20130725 10:09:53','yyyymmdd hh24:mi:ss')";  -->可以指定time,scn,sequence 
set newname for tempfile 1 TO '/u01/database/sybo5/oradata/temp01.dbf'; -->注意,configure auxname不支持tempfile,此处需要使用set newname
duplicate target database to clone_db pfile=/u01/oracle/db_1/dbs/initsybo5.ora
logfile
'/u01/database/sybo5/redo/redo01a.log' SIZE 5M, 
'/u01/database/sybo5/redo/redo02a.log' SIZE 5M, 
'/u01/database/sybo5/redo/redo03a.log' SIZE 5M;  
} 


Oracle&nbsp;牛鹏社

 

相关参考
    基于用户管理的同机数据库克隆

    基于 RMAN 的同机数据库克隆   

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理

    SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

    Oracle 基于备份控制文件的恢复(unsing backup controlfile)

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份路径困惑

    自定义 RMAN 显示的日期时间格式

    只读表空间的备份与恢复

    Oracle 基于用户管理的不完全恢复

    理解 using backup controlfile

    使用RMAN实现异机备份恢复(WIN平台)

    使用RMAN迁移文件系统数据库到ASM

    基于Linux下 Oracle 备份策略(RMAN)

    Linux 下RMAN备份shell脚本

    使用RMAN迁移数据库到异机

    RMAN 提示符下执行SQL语句

    Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)

你可能感兴趣的:(RMAN 数据库克隆文件位置转换方法)