Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Ошибка выполнения запроса  [new]
demon1992
Member

Откуда:
Сообщений: 78
В общем обновил на днях версию сервера с 2.5.8 до релизной 2.5.9, после этого началась проблема с одним запросом, он перестал работать через приложение (приложение работает с базой через jaybird), но из ibexpert работает без проблем.
Запрос возвращает текстовый блоб(xml), но если размер блоба получается небольшой, то через приложение так же отрабатывает без ошибки.
Текст ошибки:
org.firebirdsql.jdbc.FBSQLException: Resource Exception. database file appears corrupt (/tmp/fb_table_EZClje); wrong page type; page 0 is of wrong type (expected 5, found 0) [SQLState:XX001, ISC error code:335544335]
Reason: database file appears corrupt (/tmp/fb_table_EZClje); wrong page type; page 0 is of wrong type (expected 5, found 0) [SQLState:XX001, ISC error code:335544335], error code: HY000
Reason: database file appears corrupt (/tmp/fb_table_EZClje); wrong page type; page 0 is of wrong type (expected 5, found 0) [SQLState:XX001, ISC error code:335544335]
Reason: database file appears corrupt (/tmp/fb_table_EZClje); wrong page type; page 0 is of wrong type (expected 5, found 0) [SQLState:XX001, ISC error code:335544335] 

FB 2.5.9 Classic Linux

Сообщение было отредактировано: 8 июн 20, 09:45
8 июн 20, 09:44    [22147297]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
AltHasp
Member

Откуда:
Сообщений: 147
demon1992,

А что мешает откатиться назад ?
8 июн 20, 09:52    [22147303]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
demon1992
Member

Откуда:
Сообщений: 78
AltHasp,
Да в принципе ничего не мешает, просто хочется разобраться в проблеме.
8 июн 20, 09:55    [22147304]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
demon1992,

небольшой воспроизводимый пример был бы очень кстати
8 июн 20, 10:39    [22147328]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
demon1992
Member

Откуда:
Сообщений: 78
hvlad,

Постараюсь придумать что нибудь.

В общем работу запроса я исправил. Было как, записи вставлялись во временную таблицу (delete row), поле в таблице varchar(32765), после была обычная склейка select list().
Запрос падал на коммите.
Переделал поле в таблице на blob, ошибка исчезла.
8 июн 20, 10:51    [22147338]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
"wrong page type" достаточно серьёзная ошибка, чтобы её игнорировать.
Даже если она не совсем настоящая, как в данном случае.
Хотелось бы это исправить.

Временая таблица - GTT ON COMMIT DELETE ROWS ?
Блоб читается до коммита ?
Блоб закрывается после чтения - до коммита ?
Вставка записей и LIST из них - отдельными запросами или одним PSQL блоком (процедурой) ?
8 июн 20, 10:58    [22147345]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
И ещё один вопрос - commit обычный или retaining ?
8 июн 20, 11:04    [22147348]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
demon1992
Member

Откуда:
Сообщений: 78
hvlad
Временая таблица - GTT ON COMMIT DELETE ROWS ?

да
hvlad
Блоб читается до коммита ?
Блоб закрывается после чтения - до коммита ?

метод работает так:
Connection conn;
Statement statement = null;
ResultSet resultSet = null;
statement = conn.createStatement();
resultSet = executeStatement(sql, statement);
conn.commit();
далее работаем с полученным датасетом (т.е. в данном случае это блоб)
потом resultSet.close(); statement.close(); conn.close();

hvlad
Вставка записей и LIST из них - отдельными запросами или одним PSQL блоком (процедурой) ?

Вставка и list одним блоком, но этот блок находится в процедуре, которая вызывается из основной процедуры.

hvlad
И ещё один вопрос - commit обычный или retaining ?

Коммит обычный

Сообщение было отредактировано: 8 июн 20, 11:58
8 июн 20, 12:00    [22147368]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
demon1992,

если содержимое блоба не вычитывается в резултсет при работе executeStatement, то работать с blobId после commit плохая идея. BLOB уже может не существовать на этот момент
8 июн 20, 12:07    [22147372]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

Да и сами result set-ы при коммите обычно закрываются.

