2012-04-24 10 views
1

Jenaアダプタを使用してデータをOracle RDF triplestoreに保存するJavaアプリケーションを実行しています。 Oracleのバージョンは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文字を超えると発生します。長さならば、文字列 - CLOB:

RDF_VALUE $表:

LONG_VALUE、それは誤りで、テーブル/列を指定しませんが、Oracleのドキュメントは、内部で自動的にこれを処理することになっていますことを示唆していますの語彙値が4000バイトを超えています。そうでない場合、この列はNULL値を持ちます。

VALUE_NAME:VARCHAR2(4000) - これは計算列です。字句値の長さが4000バイト以下の場合、この列の値はVNAME_PREFIX列とVNAME_SUFFIX列の値の連結になります。

一部のユーザーはこのエラーは表示されませんが、十分な大きさのものを保存しようとしていないユーザーもいます。私たちは、ユーザーのトリプルストアモデルをクリアしようとしました。これは数日間働いていたようですが、その後戻ってきました。

誰でもこのデバッグを開始する場所についてのヒントはありますか?ありがとうございました。

+2

オラクルのRDFストアのバグだと思います。 – cygri

+0

T4CTTIoer.javaソースがないと思いますか? ;-) – castagna

+0

graph.getBulkUpdateHandler()。addInBulk(...)を使用していますか? –

答えて

3

私は数年前に同じ問題を抱えていました。どのバージョンのjena-adapterを使用していますか?問題を解決したパッチがあります。オラクルサポートでまだ利用可能かどうか試してみてください。これは私が受け取った命令である。そして、パッチのパッチ検索パネルの&更新]タブ

  • をクリックし、
    1. ログインsupport.oracle.comに、テキストボックスの後で[検索]タブ、タイプ10186312をクリックしてくださいパッチ名または番号ボタン。
    2. [検索]ボタンをクリックします。一致するものが1つ返されます。
    3. パッチ名10186312をクリックし、次にダウンロードをクリックします。
  • 関連する問題