powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Об отмененных транзакциях в базе.
9 сообщений из 9, страница 1 из 1
Об отмененных транзакциях в базе.
    #39349966
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всех приветствую.

FB 2.5 на Windows7.

Клиенты жалуются, что операцию выполнили, но в базе данные не поялились. Проверил программный код несколько раз. В коде стоит commit для датасета. На всякий случай сделал после этого commit еще одну проверку: если транзакция открыта, то еще раз commit. Физически база находится на другом компьютере, соединение по TCP.

Периодически у клиента пропадает сетевое соединение. Причину такого поведения выяснить еще не удалось, но факт пропажи бывает, а значит с сетевым соединением что то не в порядке.
Для выяснения причин плохой работы программы, создал в базе отдельную таблицу и написал триггеры е ее заполнением. В триггерах сделал возможность заполнения в автономной транзакции, чтоб отследить возможность вероятных откатов транзакций - просто подозрение на другой кусок кода, в другой программе, которая работает параллельно с первой, но на другом компьютере, где находится база.

В результате обнаружил в этой таблице запросы, которые были фактически не зафиксорованы коммитом, все идут с удаленного компьютера. Проверка программного кода и лога работы программ выдала, что все операции подверглисть коммитированию, при этом каких либо исклучений от версера базы данных выброшено не было.

Вопрос: может ли из-за кратковременной потери соединения проходить такая обработка запросов? Как можно отследить причину отката транзакции и с какого компьютера это было произведено?
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39349971
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS: По логам Firebird, как на сервере базы так и клиентской машины нет ни одной ошибки на данное время.
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39349972
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оборванный коннект -> транзакцию считай отроллбэченной
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39349975
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий> оборванный коннект

Разве в логах не должно быть ошибок ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39349979
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

аварийный дисконнект есс-но откатывает активные тр-ции.
IIRC, об этом даже в лог пишется, на клиенте.

Триггер на дисконнект может помочь поймать такие моменты - в MON$TANSACTIONS для текущего
аттача будут тр-ции не равные CURRENT_TRANSACTION
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39349982
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

в логах будут записи о потери коннекта.

svd,

значит транзакции довольно долгие, раз коннект успевает рваться.
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39350065
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Влад, спасибо. Если не затруднит, окинь взглядом сочиненный продукт:


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
CREATE TABLE WATCH_TRANSACTION (
    TIME_STMP TIMESTAMP,
    CUR_TRANS  BIGINT,
    TR_ID      BIGINT NOT NULL,
    OP         VARCHAR(10),
    PROC       VARCHAR(255),
    SQL        BLOB SUB_TYPE 1 SEGMENT SIZE 80
);


create or alter trigger TRG_TRANS_WATCH_DISC on disconnect
as
declare variable sql blob sub_type text;
declare variable trid bigint;
declare variable proc varchar(255);
begin
    for
    select
      t2.mon$transaction_id, a.mon$remote_process, s.mon$sql_text
    from mon$transactions t1, mon$transactions t2, mon$statements s, mon$attachments a
    where
      t1.mon$transaction_id = current_Transaction
      and
      t1.mon$attachment_id = t2.mon$attachment_id
      and
      t2.mon$transaction_id = s.mon$transaction_id
    order by t2.mon$transaction_id
    into :trid,:proc,:sql
    do
    in autonomous transaction do
      insert into WATCH_TRANSACTION values ('now', current_transaction,  :trid, 'DIS', :proc, :sql);
end


create or alter trigger TRG_TRANS_WATCH_ROLL on disconnect
as
declare variable sql blob sub_type text;
declare variable trid bigint;
declare variable proc varchar(255);
begin
    for
    select
      t2.mon$transaction_id, a.mon$remote_process, s.mon$sql_text
    from mon$transactions t1, mon$transactions t2, mon$statements s, mon$attachments a
    where
      t1.mon$transaction_id = current_Transaction
      and
      t1.mon$attachment_id = t2.mon$attachment_id
      and
      t2.mon$transaction_id = s.mon$transaction_id
    order by t2.mon$transaction_id
    into :trid,:proc,:sql
    do
    in autonomous transaction do
      insert into WATCH_TRANSACTION values ('now', current_transaction,  :trid, 'ROLL', :proc, :sql);
end




Должно собирать в таблицу незакомиченные транзакции и откаченные транзакции.
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39350186
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

зачем же так сложно, да ещё и не правильно ?
Кстати, не вижу разницу в двух триггерах (кроме замены 'DIS' на 'ROLL').
Если очень хочется логгировать выполняющиеся в момент обрыва связи запросы (которых может не быть в активном состоянии), то запрос будет примерно таким

Код: sql
1.
2.
3.
4.
5.
6.
select t.mon$transaction_id, a.mon$remote_process, s.mon$sql_text
  from mon$attachments a join mon$transactions t on a.mon$attachment_id = t.mon$attachment_id
       left join mon$statements s on t.mon$transaction_id = s.mon$transaction_id
 where t.mon$transaction_id <> current_transaction
   and t.mon$attachment_id = current_connection
order by t.mon$transaction_id
...
Рейтинг: 0 / 0
Об отмененных транзакциях в базе.
    #39351018
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,
Немного поторопился, заголовки не проверил.
Спасибо большое!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Об отмененных транзакциях в базе.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]