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

简介:    有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求。对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移。

   有些时候需要将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 on

6、后记
  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体系结构)     

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
1天前
|
人工智能 数据可视化 开发工具
Git log 进阶用法(含格式化、以及数据过滤)
Git log 进阶用法(含格式化、以及数据过滤)
|
1天前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
2天前
|
机器学习/深度学习 前端开发 数据挖掘
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断(下)
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
74 11
|
7天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
7天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
7天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
7天前
|
存储 Oracle 数据管理
Oracle 12c的自动数据优化(ADO)与热图:数据管理的“瘦身”与“透视”艺术
【4月更文挑战第19天】Oracle 12c的ADO和热图技术革新数据管理。ADO智能清理无用数据,优化存储,提升查询速度,实现数据"瘦身";热图则以直观的视觉表示展示数据分布和状态,助力识别性能瓶颈,犹如数据的"透视"工具。这两项技术结合,强化数据管理,为企业业务发展保驾护航。
|
7天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
7天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。

推荐镜像

更多