Уже около 3-х лет в нашей шарашке работает моя программка (Delphi6+IBX), база данных Firebird 1.0.3. В базе данных есть ГЛАВНАЯ таблица:
Код: Выделить всё
CREATE TABLE CUSTOMER (
NUMBER INTEGER NOT NULL,
NAME VARCHAR (100),
ADDR VARCHAR (250),
. . . . .
);
ALTER TABLE CUSTOMER ADD PRIMARY KEY (NUMBER);
Черт меня дернул в начале года переписать в моей программке процедуру подсчета ежемесячных отчетов (т.к. все отчеты опираются на одинаковые данные, я решил сначала эти данные расчитать и запихнуть в БД, с тем, что бы потом "быстро" получать отчеты). Создал еще одну таблицу:
Код: Выделить всё
CREATE TABLE STAT (
NUMBER INTEGER NOT NULL,
WORK_DATE DATE,
KIND SMALLINT,
SUM0 FLOAT,
DATE0 DATE
);
ALTER TABLE STAT ADD CONSTRAINT STAT_FK_NUMBER FOREIGN KEY (NUMBER) REFERENCES CUSTOMER (NUMBER) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE INDEX STAT_INDEX ON STAT (KIND, WORK_DATE);
Закрывая очередной месяц, мне пришлось несколько раз запускать мою НОВУЮ процедуру подготовки данных для отчетов, т.е. старые данные приходилось удалять, новые добавлять (что-то около 70 тыс. строк). Так вот, стало происходить следующее: после очередного перерасчета данных для отчетов, я обращаюсь к таблице STAT с тем чтобы посчитать сам отчет - и вроде бы все ОК. Но как только я закрываю клиентское приложение (мою программку) Firebird как будто умирает (точнее впадает в кому). Т.е. клиент зависает на вызове метода TIBDatabase.Close и достучаться до Firebird'a невозможно ниоткуда. Эта кома длится минут 5-15. Потом все оживает и бежит дальше.
Знакомый посоветовал отключить Sweep Interval - не помогло. Экспериментировал с Firebird 1.5, правда локально, - результат тот же.
Вобщем, если кто-нибудь хотя бы намекнет, что происходит, буду весьма признателен.