You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Oracle RDS运行S3下载校验脚本报29283错误如何解决?

问题原因
  • 问题的核心是RDS S3下载任务提交后,对应的任务日志文件不会即时生成。原脚本提交完下载任务后立刻进入循环查询日志,此时RDS后台还未创建对应的dbtask-*.log文件,首次调用日志读取接口时就会触发文件不存在的29283错误,直接中断PL/SQL执行。
  • 单独执行输出的V_CMD语句时,距离任务提交已经间隔了一段时间,日志文件已经生成完成,因此可以正常执行返回结果。
解决方案

修改思路为两点:一是在轮询之间增加等待时长,给日志生成预留缓冲时间;二是捕获文件不存在的29283异常,遇到该错误时不中断执行,继续等待重试。
修改后的脚本如下:

DECLARE 
V_TASKID VARCHAR2(100);
V_CTR integer := 0;
V_CMD VARCHAR2(4000) := NULL;
-- 捕获文件不存在的指定错误码
e_file_not_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(e_file_not_exists, 29283);

BEGIN
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(p_bucket_name => 'humm-cards-dev',  p_directory_name => 'DATA_PUMP_DIR') INTO V_TASKID FROM DUAL;
dbms_output.put_line('下载任务ID:'||V_TASKID) ;

WHILE V_CTR = 0 LOOP
    BEGIN
        V_CMD := 'SELECT count(*) FROM table(rdsadmin.rds_file_util.read_text_file(''BDUMP'', ''dbtask-' || V_TASKID || '.log'')) WHERE text LIKE ''%finished successfully%''';
        execute immediate V_CMD INTO V_CTR;
        IF V_CTR > 0 THEN 
            dbms_output.put_line('下载任务执行成功');
            EXIT; 
        END IF;
        -- 每次查询后等待3秒,可根据实际文件大小调整
        DBMS_SESSION.SLEEP(3);
    EXCEPTION
        WHEN e_file_not_exists THEN
            -- 日志未生成,继续等待
            DBMS_SESSION.SLEEP(3);
        WHEN OTHERS THEN
            -- 其他异常正常抛出
            RAISE;
    END;
END LOOP;
END;
/
注意事项
  • 如果当前用户没有DBMS_SESSION.SLEEP的执行权限,可以替换为DBMS_LOCK.SLEEP,使用前需要给当前用户授予EXECUTE ON DBMS_LOCK权限。
  • 可以根据下载文件的大小调整等待时长,文件越大等待时长可适当调大,减少无效轮询次数。

内容的提问来源于stack exchange,提问作者Hammad Mansoor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:36:01