我使用DBMS_SCHEDULER.PUT_FILE將檔案寫入指定的遠程主機。
是否有一個洗掉已創建的檔案的程式?
uj5u.com熱心網友回復:
不幸的是,據我所知,在DBMS_SCHEDULER中沒有一個等同于使用調度代理洗掉遠程主機中的檔案。
PUT_FILE程序該程序將一個檔案保存到指定的遠程主機或本地計算機的作業系統檔案系統中。 指定的遠程主機或本地計算機的作業系統中。它與 不同的是,它使用了一個證書,并且可以將檔案保存到一個有遠程主機的作業系統中。 檔案保存到一個只安裝了Scheduler代理(而不是Oracle資料庫)的遠程主機上。
然而,您可以通過創建一個遠程作業來克服這一限制,該作業運行utl_file.fremove或安裝在遠程主機上的shell腳本來洗掉遠程主機中作為引數傳遞的檔案
使用EXTERNAL_SCRIPT型別進行遠程作業的例子
create or replace procedure my_delete_job ( pname in varchar2 , pfiletodelete in varchar2 )
是的
v_job pls_integer;
begin[/span
select count(*) into V_job from dba_scheduler where job_name = upper(pname)。
如果v_job = 1,那么
則
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' ) 。
請記住,外部作業通常是分離的,所以你需要考慮一種處理例外的方法。
當然,你也可以在遠程資料庫中創建一個存盤程序來使用 這篇文章是一個很好的例子,說明了如何處理遠程作業的例外情況。
uj5u.com熱心網友回復: 是的,但不是用
標籤: 上一篇:postgresql的性能問題
UTL_FILE包。然而,使用外部腳本的優勢在于,您可以在沒有安裝 Oracle 資料庫的主機中運行遠程作業。
DBMS_SCHEDULER。使用UTL_FILE.FREMOVE替代。假設你有足夠的權限,這個程序將洗掉一個磁盤檔案。
