我需要从我们的Oracle 11g(11.2.0.3)系统导出BLOB.该过程适用于<32,767字节的BLOB(JPG照片).我可以使用dbms_log.read和utl_file.put_raw在5秒内将约4000张照片导出到数据库服务器上的本地目录.如果文件超过读缓冲区的32,767字节限制,那么这就是性能问题的开始.我已经看过关于确切性能问题的类似帖子,但所提供的解决方案已经被研究过但没有成功.基于监视工具,CPU,I/O和内存在导出期间不会受到压力.我试图理解为什么较大的BLOB(所有它们都在100K以下)必须以32,767字节增量拼接在一起,与32,767字节以下的BLOB相比,具有如此巨大的输出缓慢.导出大型BLOB时,每个文件最多可能需要15秒才能导出.
有没有人经历过BLOB导出缓慢,文件大于32,767字节?
DECLARE
CURSOR cur_photo IS
select substr(c.custnum, -7, length(c.custnum)) custnum,
cp.cust_id,
cp.photo
from customer c
inner join customer_photo cp
on c.cust_id = cp.cust_id
inner join customer_def_grp_value cdv
on c.cust_id = cdv.cust_id;
select_sql varchar2(225);
l_file UTL_FILE.FILE_TYPE;
l_buffer RAW(32767);
l_amount PLS_INTEGER := 32767;
l_pos PLS_INTEGER := 1;
l_blob BLOB;
l_blob_len PLS_INTEGER;
l_filename varchar2(225);
error_number varchar2(225);
error_message varchar2(225);
BEGIN
--dbms_output.put_line('Starting at: ' || to_char(systimestamp, 'DD-MON-YYYY HH:MI:SS.FF6'));
--DBMS_OUTPUT.ENABLE (buffer_size => NULL);
FOR custphoto IN cur_photo LOOP
--dbms_output.put_line('In the loop ' …Run Code Online (Sandbox Code Playgroud)