2013-12-22 3 views
0

oracle 9i의 xmldb 기능을 사용하여 큰 xml 파일을 작성하는 중 문제가 발생했습니다. 쿼리는 약 3 만 라인을 생성하고, 오라클은 다음과 같은 오류 메시지로 응답 : 경고 로그에서oracle xmldb를 사용하여 큰 xmlfile을 작성할 때 프로세스 메모리 오류가 발생했습니다.

ERROR at line 1: 
ORA-04030: out of process memory when trying to allocate 4012 bytes 
(qmxtgCreateBuf,kghsseg: kolaslCreateCtx) 
ORA-06512: at "....", line 1154 
ORA-06512: at line 1 
ERROR: 
ORA-00600: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], 
[%s], [%s] 

: 우리는 프로세스 메모리를 증가하려고했습니다

Errors in file d:/db/admin/acc1/udump/acc1_ora_8112.trc: 
ORA-00600: internal error code, arguments: [729], [104], [space leak], [], [], [], [], [] 

하지만 거의 없습니다 어떤 효과.

오라클은 XML (A '게으른 표현'같은/연속 기입 스위치 또는 뭔가를 적은 메모리를 사용하게하는 방법이 있나요? 당신은 BULK 운영 및 LIMITED PAGED 쿼리를 사용하여 프로세스에 의해 사용되는 메모리를 관리 할 필요가

+0

이 질문을 dba.stackexchange.com에 게시 해보십시오. 구성 문제 일 수 있기 때문에이 말을하겠습니다. –

+0

[비슷한 질문에 대한 내 답변] (http://stackoverflow.com/a/19390910/)을 참조하십시오. –

답변

2

예를 들어
:. 파일 크기가 OS 파일 크기 제한을 초과 할 때, 여러 파일을 만들어야 할 경우에

DECLARE 
    CURSOR c_customer IS 
    SELECT CUSTOMER.id, CUSTOMER.name from CUSTOMER; 
    TYPE customer_array_type IS TABLE OF c_customer%ROWTYPE INDEX BY BINARY_INTEGER; 
    customer_array customer_array_type; 
    fetch_size  NUMBER := 5000; -- scale the value to manage memory 
BEGIN 
    -- Open(create) XML file 
    OPEN c_customer; 
    loop 
    FETCH c_customer BULK COLLECT 
     INTO customer_array LIMIT fetch_size; 
    FOR i IN 1 .. customer_array.COUNT LOOP 
     null; -- Add XML nodes 
    END LOOP; 
    EXIT WHEN c_customer%NOTFOUND; 
    END LOOP; 
    CLOSE c_customer; 
    -- Close(flush) XML file 
End;