Я работаю в девелоперской конторе.
Коду в ней более миллиона строк недокументированного и первые разработчики уже ушли.
Приложение работает через 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
|
|
Если я провожу какие-то известные мне операции, т.е. опять таки через мои модули прогоняю серии запросов, в том числе и снятых с трейса, То всё замечательно восстановление происходит. Если же запускаю большие операции, то получаю это сообщение.
Только не надо говорить что транзакции надо явно закрывать этого сделать нельзя. Нельзя и точка, тут половину кода никто не знает зафига она нужна.
Может кто-нибудь подскажет, чем можно так испахабить лог, что он превращается в ненужную замедляющую работу часть, склонную к неограниченному росту.