专栏首页乐沙弥的世界批量迁移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来完成,相当于生成了一个新的数据库

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle 基于用户管理的不完全恢复

        Oracle 数据恢复从恢复类型来说,抛开具体的文件,总共可分为两大类型的恢复,一是完全恢复,一个是不完全恢复。其实,熟悉了Oracle 体系结构之后,...

    Leshami
  • Oracle 基于备份控制文件的恢复(unsing backup controlfile)

        通常在当前控制文件丢失,或者当前的控制文件与需要恢复的控制文件不一致的情况下,我们需要重新创建一个控制文件或者使用 unsing backup cont...

    Leshami
  • 理解 using backup controlfile

            using backup controlfile 通常用于恢复由于当前控制文件丢失且原来备份的控制文件较当前发生变化的情形之下。using ba...

    Leshami
  • Python版选择排序算法

    关于Python版冒泡排序算法请参考:Python版冒泡法排序算法。 def selectSort(lst, reverse=False): leng...

    Python小屋屋主
  • 利用好注册的域名

    一共注册了两个域名,一直都在使用这两个域名,blog,论坛、Wiki,有好几个地方的地址,今天采用URL转发给这几个东西都绑上自己的域名。 注册的域名:keyu...

    张善友
  • 曾经,我被这些陷阱坑的找不着北...

    人人都想去天堂,那怎么行?总得有人做人,有人当动物吧,所以,撒旦必须挖许多各种各样的陷阱,就让迷糊的人糊里糊涂往里钻,钻进某个陷阱,就失去了生命的自由,就没有机...

    Rocky0429
  • 腾讯“互联网+”指数·宁夏篇(2015年第一期)

    ? 1.腾讯“互联网+”指数及其代表意义   在宏观经济领域,为了能客观、快速地了解经济运行及发展趋势,我们往往会采用一些指标、指数对经济现状进行描述。这些指...

    腾讯研究院
  • iOS中图片(UIImage)拉伸技巧 原

    简单暴力,却是最最常用的方法,直接将图片设置为ImageView的image属性,图片便会随UIImageView对象的大小做自动拉伸。这种拉伸的方法有一个致命...

    珲少
  • Git区分文件名大小写

    例如:创建一个文件readme.md,写入内容,提交到线上仓库,然后修改本地文件名为Readme.md,提交,会发现没有变化,无任何提示信息

    JouyPub
  • 话题 | 科幻小说要成真?马斯克隧道开通啦,你怎么看?

    之前雷锋网有报道过的《马斯克的“神奇隧道”将于年底让美国公众免费通行》看来真的开通啦!

    AI研习社

扫码关注云+社区

领取腾讯云代金券