qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

批量迁移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来完成,相当于生成了一个新的数据库

posted on 2013-06-13 10:27 顺其自然EVO 阅读(363) 评论(0)  编辑  收藏 所属分类: 数据库DB2


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