首页 文章

DBMS_Scheduler获取/放置文件替代

提问于
浏览
0

我目前正在进行一个侧面项目,需要我从远程FTP复制.csv文件并将其保存在本地 . 我想我会使用 DBMS_SCHEDULER.GET_FILE 但我没有得到许可 . 当我问我的经理时,他说我不能获得这样做的特权,应该以其他方式查找 .

经过几天的研究,我一直回到 DBMS_SCHEDULER ,我运气不好或者我的搜索技巧很糟糕 .

谢谢

1 回答

  • 3

    我'm not certain you' d想要使用 DBMS_SCHEDULER ;根据我从文档中理解的内容(我自己从未使用过),FTP站点必须对所有人完全开放;有一个参数destination_permissions,但它只是"Reserved for future use",即目前无法指定任何权限 .

    如果我'm right with this then I agree with your manager, though not necessarily for the same reasons (it seems like you' ll永远不会获得使用 DBMS_SCHEDULER 的许可,我希望这是不正确的) .

    还有其他方法可以做到这一点:

    • UTL_TCP;这只是一种通过TCP / IP协议进行交互的方法 . Oracle Base has an article,其中包含基于 UTL_TCP 的FTP程序包以及如何使用它的说明 . 这还需要使用UTL_FILE包,它可以编写OS文件 .

    • UTL_HTTP;我'm 99% certain it'可以用这个连接到FTP;它需要更多的工作,但从长远来看它是值得的 . 它还需要使用 UTL_FILE .

    • 直接到FTP的Java存储过程;这可能是最好的方法;使用众多Java FTP libraries之一创建一个 .

    • 用于调用OS命令的Java存储过程;这是最简单的方法,但最不可扩展 . Oracle在2008年发布了一个关于从PL / SQL内部调用操作系统命令的white paper但是还有很多其他东西(包括Oracle Base again

    最后,你可以质疑这是否真的是你想做的......

    • 你使用什么调度程序?它是否有事件驱动的调度?如果是这样,就不需要在Oracle内部进行FTP;使用 UTL_FILE 将文件写入OS,然后从那里写入OS命令 .

    • 另一个文件最初是在数据库中吗?如果's the case you don't需要提取它 . 您可以使用DBMS_FILE_TRANSFER直接从数据库中收集它,甚至可以创建JDBC连接或(更简单地)database link来直接选择数据 .

相关问题