暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DBMS_FILE_TRANSFER为ASM的文件传输提供了新的选择

盖国强 2017-08-03
359

编辑手记:从Oracle 10g开始,Oracle提供了DBMS_FILE_TRANSFER程序包,为本地数据库和远程数据库间,ASM和文件系统间传输数据库文件提供了新的选择。Oracle内部的小小变化,往往给运维带来极大的便利。本文拣选自《循序渐进Oracle》,我们再次回顾学习。


有了DBMS_FILE_TRANSFER,数据库文件的传输就方便了许多,尤其是在传输基于ASM存储的数据文件时,不再局限于利用RMAN来进行传输,为我们提供了更多的选择。


在使用DBMS_FILE_TRANSFER时一些注意事项:

1、DBMS_FILE_TRANSFER具备一定的限制,单个数据库文件必须是512字节的整数倍并且文件大小必须小于或者等于2TB,但是这基本上算不上什么弱点,我们的绝大多数需求都可以被满足。


2、DBMS_FILE_TRANSFER支持在线备份,如果传输正在被修改的文件,很可能会导致文件的不一致。这时候通过DBMS_FILE_TRANSFER传输的文件要做recovery才能使用,为了保持一致性,建议将文件offline再进行DBMS_FILE_TRANSFER传输。


3、如果利用DBMS_FILE_TRANSFER进行备份,建议自定义备份策略,并将文件置于hot backup 模式。


4、对于文件系统,传输的文件可以是各种类型的文件,但如果源端或者目标端是ASM存储,则只能是数据库文件。

5、为了正常执行该程序包,执行用户必须有以下权限:

对source_directory_object参数指定的目录对象有read权限;对 destination_directory_object
指定的目录对象有write权限


接下来我们一起来学习DBMS_FILE_TRANSFER 包的使用:


DBMS_FILE_TRANSFER 包一共包含了3个存储过程,分别提供本机之间拷贝(COPY_FILE)、本机从远程主机获取(GET_FILE)以及本机上传至远程主机(PUT_FILE)三种传输数据库文件的功能。



以上过程的参数中,除了文件名称外,最关键的是DIRECTORY目录参数,这个目录需要预先设定,并且要求传输用户对相应的目录具有读或者写的权限。


看以下测试,首先通过asmcmd在DATADG下创建一个asmbk目录:



然后在数据库内部创建两个DIRECTORY:



现在DBMS_FILE_TRANSFER就可以大显身手,快速的帮助我们解决文件传输的问题:



看一下ASM磁盘组上的内容,实际上文件的位置是在DATAFILE下,asmbk下存放的是一个别名:



DBMS_FILE_TRANSFER包更强大的功能是基于网络的远程PUT_FILE和COPY_FILE功能,这两个功能通过db link实现。以下是一个简单测试。


首先在远程数据库创建测试用户及目录,并进行授权:



接下来在本地数据库配置tnsnames.ora文件,并创建DB Link



接下来就可以通过DB Link进行远程的文件操作了,PUT_FILE可以将文件传输至远程主机:



在远程节点可以立刻检查到这个文件的存在:



进一步的,可以将远程文件读取到本地:



本地ASM存储中,马上获得了这个文件:



而进一步的,将表空间置于热备模式下,可以通过DBMS_FILE_TRANSFER包将数据库热备到远程主机,甚至可以基于次来创建远程的Dataguard数据库,有时在数据库巨大,备份恢复空间不足时,通过这种方式进行数据传输与备库创建未尝不是一种妙解:



DBMS_FILE_TRANSFER为我们提供了多一个选择和灵活性,很多时候,Oracle的一个小小的增强如果能够恰如其份的利用,就能够发挥巨大的优势了解了Oracle的种种可能之后,我们才能够灵活运用,如臂使指。

加入"云和恩墨大讲堂",参与讨论学习

搜索 盖国强(Eygle) :eyygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。


关注微信,获得后续精彩分享

最后修改时间:2020-05-07 23:55:33
文章转载自盖国强,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论