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

环境说明:
1、windows 2008R2 64位
2、oracle 11g R2 11.2.0.1.0
3、有一个数据库名为ceshi的数据库,数据文件位于D:\app\Administrator\oradata\ceshi目录下。我们计划将该目录下所有数据文件,临时文件、联机日志文件、控制文件全部迁移到E:\oracledataceshi目录下

基本步骤:
1、备份spfile文件,以备操作失败后使用该备份打开数据库
2、关闭数据库,手动拷贝控制文件到新目录下,启动数据库到nmount状态,更改control_files参数,将控制文件指向新的目录
3、重启数据库到mount,将所有文件拷贝到目标目录下
4、保持数据库在mount状态,将所有数据文件、联机日志、临时文件rename到新的目录
5、启动数据库到open状态,进行验证

详细步骤
1、备份spfile文件,以备操作失败后使用该备份打开数据库

C:\Users\Administrator>set oracle_sid=ceshi

C:\Users\Administrator>sqlplus “/as sysdba”

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 4月 17 11:31:50 2020

Copyright © 1982, 2010, Oracle. All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create pfile=‘e:\b.ora’ from spfile;

文件已创建。

2、关闭数据库,手动拷贝控制文件到新目录下,启动数据库到nmount状态,更改control_files参数,将控制文件指向新的目录
SQL> startup nomount
ORACLE 例程已经启动。

Total System Global Area 4275781632 bytes
Fixed Size 2182592 bytes
Variable Size 2298479168 bytes
Database Buffers 1962934272 bytes
Redo Buffers 12185600 bytes
SQL>ho copy D:\app\Administrator\oradata\ceshi\control01.ctl E:\oracledataceshi\control01.ctl
已复制 1 个文件。
SQL>ho copy D:\app\Administrator\oradata\ceshi\control02.ctl E:\oracledataceshi\control02.ctl
已复制 1 个文件。
SQL> alter system set control_files=‘E:\oracledataceshi\control01.ctl’, ‘E:\oracledataceshi\control02.ctl’ scope=spfile;

SQL> shutdown immediate;

3、拷贝所有数据文件到新的目录下
SQL> @e:\transfer_db_files.sql
通过脚本,由transfer_db_files.sql脚本生成拷贝数据文件的脚本cp_files.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=‘D:\APP\ADMINISTRATOR\ORADATA\CESHI’
define tar_dir=‘E:\oracledataceshi’
spool e:\cp_files.sql
SELECT ‘ho copy ’ || name || ’ ’ || REPLACE (name,’&src_dir’,’&tar_dir’) FROM vKaTeX parse error: Double superscript at position 55: …' || name || ' '̲ || REPLACE (na…tempfile
UNION ALL
SELECT ‘ho copy ’ || MEMBER || ’ ’ || REPLACE (MEMBER,’&src_dir’,’&tar_dir’) FROM v$logfile;
spool off;

要注意数据库中保存的原目录都是大写字母表示,因此我们src_dir参数赋值是一定要是大写字母,否则替换时找不到对应目录就无法替换

生成的cp_files.sql脚本内容如下:
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\SYSTEM01.DBF E:\oracledataceshi\SYSTEM01.DBF
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\SYSAUX01.DBF E:\oracledataceshi\SYSAUX01.DBF
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\UNDOTBS01.DBF E:\oracledataceshi\UNDOTBS01.DBF
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\USERS01.DBF E:\oracledataceshi\USERS01.DBF
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\YU.DBF E:\oracledataceshi\YU.DBF
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\TEMP01.DBF E:\oracledataceshi\TEMP01.DBF
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\REDO03.LOG E:\oracledataceshi\REDO03.LOG
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\REDO02.LOG E:\oracledataceshi\REDO02.LOG
ho copy D:\APP\ADMINISTRATOR\ORADATA\CESHI\REDO01.LOG E:\oracledataceshi\REDO01.LOG

执行cp_files.sql脚本完成数据文件、日志文件、临时文件的拷贝
SQL> @e:\cp_files.sql
已复制 1 个文件。
已复制 1 个文件。
已复制 1 个文件。
已复制 1 个文件。
已复制 1 个文件。
已复制 1 个文件。
已复制 1 个文件。
已复制 1 个文件。
已复制 1 个文件。
SQL>

4、保证数据库mount状态,将所有数据文件、联机日志、临时文件rename到新的目录

由脚本rename_cntl.sql生成update_cntl.sql脚本,update_cntl.sql脚本中是renmae所有数据文件的命令。
SQL> @e:\rename_cntl.sql

set termout on
Prompt
Prompt Step 2, updating files to control file
Prompt ============================================
Prompt
set termout off
set linesize 200
set heading off verify off feedback off termout off pagesize 999
define src_dir=‘D:\APP\ADMINISTRATOR\ORADATA\CESHI’
define tar_dir=‘E:\oracledataceshi’
spool e:\update_cntl.sql

SELECT ‘alter database rename file ‘’’
|| name
|| ‘’’ to ‘’’
|| REPLACE (name, ‘&src_dir’, ‘&tar_dir’)
|| ‘’’’
|| ‘;’
FROM vKaTeX parse error: Expected 'EOF', got '&' at position 135: …EPLACE (name, '&̲src_dir', '&tar…tempfile
UNION ALL
SELECT ‘alter database rename file ‘’’
|| MEMBER
|| ‘’’ to ‘’’
|| REPLACE (MEMBER, ‘&src_dir’, ‘&tar_dir’)
|| ‘’’’
|| ‘;’
FROM v$logfile;
spool off;
set termout on;
最后执行update_cntl.sql脚本完成文件的rename工作
@e:\update_cntl.sql
set heading on verify on feedback on termout on

为了执行脚本时每一步骤都是成功的,所以我们将脚本分成了多个
,其实为了方便,可以将3、4步骤所有的脚本都写到一个脚本文件中,执行一次就可以。

5、启动数据库到open状态,进行验证
SQL> select member from v$logfile;

E:\ORACLEDATACESHI\REDO03.LOG
E:\ORACLEDATACESHI\REDO02.LOG
E:\ORACLEDATACESHI\REDO01.LOG

已选择3行。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 4275781632 bytes
Fixed Size 2182592 bytes
Variable Size 2298479168 bytes
Database Buffers 1962934272 bytes
Redo Buffers 12185600 bytes
数据库装载完毕。
数据库已经打开。
SQL>

以上就完成了所有的数据文件、联机日志、临时文件的在同一主机不同目录之间的迁移工作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值