阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle 从ASM复制文件到文件系统

126次阅读
没有评论

共计 6814 个字符,预计需要花费 18 分钟才能阅读完成。

工作中,有时需要把文件从 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

 

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计6814字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中