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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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

 

1、使用db_file_name_convert与log_file_name_convert参数

[sql]  view plain  copy print?
  1. --我们可以在辅助数据库参数文件spfile/pfile中定义这两个参数用于Oracle来根据这个值进行自动转换文件位置 
  2. --该参数也可以用于配置dataguard是主数据库与standby数据库文件位置转换 
  3. --第一个字符串用于定义目标数据库文件位置,第二个字符串用于定义辅助数据库文件位置 
  4. --如下面的示例 
  5. *.db_file_name_convert =('/u01/database/sybo3','/u02/database/sybo5') 
  6. *.log_file_name_convert =('/u01/database/sybo3','/u02/database/sybo5') 
  7.  
  8. --如果辅助数据库文件的位置有关的其他信息,如加载点都是相同的,可以直接使用下面的方式来定义参数 
  9. --target db path: /u01/database/sybo3 
  10. --auxiliary db path: /u01/database/sybo5 
  11. --做如下定义 
  12. *.db_file_name_convert =('sybo3','sybo5') 
  13. *.log_file_name_convert =('sybo3','sybo5') 
  14.  
  15. --如果是下面的情形 
  16. --target db path: 
  17.   /u01/database/sybo3/oradata/system01.dbf 
  18.   /u01/database/sybo3/oradata/sysaux01.dbf 
  19.   /u02/database/sybo3/oradata/undotbs01.dbf 
  20.   /u02/database/sybo3/oradata/users01.dbf 
  21.   /u02/database/sybo3/oradata/example01.dbf 
  22.  
  23. --auxiliary db path: 
  24.     /u01/database/sybo5/oradata/system01.dbf 
  25.   /u01/database/sybo5/oradata/sysaux01.dbf 
  26.   /u02/database/sybo5/oradata/undotbs01.dbf 
  27.   /u02/database/sybo5/oradata/users01.dbf 
  28.   /u02/database/sybo5/oradata/example01.dbf 
  29.  
  30. --如前所述,由于加载点是相同的,依旧可以按上面的方式定义 
  31. *.db_file_name_convert =('sybo3','sybo5')  
  32. *.log_file_name_convert =('sybo3','sybo5')  
  33.  
  34. --下面是克隆之后的情形,最好清除这个两个参数 
  35. [oracle@linux3 ~]$ rman target sys/oracle@sybo3 auxiliary sys/oracle@sybo5 
  36.  
  37. RMAN> duplicate target database to sybo5;  --发布该命令后,Oracle会根据目标数据库自动创建辅助数据库日志文件以及临时表空间数据文件 
  38.  
  39. SQL> select name,dbid,open_mode from v$database; 
  40.  
  41. NAME            DBID OPEN_MODE 
  42. --------- ---------- -------------------- 
  43. SYBO5     2292457546 READ WRITE 
  44.  
  45. SQL> show parameter name_conve 
  46.  
  47. NAME                                 TYPE        VALUE 
  48. ------------------------------------ ----------- ------------------------------ 
  49. db_file_name_convert                 string      sybo3, sybo5 
  50. log_file_name_convert                string      sybo3, sybo5 
  51. SQL> alter system reset db_file_name_convert; 
  52.  
  53. System altered. 
  54.  
  55. SQL> alter system reset log_file_name_convert; 
  56.  
  57. System altered. 
--我们可以在辅助数据库参数文件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子句

