工作中,有时需要把文件从ASM中复制到文件系统中或者反过来,做一些维护操作,本文介绍了4种复制文件的的方法:
ASMCMD中的cp命令(11g)
dbms_file_transfer包
rman的convert或backup as copy
FTP
下面分别介绍这4种方法
1、ASMCMD中的cp命令(11g)
cp命令是11g新增的命令,使用它可以轻松的把文件从ASM中复制到文件系统中或者反过来。还可以把ASM中的文件复制到网络上的其他服务器的文件系统中。
<code>#从ASM复制到文件系统</code>
<code>[grid@rac1 ~]$ asmcmd -p</code>
<code>ASMCMD [+] > </code><code>cd</code> <code>data</code>
<code>ASMCMD [+data] > </code><code>cd</code> <code>orcl</code>
<code>ASMCMD [+data</code><code>/orcl</code><code>] > </code><code>cd</code> <code>datafile</code>
<code>ASMCMD [+data</code><code>/orcl/datafile</code><code>] > </code><code>ls</code>
<code>SYSAUX.257.925306091</code>
<code>SYSTEM.256.925306089</code>
<code>UNDOTBS1.258.925306091</code>
<code>UNDOTBS2.264.925306377</code>
<code>USERS.259.925306091</code>
<code>ASMCMD [+data</code><code>/orcl/datafile</code><code>] > </code><code>ls</code> <code>-l</code>
<code>Type Redund Striped Time Sys Name</code>
<code>DATAFILE UNPROT COARSE MAY 21 11:00:00 Y SYSAUX.257.925306091</code>
<code>DATAFILE UNPROT COARSE MAY 21 11:00:00 Y SYSTEM.256.925306089</code>
<code>DATAFILE UNPROT COARSE MAY 21 11:00:00 Y UNDOTBS1.258.925306091</code>
<code>DATAFILE UNPROT COARSE MAY 21 11:00:00 Y UNDOTBS2.264.925306377</code>
<code>DATAFILE UNPROT COARSE MAY 21 11:00:00 Y USERS.259.925306091</code>
<code>ASMCMD [+data</code><code>/orcl/datafile</code><code>] > </code><code>cp</code> <code>USERS.259.925306091 </code><code>/home/grid/users</code><code>.dbf</code>
<code>copying +data</code><code>/orcl/datafile/USERS</code><code>.259.925306091 -> </code><code>/home/grid/users</code><code>.dbf</code>
<code>ASMCMD [+data</code><code>/orcl/datafile</code><code>] ></code>
<code>#查看复制结果</code>
<code>[grid@rac1 ~]$ ll </code><code>/home/grid/users</code><code>.dbf </code>
<code>-rw-r-----. 1 grid oinstall 5251072 May 21 15:20 </code><code>/home/grid/users</code><code>.dbf</code>
<code>#从文件系统复制到ASM</code>
<code>ASMCMD [+data</code><code>/orcl/datafile</code><code>] > </code><code>cp</code> <code>/home/grid/users</code><code>.dbf +data</code><code>/orcl</code>
<code>copying </code><code>/home/grid/users</code><code>.dbf -> +data</code><code>/orcl/users</code><code>.dbf</code>
<code>ASMCMD [+data</code><code>/orcl/datafile</code><code>] > </code><code>cd</code> <code>+data</code><code>/orcl</code>
<code>ASMCMD [+data</code><code>/orcl</code><code>] > </code><code>ls</code> <code>-l</code>
<code>Type Redund Striped Time Sys Name</code>
<code> </code><code>Y ARCHIVELOG/</code>
<code> </code><code>Y CONTROLFILE/</code>
<code> </code><code>Y DATAFILE/</code>
<code> </code><code>Y ONLINELOG/</code>
<code> </code><code>Y PARAMETERFILE/</code>
<code> </code><code>Y TEMPFILE/</code>
<code> </code><code>N spfileorcl.ora => +DATA</code><code>/ORCL/PARAMETERFILE/spfile</code><code>.268.925423909</code>
<code> </code><code>N </code><code>users</code><code>.dbf => +DATA</code><code>/ASM/DATAFILE/users</code><code>.dbf.271.944580085</code>
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
这个方法完成本地文件传送到远程的目的,类似于上传
使用方法:
<code>#创建目录</code>
<code>SQL> </code><code>create</code> <code>directory asm_dir </code><code>as</code> <code>'+data/ASM/DATAFILE/'</code><code>;</code>
<code>Directory created.</code>
<code>SQL> </code><code>create</code> <code>directory os_dir </code><code>as</code> <code>'/home/oracle'</code><code>;</code>
<code>#执行复制</code>
<code>SQL> </code><code>exec</code> <code>dbms_file_transfer.copy_file(</code><code>'asm_dir'</code><code>,</code><code>'user2.dbf.272.944581345'</code><code>,</code><code>'os_dir'</code><code>,</code><code>'user.dbf'</code><code>);</code>
<code>PL/SQL </code><code>procedure</code> <code>successfully completed.</code>
<code>#验证复制结果</code>
<code>[oracle@rac1 ~]$ ls -l /home/oracle/</code><code>user</code><code>.dbf</code>
<code>-rw-r</code><code>-----. 1 oracle asmadmin 5251072 May 21 15:49 /home/oracle/user.dbf</code>
<code>#进行反向复制</code>
<code>SQL> </code><code>exec</code> <code>dbms_file_transfer.copy_file(</code><code>'os_dir'</code><code>,</code><code>'user.dbf'</code><code>,</code><code>'asm_dir'</code><code>,</code><code>'user2.dbf'</code><code>);</code>
<code>#验证</code>
<code>ASMCMD [+data/ASM/DATAFILE] > ls -l</code>
<code>Type Redund Striped </code><code>Time</code> <code>Sys </code><code>Name</code>
<code> </code><code>N user2.dbf => +DATA/ORCL/DATAFILE/COPY_FILE.273.944581883</code>
3、rman的convert和backup as copy命令
3.1 convert命令
convert命令是用于对数据文件进行字节格式转换的。Oracle可以在不同OS平台间进行表空间传(TTS),如果两个平台的字节格式不一致,则需要参数据文件进行格式转换,这个转换可以 在源数据库进行,也可以在目的数据库中执行。如果在源数据库中执行,则需要使用convert tablespace命令,如果在目的数据库中执行,则需要使用convert datafile命令。
虽然convert这个命令主要用于跨平台传输表空间,它也可以完成ASM和本地文件系统间拷贝文件,并且也是很简单的一种方法。
<code>#使用</code><code>convert</code> <code>datafile从ASM复制到文件系统</code>
<code>RMAN> </code><code>convert</code> <code>datafile </code><code>'+data/orcl/datafile/USERS.259.925306091'</code> <code>format </code><code>'/home/oracle/user3.dbf'</code><code>;</code>
<code>Starting conversion </code><code>at</code> <code>target </code><code>at</code> <code>21-MAY-17</code>
<code>using channel ORA_DISK_1</code>
<code>channel ORA_DISK_1: starting datafile conversion</code>
<code>input file </code><code>name</code><code>=+DATA/orcl/datafile/users.259.925306091</code>
<code>converted datafile=/home/oracle/user3.dbf</code>
<code>channel ORA_DISK_1: datafile conversion complete, elapsed </code><code>time</code><code>: 00:00:01</code>
<code>Finished conversion </code><code>at</code> <code>target </code><code>at</code> <code>21-MAY-17</code>
<code>[oracle@rac1 ~]$ ls -l /home/oracle/user3.dbf</code>
<code>-rw-r</code><code>-----. 1 oracle asmadmin 5251072 May 21 16:00 /home/oracle/user3.dbf</code>
<code>#使用</code><code>convert</code> <code>tablespace,使用时需要把users表空间置为只读</code>
<code>RMAN> sql </code><code>'alter tablespace users read only'</code><code>;</code>
<code>using target </code><code>database</code> <code>control file </code><code>instead</code> <code>of</code> <code>recovery catalog</code>
<code>sql statement: </code><code>alter</code> <code>tablespace users </code><code>read</code> <code>only</code>
<code>RMAN> </code><code>convert</code> <code>tablespace users format </code><code>'/home/oracle/users%U.dbf'</code><code>;</code>
<code>Starting conversion </code><code>at</code> <code>source </code><code>at</code> <code>21-MAY-17</code>
<code>allocated channel: ORA_DISK_1</code>
<code>channel ORA_DISK_1: SID=81 instance=orcl1 device type=DISK</code>
<code>input datafile file number=00004 </code><code>name</code><code>=+DATA/orcl/datafile/users.259.925306091</code>
<code>converted datafile=/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf</code>
<code>Finished conversion </code><code>at</code> <code>source </code><code>at</code> <code>21-MAY-17</code>
<code>[oracle@rac1 ~]$ ll /home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf</code>
<code>-rw-r</code><code>-----. 1 oracle asmadmin 5251072 May 21 16:03 /home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf</code>
<code>#从文件系统拷贝到ASM</code>
<code>RMAN> </code><code>convert</code> <code>datafile </code><code>'/home/oracle/user3.dbf'</code><code>,</code><code>'/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf'</code> <code>format </code><code>'+data'</code><code>;</code>
<code>channel ORA_DISK_1: SID=64 instance=orcl1 device type=DISK</code>
<code>input file </code><code>name</code><code>=/home/oracle/user3.dbf</code>
<code>converted datafile=+DATA/orcl/datafile/users.274.944582713</code>
<code>input file </code><code>name</code><code>=/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf</code>
<code>converted datafile=+DATA/orcl/datafile/users.275.944582713</code>
<code>#从日志中看出转换的文件名</code>
<code>#converted datafile=+DATA/orcl/datafile/users.274.944582713</code>
3.2 backup as copy命令
backup as copy命令是以镜像的方式对文件进行备份,自然可以把文件从ASM复制到文件系统中。这也是从文件系统迁移到ASM时可以选择的方法之一。
<code>RMAN> backup </code><code>as</code> <code>copy datafile </code><code>'+DATA/orcl/datafile/users.259.925306091'</code> <code>format </code><code>'/home/oracle/user4.dbf'</code><code>;</code>
<code>Starting backup </code><code>at</code> <code>21-MAY-17</code>
<code>channel ORA_DISK_1: SID=69 instance=orcl1 device type=DISK</code>
<code>channel ORA_DISK_1: starting datafile copy</code>
<code>output</code> <code>file </code><code>name</code><code>=/home/oracle/user4.dbf tag=TAG20170521T161225 RECID=17 STAMP=944583145</code>
<code>channel ORA_DISK_1: datafile copy complete, elapsed </code><code>time</code><code>: 00:00:01</code>
<code>Finished backup </code><code>at</code> <code>21-MAY-17</code>
<code>[oracle@rac1 ~]$ ls -l /home/oracle/user4.dbf </code>
<code>-rw-r</code><code>-----. 1 oracle asmadmin 5251072 May 21 16:12 /home/oracle/user4.dbf</code>
4.FTP方法
本文转自hbxztc 51CTO博客,原文链接:http://blog.51cto.com/hbxztc/1927904,如需转载请自行联系原作者