Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 执行即时“查询”ORA-04030:尝试分配56字节时进程内存不足(callheap,qerrmbv[]:qerrmObnd)_Sql_Oracle_Plsql_Sqlplus - Fatal编程技术网

Sql 执行即时“查询”ORA-04030:尝试分配56字节时进程内存不足(callheap,qerrmbv[]:qerrmObnd)

Sql 执行即时“查询”ORA-04030:尝试分配56字节时进程内存不足(callheap,qerrmbv[]:qerrmObnd),sql,oracle,plsql,sqlplus,Sql,Oracle,Plsql,Sqlplus,我试图在sqlplus中运行一个脚本,通过执行立即数填充一个名为“ccb_check”的表,但我得到了“ORA-04030:在尝试分配56字节的调用堆时,进程内存不足,qerrmbv[]:qerrmObnd” set serveroutput on declare begin EXECUTE IMMEDIATE 'INSERT INTO ccb_check SELECT /*+DRIVING_SITE(A)*/ /*+DRIVING_SITE(B)*/ /*+DRIVING_SITE(C)

我试图在sqlplus中运行一个脚本,通过执行立即数填充一个名为“ccb_check”的表,但我得到了“ORA-04030:在尝试分配56字节的调用堆时,进程内存不足,qerrmbv[]:qerrmObnd”

set serveroutput on
declare

begin

EXECUTE IMMEDIATE 'INSERT INTO  ccb_check
SELECT
/*+DRIVING_SITE(A)*/
/*+DRIVING_SITE(B)*/
/*+DRIVING_SITE(C)*/
/*+DRIVING_SITE(D)*/
/*+DRIVING_SITE(E)*/
/*+DRIVING_SITE(F)*/
/*+DRIVING_SITE(G)*/
/*+DRIVING_SITE(H)*/
/*+DRIVING_SITE(I)*/
/*+DRIVING_SITE(J)*/
/*+DRIVING_SITE(K)*/
/*+DRIVING_SITE(L)*/
/*+DRIVING_SITE(M)*/
DISTINCT
          C.ADHOC_CHAR_VAL AS BANCO,
          M.HOMERE_ID,
          D.CHAR_VAL AS TITRE_RUBRIQUE,
          A.CHAR_VAL AS STITRE_RUBRIQUE,
          E.CHAR_VAL AS BENEFICIAIRE,
          F.TOS_ID AS ID_TOS,
          B.DESCR AS DESCR_TOS,
          B.SA_ID AS ID_EDC_MODELE,
          F.SA_ID AS ID_EDC_CLIENT,
          G.ACCT_ID AS ID_COMPTE_CLIENT,
          G.START_DT AS DT_DEB_EDC_CLIENT,
          G.END_DT AS DT_FIN_EDC_CLIENT,
          I.DESCR_TMPLT AS LIBELLE_FACTURE,
          I.RS_CD,
          K.MIG_ID_COMPTE_CLIENT,
          CASE
             WHEN J.RS_CD IN (SELECT RS_CD
                                FROM CI_RC@LDE_CIBLE
                               WHERE BF_CD LIKE ''%ABO%'')
             THEN
                ''DIAMETRE COMPTEUR''
             WHEN J.RS_CD IN (SELECT RS_CD
                                FROM CI_RC@LDE_CIBLE
                               WHERE BF_CD LIKE ''%TR%'')
             THEN
                ''TRANCHE''
             ELSE
                ''UNIQUE''
          END
             AS TYPE_TARIF,
          (SELECT DESCR
             FROM CI_LOOKUP@LDE_CIBLE
            WHERE     FIELD_VALUE = G.SA_STATUS_FLG
                  AND UPPER (field_name) LIKE ''%SA_STATUS_FLG%''
                  AND TRIM (language_cd) = ''FRA'')
             Etat_EDC, sysdate DD
     FROM CI_TOS@LDE_CIBLE B,
          CI_UA_CHAR@LDE_CIBLE C,
                   CI_TOS_SA@LDE_CIBLE F
                LEFT JOIN
                   CI_TOS_CHAR@LDE_CIBLE A
                ON F.TOS_ID = A.TOS_ID AND A.CHAR_TYPE_CD = ''STITRE-R''
             LEFT JOIN
                CI_TOS_CHAR@LDE_CIBLE D
             ON F.TOS_ID = D.TOS_ID AND D.CHAR_TYPE_CD = ''TITRE-R''
          LEFT JOIN
             CI_TOS_CHAR@LDE_CIBLE E
          ON F.TOS_ID = E.TOS_ID AND E.CHAR_TYPE_CD = ''BENF-TYP'',
          CI_SA@LDE_CIBLE G,
          CI_SA_RS_HIST@LDE_CIBLE H,
          CI_RV_L@LDE_CIBLE I,
          CI_RC@LDE_CIBLE J,
          RN_ACCT@LDE_CIBLE K,
          CI_TOS_CHAR@LDE_CIBLE L,
          CM_RUBRIQUE_TOS@LDE_CIBLE M
    WHERE     F.TOS_ID = B.TOS_ID
          AND B.UA_ID = C.UA_ID
          AND F.SA_ID = G.SA_ID
          AND F.SA_ID = H.SA_ID
          AND H.RS_CD = I.RS_CD
          AND I.RS_CD = J.RS_CD
          AND F.TOS_ID = L.TOS_ID
          AND TRIM (F.TOS_ID) = TRIM (M.TOS_ID)
          AND G.ACCT_ID = K.CCB_ID_COMPTE_CLIENT
          AND I.LANGUAGE_CD = ''FRA''
          AND L.CHAR_TYPE_CD = ''NAT-SERV''
          AND L.CHAR_VAL != ''FRAIS''
          AND C.CHAR_TYPE_CD = ''BANCO''
';
EXCEPTION
WHEN others THEN
ROLLBACK; --to Savepoint restore_ccb;
DBMS_OUTPUT.PUT_LINE ('restore insert INS_CCB, SQLCODE : ' ||SQLCODE||' -ERROR- '||SQLERRM);
end;
/

select * from v$pgastat;

aggregate PGA target parameter  373293056   bytes
aggregate PGA auto target   240648192   bytes
global memory bound 74657792    bytes
total PGA inuse 122972160   bytes
total PGA allocated 185925632   bytes
maximum PGA allocated   1368005632  bytes
total freeable PGA memory   20512768    bytes
process count   68  
max processes count 299 
PGA memory freed back to OS 2705889689600   bytes
total PGA used for auto workareas   22077440    bytes
maximum PGA used for auto workareas 517334016   bytes
total PGA used for manual workareas 0   bytes
maximum PGA used for manual workareas   1628160 bytes
over allocation count   2418    
bytes processed 4274855246848   bytes
extra bytes read/written    498305049600    bytes
cache hit percentage    89,56   percent
recompute count (total) 2473622
我需要你的帮助,事实上,当我删除“executeimmediate”时,查询工作正常,所以我想知道是否有任何方法可以使用executeimmediate语句运行脚本


这个查询实际上返回了超过100万行。

因为我看到您的所有表都是远程的。我认为在类似情况下,根据上次的调优经验,更有效的方法是在远程数据库上创建视图,并只查询必要的列。这种方法将减少发送的数据量。

此查询返回多少行?我觉得您需要为Oracle实例分配更多内存。因此,最好在dba.stackexchange.com上问这个问题。