[python]  view plain  copy print?
  1. RMAN 为我们提供了set newname 子句用于指定辅助数据库数据文件以及临时表空间数据文件的位置。 
  2. 该命令也可以用于特定表空间或数据文件因加载点失败将数据文件恢复到非故障加载点。 
  3. 如下: 
  4.   set newname for datafile m to '<new_dir>/file_name' 
  5.   set newname for tempfile n to '<new_dir>/file_name' 
  6.    
  7. 如我们可以使用下面的命令来克隆数据库 
  8.  
  9. RMAN> run 
  10. set newname for datafile 1  to '/u01/database/sybo5/oradata/system01.dbf';     -->为数据文件指定新路径               
  11. set newname for datafile 2  to '/u01/database/sybo5/oradata/sysaux01.dbf';                         
  12. set newname for datafile 3  to '/u01/database/sybo5/oradata/undotbs01.dbf';                        
  13. set newname for datafile 4  to '/u01/database/sybo5/oradata/users01.dbf';                          
  14. set newname for datafile 5  to '/u01/database/sybo5/oradata/example01.dbf';                        
  15. set newname for tempfile 1  to '/u01/database/sybo5/oradata/temp01.dbf';       -->为日志文件指定新路径 
  16. duplicate target database to sybo5                                             -->duplicate 命令用于克隆数据库 
  17. logfile 
  18. group 1 ('/u01/database/sybo5/redo/redo01a.log','/u01/database/sybo5/redo/redo01b.log') size 10m, -->可自行指定日志组及成员数,size 
  19. group 2 ('/u01/database/sybo5/redo/redo02a.log','/u01/database/sybo5/redo/redo02b.log') size 10m, -->如未指定logfile部分则其组数与 
  20. group 3 ('/u01/database/sybo5/redo/redo03a.log','/u01/database/sybo5/redo/redo03b.log') size 10m; -->成员数,size等同于与目标数据库 
  21. switch datafile all;                                                   -->用于将上述新路径更新到控制文件,此句可省略(会自动更新)                                  
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命令

[python]  view plain  copy print?
  1. configure auxname是在Oracle 11g开始提供的新命令,该配置命令会将其值存储在目标数据库的控制文件中 
  2. 用法如下: 
  3.   configure auxname for datafile n to '<new_dir>/file_name'; 
  4.   configure auxname for datafile n clear; 
  5.  
  6. --Author : Robinson 
  7. --Blog   : http://blog.csdn.net/robinson_0612 
  8.  
  9. 如下面是设置之后的结果:   
  10. RMAN> show auxname; 
  11.  
  12. RMAN configuration parameters for database with db_unique_name SYBO3 are: 
  13. CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/system01.dbf' TO'/u01/database/sybo5/oradata/system01.dbf'; 
  14. CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/sysaux01.dbf' TO'/u01/database/sybo5/oradata/sysaux01.dbf'; 
  15. CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/undotbs01.dbf' TO'/u01/database/sybo5/oradata/undotbs01.dbf'; 
  16. CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/users01.dbf' TO'/u01/database/sybo5/oradata/users01.dbf'; 
  17. CONFIGURE AUXNAME FOR DATAFILE '/u01/database/sybo3/oradata/example01.dbf' TO'/u01/database/sybo5/oradata/example01.dbf';  
  18.  
  19. RMAN>run  
  20. set until time = "to_date('20130725 10:09:53','yyyymmdd hh24:mi:ss')";  -->可以指定time,scn,sequence  
  21. set newname for tempfile 1 TO '/u01/database/sybo5/oradata/temp01.dbf'; -->注意,configure auxname不支持tempfile,此处需要使用set newname 
  22. duplicate target database to clone_db pfile=/u01/oracle/db_1/dbs/initsybo5.ora 
  23. logfile 
  24. '/u01/database/sybo5/redo/redo01a.log' SIZE 5M,  
  25. '/u01/database/sybo5/redo/redo02a.log' SIZE 5M,  
  26. '/u01/database/sybo5/redo/redo03a.log' SIZE 5M;   
  27. }  

转:http://blog.csdn.net/leshami/article/details/9495975



本文转自 张冲andy 博客园博客,原文链接: http://www.cnblogs.com/andy6/p/5896679.html  ,如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
存储 监控 安全
数据库多实例的部署与配置方法
【10月更文挑战第23天】数据库多实例的部署和配置需要综合考虑多个因素,包括硬件资源、软件设置、性能优化、安全保障等。通过合理的部署和配置,可以充分发挥多实例的优势,提高数据库系统的运行效率和可靠性。在实际操作中,要不断总结经验,根据实际情况进行调整和优化,以适应不断变化的业务需求。
|
28天前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
132 0
|
5天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
17 7
|
24天前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
40 11
|
18天前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
17 2
|
23天前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
26天前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
52 1
|
22天前
|
SQL 存储 监控
串口调试助手连接SQL数据库的技巧与方法
串口调试助手是电子工程师和软件开发人员常用的工具,它能够帮助用户进行串口通信的调试和数据分析
|
23天前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
24天前
|
Java API 数据库
Data jpa 增删改查的方法分别有哪些
Data jpa 增删改查的方法分别有哪些