调用dbms_cloud.export_data导出CSV至AWS S3时遇ORA-20000错误求助
问题场景
我首次尝试将数据以CSV格式导出至已有的AWS S3存储桶,执行了以下SQL语句:
call dbms_cloud.export_data( credential_name => 'cred', file_uri_list => 'https://s3.us-east-2.amazonaws.com/bucket/test/object.csv', format => json_object('type' value 'csv', 'compression' value 'gzip'), query => 'select * from table' );
触发如下错误:
ERROR at line 1: ORA-20000: Export operation is only allowed for Oracle Datapump ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 1181 ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 3943 ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 3962 ORA-06512: at line 1
但使用JSON格式且关闭压缩时可正常执行,请问为何CSV格式无法工作?
问题原因与解决办法
这个报错的核心原因是DBMS_CLOUD.EXPORT_DATA的compression参数仅支持Oracle Datapump格式的导出。当你指定CSV类型同时开启gzip压缩时,Oracle会尝试调用仅适用于Datapump的压缩逻辑,而CSV不属于Datapump格式,因此触发了“仅允许Oracle Datapump导出”的限制错误。
而你用JSON格式且关闭压缩时,属于DBMS_CLOUD直接支持的纯文本格式导出场景,所以可以正常执行。
如果需要导出压缩后的CSV文件,推荐两种可行方案:
- 方案1:先导出未压缩的CSV到S3,再通过AWS Lambda等工具对文件进行gzip压缩;
- 方案2:改用Oracle Datapump格式导出(将
format中的type设为datapump),该格式天然支持压缩,之后若需要CSV格式,可再将Datapump文件转换为CSV。
内容的提问来源于stack exchange,提问作者AC'
相关产品推荐
相关产品推荐

