首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库文件的迁移

数据库文件的迁移

作者头像
jeanron100
发布2018-03-13 17:49:17
2.4K0
发布2018-03-13 17:49:17
举报

关于数据库中的文件迁移,需要考虑普通数据文件,redo日志文件(还需要考虑是否为current状态),undo表空间,临时表空间,system,sysaux表空间。 文件迁移可以参考下面的伪代码: move_non_system_tablespace ,需要在open状态

{

alter tablespace xxxx offline;

cp datafiles

alter tablespace xxx rename sourcexxxxx to targetxxxxx;

alter tablespace xxxxx online;

}

move_system_tablespace(system,sysaux,undo),需要在mount状态

{

cp datafiles

alter database rename file sourcexxxxx to targetxxxxx;

alter database open;

}

move_redo_logs

{

1. for current/active logfiles, need to in mount state

cp logfiles

alter database rename file sourcexxxxx to targetxxxxx;

2. for inactive/unused logfiles,can change online

cp logfiles

alter database rename file sourcexxxxx to targetxxxxx;

}

move_temp_files

{

cp datafiles

alter database rename file sourcexxxxx to targetxxxxx;

alter database tempfile xxxx online;

}

示例脚本如下: ##### normal tablespace #### alter tablespace TEST_DATA offline; !cp '/oravl08/oradata/TESTDB/TEST_DATA_1.dbf' '/oravl01/oracle/TEST_DATA_1.dbf'; alter tablespace TEST_DATA rename datafile '/oravl08/oradata/TESTDB/TEST_DATA_1.dbf' to '/oravl01/oracle/TEST_DATA_1.dbf'; alter tablespace TEST_DATA online; alter tablespace TEST_IX offline; !cp '/oravl08/oradata/TESTDB/TEST_IX_1.dbf' '/oravl01/oracle/TEST_IX_1.dbf'; alter tablespace TEST_IX rename datafile '/oravl08/oradata/TESTDB/TEST_IX_1.dbf' to '/oravl01/oracle/TEST_IX_1.dbf'; alter tablespace TEST_IX online; ##### temp files #### alter database tempfile '/oravl08/oradata/TESTDB/TEMP_1.dbf' offline; !cp '/oravl08/oradata/TESTDB/TEMP_1.dbf' '/oravl01/oracle/TEMP_1.dbf' alter database rename file '/oravl08/oradata/TESTDB/TEMP_1.dbf' to '/oravl01/oracle/TEMP_1.dbf'; alter database tempfile '/oravl01/oracle/TEMP_1.dbf' online; #### system,sysaux,undo #### !cp '/oravl08/oradata/TESTDB/SYSTEM_1.dbf' '/oravl01/oracle/SYSTEM_1.dbf' alter database rename file '/oravl08/oradata/TESTDB/SYSTEM_1.dbf' to '/oravl01/oracle/SYSTEM_1.dbf'; !cp '/oravl08/oradata/TESTDB/SYSAUX_1.dbf' '/oravl01/oracle/SYSAUX_1.dbf' alter database rename file '/oravl08/oradata/TESTDB/SYSAUX_1.dbf' to '/oravl01/oracle/SYSAUX_1.dbf'; !cp '/oravl08/oradata/TESTDB/UNDOTBS_1.dbf' '/oravl01/oracle/UNDOTBS_1.dbf' alter database rename file '/oravl08/oradata/TESTDB/UNDOTBS_1.dbf' to '/oravl01/oracle/UNDOTBS_1.dbf'; #### logfiles #### !cp '/oravl03/oradata/TESTDB/redo_g1_m1.dbf' '/oravl01/oracle/redo_g1_m1.dbf' alter database rename file '/oravl03/oradata/TESTDB/redo_g1_m1.dbf' to '/oravl01/oracle/redo_g1_m1.dbf'; !cp '/oravl03/oradata/TESTDB/redo_g1_m2.dbf' '/oravl01/oracle/redo_g1_m2.dbf' alter database rename file '/oravl03/oradata/TESTDB/redo_g1_m2.dbf' to '/oravl01/oracle/redo_g1_m2.dbf'; 最后带给大家一些福利,关于文件的迁移,可以参考如下的脚本。

if [[ -d $1 ]]; then

echo 'Directory has found :)'

else

echo "Directory doesn't exists! :("

exit

fi

#used for 11g

#select regexp_count(file_name,'/') from dba_data_files

#used for 10g,9i..

#select (length(file_name)-length(replace(file_name,'/',null)))/(length('/')) from dba_data_files

#get file_name

# select substr(file_name,instr(file_name,'/',1,regexp_count(file_name,'/'))) from dba_data_files;

sqlplus -s / as sysdba <<EOF

set linesize 200

set pages 0

prompt ########## Scripts as below #######

select 'DB is now in '||status||' status' from gv\$instance;

select

'alter tablespace '||tablespace_name||' offline; '||chr(10)

||'!cp '||chr(39)||file_name||chr(39)||' ' ||chr(39)||'$1'||substr(file_name,instr(file_name,'/',1,regexp_count(file_name,'/')))||chr(39)||'; '||chr(10)

||'alter tablespace '||tablespace_name||' rename datafile '||chr(39)||file_name||chr(39)||' to '||chr(39)||'$1'||substr(file_name,instr(file_name,'/',1,regexp_count(file_name,'/')))||chr(39)||'; '||chr(10)

|| 'alter tablespace '||tablespace_name||' online; '

from dba_data_files where tablespace_name not in ('SYSTEM','SYSAUX') and tablespace_name not like 'UNDO%';

prompt ##### temp files ####

select 'alter database tempfile '||chr(39)||name||chr(39)||' offline;'||chr(10)

||'!cp '||chr(39)||name||chr(39)||' ' ||chr(39)||'$1'||substr(name,instr(name,'/',1,regexp_count(name,'/')))||chr(39)||' '||chr(10)

||'alter database rename file '||chr(39)||name||chr(39)||' to '||chr(39)||'$1'||substr(name,instr(name,'/',1,regexp_count(name,'/')))||chr(39)||'; '||chr(10)

|| 'alter database tempfile '||chr(39)||'$1'||substr(name,instr(name,'/',1,regexp_count(name,'/')))||chr(39)||' online; '

from v\$tempfile;

prompt #### system,sysaux,undo ####

select

'!cp '||chr(39)||f.name||chr(39)||' ' ||chr(39)||'$1'||substr(f.name,instr(f.name,'/',1,regexp_count(f.name,'/')))||chr(39)||' '||chr(10)

||'alter database rename file '||chr(39)||f.name||chr(39)||' to '||chr(39)||'$1'||substr(f.name,instr(f.name,'/',1,regexp_count(f.name,'/')))||chr(39)||'; '

from v\$datafile f,v\$tablespace t where t.ts#=f.ts# and (t.name in ('SYSTEM','SYSAUX') or t.name like 'UNDO%');

prompt #### logfiles ####

select

'!cp '||chr(39)||member||chr(39)||' ' ||chr(39)||'$1'||substr(member ,instr(member ,'/',1,regexp_count(member ,'/')))||chr(39)||' '||chr(10)

||'alter database rename file '||chr(39)||member ||chr(39)||' to '||chr(39)||'$1'||substr(member ,instr(member ,'/',1,regexp_count(member ,'/')))||chr(39)||'; '

from v\$logfile f,v\$log l where f.group#=l.group# and l.status!='CURRENT';

EOF

exit

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档