使用dbms_file_transfer轉換ASM檔案

eric0435發表於2016-12-13

dbms_file_transfer是一個儲存過程它是在Oracle 9i中引入的,這個包提供了在兩個目錄(在相同主 機或資料庫)之間複製檔案的方法。從Oracle 10gr1,ASM使用這個工具在ASM磁碟組之間複製檔案, 並且它是例項化ASM DataGuard資料庫的主要工具。在Oracle 10gr2中,dbms_file_transfer被增強 來支援ASM與non-ASM檔案的組合傳輸。

dbms_file_trasnfer包能讓DBA在兩個目錄之間複製檔案。這個過程被用來在ASM磁碟組之間移動或復 制檔案。對於以下情況可以使用這個過程來複制檔案:
.從一個ASM磁碟組複製檔案到另一個ASM磁碟組
.從一個ASM磁碟組複製檔案到外部儲存介質,比如作業系統級別的檔案系統
.從作業系統級別的檔案系統複製檔案到ASM磁碟組
.從作業系統級別的檔案系統複製檔案到另一個目錄或裸裝置

下面的例子將演示如何使用dbms_file_transfer來將檔案從一個目錄移動到另一個目錄:
1.識別要從一個目錄移動或複製到另一個目錄的資料檔案

SQL> select file_name from dba_data_files;

FILE_NAME
------------------------------------------------------------
+DATADG/jyrac/datafile/users.263.930413057
+DATADG/jyrac/datafile/undotbs1.262.930413057
+DATADG/jyrac/datafile/sysaux.258.930413055
+DATADG/jyrac/datafile/system.259.930413057
+DATADG/jyrac/datafile/example.260.930413057
+DATADG/jyrac/datafile/undotbs2.261.930413057

2.識別要儲存複製檔案的目錄(ASM或non-ASM),在這裡檔案被複制到作業系統檔案系統中。

3.將資料檔案離線:

SQL> alter database datafile '+DATADG/jyrac/datafile/users.263.930413057' offline;

Database altered.

4.對原檔案目錄與目標目錄使用以下操作來建立directory_name並將檔案複製到新目錄

SQL> alter database datafile '+DATADG/jyrac/datafile/users.263.930413057' offline;

Database altered.

SQL> create directory asmsrc as '+DATADG/jyrac/datafile/';

Directory created.

SQL> create directory osdest as '/rman_backup/transfer/';

Directory created.

SQL> begin
  2   dbms_file_transfer.copy_file ('ASMSRC','users.263.930413057','OSDEST','users01.dbf');
  3  end;
  4  /

PL/SQL procedure successfully completed.

5.將資料檔案聯機

SQL>  recover datafile '+DATADG/jyrac/datafile/users.263.930413057';
ORA-00279: change 3079902 generated at 12/12/2016 16:07:01 needed for thread 1
ORA-00289: suggestion : +ARCHDG/jyrac/1_1_930413221.dbf
ORA-00280: change 3079902 for thread 1 is in sequence #1


Specify log: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: change 3105677 generated at 12/13/2016 07:00:07 needed for thread 1
ORA-00289: suggestion : +ARCHDG/jyrac/1_2_930413221.dbf
ORA-00280: change 3105677 for thread 1 is in sequence #2


Log applied.
Media recovery complete.
SQL> alter database datafile '+DATADG/jyrac/datafile/users.263.930413057' online;

Database altered.

6.驗證複製檔案

[oracle@jyrac1 transfer]$ ls -lrt
total 5140
-rw-r----- 1 oracle asmadmin 5251072 Dec 13 10:35 users01.dbf

在11g就可以使用列簡單的cp命令進行檔案複製,不需要使用這種方法。

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

相關文章