之前整理了一篇datafile移动的文章,参考:
Oracle 移动数据文件的操作方法
http://blog.csdn.net/tianlesoftware/article/details/4899172
为了保证数据的一致性,都是选择了offline 或者将DB 启动到mount 模式。 这里演示一下使用RMAN copy 命令来进行datafile 的移动,这个方法也很常用,比如我们要将datafile 从磁盘移动到ASM 里时,就可以使用这个命令。
如果数据文件很多的话,手工去敲命令也不太现实,所以先编写好shell 脚本,然后添加到crontab里,让系统后台调用,这样也避免网络中断带来的影响。
如果是直接在服务器上操作,可以不用这么做,远程SSH 到服务器,让脚本后台操作很有必要!
LinuxCrontab 定时任务 命令详解
http://blog.csdn.net/tianlesoftware/article/details/5315039
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u02/app/oracle/oradata/anqing/users01.dbf
/u02/app/oracle/oradata/anqing/sysaux01.dbf
/u02/app/oracle/oradata/anqing/undotbs01.dbf
/u02/app/oracle/oradata/anqing/system01.dbf
创建一个新目录:
rac1:/home/oracle> mkdir -p/u02/app/oracle/oradata/anqing2
#!/bin/ksh
export LANG=en_US
RMAN_LOG_FILE=${0}.out
ORACLE_HOME=/u02/app/oracle/product/11.2.0/db_1
export ORACLE_HOME
RMAN=$ORACLE_HOME/bin/rman
export RMAN
ORACLE_SID=anqing
export ORACLE_SID
ORACLE_USER=oracle
export ORACLE_USER
echo "ORACLE_SID:$ORACLE_SID">>$RMAN_LOG_FILE
echo"ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE
echo"ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE
echo"==========================">>$RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
$RMAN nocatalog TARGET / msglog$RMAN_LOG_FILE append < run { allocate channel c1 type disk; allocate channel c2 type disk; copy datafile'/u02/app/oracle/oradata/anqing/users01.dbf' to'/u02/app/oracle/oradata/anqing2/users01.dbf'; copy datafile'/u02/app/oracle/oradata/anqing/sysaux01.dbf' to'/u02/app/oracle/oradata/anqing2/sysaux01.dbf'; copy datafile'/u02/app/oracle/oradata/anqing/undotbs01.dbf' to'/u02/app/oracle/oradata/anqing2/undotbs01.dbf'; copy datafile'/u02/app/oracle/oradata/anqing/system01.dbf' to'/u02/app/oracle/oradata/anqing2/system01.dbf'; release channel c2; release channel c1; } EOF echo >> $RMAN_LOG_FILE exit --赋执行权限: [root@rac1 u01]# chmod 755 Rcopy.sh SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 3206836224 bytes Fixed Size 2232640 bytes Variable Size 2701135552 bytes Database Buffers 486539264 bytes Redo Buffers 16928768 bytes Database mounted. SQL> rac1:/u01> crontab -l 00 11 * * * /u01/Rcopy.sh & --确认拷贝: rac1:/u02/app/oracle/oradata/anqing2> ll-lh total 1.6G -rw-r-----. 1 oracle oinstall 571M Mar 7 13:30 sysaux01.dbf -rw-r-----. 1 oracle oinstall 711M Mar 7 13:31 system01.dbf -rw-r-----. 1 oracle oinstall 321M Mar 7 13:30 undotbs01.dbf -rw-r-----. 1 oracle oinstall 5.1M Mar 7 13:30 users01.dbf 这里的Rename 操作更新datafile 在控制文件里的记录。注意的一点,控制文件不记录临时文件的信息,所以,临时文件rename不能rename。 如果要对临时文件进行转移,可以对临时文件进行重建。 这块内容具体参考: Oracle 控制文件 http://blog.csdn.net/tianlesoftware/article/details/4974440 Oracle Temp 临时表空间 http://blog.csdn.net/tianlesoftware/article/details/4697417 SQL> alter database rename file'/u02/app/oracle/oradata/anqing/users01.dbf' to'/u02/app/oracle/oradata/anqing2/users01.dbf'; Database altered. SQL> alter database rename file'/u02/app/oracle/oradata/anqing/sysaux01.dbf' to'/u02/app/oracle/oradata/anqing2/sysaux01.dbf'; Database altered. SQL> alter database rename file'/u02/app/oracle/oradata/anqing/undotbs01.dbf' to'/u02/app/oracle/oradata/anqing2/undotbs01.dbf'; Database altered. SQL> alter database rename file'/u02/app/oracle/oradata/anqing/system01.dbf' to'/u02/app/oracle/oradata/anqing2/system01.dbf'; Database altered. SQL> alter database open; Database altered. SQL> select file_name fromdba_data_files; FILE_NAME -------------------------------------------------------------------------------- /u02/app/oracle/oradata/anqing2/users01.dbf /u02/app/oracle/oradata/anqing2/sysaux01.dbf /u02/app/oracle/oradata/anqing2/undotbs01.dbf /u02/app/oracle/oradata/anqing2/system01.dbf 这里我们只迁移了数据文件,向之前说的临时表空间,控制文件和online Redo log 都还在原来的位置。 ------------------------------------------------------------------------------------------------------- 版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任! Skype: tianlesoftware Email: [email protected] Blog: http://www.tianlesoftware.com Weibo: http://weibo.com/tianlesoftware Twitter: http://twitter.com/tianlesoftware Facebook: http://www.facebook.com/tianlesoftware Linkedin: http://cn.linkedin.com/in/tianlesoftware -------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请---- DBA1 群:62697716(满); DBA2 群:62697977(满)DBA3 群:62697850(满) DBA 超级群:63306533(满); DBA4 群:83829929 DBA5群: 142216823 DBA6 群:158654907 DBA7 群:172855474 DBA总群:1042079403.将DB 启动到mount 状态:
4. 执行Rmancopy 脚本:
5. 对数据文件进行Rename
6.打开DB并验证: