首页 > 代码库 > 批量迁移Oracle数据文件,日志文件及控制文件

批量迁移Oracle数据文件,日志文件及控制文件

有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求。对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移。当然备份恢复也是其中的方式之一。本文主要描述如何使用批量方式来迁移数据文件,日志文件。如需要也可以将整个数据库迁移到新的位置以及重命名数据库。

[sql] view plain copy
 
 print?
  1. 1、环境及需求  
  2.   robin@SZDB:~> cat /etc/issue  
  3.     
  4.   Welcome to SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l).  
  5.     
  6.   robin@SZDB:~> sqlplus -v  
  7.     
  8.   SQL*Plus: Release 10.2.0.3.0 - Production  
  9.   
  10.   下面的迁移主要是将数据库/u02/database/SYBO2SZ下的所有文件迁移到一个新的目录/u02/database/SY5221BK下面。  
  11.   源路径:数据库SYBO2SZ所有的数据文件,日志文件,控制文件全部位于SYBO2SZ下的相应子目录。  
  12.   新路径:数据库SYBO2SZ所有的数据文件,日志文件,控制文件全部移动到SY5221BK相应的子目录下。  
  13.     
  14. 2、当前数据库文件位置(来源于数据字典)    
  15.   sys@SYBO2SZ> @dba_files_all_2.sql  
  16.     
  17.   Tablespace Name / File Class  Filename                                                      File Size Auto  
  18.   ----------------------------- ------------------------------------------------------- --------------- ----  
  19.   GOEX_ACCOUNT_IDX              /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_idx.dbf        16,777,216 YES  
  20.   GOEX_ACCOUNT_TBL              /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf        25,165,824 YES  
  21.   GOEX_ARCHIVE_IDX              /u02/database/SYBO2SZ/oradata/SYBO2SZ_archive_idx.dbf        20,971,520 YES  
  22.    --    .........                  .........................  
  23.   SOE                           /u02/database/SYBO2SZ/oradata/soe.dbf                       934,043,648 YES  
  24.   SOEINDEX                      /u02/database/SYBO2SZ/oradata/soeindex.dbf                  713,031,680 YES  
  25.   SYSAUX                        /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf             325,058,560 YES  
  26.   SYSTEM                        /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf                524,288,000 YES  
  27.   TBST                          /u02/database/SYBO2SZ/oradata/tbst.dbf                       10,485,760 YES  
  28.   TEMP                          /u02/database/SYBO2SZ/temp/tempSYBO2SZ.dbf                  432,013,312 YES  
  29.   UNDOTBS1                      /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf               429,916,160 YES  
  30.   UNDOTBS2                      /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf              314,572,800 YES  
  31.   [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log               20,971,520  
  32.   [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log3bSYBO2SZ.log               20,971,520  
  33.   [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log4aSYBO2SZ.log               20,971,520  
  34.   [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log4bSYBO2SZ.log               20,971,520  
  35.                                                                                         ---------------  
  36.   sum                                                                                     5,107,376,128  
  37.     
  38.     41 rows selected.  
  39.       
  40. 3、创建相应的目录  
  41.   oracle@SZDB:/u02/database/SYBO2SZ> more mkdir_SY5221BK.sh   
  42.   #!/bin/sh  
  43.   rm -rf /u02/database/SY5221BK/archive  
  44.   rm -rf /u02/database/SY5221BK/backup  
  45.   rm -rf /u02/database/SY5221BK/bdump  
  46.   rm -rf /u02/database/SY5221BK/cdump  
  47.   rm -rf /u02/database/SY5221BK/udump  
  48.   rm -rf /u02/database/SY5221BK/controlf  
  49.   rm -rf /u02/database/SY5221BK/oradata  
  50.   rm -rf /u02/database/SY5221BK/redolog  
  51.   rm -rf /u02/database/SY5221BK/undo  
  52.   rm -rf /u02/database/SY5221BK/temp  
  53.   rm -rf /u02/database/SY5221BK/ref_data  
  54.   rm -rf /u02/database/SY5221BK/BNR  
  55.   rm -rf /u02/database/SY5221BK/BNR/full  
  56.   rm -rf /u02/database/SY5221BK/BNR/dump  
  57.   rm -rf /u02/database/SY5221BK/dbcreatelogs   
  58.     
  59.   mkdir -p /u02/database/SY5221BK/flash_recovery_area   
  60.   mkdir -p /u02/database/SY5221BK  
  61.   mkdir -p /u02/database/SY5221BK/archive  
  62.   mkdir -p /u02/database/SY5221BK/backup  
  63.   mkdir -p /u02/database/SY5221BK/bdump  
  64.   mkdir -p /u02/database/SY5221BK/cdump  
  65.   mkdir -p /u02/database/SY5221BK/udump  
  66.   mkdir -p /u02/database/SY5221BK/controlf  
  67.   mkdir -p /u02/database/SY5221BK/oradata  
  68.   mkdir -p /u02/database/SY5221BK/redolog  
  69.   mkdir -p /u02/database/SY5221BK/undo  
  70.   mkdir -p /u02/database/SY5221BK/temp  
  71.   mkdir -p /u02/database/SY5221BK/ref_data  
  72.   mkdir -p /u02/database/SY5221BK/BNR  
  73.   mkdir -p /u02/database/SY5221BK/BNR/full  
  74.   mkdir -p /u02/database/SY5221BK/BNR/dump  
  75.   mkdir -p /u02/database/SY5221BK/dbcreatelogs   
  76.     
  77.   oracle@SZDB:/u02/database/SYBO2SZ> ./mkdir_SY5221BK.sh   
  78.   
  79. 4、实施迁移  
  80.   sys@SYBO2SZ> startup mount force;   --->切换数据库到mount状态  
  81.   ORACLE instance started.  
  82.     
  83.   Database mounted.  
  84.   sys@SYBO2SZ> @/users/robin/dba_scripts/custom/sql/transfer_db_files -->调用脚本进行数据及日志文件的迁移  
  85.     
  86.   Step 1, Coping file to destination from source  
  87.   ============================================  
  88.     
  89.   Step 2, updating files to control file  
  90.   ============================================  
  91.     
  92.   sys@SYBO2SZ> alter database open;   -->切换数据库到open状态  
  93.     
  94.   Database altered.  
  95.     
  96.   sys@SYBO2SZ> @dba_files_all_2.sql   -->验证切换结果  
  97.     
  98.   Tablespace Name / File Class  Filename                                                     File Size Auto  
  99.   ----------------------------- ---------------------------------------------------------------------- ----  
  100.   GOEX_ACCOUNT_IDX              /u02/database/SY5221BK/oradata/SY5221BK_account_idx.dbf     16,777,216 YES  
  101.     --..........                        .................  
  102.   TEMP                          /u02/database/SY5221BK/temp/tempSY5221BK.dbf               432,013,312 YES  
  103.   UNDOTBS1                      /u02/database/SY5221BK/undo/undotbsSY5221BK.dbf            429,916,160 YES  
  104.   UNDOTBS2                      /u02/database/SY5221BK/undo/undotbsSY5221BK2.dbf           314,572,800 YES  
  105.   [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log3aSY5221BK.log            20,971,520  
  106.   [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log3bSY5221BK.log            20,971,520  
  107.   [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log4aSY5221BK.log            20,971,520  
  108.   [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log4bSY5221BK.log            20,971,520  
  109.                                                                                          -------------  
  110.   sum                                                                                    5,107,376,128  
  111.     
  112.   41 rows selected.  
  113.     
  114.   --如果仅仅是迁移数据文件以及日志文件则上述步骤完成即可  
  115.   --如果需要修改相关的参数文件以及迁移控制文件则继续下面的步骤  
  116.   --由于控制文件的在mount状态下被校验,因此我们在nomount状态下来处理  
  117.     
  118.   sys@SYBO2SZ> shutdown immediate;  
  119.     
  120.   sys@SYBO2SZ> startup nomount;  
  121.       
  122.   -->修改参数文件之前先备份spfile  
  123.   sys@SYBO2SZ> create pfile=‘/users/oracle/OraHome10g/dbs/initSYBO2SZ_bak.ora‘ from spfile;  
  124.     
  125.   File created.  
  126.     
  127.   -->下面对相关的参数文件的路径进行修改,如果不需要修改参数,则跳过下面的步骤  
  128.   sys@SYBO2SZ> show parameter dump  
  129.     
  130.   NAME                                 TYPE        VALUE  
  131.   ------------------------------------ ----------- ------------------------------  
  132.   background_core_dump                 string      partial  
  133.   background_dump_dest                 string      /u02/database/SYBO2SZ/bdump  
  134.   core_dump_dest                       string      /u02/database/SYBO2SZ/cdump  
  135.   max_dump_file_size                   string      UNLIMITED  
  136.   shadow_core_dump                     string      partial  
  137.   user_dump_dest                       string      /u02/database/SYBO2SZ/udump  
  138.     
  139.   sys@SYBO2SZ> alter system set background_dump_dest=‘/u02/database/SY5221BK/bdump‘ scope=both sid=‘*‘;  
  140.     
  141.   System altered.  
  142.     
  143.   sys@SYBO2SZ> alter system set core_dump_dest=‘/u02/database/SY5221BK/cdump‘ scope=both sid=‘*‘;  
  144.     
  145.   System altered.  
  146.     
  147.   sys@SYBO2SZ> alter system set user_dump_dest=‘/u02/database/SY5221BK/udump‘ scope=both sid=‘*‘;  
  148.     
  149.   System altered.  
  150.     
  151.   sys@SYBO2SZ> show parameter db_recovery_file_dest  
  152.     
  153.   NAME                                 TYPE        VALUE  
  154.   ------------------------------------ ----------- ------------------------------  
  155.   db_recovery_file_dest                string      /u02/database/SYBO2SZ/flash_re  
  156.                                                    covery_area  
  157.   db_recovery_file_dest_size           big integer 1G  
  158.     
  159.   sys@SYBO2SZ> alter system set db_recovery_file_dest=‘/u02/database/SY5221BK/flash_recovery_area‘ scope=both;  
  160.     
  161.   System altered.  
  162.     
  163.   sys@SYBO2SZ> show parameter LOG_ARCHIVE_DEST_1  
  164.     
  165.   NAME                                 TYPE        VALUE  
  166.   ------------------------------------ ----------- ------------------------------  
  167.   log_archive_dest_1                   string      LOCATION=/u02/database/SYBO2SZ  
  168.                                                    /archive/  
  169.   log_archive_dest_10                  string  
  170.   sys@SYBO2SZ> alter system set log_archive_dest_1=‘LOCATION=/u02/database/SY5221BK/archive‘ scope=both;     
  171.     
  172.   System altered.  
  173.     
  174.   sys@SYBO2SZ> show parameter UTL_FILE_DIR  
  175.     
  176.   NAME                                 TYPE        VALUE  
  177.   ------------------------------------ ----------- ------------------------------  
  178.   utl_file_dir                         string      /u02/database/SYBO2SZ/udump  
  179.     
  180.   sys@SYBO2SZ> alter system set UTL_FILE_DIR=‘/u02/database/SY5221BK/udump‘ scope=both;  
  181.   alter system set UTL_FILE_DIR=‘/u02/database/SY5221BK/udump‘ scope=both  
  182.                    *  
  183.   ERROR at line 1:  
  184.   ORA-02095: specified initialization parameter cannot be modified  -->该参数不能修改内存值  
  185.     
  186.     
  187.   sys@SYBO2SZ> alter system set UTL_FILE_DIR=‘/u02/database/SY5221BK/udump‘ scope=spfile;  
  188.     
  189.   System altered.  
  190.     
  191.   -->下面对控制文件位置进行修改  
  192.   sys@SYBO2SZ> show parameter control_f  
  193.     
  194.   NAME                                 TYPE        VALUE  
  195.   ------------------------------------ ----------- ------------------------------  
  196.   control_file_record_keep_time        integer     7  
  197.   control_files                        string      /u02/database/SYBO2SZ/controlf  
  198.                                                    /cntl1SYBO2SZ.ctl, /u02/databa  
  199.                                                    se/SYBO2SZ/controlf/cntl2SYBO2  
  200.                                                    SZ.ctl, /u02/database/SYBO2SZ/  
  201.                                                    controlf/cntl3SYBO2SZ.ctl  
  202.     
  203.   -->将控制文件复制到新位置  
  204.   sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl1SY5221BK.ctl  
  205.     
  206.   sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl2SY5221BK.ctl  
  207.     
  208.   sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl3SY5221BK.ctl  
  209.                 
  210.   -->Author : Robinson Cheng  
  211.   -->Blog   : http://blog.csdn.net/robinson_0612  
  212.                 
  213.   -->通过修改control_files参数来修改控制文件位置                                                   
  214.   sys@SYBO2SZ> alter system set control_files=‘/u02/database/SY5221BK/controlf/cntl1SY5221BK.ctl‘,  
  215.     2  ‘/u02/database/SY5221BK/controlf/cntl2SY5221BK.ctl‘,‘/u02/database/SY5221BK/controlf/cntl3SY5221BK.ctl‘  
  216.     3  scope=spfile;  
  217.     
  218.   System altered.  
  219.     
  220.   sys@SYBO2SZ> shutdown immediate;  
  221.     
  222.   sys@SYBO2SZ> startup mount;  
  223.     
  224.   SQL> show parameter control_f  
  225.     
  226.   NAME                                 TYPE        VALUE  
  227.   ------------------------------------ ----------- ------------------------------  
  228.   control_file_record_keep_time        integer     7  
  229.   control_files                        string      /u02/database/SY5221BK/control  
  230.                                                    f/cntl1SY5221BK.ctl, /u02/data  
  231.                                                    base/SY5221BK/controlf/cntl2SY  
  232.                                                    5221BK.ctl, /u02/database/SY52  
  233.                                                    21BK/controlf/cntl3SY5221BK.ct  
  234.                                                    l  
  235.     
  236.   sys@SYBO2SZ> show parameter dump  
  237.   background_core_dump                 string      partial  
  238.   background_dump_dest                 string      /u02/database/SY5221BK/bdump  
  239.   core_dump_dest                       string      /u02/database/SY5221BK/cdump  
  240.   max_dump_file_size                   string      UNLIMITED  
  241.   shadow_core_dump                     string      partial  
  242.   user_dump_dest                       string      /u02/database/SY5221BK/udump  
  243.     
  244.   sys@SYBO2SZ> alter database open;  
  245.     
  246.   Database altered.  
  247.   
  248. 5、迁移脚本  
  249.   sys@SYBO2SZ> ho more /users/robin/dba_scripts/custom/sql/transfer_db_files.sql  
  250.   Prompt  
  251.   Prompt Step 1, Coping file to destination from source  
  252.   Prompt ============================================  
  253.   Prompt  
  254.   set linesize 200  
  255.   set heading off verify off feedback off termout off pagesize 999  
  256.   define src_dir=‘SYBO2SZ‘  
  257.   define tar_dir=‘SY5221BK‘  
  258.   spool /tmp/cp_files.sql  
  259.   SELECT ‘ho cp ‘ || name || ‘ ‘ || REPLACE (name, ‘&src_dir‘, ‘&tar_dir‘)  
  260.     FROM v$datafile  
  261.   UNION ALL  
  262.   SELECT ‘ho cp ‘ || name || ‘ ‘ || REPLACE (name, ‘&src_dir‘, ‘&tar_dir‘)  
  263.     FROM v$tempfile  
  264.   UNION ALL  
  265.   SELECT ‘ho cp ‘ || MEMBER || ‘ ‘ || REPLACE (MEMBER, ‘&src_dir‘, ‘&tar_dir‘) FROM v$logfile;  
  266.   spool off;  
  267.     
  268.   @/tmp/cp_files.sql  
  269.     
  270.   set termout on  
  271.   Prompt  
  272.   Prompt  Step 2, updating files to control file  
  273.   Prompt ============================================  
  274.   Prompt  
  275.   set termout off  
  276.   spool /tmp/update_cntl.sql  
  277.   SELECT    ‘alter database  rename file ‘‘‘  
  278.          || name  
  279.          || ‘‘‘  to ‘‘‘  
  280.          || REPLACE (name, ‘&src_dir‘, ‘&tar_dir‘)  
  281.          || ‘‘‘‘  
  282.          || ‘;‘  
  283.     FROM v$datafile  
  284.   UNION ALL  
  285.   SELECT    ‘alter database rename file ‘‘‘  
  286.          || name  
  287.          || ‘‘‘  to ‘‘‘  
  288.          || REPLACE (name, ‘&src_dir‘, ‘&tar_dir‘)  
  289.          || ‘‘‘‘  
  290.          || ‘;‘  
  291.     FROM v$tempfile  
  292.   UNION ALL  
  293.   SELECT    ‘alter database rename file ‘‘‘  
  294.          || MEMBER  
  295.          || ‘‘‘ to ‘‘‘  
  296.          || REPLACE (MEMBER, ‘&src_dir‘, ‘&tar_dir‘)  
  297.          || ‘‘‘‘  
  298.          || ‘;‘  
  299.     FROM v$logfile;  
  300.   spool off;  
  301.   set termout on;  
  302.   @/tmp/update_cntl.sql  
  303.   set heading on verify on feedback on termout on  
  304.   
  305. 6、后记  
  306.   a、数据迁移前建议先备份数据库  
  307.   b、我们在迁移中使用了复制(cp)方式,实际上可以直接使用移动方式(mv)  
  308.   c、需要理解数据库的启动的几个阶段。即nomount状态时不加载控制文件,mount状态时不加载数据文件及日志文件  
  309.   d、对于数据库启动阶段的深刻理解,有助于弄清楚什么状态下我们能做什么,不能做什么  
  310.   e、对于控制文件位置以及参数中相关dump文件位置可以直接通过编辑pfile文件来完成。上例使用的是修改spfile文件  
  311.   f、迁移脚本可以根据需要进行相应的修改,注意我们定义了src_dir与tar_dir  
  312.   g、可将数据库源文件夹重命名,重启数据库(open),open会校验所有文件,以防止迁移中的部分文件丢失,无误后可删除源文件夹  
  313.   h、如果需要修改数据库名,则可以通过使用nid命令修改 db name 及 dbid来完成,相当于生成了一个新的数据库  
  314. 转:http://blog.csdn.net/leshami/article/details/8553650

批量迁移Oracle数据文件,日志文件及控制文件