1. 程式人生 > >Oracle 從ASM復制文件到文件系統

Oracle 從ASM復制文件到文件系統

oracle asm 文件 復制

工作中,有時需要把文件從ASM中復制到文件系統中或者反過來,做一些維護操作,本文介紹了4種復制文件的的方法:

  • ASMCMD中的cp命令(11g)

  • dbms_file_transfer包

  • rman的convert或backup as copy

  • FTP

下面分別介紹這4種方法

1、ASMCMD中的cp命令(11g)

cp命令是11g新增的命令,使用它可以輕松的把文件從ASM中復制到文件系統中或者反過來。還可以把ASM中的文件復制到網絡上的其他服務器的文件系統中。

#從ASM復制到文件系統
[[email protected] ~]$ asmcmd -p
ASMCMD [+] > cd data
ASMCMD [+data] > cd orcl
ASMCMD [+data/orcl] > cd datafile
ASMCMD [+data/orcl/datafile] > ls
SYSAUX.257.925306091
SYSTEM.256.925306089
UNDOTBS1.258.925306091
UNDOTBS2.264.925306377
USERS.259.925306091
ASMCMD [+data/orcl/datafile] > ls -l
Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   MAY 21 11:00:00  Y    SYSAUX.257.925306091
DATAFILE  UNPROT  COARSE   MAY 21 11:00:00  Y    SYSTEM.256.925306089
DATAFILE  UNPROT  COARSE   MAY 21 11:00:00  Y    UNDOTBS1.258.925306091
DATAFILE  UNPROT  COARSE   MAY 21 11:00:00  Y    UNDOTBS2.264.925306377
DATAFILE  UNPROT  COARSE   MAY 21 11:00:00  Y    USERS.259.925306091
ASMCMD [+data/orcl/datafile] > cp USERS.259.925306091 /home/grid/users.dbf
copying +data/orcl/datafile/USERS.259.925306091 -> /home/grid/users.dbf
ASMCMD [+data/orcl/datafile] >
#查看復制結果
[[email protected]
/* */ ~]$ ll /home/grid/users.dbf -rw-r-----. 1 grid oinstall 5251072 May 21 15:20 /home/grid/users.dbf #從文件系統復制到ASM ASMCMD [+data/orcl/datafile] > cp /home/grid/users.dbf +data/orcl copying /home/grid/users.dbf -> +data/orcl/users.dbf #查看復制結果 ASMCMD [+data/orcl/datafile] > cd +data/orcl ASMCMD [+data/orcl] > ls -l Type Redund Striped Time Sys Name Y ARCHIVELOG/ Y CONTROLFILE/ Y DATAFILE/ Y ONLINELOG/ Y PARAMETERFILE/ Y TEMPFILE/ N spfileorcl.ora => +DATA/ORCL/PARAMETERFILE/spfile.268.925423909 N users.dbf => +DATA/ASM/DATAFILE/users.dbf.271.944580085

cp的詳細使用情況可以使用help cp命令獲得。

如果ASM的版本是11g以前的版本可以使用如下三種方法復制文件。

2、dbms_file_transfer包

這個包是從Oracle 9不開始提供的,利用這個包可以在兩個位置之間傳輸文件,這兩個位置可以是同一臺計算機或者網絡上的兩臺計算機。Oracle10g擴展了這個包的功能,可以完成從一個ASM Diskgroup拷貝到另一個ASM Diskgroup、從ASM Diskgroup拷貝到普通文件系統、從普通文件系統拷貝到ASM Diskgroup、從文件系統拷貝到文件系統或者RAW Device。這個包提供了3個方法,可以完成不同的任務。

方法 功能說明
copy_file完成文件從本地一個目錄拷貝到本地的另一個目錄,這個方法不能完成遠程傳輸
get_file這個方法完成把遠程的文件拷貝到本地的目錄中,類似於下載
put_file這個方法完成本地文件傳送到遠程的目的,類似於上傳

使用方法:

#創建目錄
SQL> create directory asm_dir as ‘+data/ASM/DATAFILE/‘;

Directory created.

SQL> create directory os_dir as ‘/home/oracle‘;

Directory created.
#執行復制
SQL> exec dbms_file_transfer.copy_file(‘asm_dir‘,‘user2.dbf.272.944581345‘,‘os_dir‘,‘user.dbf‘);

PL/SQL procedure successfully completed.

#驗證復制結果
[[email protected] ~]$ ls -l /home/oracle/user.dbf
-rw-r-----. 1 oracle asmadmin 5251072 May 21 15:49 /home/oracle/user.dbf

#進行反向復制
SQL> exec dbms_file_transfer.copy_file(‘os_dir‘,‘user.dbf‘,‘asm_dir‘,‘user2.dbf‘);

