我'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 的许可,我希望这是不正确的) .
1 回答
我'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来直接选择数据 .