2016-09-23 3 views
0

Oracle Database 12c (12.1.0.1.0 64Bit)를 사용하고 있습니다. 얼마 전 필자는 pl/sql에 여러 개의 XML 파일을 가져 오기위한 소프트웨어를 작성했습니다. 이것은 아주 잘 작동하는 것처럼 보였지만 몇 가지 문제가 발생했습니다. 일부 파일의 크기는 5 ~ 25MB이므로 가져 오는 데 1 ~ 2 분이 걸립니다. 그러나 일부 파일의 경우 가져 오기가 끝나지 않고 가져 오기 프로세스를 중지 할 수도 없으므로 서버를 다시 시작해야합니다.xmltable에 삽입 할 때 매달린 프로세스

INSERT INTO SB_BUFFER_XML VALUES (XMLType(bfilename('XMLDATA', '840.xml'), nls_charset_id('AL32UTF8'))); 

테이블 SB_BUFFER_XML 로컬 directoy에 형 XMLTABLE 및 XMLDATA 점이다 :

나는 다음 행으로 문제를 추적. 명령은 840.xml 파일로 끝나지 않습니다. 그러나 파일 613.xml로 끝납니다. 모두 크기가 비슷의 613.xml이 더 큰 것입니다 :

  • 840.xml : 6.905 KB

그래서 내가 찾고 두 파일을 비교하기 시작 :

  • 이 613.xml 6.329 KB 문제 :
    • 두 파일

      은 BOM 모두 동일한 구조를 포함
    • 없이 UTF-8이지만, 다른 데이터
    • ,
    • 는 XML 구문 검사가 완료 성공
    • 도 두 파일이 시작
    • 두 파일이 동일한 버전에서 동일한 시스템에서 만든 같은 문자 (그래서 프로그래머 숨겨진 BOM 또는 무언가) 마무리 16 진수 편집기에서

    그래서 나는 복잡성을 줄이기 위해 840.xml에서 콘텐츠를 삭제하기 시작했으며 삭제 한 내용이 중요하지 않음을 알았습니다. 특정 양의 데이터를 삭제하자마자 주석이더라도이 파일의 임포트는 완벽하게 작동합니다.

    이상한 점은 동일한 시스템에서 동일한 구조의 xml 파일을 이미 가져온 파일 크기가 20MB 이상이라는 것입니다.

    이 문제가 발생할 수있는 원인이나 다음에 확인할 수있는 것에 대해 알고 있습니까?

  • +0

    이것은 하나의 수수께끼입니다. 파일을 삭제하고 다시 만들려고 했습니까? 파일을 가져올 수있을 때 파일의 크기는 얼마입니까? –

    +0

    불행히도 소스 시스템에서는 xml 파일의 재생성을 허용하지 않으므로이를 시도 할 수 없습니다. 많은 사람들이 파일 크기의 하한값이 6.480.000 바이트라는 것을 알았습니다. 1 바이트 이상 가져 오기가 작동하지 않습니다. 예를 들어 6.506.276 바이트와 같이 파일을 훨씬 더 크게 만들면 잘 가져옵니다. – Timo

    +0

    두 파일이 같은 파일 시스템에 있습니까? 오라클이 새 파일 서버의 기본 프로토콜을 지원하지 않아 백업이 실패했다는 것을 알기 위해 오라클 지원을 통해 2 개월이 걸렸습니다.Windows에서 Oracle을 사용하고 UNC에서 로컬로 매핑 된 드라이브로 이동해야했습니다. 구체적인 답을 얻길 바랍니다. 그러나 도움을 줄 수 없다고 생각합니다. –

    답변

    0

    오라클은 우리의 문제를 재현하는 다음과 같은 버그가 우리를 지적 할 수 :

    Bug 22843562 - IMPORT OF A XML FILE WITH A COMMENT AT THE END FAILS WITH ORA-27163 
    

    이 버그는 12.2에서 고정됩니다. 12.1에서는 이전 파서를 활성화하려면이 해결 방법을 시도 할 수 있습니다 :

    ALTER SESSION SET EVENTS '31156 trace name context forever, level 0x400'; 
    

    버그 제목이 우리의 문제를 설명하지 않았지만

    가 해결 그럼에도 불구하고 우리를 위해 일했다.