關于移動資料庫檔案,之前寫了一篇博文,http://blog.itpub.net/23718752/viewspace-1127910/
但是在備庫中還是有一些的差别。最近因為對備庫做了一些規劃,新增加了幾個分區,想把資料庫的一部分檔案放到SSD上。是以這個時候在現有的備庫基礎上需要移動備庫的資料庫檔案。這裡就不局限于資料檔案了,不過目前的測試情況來說,還是資料檔案是重點,還是主要以資料檔案為例。
在備庫中目前嘗試了兩種方式,可以采用rename datafile的方式或者使用rman的方式,對于日志檔案還是直接重建會比較友善。
采用rename datafile的方式。
首先在備庫取消日志應用
SQL> recover managed standby database cancel;
Media recovery complete.
作業系統級移動資料檔案。
SQL> host mv /home/U01/app/oracle/oradata/test04/testdata01.dbf /home/U01/testdata01.dbf
使用rename datafile來移動資料檔案,其實就是建立一個映射關系。
SQL> alter database rename file '/home/U01/app/oracle/oradata/test04/testdata01.dbf' to '/home/U01/testdata01.dbf';
Database altered.
修改完畢後,就可以修改備庫檔案管理模式為auto了。
SQL> alter system set standby_file_management=auto;
System altered.
修改完成之後,檢視資料檔案的情況,發現資料字典層面已經改過來了。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/home/U01/app/oracle/oradata/test04/system01.dbf
/home/U01/app/oracle/oradata/test04/sysaux01.dbf
/home/U01/app/oracle/oradata/test04/undotbs01.dbf
/home/U01/app/oracle/oradata/test04/users01.dbf
/home/U01/testdata01.dbf
/home/U01/app/oracle/oradata/test04/testidx01.dbf
6 rows selected.
把備庫啟動到open,即read only狀态
SQL> alter database open;
11g的備庫還是啟用ADG。
SQL> recover managed standby database disconnect from session using current logfile;
然後再次檢視資料檔案的細節。
SQL> col file_name format a50
SQL> select file_name,status,online_status from dba_data_files;
FILE_NAME STATUS ONLINE_STATUS
-------------------------------------------------- ------------------ --------------
/home/U01/app/oracle/oradata/test04/users01.dbf AVAILABLE ONLINE
/home/U01/app/oracle/oradata/test04/undotbs01.dbf AVAILABLE ONLINE
/home/U01/app/oracle/oradata/test04/sysaux01.dbf AVAILABLE ONLINE
/home/U01/app/oracle/oradata/test04/system01.dbf AVAILABLE SYSTEM
/home/U01/testdata01.dbf AVAILABLE ONLINE
/home/U01/app/oracle/oradata/test04/testidx01.dbf AVAILABLE ONLINE
由此可以看出檔案遷移已經成功。
另外一種是使用rman的方式,但是原理還是相通的。
如果在主庫中移動資料檔案,可以采用如下的方式。
rman target /
COPY DATAFILE 5 to '/DATA/app/testdata01.dbf';
sql 'alter database datafile 5 offline';
switch datafile 5 to copy;
recover datafile 5;
sql 'alter database datafile 5 online';
在備庫中不能這麼使用,還是有一些不同之處,首先檢視資料檔案的情況。
FILE_NAME FILE_ID
------------------------------------------------------------ ----------
/home/U01/app/oracle/oradata/test04/users01.dbf 4
/home/U01/app/oracle/oradata/test04/undotbs01.dbf 3
/home/U01/app/oracle/oradata/test04/sysaux01.dbf 2
/home/U01/app/oracle/oradata/test04/system01.dbf 1
/home/U01/testdata01.dbf 5
/home/U01/app/oracle/oradata/test04/testidx01.dbf 6
然後在mount狀态下,這個時候備庫檔案管理模式為auto或者manual就沒有直接的影響了。
SQL> show parameter standby
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
standby_archive_dest string ?/dbs/arch
standby_file_management string AUTO
還是手工聲明取消日志應用
然後開始rman中的資料檔案遷移,把5号資料檔案遷移到某個指定的路徑下。
RMAN> COPY DATAFILE 5 to '/home/U01/app/oracle/oradata/test04/testdata01.dbf';
Starting backup at 2016-02-26 16:19:24
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=102 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/home/U01/testdata01.dbf
output file name=/home/U01/app/oracle/oradata/test04/testdata01.dbf tag=TAG20160226T161925 RECID=14 STAMP=904839566
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-02-26 16:19:26
上面的日志其實在搭建dataguard的時候會看到,是不是很熟悉。然後聲明一個切換結束。
RMAN> switch datafile 5 to copy;
datafile 5 switched to datafile copy "/home/U01/app/oracle/oradata/test04/testdata01.dbf"
然後聲明資料檔案為Online狀态。
>sql 'alter database datafile 5 online'; --不運作實際上也會是Online
移動完成之後,開始檢視遷移的情況,發現已經沒有問題了。
FILE_NAME BYTES ONLINE_STATUS
-------------------------------------------------- ---------- --------------
/home/U01/app/oracle/oradata/test04/users01.dbf 10485760 ONLINE
/home/U01/app/oracle/oradata/test04/undotbs01.dbf 73400320 ONLINE
/home/U01/app/oracle/oradata/test04/sysaux01.dbf 796917760 ONLINE
/home/U01/app/oracle/oradata/test04/system01.dbf 786432000 SYSTEM
/home/U01/app/oracle/oradata/test04/testdata01.dbf 209715200 ONLINE
/home/U01/app/oracle/oradata/test04/testidx01.dbf 104857600 ONLINE
是以綜上的感覺來看,rman的方式還是比較推薦,至少操作友善快捷,而且dataguard的原生支援就是如此,而且限制也少。