Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 "Snapshot too old" или "XML parsing failed" на xml из queue  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Для демонстрации нужна очередь с queue_payload_type => 'SYS.XMLTYPE', скажем, REQUEST_QUEUE. Вот такой скриптец:

var size number

declare
  MY_QUEUE_NAME VARCHAR2(30) := 'REQUEST_QUEUE'; 
  CORRELATION   VARCHAR2(128) := to_char(sysdate,'ddmmrrhh24miss'); 

  lCursor       sys_refcursor;
  lBigXml       xmltype;

  lMsgProp dbms_aq.message_properties_t;
  lEnqOpt  dbms_aq.enqueue_options_t;
  lDeqOpt  dbms_aq.dequeue_options_t;
  lMsgid   raw(16);

begin

-- генерится большой документ
  open lCursor for
    SELECT * FROM ALL_OBJECTS WHERE ROWNUM <= :SIZE;

  lBigXml := xmltype(lCursor);
  close lCursor;

-- корреляция выставляется, чтобы не нарываться на предыдущие ошибки. 
-- Не очень чистое решение, не жмите кнопки слишком быстро :-)
  lMsgProp.correlation := CORRELATION;
  lEnqOpt.VISIBILITY   := dbms_aq.IMMEDIATE;

  dbms_aq.enqueue(queue_name         => MY_QUEUE_NAME,
                  enqueue_options    => lEnqOpt,
                  message_properties => lMsgProp,
                  payload            => lBigXml,
                  msgid              => lMsgid);

  lDeqOpt.wait        := DBMS_AQ.FOREVER;
  lDeqOpt.correlation := CORRELATION;
  lDeqOpt.navigation  := dbms_aq.FIRST_MESSAGE;
  lMsgId              := null;

  dbms_aq.dequeue(queue_name         => MY_QUEUE_NAME,
                  dequeue_options    => lDeqOpt,
                  message_properties => lMsgProp,
                  payload            => lBigXml,
                  msgid              => lMsgId);


  dbms_output.put_line(lBigXml.extract('//ROWSET/ROW[1]/OBJECT_NAME/text()').getStringVal());
end;

Мои результаты работы такие: при :size<125 работает, 125 - 149 выдает ora-31011(XML parsing failed), :size>=150 выдает ora-22924(Snapshot too old).
База Oracle EE 9.2.0.5.0

Кто-то что-то подобное встречал? Как с этим бороться?
21 ноя 06, 14:04    [3429713]     Ответить | Цитировать Сообщить модератору
 Re: "Snapshot too old" или "XML parsing failed" на xml из queue  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7127
$ oerr ora 22924
22924, 00000, "snapshot too old"
// *Cause: The version of the LOB value needed for the consistent read was
// already overwritten by another writer.
// *Action: Use a larger version pool.

---------------------
Встретил как то раз Волк девочку Машу и умер...
...
soap: vlejnin mail ру
21 ноя 06, 14:50    [3430046]     Ответить | Цитировать Сообщить модератору
 Re: "Snapshot too old" или "XML parsing failed" на xml из queue  [new]
Сэмка
Member

Откуда:
Сообщений: 372
А почему тогда это проявляется только на документах из очереди? Перед помещением в очередь все хорошо. На металинке есть несколько подобных рипортов, но все они ушли в iTAR-ы, и мне, видать, придется.
21 ноя 06, 15:02    [3430124]     Ответить | Цитировать Сообщить модератору
 Re: "Snapshot too old" или "XML parsing failed" на xml из queue  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Так что, никто не передает большие документы через AQ?

"Граница" проходит где-то на уровне 48К, странная цифра, ни с чем больше у меня не ассоциируется. Хотя, возможно, я не совсем правильно считаю длину - length(lBigXml.getClobVal()), документ может храниться без форматирования, тогда похоже на 32К. Но что делать, так и не понятно.
21 ноя 06, 15:52    [3430621]     Ответить | Цитировать Сообщить модератору
 Re: "Snapshot too old" или "XML parsing failed" на xml из queue  [new]
Сэмка
Member

Откуда:
Сообщений: 372
Вылечилось апгрейдом до 9.2.0.6
22 ноя 06, 17:40    [3437323]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить