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中的文件复制到网络上的其他服务器的文件系统中。

  1. #从ASM复制到文件系统
  2. [grid@rac1~]$asmcmd-p
  3. ASMCMD[+]>cddata
  4. ASMCMD[+data]>cdorcl
  5. ASMCMD[+data/orcl]>cddatafile
  6. ASMCMD[+data/orcl/datafile]>ls
  7. SYSAUX.257.925306091
  8. SYSTEM.256.925306089
  9. UNDOTBS1.258.925306091
  10. UNDOTBS2.264.925306377
  11. USERS.259.925306091
  12. ASMCMD[+data/orcl/datafile]>ls-l
  13. TypeRedundStripedTimeSysName
  14. DATAFILEUNPROTCOARSEMAY2111:00:00YSYSAUX.257.925306091
  15. DATAFILEUNPROTCOARSEMAY2111:00:00YSYSTEM.256.925306089
  16. DATAFILEUNPROTCOARSEMAY2111:00:00YUNDOTBS1.258.925306091
  17. DATAFILEUNPROTCOARSEMAY2111:00:00YUNDOTBS2.264.925306377
  18. DATAFILEUNPROTCOARSEMAY2111:00:00YUSERS.259.925306091
  19. ASMCMD[+data/orcl/datafile]>cpuSERS.259.925306091/home/grid/users.dbf
  20. copying+data/orcl/datafile/USERS.259.925306091->/home/grid/users.dbf
  21. ASMCMD[+data/orcl/datafile]>
  22. #查看复制结果
  23. [grid@rac1~]$ll/home/grid/users.dbf
  24. -rw-r-----.1gridoinstall5251072May2115:20/home/grid/users.dbf
  25.  
  26. #从文件系统复制到ASM
  27. ASMCMD[+data/orcl/datafile]>cp/home/grid/users.dbf+data/orcl
  28. copying/home/grid/users.dbf->+data/orcl/users.dbf
  29. #查看复制结果
  30. ASMCMD[+data/orcl/datafile]>cd+data/orcl
  31. ASMCMD[+data/orcl]>ls-l
  32. TypeRedundStripedTimeSysName
  33. YARCHIVELOG/
  34. YCONTROLFILE/
  35. YDATAFILE/
  36. YONLINELOG/
  37. YPARAMETERFILE/
  38. YTEMPFILE/
  39. Nspfileorcl.ora=>+DATA/ORCL/PARAMETERFILE/spfile.268.925423909
  40. Nusers.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 这个方法完成本地文件传送到远程的目的,类似于上传

