2012-04-24 5 views
1

Jena 어댑터를 사용하여 Oracle RDF triplestore에 데이터를 저장하는 Java 애플리케이션을 실행하고 있습니다. 우리 오라클 버전은 11gR2입니다.트리플을 저장할 때 Oracle RDF 테이블에서 ORA-22835 오류가 발생합니다.

최근에는 큰 트리플을 저장하는 동안이 오류가 표시되었습니다.

ERROR http-bio-8080-exec-4 oracle.spatial.rdf.client.jena.GraphOracleSem: 
Could not add triple java.sql.SQLException: 
ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 5223, maximum: 4000) 
     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439) 
     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395) 
     at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802) 
     at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436) 
     at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) 
     at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521) 
     at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205) 
     at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008) 
     at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307) 
     at oracle.jdbc.driver.OraclePreparedStatement.sendBatch(OraclePreparedStatement.java:3753) 
     at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2112) 
     at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3444) 
     at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530) 
     at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350) 
     at oracle.spatial.rdf.client.jena.GraphOracleSem.performAdd(GraphOracleSem.java:3509) 
     at oracle.spatial.rdf.client.jena.OracleBulkUpdateHandler.add(OracleBulkUpdateHandler.java:1226) 
     at oracle.spatial.rdf.client.jena.OracleBulkUpdateHandler.addIterator(OracleBulkUpdateHandler.java:1257) 
     at oracle.spatial.rdf.client.jena.OracleBulkUpdateHandler.add(OracleBulkUpdateHandler.java:1278) 
     at oracle.spatial.rdf.client.jena.OracleBulkUpdateHandler.add(OracleBulkUpdateHandler.java:1268) 
     at com.hp.hpl.jena.sparql.modify.UpdateProcessorVisitor$1.exec(UpdateProcessorVisitor.java:51) 
     at com.hp.hpl.jena.sparql.modify.GraphStoreUtils.action(GraphStoreUtils.java:60) 
     at com.hp.hpl.jena.sparql.modify.UpdateProcessorVisitor.visit(UpdateProcessorVisitor.java:48) 
     at com.hp.hpl.jena.sparql.modify.op.UpdateInsertData.visit(UpdateInsertData.java:16) 
     at com.hp.hpl.jena.sparql.modify.UpdateProcessorMain.execute(UpdateProcessorMain.java:34) 
     at com.hp.hpl.jena.update.UpdateAction.execute(UpdateAction.java:253) 
     at com.hp.hpl.jena.update.UpdateAction.parseExecute(UpdateAction.java:176) 
     at com.hp.hpl.jena.update.UpdateAction.parseExecute(UpdateAction.java:143) 
     at com.hp.hpl.jena.update.UpdateAction.parseExecute(UpdateAction.java:105) 

오류 상태는 데이터 문자열이 4000자를 초과 할 때 발생합니다. 이 오류에 테이블/컬럼을 지정하지 않지만, 오라클 문서는 자동으로 내부적으로이 문제를 처리하기로했다 제안 :

RDF_VALUE $ 테이블 :

LONG_VALUE : CLOB - 문자 문자열 길이가있는 경우를 의 어휘 값이 4000Y이트보다.니다. 그렇지 않으면,이 컬럼은 널 값을가집니다.

VALUE_NAME : VARCHAR2 (4000) - 이것은 계산 열입니다. 어휘 값의 길이가 4000 바이트 이하이면이 열의 값은 VNAME_PREFIX 열과 VNAME_SUFFIX 열의 값을 연결합니다.

일부 사용자는이 오류가 표시되지 않지만 일부 사용자는 충분히 큰 것을 저장하려고 시도하지 않았을 수 있습니다. 우리는 사용자의 triplestore 모델을 지우려고 시도했습니다. 몇 일 동안 작동 한 것처럼 보였지만 다시 돌아 왔습니다.

아무에게도 디버깅을 시작할 위치에 대한 힌트가 있습니까? 고맙습니다.

+2

오라클의 RDF 저장소에 버그가 있다고 생각합니다. – cygri

+0

T4CTTIoer.java 소스가없는 것 같아요? ;-) – castagna

+0

graph.getBulkUpdateHandler(). addInBulk (...)을 사용하고 있습니까? –

답변

3

나는 몇 년 전에 똑같은 문제가있었습니다. 어떤 버전의 jena-adapter를 사용하고 있습니까? 문제점을 해결 한 패치가 있는데, 오라클 지원에서 여전히 사용 가능한지 알아볼 수 있습니다. 이것은 내가받은 명령이다 : 다음 패치에 패치 검색 패널에서 & 업데이트 탭

  • 을 클릭
    1. 로그인 support.oracle.com에 텍스트 상자 후 검색 탭, 형식 10186312를 클릭 패치 이름 또는 번호 단추.
    2. 검색 버튼을 클릭하십시오. 하나의 일치 항목을 반환해야합니다.
    3. 패치 이름 10186312를 클릭 한 다음 다운로드를 클릭하십시오.