powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюк с генератором
7 сообщений из 32, страница 2 из 2
глюк с генератором
    #32624705
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не придирайся к словам ;-) Но на самом деле может быть и раньше:

1. Старт транзакции А (не read-only)
2. Старт транзакции Б
3. Модификация транзакцией Б данных с использованием генератора
4. Коммит транзакции А -> сброс страницы генератора на диск
5. Коммит транзакции Б -> сброс измененных страниц данных на диск

В случае отсутствия конкурентных транзакций страницы генератора запишутся одновременно с измененными страницами данных.
...
Рейтинг: 0 / 0
глюк с генератором
    #32625286
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ни крути, а ситуация неприятная, но, к сожалению, возможная.
Сделай процедуру восстановления, например:

CREATE PROCEDURE RESET_GENERATORS
AS
DECLARE VARIABLE NEW_ID BIGINT;
begin
Код: plaintext
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.
 --------------------------------------------------------------------
 
 -- Сброс генераторов - начало блока
 

select Coalesce(Max(Bank_id),  0 ) from Bank into :New_id;  -- Банки
 
  New_id = gen_id(Bank_id_gen, New_id - gen_id(Bank_id_gen,  0 ));

select Coalesce(Max(Bill_id),  0 ) from Bill into :New_id;  -- Счет
 
  New_id = gen_id(Bill_id_gen, New_id - gen_id(Bill_id_gen,  0 ));

 --...
 
 --...
 
 --...
 

select Coalesce(Max(Unit_id),  0 ) from Unit into :New_id;  -- Ед.измерения
 
  New_id = gen_id(Unit_id_gen, New_id - gen_id(Unit_id_gen,  0 ));

 -- Сброс генераторов - конец блока
 
 --------------------------------------------------------------------
 

end

Вот для нее скрипт ErWin макроса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE PROCEDURE %TemplateName AS
declare variable New_Id bigint;
begin
 --------------------------------------------------------------------
 
 -- Сброс генераторов - начало блока
 

%ForEachEntity() {
%if(%==(%EntityProp(generate_id),yes))
{  select Coalesce(Max(%TableName_id),  0 ) from %TableName into :New_id;  -- %EntityName
 
  New_id = gen_id(%TableName_id_gen, New_id - gen_id(%TableName_id_gen,  0 ));
}
}
 -- Сброс генераторов - конец блока
 
 --------------------------------------------------------------------
 

end

Предполагается наличие UPD с именем generate_id (типа List, значение по умолчанию ~yes,no) для каждой таблички на логическом уровне, и (в другом скрипте) генерация генераторов (пардон :) и соотв. триггеров.
...
Рейтинг: 0 / 0
глюк с генератором
    #32625874
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2mv Хм, я вот только совсем не понимаю - зачем создавать лишний геморой? По русски сказано что проблема устранена.

Кроме того как ты планируешь запускать эту процедуру - по кнопке или при запуске программы? В первом случае ошибка все-равно появится, во втором возможны проблемы другого рода, когда работает процедура, а в этот момент происходит запуск одной копии программы в сети. И что прикажете делать? может есть смысл все-таки оставить серверу серверное? А баги ловить и докладывать о них куда надо?

Если честно после рапорта о сбое в генераторах исправление стало доступно буквально через пару недель, и это с учетом того что еще шли споры по поводу того какой из механизмов сохранения генераторов реализовать (было три варианта). И даже голосование было сделано маленькое :-)
...
Рейтинг: 0 / 0
глюк с генератором
    #32626948
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 andyshark
Эту процедуру я думаю запускать чужими руками, когда мне звонят тетки, и читают вслух тескст знакомого всем сообщения об ошибках. Ну, вот я и скажу им, как запустить эту лабуду.
...
Рейтинг: 0 / 0
глюк с генератором
    #32627854
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2mv У меня ситуация со сбоем генераторов была всего 2 раза за год. После первого раза отрапортовал в конфу, а когда второй раз получился в другом месте я им прогу скинул по мылу которая генераторы нарастила на +10. Скоро поменяю сервак и забуду что такая бага была :-) поменяй теткам сервак и скажи что ты сделал. Они тебе по гроб жизни благодарны будут если такое хоть раз 5 случалось и они помнят. Заодно сделаешь вид что работаешь :-)
...
Рейтинг: 0 / 0
глюк с генератором
    #32627886
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тетки у меня нормальные. У меня сисадмины приморожены - отторможены. Когда им кажется, что сервак "подвис" (типа - на клавиши не быстро реагирует), могут и ресет нажать. Невзирая на количество живых коннектов к базе, и то, что у клиентов никаких проблем. И никакие тут UPS не помогут.

А сбой генераторов уменя тоже, второй раз за 1,5 года. Причем на моих глазах все и произошло, когда такую грамотную перезагрузку делали.
...
Рейтинг: 0 / 0
глюк с генератором
    #32628172
andyshark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сочувствую. Но отморозков везде и всегда полно. Иногда конечно по зашпарке делаешь глупости, но чтобы нажать ресет на серваке... Мдя.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюк с генератором
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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