Вопрос о восстановлению по логу

Eter Panji
Дата: 09.12.2002 15:38:38
Я работаю в девелоперской конторе.
Коду в ней более миллиона строк недокументированного и первые разработчики уже ушли.
Приложение работает через BDE в режиме SHARED AUTOCOMMIT.
сервер MSSQL2000

Теперь описываю конкретную ситуацию.
1) В процессе работы лог вырастает. Это нормально. Ненормально то что если я пытаюсь BACKUP LOG TRANCATE ONLY лог не уменьшается. Это значит что там открытые транзакции. Как это возможно, если режим SHARED AUTOCOMMIT? Уточняю задачу, если я делаю detach потом физически удаляю лог а затем приаттачиваю его обратно, то потерь данных нет. Почему? Это ладно тут еще более интересная ситуация.
2) при попытке восстановления по логу он выдает сообщение об ошибке

Error 3624
Location filemgr.cpp:5959
Expression: fcb->GetFileSize()>=newSize
SPID: 57
Process ID: 560

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

Может кто-нибудь подскажет, чем можно так испахабить лог, что он превращается в ненужную замедляющую работу часть, склонную к неограниченному росту.
Александр Гладченко
Дата: 09.12.2002 15:41:18
Я вроде бы догадываюсь.... кривые ручки?
Eter Panji
Дата: 09.12.2002 15:54:26
Кривые в каком месте
Eter Panji
Дата: 09.12.2002 15:57:34
Да еще одна приколка.
После этой ошибки см выше попытку восстановления и mdf и ldf файлы можно выкидывать на помойку.
Их никто не узнает.
jimmers
Дата: 09.12.2002 16:02:30
Не знаю, я с BDE не работал, но внутренний голос мне подсказывает, что проблема не в SQL Server'е, а в кривых руках девелоперов. Для решения подобных проблем, IMHO, приведенной информации явно недостаточно. Опишите детали…
Eter Panji
Дата: 09.12.2002 16:25:00
Ну что сказать, для меня это продолжает оставаться черным ящиком.
Меня интересует область в которой рыть.

А что сказать,что делает операция занесение документа в журнал взаиморасчетов.
Открывает одну таблицу через TTable
Бгает по десятку таблиц и подкачивает данные из них по десятку раз открывая одну и туже таблицу. Потом на основе на клиенте формируется два или три запросика на изменения и добавления и удаления строк.
Где-то какие-то exception могут удавиться.
Что-то где-то забыли закрыть и это закрывается вместе с удалением объектов при закрытии приложения.

А что конкретно?