1

Jenaアダプタを使用してデータをOracleRDFトリプルストアに保存するJavaアプリケーションを実行しています。Oracleのバージョンは11gR2です。

最近、大きなトリプルの保存中にこのエラーがポップアップするようになりました。

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文字を超える場合に発生します。エラーではテーブル/列が指定されていませんが、Oracleのドキュメントでは、これを内部で自動的に処理することになっていると示されています。

RDF_VALUE $テーブル:

LONG_VALUE:CLOB-字句値の長さが4000バイトより大きい場合の文字ストリング。それ以外の場合、この列の値はnullです。

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

一部のユーザーにはこのエラーが表示されませんが、十分な大きさのデータを保存しようとしていない可能性があります。ユーザーのトリプルストアモデルをクリアしようとしました。これは数日間は機能しているように見えましたが、その後戻ってきました。

誰かがこれのデバッグをどこから始めるべきかについて何かヒントがありますか?ありがとうございました。

4

1 に答える 1

3

私は数年前に同じ問題を抱えていました。どのバージョンのjena-adapterを使用していますか?私は問題を解決するパッチを手に入れました、多分あなたはそれがまだオラクルサポートで利用可能であるかどうか確かめることができます。これは私が受けた指示です:

  1. support.oracle.comにログインし、
  2. 次に、[パッチと更新]タブをクリックします
  3. [パッチ検索]パネルで、[検索]タブをクリックし、[パッチ名または番号]ボタンの後のテキストボックスに10186312と入力します。
  4. [検索]ボタンをクリックします。1つの一致を返す必要があります。
  5. パッチ名10186312をクリックしてから、[ダウンロード]をクリックします。
于 2012-10-09T08:43:19.703 に答える