2012-04-24 2 views
1

Мы запускаем приложение Java, которое сохраняет данные в триплесторе Oracle RDF с помощью адаптера Jena. Наша версия 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 символов. Хотя она не определяет таблицу/столбец ошибки в документации Oracle предполагает, что он должен автоматически справиться с этим внутренне:

RDF_VALUE $ Таблица:

LONG_VALUE: CLOB - строка символов, если длина лексического значения больше 4000 байтов. В противном случае этот столбец имеет нулевое значение.

VALUE_NAME: VARCHAR2 (4000) - это вычисленный столбец. Если длина лексического значения составляет 4000 байт или меньше, значение этого столбца представляет собой конкатенацию значений столбца VNAME_PREFIX и столбца VNAME_SUFFIX.

Некоторые пользователи не видят эту ошибку, хотя, возможно, они просто не пытались сэкономить что-то достаточно большое. Мы попробовали очистить модель триппоста пользователя, которая, казалось, работала пару дней, но затем вернулась.

Есть ли у кого-нибудь какие-либо намеки о том, с чего начать отлаживать это? Спасибо.

+2

Я предполагаю, что это ошибка в магазине RDF от Oracle. – cygri

+0

Я бы тоже предположил, что у вас нет источника T4CTTIoer.java, верно? ;-) – castagna

+0

Вы используете graph.getBulkUpdateHandler(). AddInBulk (...)? –

ответ

3

У меня была такая же проблема пару лет назад. Какую версию jena-адаптера вы используете? У меня есть патч, который решил проблему, возможно, вы можете попробовать и посмотреть, по-прежнему ли она доступна при поддержке oracle. Это поручение я получил:

  1. Войти в support.oracle.com,
  2. нажмите Патчи & Updates вкладку
  3. в Patch панели поиска, выберите вкладку Поиск, введите 10186312 в текстовом поле после Название патча или номер.
  4. Нажмите кнопку поиска. Он должен вернуть одно совпадение.
  5. Нажмите на имя патча 10186312, затем нажмите «Загрузить».