Oracle 使用RMAN COPY 移动 Datafile 位置 示例

 

之前整理了一篇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

 

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。

       如果要对临时文件进行转移,可以对临时文件进行重建。 这块内容具体参考:

 

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.

 

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

posted @ 2012-03-07 13:48  hibernate我最强  阅读(738)  评论(0编辑  收藏  举报