Oracle 使用RMAN COPY 移动 Datafile 位置 示例
之前整理了一篇datafile移动的文章,参考:
http://blog.csdn.net/tianlesoftware/article/details/4899172
为了保证数据的一致性,都是选择了offline 或者将DB 启动到mount 模式。 这里演示一下使用RMAN copy 命令来进行datafile 的移动,这个方法也很常用,比如我们要将datafile 从磁盘移动到ASM 里时,就可以使用这个命令。
如果数据文件很多的话,手工去敲命令也不太现实,所以先编写好shell 脚本,然后添加到crontab里,让系统后台调用,这样也避免网络中断带来的影响。
如果是直接在服务器上操作,可以不用这么做,远程SSH 到服务器,让脚本后台操作很有必要!
http://blog.csdn.net/tianlesoftware/article/details/5315039
1.查看datafile位置:
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
2.编写RMAN 脚本:Rcopy.sh,内容如下:
#!/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 <<EOF
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
3.将DB 启动到mount 状态:
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>
4. 执行Rmancopy 脚本:
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
5. 对数据文件进行Rename
这里的Rename 操作更新datafile 在控制文件里的记录。注意的一点,控制文件不记录临时文件的信息,所以,临时文件rename不能rename。
如果要对临时文件进行转移,可以对临时文件进行重建。 这块内容具体参考:
http://blog.csdn.net/tianlesoftware/article/details/4974440
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.
6.打开DB并验证:
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: tianlesoftware@gmail.com
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总群:104207940