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

来源:互联网 发布:vb 放大镜某个picture 编辑:程序博客网 时间:2024/06/05 19:05

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

1、环境及需求  robin@SZDB:~> cat /etc/issue    Welcome to SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l).    robin@SZDB:~> sqlplus -v    SQL*Plus: Release 10.2.0.3.0 - Production  下面的迁移主要是将数据库/u02/database/SYBO2SZ下的所有文件迁移到一个新的目录/u02/database/SY5221BK下面。  源路径:数据库SYBO2SZ所有的数据文件,日志文件,控制文件全部位于SYBO2SZ下的相应子目录。  新路径:数据库SYBO2SZ所有的数据文件,日志文件,控制文件全部移动到SY5221BK相应的子目录下。  2、当前数据库文件位置(来源于数据字典)    sys@SYBO2SZ> @dba_files_all_2.sql    Tablespace Name / File Class  Filename                                                      File Size Auto  ----------------------------- ------------------------------------------------------- --------------- ----  GOEX_ACCOUNT_IDX              /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_idx.dbf        16,777,216 YES  GOEX_ACCOUNT_TBL              /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf        25,165,824 YES  GOEX_ARCHIVE_IDX              /u02/database/SYBO2SZ/oradata/SYBO2SZ_archive_idx.dbf        20,971,520 YES   --    .........                  .........................  SOE                           /u02/database/SYBO2SZ/oradata/soe.dbf                       934,043,648 YES  SOEINDEX                      /u02/database/SYBO2SZ/oradata/soeindex.dbf                  713,031,680 YES  SYSAUX                        /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf             325,058,560 YES  SYSTEM                        /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf                524,288,000 YES  TBST                          /u02/database/SYBO2SZ/oradata/tbst.dbf                       10,485,760 YES  TEMP                          /u02/database/SYBO2SZ/temp/tempSYBO2SZ.dbf                  432,013,312 YES  UNDOTBS1                      /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf               429,916,160 YES  UNDOTBS2                      /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf              314,572,800 YES  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log               20,971,520  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log3bSYBO2SZ.log               20,971,520  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log4aSYBO2SZ.log               20,971,520  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log4bSYBO2SZ.log               20,971,520                                                                                        ---------------  sum                                                                                     5,107,376,128      41 rows selected.    3、创建相应的目录  oracle@SZDB:/u02/database/SYBO2SZ> more mkdir_SY5221BK.sh   #!/bin/sh  rm -rf /u02/database/SY5221BK/archive  rm -rf /u02/database/SY5221BK/backup  rm -rf /u02/database/SY5221BK/bdump  rm -rf /u02/database/SY5221BK/cdump  rm -rf /u02/database/SY5221BK/udump  rm -rf /u02/database/SY5221BK/controlf  rm -rf /u02/database/SY5221BK/oradata  rm -rf /u02/database/SY5221BK/redolog  rm -rf /u02/database/SY5221BK/undo  rm -rf /u02/database/SY5221BK/temp  rm -rf /u02/database/SY5221BK/ref_data  rm -rf /u02/database/SY5221BK/BNR  rm -rf /u02/database/SY5221BK/BNR/full  rm -rf /u02/database/SY5221BK/BNR/dump  rm -rf /u02/database/SY5221BK/dbcreatelogs     mkdir -p /u02/database/SY5221BK/flash_recovery_area   mkdir -p /u02/database/SY5221BK  mkdir -p /u02/database/SY5221BK/archive  mkdir -p /u02/database/SY5221BK/backup  mkdir -p /u02/database/SY5221BK/bdump  mkdir -p /u02/database/SY5221BK/cdump  mkdir -p /u02/database/SY5221BK/udump  mkdir -p /u02/database/SY5221BK/controlf  mkdir -p /u02/database/SY5221BK/oradata  mkdir -p /u02/database/SY5221BK/redolog  mkdir -p /u02/database/SY5221BK/undo  mkdir -p /u02/database/SY5221BK/temp  mkdir -p /u02/database/SY5221BK/ref_data  mkdir -p /u02/database/SY5221BK/BNR  mkdir -p /u02/database/SY5221BK/BNR/full  mkdir -p /u02/database/SY5221BK/BNR/dump  mkdir -p /u02/database/SY5221BK/dbcreatelogs     oracle@SZDB:/u02/database/SYBO2SZ> ./mkdir_SY5221BK.sh 4、实施迁移  sys@SYBO2SZ> startup mount force;   --->切换数据库到mount状态  ORACLE instance started.    Database mounted.  sys@SYBO2SZ> @/users/robin/dba_scripts/custom/sql/transfer_db_files -->调用脚本进行数据及日志文件的迁移    Step 1, Coping file to destination from source  ============================================    Step 2, updating files to control file  ============================================    sys@SYBO2SZ> alter database open;   -->切换数据库到open状态    Database altered.    sys@SYBO2SZ> @dba_files_all_2.sql   -->验证切换结果    Tablespace Name / File Class  Filename                                                     File Size Auto  ----------------------------- ---------------------------------------------------------------------- ----  GOEX_ACCOUNT_IDX              /u02/database/SY5221BK/oradata/SY5221BK_account_idx.dbf     16,777,216 YES    --..........                        .................  TEMP                          /u02/database/SY5221BK/temp/tempSY5221BK.dbf               432,013,312 YES  UNDOTBS1                      /u02/database/SY5221BK/undo/undotbsSY5221BK.dbf            429,916,160 YES  UNDOTBS2                      /u02/database/SY5221BK/undo/undotbsSY5221BK2.dbf           314,572,800 YES  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log3aSY5221BK.log            20,971,520  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log3bSY5221BK.log            20,971,520  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log4aSY5221BK.log            20,971,520  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log4bSY5221BK.log            20,971,520                                                                                         -------------  sum                                                                                    5,107,376,128    41 rows selected.    --如果仅仅是迁移数据文件以及日志文件则上述步骤完成即可  --如果需要修改相关的参数文件以及迁移控制文件则继续下面的步骤  --由于控制文件的在mount状态下被校验,因此我们在nomount状态下来处理    sys@SYBO2SZ> shutdown immediate;    sys@SYBO2SZ> startup nomount;      -->修改参数文件之前先备份spfile  sys@SYBO2SZ> create pfile='/users/oracle/OraHome10g/dbs/initSYBO2SZ_bak.ora' from spfile;    File created.    -->下面对相关的参数文件的路径进行修改,如果不需要修改参数,则跳过下面的步骤  sys@SYBO2SZ> show parameter dump    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  background_core_dump                 string      partial  background_dump_dest                 string      /u02/database/SYBO2SZ/bdump  core_dump_dest                       string      /u02/database/SYBO2SZ/cdump  max_dump_file_size                   string      UNLIMITED  shadow_core_dump                     string      partial  user_dump_dest                       string      /u02/database/SYBO2SZ/udump    sys@SYBO2SZ> alter system set background_dump_dest='/u02/database/SY5221BK/bdump' scope=both sid='*';    System altered.    sys@SYBO2SZ> alter system set core_dump_dest='/u02/database/SY5221BK/cdump' scope=both sid='*';    System altered.    sys@SYBO2SZ> alter system set user_dump_dest='/u02/database/SY5221BK/udump' scope=both sid='*';    System altered.    sys@SYBO2SZ> show parameter db_recovery_file_dest    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  db_recovery_file_dest                string      /u02/database/SYBO2SZ/flash_re                                                   covery_area  db_recovery_file_dest_size           big integer 1G    sys@SYBO2SZ> alter system set db_recovery_file_dest='/u02/database/SY5221BK/flash_recovery_area' scope=both;    System altered.    sys@SYBO2SZ> show parameter LOG_ARCHIVE_DEST_1    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  log_archive_dest_1                   string      LOCATION=/u02/database/SYBO2SZ                                                   /archive/  log_archive_dest_10                  string  sys@SYBO2SZ> alter system set log_archive_dest_1='LOCATION=/u02/database/SY5221BK/archive' scope=both;       System altered.    sys@SYBO2SZ> show parameter UTL_FILE_DIR    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  utl_file_dir                         string      /u02/database/SYBO2SZ/udump    sys@SYBO2SZ> alter system set UTL_FILE_DIR='/u02/database/SY5221BK/udump' scope=both;  alter system set UTL_FILE_DIR='/u02/database/SY5221BK/udump' scope=both                   *  ERROR at line 1:  ORA-02095: specified initialization parameter cannot be modified  -->该参数不能修改内存值      sys@SYBO2SZ> alter system set UTL_FILE_DIR='/u02/database/SY5221BK/udump' scope=spfile;    System altered.    -->下面对控制文件位置进行修改  sys@SYBO2SZ> show parameter control_f    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  control_file_record_keep_time        integer     7  control_files                        string      /u02/database/SYBO2SZ/controlf                                                   /cntl1SYBO2SZ.ctl, /u02/databa                                                   se/SYBO2SZ/controlf/cntl2SYBO2                                                   SZ.ctl, /u02/database/SYBO2SZ/                                                   controlf/cntl3SYBO2SZ.ctl    -->将控制文件复制到新位置  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl1SY5221BK.ctl    sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl2SY5221BK.ctl    sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl3SY5221BK.ctl                -->Author : Robinson Cheng  -->Blog   : http://blog.csdn.net/robinson_0612                -->通过修改control_files参数来修改控制文件位置                                                   sys@SYBO2SZ> alter system set control_files='/u02/database/SY5221BK/controlf/cntl1SY5221BK.ctl',    2  '/u02/database/SY5221BK/controlf/cntl2SY5221BK.ctl','/u02/database/SY5221BK/controlf/cntl3SY5221BK.ctl'    3  scope=spfile;    System altered.    sys@SYBO2SZ> shutdown immediate;    sys@SYBO2SZ> startup mount;    SQL> show parameter control_f    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  control_file_record_keep_time        integer     7  control_files                        string      /u02/database/SY5221BK/control                                                   f/cntl1SY5221BK.ctl, /u02/data                                                   base/SY5221BK/controlf/cntl2SY                                                   5221BK.ctl, /u02/database/SY52                                                   21BK/controlf/cntl3SY5221BK.ct                                                   l    sys@SYBO2SZ> show parameter dump  background_core_dump                 string      partial  background_dump_dest                 string      /u02/database/SY5221BK/bdump  core_dump_dest                       string      /u02/database/SY5221BK/cdump  max_dump_file_size                   string      UNLIMITED  shadow_core_dump                     string      partial  user_dump_dest                       string      /u02/database/SY5221BK/udump    sys@SYBO2SZ> alter database open;    Database altered.5、迁移脚本  sys@SYBO2SZ> ho more /users/robin/dba_scripts/custom/sql/transfer_db_files.sql  Prompt  Prompt Step 1, Coping file to destination from source  Prompt ============================================  Prompt  set linesize 200  set heading off verify off feedback off termout off pagesize 999  define src_dir='SYBO2SZ'  define tar_dir='SY5221BK'  spool /tmp/cp_files.sql  SELECT 'ho cp ' || name || ' ' || REPLACE (name, '&src_dir', '&tar_dir')    FROM v$datafile  UNION ALL  SELECT 'ho cp ' || name || ' ' || REPLACE (name, '&src_dir', '&tar_dir')    FROM v$tempfile  UNION ALL  SELECT 'ho cp ' || MEMBER || ' ' || REPLACE (MEMBER, '&src_dir', '&tar_dir') FROM v$logfile;  spool off;    @/tmp/cp_files.sql    set termout on  Prompt  Prompt  Step 2, updating files to control file  Prompt ============================================  Prompt  set termout off  spool /tmp/update_cntl.sql  SELECT    'alter database  rename file '''         || name         || '''  to '''         || REPLACE (name, '&src_dir', '&tar_dir')         || ''''         || ';'    FROM v$datafile  UNION ALL  SELECT    'alter database rename file '''         || name         || '''  to '''         || REPLACE (name, '&src_dir', '&tar_dir')         || ''''         || ';'    FROM v$tempfile  UNION ALL  SELECT    'alter database rename file '''         || MEMBER         || ''' to '''         || REPLACE (MEMBER, '&src_dir', '&tar_dir')         || ''''         || ';'    FROM v$logfile;  spool off;  set termout on;  @/tmp/update_cntl.sql  set heading on verify on feedback on termout on6、后记  a、数据迁移前建议先备份数据库  b、我们在迁移中使用了复制(cp)方式,实际上可以直接使用移动方式(mv)  c、需要理解数据库的启动的几个阶段。即nomount状态时不加载控制文件,mount状态时不加载数据文件及日志文件  d、对于数据库启动阶段的深刻理解,有助于弄清楚什么状态下我们能做什么,不能做什么  e、对于控制文件位置以及参数中相关dump文件位置可以直接通过编辑pfile文件来完成。上例使用的是修改spfile文件  f、迁移脚本可以根据需要进行相应的修改,注意我们定义了src_dir与tar_dir  g、可将数据库源文件夹重命名,重启数据库(open),open会校验所有文件,以防止迁移中的部分文件丢失,无误后可删除源文件夹  h、如果需要修改数据库名,则可以通过使用nid命令修改 db name 及 dbid来完成,相当于生成了一个新的数据库

更多参考

有关Oracle RAC请参考

     使用nid命令修改 db name 及 dbid
     使用crs_setperm修改RAC资源的所有者及权限
     使用crs_profile管理RAC资源配置文件
     RAC 数据库的启动与关闭
     再说 Oracle RAC services
     Services in Oracle Database 10g
     Migrate datbase from single instance to Oracle RAC
     Oracle RAC 连接到指定实例
     Oracle RAC 负载均衡测试(结合服务器端与客户端)
     Oracle RAC 服务器端连接负载均衡(Load Balance)
     Oracle RAC 客户端连接负载均衡(Load Balance)
     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
     ORACLE RAC 监听配置 (listener.ora tnsnames.ora)
     配置 RAC 负载均衡与故障转移
     CRS-1006 , CRS-0215 故障一例 
     基于Linux (RHEL 5.5) 安装Oracle 10g RAC
     使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
     配置非默认端口的动态服务注册
     配置sqlnet.ora限制IP访问Oracle
     Oracle 监听器日志配置与管理
     设置 Oracle 监听器密码(LISTENER)
     配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
     Oracle 冷备份
     Oracle 热备份
     Oracle 备份恢复概念
     Oracle 实例恢复
     Oracle 基于用户管理恢复的处理
     SYSTEM 表空间管理及备份恢复
     SYSAUX表空间管理及恢复
     Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
     RMAN 概述及其体系结构
     RMAN 配置、监控与管理
     RMAN 备份详解
     RMAN 还原与恢复
     RMAN catalog 的创建和使用
     基于catalog 创建RMAN存储脚本
     基于catalog 的RMAN 备份与恢复
     RMAN 备份路径困惑
     使用RMAN实现异机备份恢复(WIN平台)
     使用RMAN迁移文件系统数据库到ASM
     linux 下RMAN备份shell脚本
     使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
     Oracle 表空间与数据文件
     Oracle 密码文件
     Oracle 参数文件
     Oracle 联机重做日志文件(ONLINE LOG FILE)
     Oracle 控制文件(CONTROLFILE)
     Oracle 归档日志
     Oracle 回滚(ROLLBACK)和撤销(UNDO)
     Oracle 数据库实例启动关闭过程
     Oracle 10g SGA 的自动化管理
     Oracle 实例和Oracle数据库(Oracle体系结构)