批量迁移Oracle数据文件,日志文件及控制文件
作者:网络转载 发布时间:[ 2013/6/9 13:23:09 ] 推荐标签:
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来完成,相当于生成了一个新的数据库

sales@spasvo.com