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

时间:2022-05-03
本文章向大家介绍DBMS_FILE_TRANSFER为ASM的文件传输提供了新的选择,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

编辑手记:从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的种种可能之后,我们才能够灵活运用,如臂使指。