【流雲 】使用DBMS_FILE_TRANSFER配置DATA GURAD和克隆資料庫

idba發表於2008-06-07

通常我們配置DATA GUARD,都需要對主庫進行備份,再把備份的備份集複製到備庫端進行配置。但是當資料庫非常大時,尤其是資料庫採用ASM作為儲存方案時,如果沒有足夠的空間用於存放備份集,這樣顯然就無法通過常規的方式來配置STANDBY。利用DBMS_FILE_TRANSFER則可以方便地將主庫的資料檔案直接傳遞至備庫的ASM磁碟組,這樣再也不需要使用中間儲存存放備份檔案。下面簡單介紹一下通過DBMS_FILE_TRANSFER配置基於ASM儲存方案的DATA GUARD和克隆資料庫的方法。

一、在備用資料庫端建立好ASM磁碟組和一箇中間資料庫。
首先必須要在備用資料庫端配置好ASM例項,建立好ASM磁碟組,並且ASM磁碟組的名字最好是和主庫一樣的。當然,名字不一樣也可以,那就需要一些額外的設定。另外由於DBMS_FILE_TRANSFER遠端傳輸是基於DB LINK的,因此需要在備用庫端建立一箇中間資料庫,這個中間資料庫的主要作用便是用於DB LINK傳輸資料檔案。假定我們建立的ASM磁碟組叫DATA,中間資料庫名字叫transfer。
二、在備用庫的中間資料庫上建立一個到主庫的DB LINK。做之前需要配置好到主庫的TNS。

SQL>create database link lnk_pri connect to system identified by password using ‘primary’;

三、在主庫端建立到資料檔案目錄的directory。

SQL> create or replace directory pri_dir as ‘+DATA/TEST/datafile’;

四、在備庫端建立好備庫的相應目錄,比如bdump,udump等目錄,另外在備庫的ASM例項中建立備庫的資料檔案、控制檔案等目錄。

SQL> alter diskgroup DATA add directory ‘+DATA/TEST/’;
SQL> alter diskgroup DATA add directory ‘+DATA/TEST/DATAFILE’;
SQL> alter diskgroup DATA add directory ‘+DATA/TEST/CRONTROLFILE’;
SQL> alter diskgroup DATA add directory ‘+DATA/TEST/TEMPFILE’;

五、在備庫的中間資料庫上建立好兩個DIRECTORY,用於存放傳遞過來的資料檔案和控制檔案。

SQL> create or replace directory stb_dir as ‘+DATA/TEST/datafile’;
SQL> create or replace directory stb_ctl_dir as ‘+DATA/TEST/controlfile’;

六、在中間資料庫開始傳輸資料檔案。
由於是線上配置STANDBY,在傳輸資料檔案之前,必須先在主庫把相應的表空間置於恢復模式,然後利用dbms_file_transfer進行資料檔案的傳輸,最後再把相應的表空間置為正常狀態:

SQL> conn sys/password@lnk_pri as sysdba
SQL> alter tablespace system begin backup;
SQL> conn /as sysdba
SQL>begin
dbms_file_transfer.get_file(
source_directory_object => ‘ pri_dir ‘,
source_file_name => ‘ system.286.650339101′,
destination_directory_object => ‘ stb_dir ‘,
destination_file_name => ‘ system01.dbf ‘,
source_database => ‘lnk_pri’);
end;
/
SQL> conn sys/password@lnk_pri as sysdba
SQL> alter tablespace system end backup;

這樣依次對主庫的每個資料檔案進行處理傳遞後,主庫上的資料檔案都會傳遞至備庫的ASM磁碟組上。
七、 傳輸備庫的控制檔案。
首先在主庫端生成備庫的控制檔案:

SQL> alter database create standby controlfile as ‘+DATA/TEST/datafilefile/standby.ctl’;

如果是克隆資料庫的話,那麼生成一個普通備份控制檔案即可:

SQL> alter database backup controlfile to ‘+DATA/TEST/datafilefile/standby.ctl’;

然後傳輸控制檔案:

SQL>begin
dbms_file_transfer.get_file(
source_directory_object => ‘ pri_dir ‘,
source_file_name => ‘ standby.ctl’,
destination_directory_object => ‘ stb_ctl_dir ‘,
destination_file_name => ‘ control01.ctl ‘,
source_database => ‘lnk_pri’);
end;
/

八、 配置備用庫。

首先配置好備庫的引數檔案,並且配置好主庫和備庫的TNS,接下就可以配置備用庫了:
啟動備庫至mount狀態

SQL > startup nomount
SQL > alter database mount standby database;

如果是配置克隆資料庫的話,則直接將資料庫MOUNT就行:

SQL > alter database mount;

執行RMAN的catalog命令,以使控制檔案能夠識別傳輸過來的資料檔案:

RMAN> catalog start with ‘+DATA/TEST/DATAFILE’;

然後將這些資料檔案轉換為備庫的資料檔案:

RMAN >switch database to copy;

如果是配置DATA GUARD的話,則可以將備庫置為恢復模式:

SQL > alter database recover managed standby database disconnect from session;

如果是配置克隆資料庫的話,那麼直接恢復資料庫並開啟:

SQL >recover database until cancel;
SQL >alter database open resetlogs;

這樣DATA GUARD和克隆資料庫就配置完成了。最後可以把中間操作建立的directory,DB LINK和中間資料庫刪除掉。

<!--

--EOF--

Trackback:http://rdc.taobao.com/blog/dba/html/147_dbms-file-transfer-standby-clonedatabas.html/trackback

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

相關文章