使用方法

  1. #创建目录
  2. sql>createdirectoryasm_diras'+data/ASM/DATAFILE/';
  3.  
  4. Directorycreated.
  5.  
  6. sql>createdirectoryos_diras'/home/oracle';
  7.  
  8. Directorycreated.
  9. #执行复制
  10. sql>execdbms_file_transfer.copy_file('asm_dir','user2.dbf.272.944581345','os_dir','user.dbf');
  11.  
  12. PL/sqlproceduresuccessfullycompleted.
  13.  
  14. #验证复制结果
  15. [oracle@rac1~]$ls-l/home/oracle/user.dbf
  16. -rw-r-----.1oracleasmadmin5251072May2115:49/home/oracle/user.dbf
  17.  
  18. #进行反向复制
  19. sql>execdbms_file_transfer.copy_file('os_dir','user.dbf','asm_dir','user2.dbf');
  20.  
  21. PL/sqlproceduresuccessfullycompleted.
  22.  
  23. #验证
  24.  
  25. ASMCMD[+data/ASM/DATAFILE]>ls-l
  26. TypeRedundStripedTimeSysName
  27. Nuser2.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和本地文件系统间拷贝文件,并且也是很简单的一种方法

  1. #使用convertdatafile从ASM复制到文件系统
  2. RMAN>convertdatafile'+data/orcl/datafile/USERS.259.925306091'format'/home/oracle/user3.dbf';
  3.  
  4. Startingconversionattargetat21-MAY-17
  5. usingchannelORA_DISK_1
  6. channelORA_DISK_1:startingdatafileconversion
  7. inputfilename=+DATA/orcl/datafile/users.259.925306091
  8. converteddatafile=/home/oracle/user3.dbf
  9. channelORA_DISK_1:datafileconversioncomplete,elapsedtime:00:00:01
  10. Finishedconversionattargetat21-MAY-17
  11.  
  12. #验证
  13. [oracle@rac1~]$ls-l/home/oracle/user3.dbf
  14. -rw-r-----.1oracleasmadmin5251072May2116:00/home/oracle/user3.dbf
  15.  
  16. #使用converttablespace,使用时需要把users表空间置为只读
  17. RMAN>sql'altertablespaceusersreadonly';
  18.  
  19. usingtargetdatabasecontrolfileinsteadofrecoverycatalog
  20. sqlstatement:altertablespaceusersreadonly
  21.  
  22. RMAN>converttablespaceusersformat'/home/oracle/users%U.dbf';
  23.  
  24. Startingconversionatsourceat21-MAY-17
  25. allocatedchannel:ORA_DISK_1
  26. channelORA_DISK_1:SID=81instance=orcl1devicetype=DISK
  27. channelORA_DISK_1:startingdatafileconversion
  28. inputdatafilefilenumber=00004name=+DATA/orcl/datafile/users.259.925306091
  29. converteddatafile=/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf
  30. channelORA_DISK_1:datafileconversioncomplete,elapsedtime:00:00:01
  31. Finishedconversionatsourceat21-MAY-17
  32.  
  33. #验证
  34. [oracle@rac1~]$ll/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf
  35. -rw-r-----.1oracleasmadmin5251072May2116:03/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf
  36.  
  37. #从文件系统拷贝到ASM
  38. RMAN>convertdatafile'/home/oracle/user3.dbf','/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf'format'+data';
  39.  
  40. Startingconversionattargetat21-MAY-17
  41. usingtargetdatabasecontrolfileinsteadofrecoverycatalog
  42. allocatedchannel:ORA_DISK_1
  43. channelORA_DISK_1:SID=64instance=orcl1devicetype=DISK
  44. channelORA_DISK_1:startingdatafileconversion
  45. inputfilename=/home/oracle/user3.dbf
  46. converteddatafile=+DATA/orcl/datafile/users.274.944582713
  47. channelORA_DISK_1:datafileconversioncomplete,elapsedtime:00:00:01
  48. channelORA_DISK_1:startingdatafileconversion
  49. inputfilename=/home/oracle/usersdata_D-ORCL_I-1453086940_TS-USERS_FNO-4_0ns4qbtn.dbf
  50. converteddatafile=+DATA/orcl/datafile/users.275.944582713
  51. channelORA_DISK_1:datafileconversioncomplete,elapsedtime:00:00:01
  52. Finishedconversionattargetat21-MAY-17
  53. #从日志中看出转换的文件
  54. #converteddatafile=+DATA/orcl/datafile/users.274.944582713
  55. #converteddatafile=+DATA/orcl/datafile/users.274.944582713

3.2 backup as copy命令

backup as copy命令是以镜像的方式对文件进行备份,自然可以把文件从ASM复制到文件系统中。这也是从文件系统迁移到ASM时可以选择的方法之一。

  1. #执行复制
  2. RMAN>backupascopydatafile'+DATA/orcl/datafile/users.259.925306091'format'/home/oracle/user4.dbf';
  3.  
  4. Startingbackupat21-MAY-17
  5. usingtargetdatabasecontrolfileinsteadofrecoverycatalog
  6. allocatedchannel:ORA_DISK_1
  7. channelORA_DISK_1:SID=69instance=orcl1devicetype=DISK
  8. channelORA_DISK_1:startingdatafilecopy
  9. inputdatafilefilenumber=00004name=+DATA/orcl/datafile/users.259.925306091
  10. outputfilename=/home/oracle/user4.dbftag=TAG20170521T161225RECID=17STAMP=944583145
  11. channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:01
  12. Finishedbackupat21-MAY-17
  13.  
  14. #验证
  15. [oracle@rac1~]$ls-l/home/oracle/user4.dbf
  16. -rw-r-----.1oracleasmadmin5251072May2116: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》

猜你在找的Oracle相关文章