TPSFIX

ЧС>> У меня он появлялся в разных местах 🙂
ЧС>> Обычно в корневом каталоге диска «C» или в текущем каталоге для программы
ЧС>> или в каталоге где располагаются базы.
ЧС>> Но, что самое интересное, он был под 5-кой и 4-кой.
ЧС>> Под 55 я его не вижу — видать удаляется, если все нормально…
ЧС>> Попробуй в момент транзакции «грохнуть» прогу — TCF должен остаться,

ЧС>> т.к. транзакция не завершилась. Только не запускай прогу, после того как
ЧС>> грохнеш, — по идее при следующем запуске проги, должен произойти откат базы
ЧС>> и после отката TCF может быть удален драйвером. И опять его не найдешь 🙂
DmVB> Обстановка — именно С55!
DmVB> Грохнул прогу — файла всё одно нету… 🙁
DmVB> И во время её самой (транзакции его тоже нет)… Ни на С, ни возле
DmVB> программы, ни возле таблиц…

DmVB> Переносил базы на локальный диск, полагая, что на сервере включаются
DmVB> другие механизмы — не помогает… (сеть NetWare 4.11)

DmVB> Операционка — Вин2000…. Может, действительно, TCF создаётся только
DmVB> если на уровне ОС транзакции не поддерживаются???

Я как-то разбирался с этим механизмом. До конца, правда, так и не разобрался — время поджимало. Итак, как понятно из темы, разговор идет о драйвере TPS.

1. Где может создаваться файл TOPSPEED.TCF?

Во-первых, следует иметь в виду, что транзакционный TCF-файл назначается для КАЖДОГО файла, участвующего в транзакции. Т.е., если, например, в рамках транзакции участвуют несколько файлов из РАЗНЫХ каталогов, то в КАЖДОМ из этих каталогов
будет создан СВОЙ TCF-файл!
Это справедливо для случая, когда задан путь к рабочим файлам и не использовалось ЯВНОЕ переназначение TCF-файла через оператор SEND(File,’TCF=…’).

Если в имени файла не задан путь и не использовался SEND(), то в текущем каталоге будет создан TOPSPEED.TCF Надо, также, иметь в виду, что если TCF-файл задается явно через SEND(), то следует указывать ПОЛНЫЙ путь и имя TCF-файла!

2. Когда создается TCF-файл?

Во-первых, следует знать, что TCF-файл создается ТОЛЬКО если в транзакции участвуют более ОДНОГО файла!

Вся инфа в рамках транзакции пишеться непосредственно в память.
Т.е. нет смысла, как были советы, прерывать транзакцию аварийно — TCF-файл не будет создан! Просто из памяти пропадет инфа обо всех изменениях, а сами рабочие файлы так и остануться нетронутыми. TCF-файл создается ТОЛЬКО при работе оператора COMMIT().
Т.е. этот оператор перепысывает из памяти все произведенные изменения непосредственно в рабочие файлы. И именно на этом этапе в TCF-файле(файлах) производится журнализация всех ФИЗИЧЕСКИХ изменений рабочих файлов!
В связи с тем, что на этом этапе модификация рабочих файлов производится непосредственно обьектами самого нижнего уровня, без передачи управления «на верх», этот этап занимает минимальное время. Обычно, только на ОЧЕНЬ обьемных транзакциях можно заметить этот этап обработки. И именно прерывание работы
этого этапа запускает механизм отката. После завершения работы оператора COMMIT() TCF-файл не удаляется. Правда, после успешного завершения этот файл содержит лишь
заголовок.

Есть лишь один ньюанс, из-за которого меня «терзают смутные сомненья»! В большинстве случаев при отработке оператора COMMIT() в рабочие файлы записывается
строка ‘C:topSpeeD.TCF’! Что она означает и как влияет на процесс восстановления в случае краха, мне выяснить не удалось. Ждать ответа от разработчиков SV, очевидно, не стоит, поэтому остается лишь надеятся, что эта строка используется только в качестве, скажем, некого лейбла и никак не связана с реальным именем TCF-файла!