Oracle中如何使用DBMS_SCHEDULER删除已生成的文件
Oracle
DBMS_SCHEDULER.PUT_FILE 对应远程文件删除方案 Oracle 官方内置的DBMS_SCHEDULER包没有提供专门用于删除PUT_FILE创建的远程文件的存储过程,你可以通过以下两种常用方案实现需求:
- 方案1:通过
DBMS_SCHEDULER创建远程操作系统作业执行删除指令
你之前使用PUT_FILE时已经配置好了远程主机的Scheduler代理、访问凭证,可以直接复用这些配置创建一次性远程作业,调用目标主机的系统删除命令完成文件删除,示例代码如下:BEGIN DBMS_SCHEDULER.CREATE_JOB( JOB_NAME => 'REMOTE_DELETE_TEMP_FILE', JOB_TYPE => 'EXECUTABLE', JOB_ACTION => '/bin/rm', -- Windows环境替换为 'cmd /c del' NUMBER_OF_ARGUMENTS => 1, CREDENTIAL_NAME => '你的远程访问凭证名', DESTINATION_NAME => '你的远程Scheduler目标名', AUTO_DROP => TRUE, -- 执行完成后自动删除作业 ENABLED => FALSE ); -- 传入要删除的文件完整路径参数 DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( JOB_NAME => 'REMOTE_DELETE_TEMP_FILE', ARGUMENT_POSITION => 1, ARGUMENT_VALUE => '/目标路径/要删除的文件名' ); DBMS_SCHEDULER.ENABLE('REMOTE_DELETE_TEMP_FILE'); END; / - 方案2:通过
UTL_FILE.FREMOVE删除(仅适用目标路径可被Oracle主机直接访问的场景)
如果远程主机的目标路径已经通过NFS、SMB等方式挂载到Oracle数据库主机,且你已经为该路径创建了Oracle DIRECTORY对象,你可以直接调用UTL_FILE包的FREMOVE过程删除文件,语法如下:BEGIN UTL_FILE.FREMOVE( LOCATION => '你创建的DIRECTORY对象名', FILENAME => '要删除的文件名' ); END; /
注意事项:
- 无论使用哪种方案,都需要确保操作用户、配置的凭证对目标文件有删除权限
- 远程作业执行后可以通过
DBA_SCHEDULER_JOB_RUN_DETAILS视图查询执行结果,确认是否删除成功
内容的提问来源于stack exchange,提问作者enfix
相关产品推荐
相关产品推荐

