dataguard備庫的資料檔案的遷移

dbhelper發表於2016-04-27
關於移動資料庫檔案,之前寫了一篇博文,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;
Database altered.
11g的備庫還是啟用ADG。
SQL> recover managed standby database disconnect from session using current logfile;
Media recovery complete.
然後再次檢視資料檔案的細節。
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
6 rows selected.
由此可以看出檔案遷移已經成功。

另外一種是使用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
6 rows selected.
然後在mount狀態下,這個時候備庫檔案管理模式為auto或者manual就沒有直接的影響了。
SQL> show parameter standby
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
standby_archive_dest                 string                 ?/dbs/arch
standby_file_management              string                 AUTO
還是手工宣告取消日誌應用
SQL> recover managed standby database cancel;
Media recovery complete.
然後開始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;
using target database control file instead of recovery catalog
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
6 rows selected.
所以綜上的感覺來看,rman的方式還是比較推薦,至少操作方便快捷,而且dataguard的原生支援就是如此,而且限制也少。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-2089586/,如需轉載,請註明出處,否則將追究法律責任。

相關文章