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


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

    1、使用db_file_name_convert与log_file_name_convert参数

    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子句

    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命令

    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

  • 相关阅读:
    Printing a DataGridView on DotNet Framework
    对比.NET PetShop和Duwamish来探讨Ado.NET的数据库编程模式
    PetShop配置readme
    关于DGVPrinter.cs中的PrintRange
    foobar2000 0.9.5正式版放出
    Another DataGridView Printer
    getline及读文件总结
    C++中文件的读取操作,如何读取多行数据,如何一个一个的读取数据
    vector的clear和swap
    写程序前不需指定数组中的常量,而是动态编译中决定
  • 原文地址:https://www.cnblogs.com/andy6/p/5896679.html
Copyright © 2020-2023  润新知