Posted via ActualForum NNTP Server 1.5

8 июн 20, 12:23    [22147381]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
demon1992
метод работает так:
Спасибо, уже что-то.
Денис уже сказал, что работать с блобом после коммита - плохая идея.
Но должна возникать ошибка о кривом блобе, не wrong page type.
Хотя, до этого мы возможно просто не дошли, если облом на коммите.

Уточним ещё пару деталей:
результат LIST - что с ним происходит ?
Он передаётся клиенту как есть, или этот блоб как-то ещё "меняется" в процедурах ?
Вставляется в таблицу ? Если да, то в какую - GTT или постоянную ?
Ошибка точно возникает при commit ? Не при попытке работать с блобом ?
Триггеров на commit нет ?
8 июн 20, 12:24    [22147382]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
Dimitry Sibiryakov
Да и сами result set-ы при коммите обычно закрываются.
Если резалтсет не большой, то он мог быть полностью сфетчен клиентом до коммита.
А вот насчёт полного фетча и кеширования блобов при этом - сильно сомневаюсь.
8 июн 20, 12:25    [22147385]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
demon1992
если размер блоба получается небольшой
Это сколько ?
8 июн 20, 12:25    [22147386]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

hvlad
Но должна возникать ошибка о кривом блобе, не wrong page type.

А как определяется валидность персистентного id-а? Не пытается ли при этом читаться
страница, вычисленная из него?..

Меня в сообщении об ошибке ещё смущает, что страница 0 ожидается типа 5, а не 1. Возможно,
она пытается прочитаться по цепочке ссылок, одна из которых которая уже обнулилась.

Posted via ActualForum NNTP Server 1.5

8 июн 20, 12:33    [22147394]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Dimitry Sibiryakov
Да и сами result set-ы при коммите обычно закрываются.


у него Java. Там это не обязательно так
8 июн 20, 12:35    [22147395]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
demon1992
Member

Откуда:
Сообщений: 78
hvlad
Уточним ещё пару деталей:
результат LIST - что с ним происходит ?
Он передаётся клиенту как есть, или этот блоб как-то ещё "меняется" в процедурах ?
Вставляется в таблицу ? Если да, то в какую - GTT или постоянную ?
Ошибка точно возникает при commit ? Не при попытке работать с блобом ?
Триггеров на commit нет ?

На клиенте результат засовывается в xml файл и зипуется, т.е. по факту с полученный блоб уже не меняется.
В таблицу вставляется:
for select blob from proc_name
into :data_blob 
do begin 
  suspend;
  insert into tbl(blob)
  values(:data_blob);
end

Забыл сразу уточнить, что процедура возвращает две строки (два блоба).
Таблица постоянная. Триггеров на коммит нет.

hvlad
demon1992
если размер блоба получается небольшой
Это сколько ?

на 400кб например, проблемы нет.
8 июн 20, 12:40    [22147399]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
demon1992
Member

Откуда:
Сообщений: 78
hvlad

Ошибка точно возникает при commit ? Не при попытке работать с блобом ?

2020-06-08T12:44:51.2760 (29300:0x7fb0703b4978) EXECUTE_STATEMENT_FINISH
    DB (ATT_564470, USER:NONE, UTF8, TCPv4:127.0.0.1/45052)
    srv.poolId=87474882-7b82-43a7-aa11-093b299424a7:0
        (TRA_34927879, READ_COMMITTED | REC_VERSION | WAIT | READ_WRITE)

Statement 18219404:
-------------------------------------------------------------------------------
select * from PROC_NAME ()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN ()
2 records fetched
  44378 ms, 60994 read(s), 14191 write(s), 4241167 fetch(es), 153058 mark(s)
2020-06-08T12:44:51.5580 (29300:0x7fb0703b4978) FAILED COMMIT_TRANSACTION
    DB (ATT_564470, USER:NONE, UTF8, TCPv4:127.0.0.1/45052)
    srv.poolId=87474882-7b82-43a7-aa11-093b299424a7:0
        (TRA_34927879, READ_COMMITTED | REC_VERSION | WAIT | READ_WRITE)
      2 ms, 66 read(s), 1 write(s), 1604 fetch(es), 1541 mark(s)