PL/SQL procedure successfully completed.

#驗證

ASMCMD [+data/ASM/DATAFILE] > ls -l
Type      Redund  Striped  Time             Sys  Name
                                            N    user2.dbf => +DATA/ORCL/DATAFILE/COPY_FILE.273.944581883

3、rman的convert和backup as copy命令

3.1 convert命令

convert命令是用於對數據文件進行字節格式轉換的。Oracle可以在不同OS平臺間進行表空間傳(TTS),如果兩個平臺的字節格式不一致,則需要參數據文件進行格式轉換,這個轉換可以 在源數據庫進行,也可以在目的數據庫中執行。如果在源數據庫中執行,則需要使用convert tablespace命令,如果在目的數據庫中執行,則需要使用convert datafile命令。

雖然convert這個命令主要用於跨平臺傳輸表空間,它也可以完成ASM和本地文件系統間拷貝文件,並且也是很簡單的一種方法。

#使用convert datafile從ASM復制到文件系統
RMAN> convert datafile ‘+data/orcl/datafile/USERS.259.925306091‘ format ‘/home/oracle/user3.dbf‘;

Starting conversion at target at 21-MAY-17
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input file name=+DATA/orcl/datafile/users.259.925306091
converted datafile=/home/oracle/user3.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
Finished conversion at target at 21-MAY-17

#驗證
[[email protected] ~]$ ls -l /home/oracle/user3.dbf
-rw-r-----. 1 oracle asmadmin 5251072 May 21 16:00 /home/oracle/user3.dbf

#使用convert tablespace,使用時需要把users表空間置為只讀
RMAN> sql ‘alter tablespace users read only‘;

using target database control file instead of recovery catalog
sql statement: alter tablespace users read only

RMAN> convert tablespace users format ‘/home/oracle/users%U.dbf‘;

Starting conversion at source at 21-MAY-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=81 instance=orcl1 device type=DISK
channel ORA_DISK_1: starting datafile conversion
input datafile file number=00004 name=+DATA/orcl/datafile/users.259.925306091
converted datafile=/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
Finished conversion at source at 21-MAY-17

#驗證
[[email protected] ~]$ ll /home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf
-rw-r-----. 1 oracle asmadmin 5251072 May 21 16:03 /home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf

#從文件系統拷貝到ASM
RMAN> convert datafile ‘/home/oracle/user3.dbf‘,‘/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf‘ format ‘+data‘;

Starting conversion at target at 21-MAY-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=64 instance=orcl1 device type=DISK
channel ORA_DISK_1: starting datafile conversion
input file name=/home/oracle/user3.dbf
converted datafile=+DATA/orcl/datafile/users.274.944582713
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile conversion
input file name=/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf
converted datafile=+DATA/orcl/datafile/users.275.944582713
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
Finished conversion at target at 21-MAY-17
#從日誌中看出轉換的文件名
#converted datafile=+DATA/orcl/datafile/users.274.944582713
#converted datafile=+DATA/orcl/datafile/users.274.944582713

3.2 backup as copy命令

backup as copy命令是以鏡像的方式對文件進行備份,自然可以把文件從ASM復制到文件系統中。這也是從文件系統遷移到ASM時可以選擇的方法之一。

#執行復制
RMAN> backup as copy datafile ‘+DATA/orcl/datafile/users.259.925306091‘ format ‘/home/oracle/user4.dbf‘;

Starting backup at 21-MAY-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=69 instance=orcl1 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=+DATA/orcl/datafile/users.259.925306091
output file name=/home/oracle/user4.dbf tag=TAG20170521T161225 RECID=17 STAMP=944583145
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 21-MAY-17

#驗證
[[email protected] ~]$ ls -l /home/oracle/user4.dbf 
-rw-r-----. 1 oracle asmadmin 5251072 May 21 16:12 /home/oracle/user4.dbf

4.FTP方法

FTP方法可以像庫中復制使用傳統文件傳輸協議(FTP)對普通文件執行常規操作那樣,對ASM文件和目錄執行操作。通過這種方式訪問ASM文件的典型應用是從一個數據庫向另一個數據庫中復制ASM文件。需要XML DB支持,配置起來最麻煩,有興趣的同學可以參考《Oracle Database 11g RAC手冊原書第2版》或官方文檔:http://docs.oracle.com/cd/E11882_01/server.112/e18951/asmfiles.htm#BABJCCEI



參考《大話Oracle RAC》

本文出自 “DBA Fighting!” 博客,請務必保留此出處http://hbxztc.blog.51cto.com/1587495/1927904

Oracle 從ASM復制文件到文件系統