工作中,有时需要把文件从ASM中复制到文件系统中或者反过来,做一些维护操作,本文介绍了4种复制文件的的方法:

  • ASMCMD中的cp命令(11g)
  • dbms_file_transfer包
  • rman的convert或backup as copy
  • FTP

下面分别介绍这4种方法

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

cp命令是11g新增的命令,使用它可以轻松的把文件从ASM中复制到文件系统中或者反过来。还可以把ASM中的文件复制到网络上的其他服务器的文件系统中。

#从ASM复制到文件系统
[grid@rac1 ~]$ 
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] >
#查看复制结果
[grid@rac1 ~]$ 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.
  
#验证复制结果
[oracle@rac1 ~]$ 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
  
#验证
[oracle@rac1 ~]$ 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
  
#验证
[oracle@rac1 ~]$ 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
  
#验证
[oracle@rac1 ~]$ 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

【ASM】从asm中复制文件到本地,或者从本地到asm中方法的更多相关文章

  1. 不能往Windows Server 2008 R2 Server中复制文件的解决方法

    目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度找到了解决方法,特此记录(记忆). 1.在任务管理器中找到“rdpclip.e ...

  2. C# 在word文档中复制表格并粘帖到下一页中

    C# 在word文档中复制表格并粘帖到下一页中 object oMissing = System.Reflection.Missing.Value;            Microsoft.Offi ...

  3. 把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案

    把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败在python3中调用会成功,但是调用不能成功 解决办法是: 在该文件夹下加入空文件__init__.py python2会把该 ...

  4. 在Linux中复制文件夹下的全部文件到另外文件夹

    https://jingyan.baidu.com/article/656db918f83c0de380249c5a.html 在Linux系统中复制或拷贝文件我们可以用cp或者copy命令,但要对一 ...

  5. Git中.gitignore文件不起作用的解决以及Git中的忽略规则介绍

    在Studio里使用Git管理代码的过程中,可以修改.gitignore文件中的标示的方法来忽略开发者想忽略掉的文件或目录,如果没有.gitignore文件,可以自己手工创建.在.gitignore文 ...

  6. 再springMVC中自定义文件上传处理解决与原spring中MultipartResolve冲突问题

    相信很多朋友再用springmvc时都遇见了一个问题,那就是自带的获取上传的东西太慢,而且不知道如何修改,其实不然,spring框架既然给我们开放了这个接口,就一定遵从了可扩展性的原则,经过查看org ...

  7. 同一个局域网内,使用 java 从服务器共享文件夹中复制文件到本地。

    1 引用jar 包 <dependency> <groupId>org.samba.jcifs</groupId> <artifactId>jcifs& ...

  8. linux中复制文件夹的所有文件到指定目录

    这里我们的需求是需要将一个文件夹中的所有文件都复制到另一个文件夹中,而不是将一个文件夹复制到另外一个文件夹中. //这里需要使用到-R参数,表示递归处理,将指定目录下的所有文件与子目录一并处理//一开 ...

  9. python中复制文件

    1.复制单个文件 1.把home下的test.yml复制到root目录下 In [43]: import shutil In [42]: shutil.copy('/home/test.yml','/ ...

随机推荐

  1. Hive JDBC执行load时无法从本地加载数据

    通过hive-jdcv连接hive server,在应用服务端执行以下命令,报错:Hiver Server节点上找不到data.txt load data local inpath '/home/dw ...

  2. Java 8 Lambda表达式-接口实现

    Java 8 Lambda表达式在只有一个方法的接口实现代码编写中,可以起到简化作用: (argument list) -> body 具体看Runnable接口的例子 public class ...

  3. HBase过滤器:SingleColumnValueFilter和FirstKeyOnlyFilter一起使用的问题

    FirstKeyOnlyFilter是对第一列进行过滤,hbase中的列按照字典序排列,所以如果SingleColumnValueFilter中的过滤列不是第一列的话,FirstKeyOnlyFilt ...

  4. css 17-CSS3的常见边框汇总

    17-CSS3的常见边框汇总 #CSS3 常见边框汇总 <!DOCTYPE html> <html lang="en"> <head> < ...

  5. setfacl命令的基本用法

    setfacl命令的基本用法 1.setfacl的用途 setfacl命令可以用来细分linux下的文件权限. chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录 ...

  6. Flink批处理读写Hive

    import org.apache.flink.table.api.*; import org.apache.flink.table.catalog.hive.HiveCatalog; /** * @ ...

  7. Raft算法系列教程1:Leader选举

    1.服务器的三种角色 Raft算法中服务器主要分为三种角色:Leader.Follower.Candidate,并且三种角色相互独立,也就是服务器在同一时间内只可能扮演其中一种角色. Leader:用 ...

  8. PHPCMS V9.6.0 SQL注入漏洞EXP

    运行于python3.5 import requests import time import re import sys def banner(): msg = '''--------------E ...

  9. Spring4.3入门 Spring 依赖关系

    Spring4.3入门 Spring 依赖关系 spring的jar包只有20个左右,每个都有相应的功能,一个jar还可能依赖了若干其他jar ,所以,搞清楚它们之间的关系,配置maven依赖就可以简 ...

  10. 论文阅读LR LIO-SAM

    Abstract 紧耦合lidar inertial里程计, 用smoothing和mapping. 1. Introduction 紧耦合lidar-inertial里程计. 紧耦合的lidar i ...