【问题标题】:How to remove file with DBMS_SCHEDULER in Oracle如何在 Oracle 中使用 DBMS_SCHEDULER 删除文件
【发布时间】:2021-11-12 05:26:32
【问题描述】:

我使用DBMS_SCHEDULER.PUT_FILE 将文件写入指定的远程主机。

是否有删除创建文件的程序?

【问题讨论】:

    标签: oracle oracle11g dbms-scheduler


    【解决方案1】:

    不幸的是,据我所知,DBMS_SCHEDULER 中没有用于使用调度程序代理删除远程主机中的文件的等效项。

    PUT_FILE 过程

    此过程将文件保存到一个操作系统的文件系统中 指定的远程主机或本地计算机。它不同于 等效的 UTL_FILE 过程,因为它使用凭证并且可以 将文件保存到只有调度程序代理的远程主机(而不是 Oracle 数据库)已安装。

    但是,您可以通过创建一个远程作业来克服此限制,该作业运行utl_file.fremove 或安装在远程主机上的 shell 脚本以删除远程主机中作为参数传递的文件

    使用EXTERNAL_SCRIPT 类型进行远程作业的示例

    create or replace procedure my_delete_job ( pname in varchar2 , pfiletodelete in varchar2 )
    is
    v_job pls_integer;
    begin 
        select count(*) into v_job from dba_scheduler where job_name = upper(pname);
        if v_job = 1 
        then 
            dbms_scheduler.drop_job ( job_name => upper(pname) , force => true );
        end if;
        -- UNIX
        DBMS_SCHEDULER.create_job(
            job_name             => 'MY_SH_DELETE',
            job_type             => 'EXTERNAL_SCRIPT',
            job_action           => '/path/my_delete_script.sh '||pfiletodelete||' ',
            auto_drop            => FALSE,
            enabled              => FALSE);
         DBMS_SCHEDULER.set_attribute('MY_SH_DELETE', 'credential_name', 'MY_OS_REMOTE_CRED');
         DBMS_SCHEDULER.set_attribute('MY_SH_DELETE', 'destination', 'host.domain:scheduleragentport');
         DBMS_SCHEDULER.enable('MY_SH_DELETE');
    END;
    /
    
    exec my_delete_job ( 'MY_DELETE_JOB' , '/home/user/file.txt' );
    

    请记住,远程作业通常是分离的,因此您需要考虑一种处理异常的方法。

    当然,您可以改为在远程数据库中创建一个过程来使用UTL_FILE 包。但是,使用外部脚本的优点是您可以在没有安装 Oracle 数据库的主机上运行远程作业。

    这篇文章是关于如何处理远程作业异常的一个很好的例子。

    Remote Jobs

    【讨论】:

    • @enfix ,对此解决方法有任何反馈吗?
    【解决方案2】:

    是的,但不是DBMS_SCHEDULER。请改用UTL_FILE.FREMOVE

    假设您有足够的权限,此过程会删除磁盘文件。

    【讨论】:

    • 从 11g 开始,dbms_scheduler 中有一个用于远程调度程序代理的 put_file 过程。我认为这个问题是指这个
    • 是的,我写信给远程调度程序代理。使用 UTL_FILE 如何管理调度程序上的文件?
    猜你喜欢
    • 2021-10-31
    • 2016-10-09
    • 1970-01-01
    • 2013-11-17
    • 2020-05-28
    • 2021-01-21
    • 2018-02-19
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多