2020-06-08T12:44:51.5610 (29300:0x7fb0703b4978) ROLLBACK_TRANSACTION
    DB (ATT_564470, USER:NONE, UTF8, TCPv4:127.0.0.1/45052)
    srv.poolId=87474882-7b82-43a7-aa11-093b299424a7:0
        (TRA_34927879, READ_COMMITTED | REC_VERSION | WAIT | READ_WRITE)
      0 ms, 1 read(s), 1 write(s), 1 fetch(es), 1 mark(s)

2020-06-08T12:45:03.9710 (29326:0x7f56a20e7978) DETACH_DATABASE
    DB (ATT_564472, USER:NONE, UTF8, TCPv4:127.0.0.1/45097)
    srv.poolId=87474882-7b82-43a7-aa11-093b299424a7:0


Сообщение было отредактировано: 8 июн 20, 12:49
8 июн 20, 12:49    [22147403]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

Симонов Денис
у него Java. Там это не обязательно так

Оно, конечно, так, но объём работы, необходимый для поддержки такого режима, довольно
велик, а вероятность глюков на этом пути значительна. Поэтому, например, Арефьев так не
делает. Хотя Марк, конечно, может.

Posted via ActualForum NNTP Server 1.5

8 июн 20, 12:49    [22147405]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
Dimitry Sibiryakov
А как определяется валидность персистентного id-а?
А где ты нашёл персистентный id ? Я его пока что не вижу.
Если вдруг окажется что блоб из LIST'а таки куда-то вставлен, и наружу выдан именно этот блоб - то тогда может быть.
Но всё равно - ошибка на коммите, а не при использовании блоба клиентом.


Dimitry Sibiryakov
Меня в сообщении об ошибке ещё смущает, что страница 0 ожидается типа 5, а не 1
При чём тут 1 ?
Где-то в структурах в памяти есть (или откуда-то вычисляется) ссылка на DP с номером 0.
Во временном файле с данными GTT стр-ца 0 не является header'ом, она не используется
Отсюда сообщение об ошибке.
8 июн 20, 13:21    [22147429]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
demon1992
В таблицу вставляется
...
Забыл сразу уточнить, что процедура возвращает две строки (два блоба).
Таблица постоянная.
Тут речь о том блобе, который вернул LIST ? Его вставляют в постоянную таблицу ?
А что возвращается клиенту ?
Вот это вот :data_blob, или что-то другое ?

demon1992
на 400кб например, проблемы нет.
Всё интереснее и интереснее.
Боюсь, воспроизводимый пример всё же понадобится.
8 июн 20, 13:26    [22147431]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
demon1992
srv.poolId=87474882-7b82-43a7-aa11-093b299424a7:0
Что это ? Имя БД ?
8 июн 20, 13:28    [22147432]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
Симонов Денис
Dimitry Sibiryakov
Да и сами result set-ы при коммите обычно закрываются.


у него Java. Там это не обязательно так
Серверу всё равно :)
8 июн 20, 13:30    [22147435]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

hvlad
Во временном файле с данными GTT стр-ца 0 не является header'ом

Эва... У меня откуда-то застряло в голове, что файлы временных таблиц имеют точно такую же
структуру, как база. Ну, спишем на склероз.

Posted via ActualForum NNTP Server 1.5

8 июн 20, 13:37    [22147442]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
hvlad
Member

Откуда:
Сообщений: 10954
Dimitry Sibiryakov
файлы временных таблиц имеют точно такую же
структуру, как база.
Имеют. И что ?
8 июн 20, 13:38    [22147444]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка выполнения запроса  [new]
demon1992
Member

Откуда:
Сообщений: 78
hvlad
Тут речь о том блобе, который вернул LIST ? Его вставляют в постоянную таблицу ?
А что возвращается клиенту ?
Вот это вот :data_blob, или что-то другое ?

Блоб, который вернул list, вставляется в постоянную таблицу, и он же возвращается клиенту.

hvlad
]Что это ? Имя БД ?


Нет) это имя коннекта. (mon$remote_process который)

С примером пока тяжко, нет особо времени на это, если получится сделать, то обязательно закину.
8 июн 20, 14:13    [22147471]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить