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

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介:    有些时候需要将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日志并进行多维度分析。
目录
相关文章
|
22天前
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
285 117
|
1月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
在YMP校验过程中,从yashandb同步至Oracle的数据出现timestamp(0)字段不一致问题。原因是yashandb的timestamp(x)存储为固定6位小数,而Oracle的timestamp(0)无小数位,同步时会截断yashandb的6位小数,导致数据差异。受影响版本:yashandb 23.2.7.101、YMP 23.3.1.3、YDS联调版本。此问题会导致YMP校验数据内容不一致。
|
29天前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
1月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
29天前
|
Oracle 关系型数据库
【YashanDB知识库】YMP从oracle到yashan迁移评估报OCI相关错误
本文来自YashanDB官网,主要解决在使用YMP(yashan-migrate-platform)进行迁移评估时出现的OCI版本检查错误问题。错误原因为操作系统重装后,OCI所需依赖缺失(如`libnsl.so.1`、`libnnz19.so`等)。文章提供了排查步骤和解决方法:一是检查并配置环境变量`LD_LIBRARY_PATH`,二是若依赖仍缺失,则需手动下载并安装对应依赖文件。适用于使用YMP迁移平台的用户遇到OCI相关问题时参考。
|
1月前
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
|
1月前
|
Oracle 关系型数据库 网络安全
崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB
文章是作者小草对崖山异构数据库迁移利器 YMP 的初体验分享,包括背景、YMP 简介、体验环境说明、YMP 部署(含安装前准备、安装、卸载、启动与停止)、数据迁移及遇到的问题与解决过程。重点介绍了 YMP 功能、部署的诸多细节和数据迁移流程,还提到了安装和迁移中遇到的问题及解决办法。
|
1月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】YMP迁移oracle不兼容给用户授权高级包
【YashanDB知识库】YMP迁移oracle不兼容给用户授权高级包
|
1月前
|
SQL Oracle 关系型数据库
Oracle向YashanDB迁移的丝滑体验
这篇文章主要介绍了从 Oracle 向 YashanDB 迁移的过程,包括 YashanDB 迁移平台 YMP 的介绍、下载安装准备、安装步骤、运行状态及访问方式,迁移中的添加数据源、创建任务、迁移配置、离线迁移、一致性校验等环节,还分享了迁移后的体验,认为 YMP 不错但希望增加在线迁移等功能。
|
1月前
|
SQL Oracle 关系型数据库
基于YMP工具实现Oracle迁移YashanDB
这篇文章主要介绍了基于 YMP 工具实现 Oracle 迁移 YashanDB 的相关内容,包括 YMP 工具的简介、架构、规格,迁移前的环境准备和工具部署,迁移过程中的创建任务、评估、配置、离线迁移、校验等步骤,以及迁移体验,指出其部署简单、数据类型兼容但存在部分功能不支持等情况。

推荐镜像

更多