Oracle 使用RMAN COPY 移動 Datafile 位置

xueaizhong發表於2012-07-03

      為了保證資料的一致性,都是選擇了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 都還在原來的位置。

 

相關文章