【问题标题】:DBMS_Scheduler get/put file alternativeDBMS_Scheduler 获取/放置文件替代
【发布时间】:2013-08-21 15:52:20
【问题描述】:

我目前正在处理一个副项目,需要我从远程 FTP 复制一个 .csv 文件并将其保存在本地。我想我会使用DBMS_SCHEDULER.GET_FILE,但我没有权限。当我问我的经理时,他说我将无法获得执行此操作的权限,应该寻找其他方式。

在研究了几天后,我不断回到DBMS_SCHEDULER,是我运气不好还是我的搜索技巧很糟糕。

谢谢

【问题讨论】:

    标签: oracle plsql ftp dbms-scheduler


    【解决方案1】:

    我不确定您是否愿意为此使用DBMS_SCHEDULER;根据我从文档中了解到的(我自己从未使用过),FTP 站点必须对所有人完全开放;有一个参数destination_permissions,但它只是“保留供将来使用”,即目前无法指定任何权限。

    如果我的看法是正确的,那么我同意你的经理的观点,尽管理由不一定相同(你似乎永远不会获得使用 DBMS_SCHEDULER 的许可,我希望这是不正确的)。

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

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

    2. UTL_HTTP;我 99% 确定可以使用它连接到 FTP;当然可以连接到 SFTP/任何服务器。这将需要更多的工作,但从长远来看这是值得的。它还需要使用UTL_FILE

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

    4. 调用调用 OS 命令的 Java 存储过程;这是最简单的方法,但扩展性最低。早在 2008 年,Oracle 就发布了 white paper 从 PL/SQL 中调用操作系统命令,但还有很多其他内容(包括 Oracle Base again

    最后,你可能会质疑这是否真的是你想要做的......

    1. 您使用什么调度程序?它有事件驱动的调度吗?如果是这样,则无需从 Oracle 内部进行 FTP;使用UTL_FILE 将文件写入操作系统,然后从那里写入操作系统命令。

    2. 其他文件最初是否在数据库中?如果是这种情况,您不需要提取它。您可以使用DBMS_FILE_TRANSFER 直接从数据库中收集数据,甚至可以创建JDBC 连接或(更简单)database link 以直接选择数据。

    【讨论】:

    • 非常感谢您的回复。关于权限,除了管理员之外没有人拥有,所以不仅仅是我。我会研究这些其他方法并尝试找到一种可以使用的方法。
    • 至于使用,我们想尝试创建一个程序来检查客户端的FTP,看看是否有任何新文件。当有新文件时,我们希望将其下载到临时文件夹,将其上传到我们的数据库,然后删除该文件。我们都不知道这是否可能,但我正在做研究,看看我们能做些什么。
    • 是的,这是不可能的。我每天都这样做(虽然不是使用 FTP)。我怀疑您将需要比目前更多的权限。如果发生这种情况,DBA 可能不得不放松钱包。它使用 FTP 不太安全,但您可以创建一个没有其他权限的单独架构来进行搜索,甚至更好地使用完全独立的数据库。
    • 太棒了,很高兴听到。再次感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2010-12-24
    • 2014-03-25
    相关资源
    最近更新 更多