Страница 1 из 1
Внешняя таблица как лог изменений в БД
Добавлено: 15 сен 2010, 07:22
DmiSbr
Доброго всем утра !
Есть небольшая база на три рабочих места. Содержит одну основную таблицу и несколько вспомогательных справочников. Работа пользователей сводится к вводу данных в основную таблицу. И вот уже второй раз происходит следующая неприятность: при выключении питания компьютера база ломается, а точнее портится основная таблица. Восстановить БД удается, но теряются последние введенные данные (текущего дня). Есть мысль использовать внешнюю таблицу для дополнительного сохранения введенных данных за текущий день. Делать вставку/редактирование можно триггерами основной таблицы. Однако есть вопрос: что произойдет с внешней таблицей при такого рода сбое ? Сохранятся ли уже добавленные данные ?
Заранее спасибо.
Windows XP, Yaffil 891
Re: Внешняя таблица как лог изменений в БД
Добавлено: 15 сен 2010, 11:04
kdv
1. проверить, включено ли в базе forced writes. должно быть ON
2. купить ups
3. делать периодически бэкап, думаю, что база небольшая
Все остальные идеи, типа лога во внешнюю таблицу для исправления ситуации с вот такими сбоями - ужасный ужас.
Re: Внешняя таблица как лог изменений в БД
Добавлено: 15 сен 2010, 13:53
Dimitry Sibiryakov
И не забыть научить, наконец, пользователей не выдёргивать его сразу из розетки, а предварительно использовать меню "Пуск" - "Выключить компьютер".
Re: Внешняя таблица как лог изменений в БД
Добавлено: 16 сен 2010, 07:01
DmiSbr
2 kdv
>> 1. проверить, включено ли в базе forced writes. должно быть ON
включено
>> 2. купить ups
UPS есть. Элементарно вышел из строя, вырубился, соответсвенно вырубился копм
>> делать периодически бэкап, думаю, что база небольшая
Бэкап делается раз в неделю. Можно настроить на ежедневный бэкап, не вопрос. Теряются введенные данные за день, как спасать их.
Иногда за день до тысячи операций. Напряжно вводить их заново.
>> Все остальные идеи, типа лога во внешнюю таблицу для исправления ситуации с вот такими сбоями - ужасный ужас.
Ничего другого пока не придумал. Можно вести лог операций из программы, на каждом рабочем месте. Но тогда придется писать программу для сливания логов с трех машин, анализировть порядок выполнения операций вставки/редактирования/удаления.
2 Dimitry Sibiryakov
>> И не забыть научить, наконец, пользователей не выдёргивать его сразу из розетки, а предварительно использовать меню "Пуск" - "Выключить компьютер".
Это конечно тоже. Обещал "выпороть" каждого, кто посмеет так поступить. Но все же нужна защита от "дурака".
Re: Внешняя таблица как лог изменений в БД
Добавлено: 16 сен 2010, 14:15
Dimitry Sibiryakov
Вот с этого и надо было начинать: "после аварийного выключения компьютера теряются введённые данные за последний день". Теперь не нужно быть Хаузом чтобы поставить диагноз: база с расширением GDB. Переименуйте и будет вам счастье.
Re: Внешняя таблица как лог изменений в БД
Добавлено: 16 сен 2010, 20:31
DmiSbr
2 Dimitry Sibiryakov
> Теперь не нужно быть Хаузом чтобы поставить диагноз: база с расширением GDB. Переименуйте и будет вам счастье.
А можно поподробнее, честно говоря не понял о чем это
Re: Внешняя таблица как лог изменений в БД
Добавлено: 16 сен 2010, 20:58
DmiSbr
Ну и сам себе отвечу. Вот нашел, может кому пригодится
...
Дело в том что WindosXP считает файлы с расширением *.gdb - системными
и делает им резервное копирвание, а в случае сбоя системы восстанавливает
эти системные файлы, то есть существует вариант когда Windows поднимет
старый файл баз данных, что никому не нужно.
...
ну и далее вот тут
http://libro.0pk.ru/viewtopic.php?id=2
Re: Внешняя таблица как лог изменений в БД
Добавлено: 17 сен 2010, 12:57
DmiSbr
И все же хочется знать, как ведет себя внешняя таблица в случаях резкого выключения питания.
Может кто знает ?
Re: Внешняя таблица как лог изменений в БД
Добавлено: 17 сен 2010, 14:18
kdv
Вот нашел, может кому пригодится
а искать надо было в FAQ по IB/FB:
http://www.ibase.ru/ibfaq.htm#xp
хочется знать, как ведет себя внешняя таблица в случаях резкого выключения питания.
Firebird записывает данные в файл, на самом деле запись кэшируется операционной системой, а потом диском. Поэтому Вам никто не предскажет, как себя поведет кэш Windows и кэш диска. Результат будет зависеть от момента выключения и где в это время находятся данные.
Re: Внешняя таблица как лог изменений в БД
Добавлено: 17 сен 2010, 16:48
kdv
Вот и максимально точный ответ на Ваш вопрос
http://www.sql.ru/forum/actualthread.as ... 05#9458350
То есть, если бы сервер после каждой записи вызывал операцию flush для внешней таблицы, то тогда еще можно было бы как-то гарантировать ее максимальную актуальность при неожиданном выключении питания. А так - нет, гарантировать нельзя. Но все же, это не "суточная" потеря данных.
Собственно, Вам еще повезло, с потерей данных за 1 день, т.к. Вы этот компьютер, похоже, включаете и выключаете каждый день. Если бы Вы его включали или перезагружали раз в неделю или месяц, то тогда из-за System Restore потеряли бы много больше данных. и восстанавливать их пришлось бы из бэкапа недельной давности.
В общем, у Вас теперь много поводов для размышлений о правильном организации резервного копирования

Re: Внешняя таблица как лог изменений в БД
Добавлено: 18 сен 2010, 07:48
DmiSbr
2 kdv
а искать надо было в FAQ по IB/FB:
...а счастье было близко..
Вот и максимально точный ответ на Ваш вопрос
....Действительно, внешняя таблица не тот случай.
Собственно, Вам еще повезло, с потерей данных за 1 день, т.к. Вы этот компьютер, похоже, включаете и выключаете каждый день...
Собственно так оно и есть
.... и восстанавливать их пришлось бы из бэкапа недельной давности.
Вот это как раз и не проблема. Дело в том, что ежедневно происходит выгрузка данных за день из маленьких офисов (с колличеством рабочих мест 2-3), с последующей загрузкой в общую базу в головном офисе. А там уже все серьезно, и бэкап/ресторе, и UPS на 3 КВт. А вот с операциями за день, тут да.....Потому вопрос остается актуален. Как лучше организовать логирование операций вставки/редактирования/удаления одной таблицы, для возможности быстрого восстановления?
Re: Внешняя таблица как лог изменений в БД
Добавлено: 18 сен 2010, 16:32
kdv
Как лучше организовать логирование операций вставки/редактирования/удаления одной таблицы, для возможности быстрого восстановления?
Что Вы имеете в виду под "быстрым восстановлением" известно только Вам, в смысле Вашей прикладной области, приложений и базы данных. То есть, делается это программно.
И "как лучше организовать" - тоже странный вопрос. Вот есть таблица, есть триггер, есть внешняя таблица.
Только, избавившись от расширения gdb, о каком именно "быстром восстановлении" идет речь? Данные то "за сутки" не будут пропадать.
Re: Внешняя таблица как лог изменений в БД
Добавлено: 18 сен 2010, 17:35
hvlad
DmiSbr писал(а):Теряются введенные данные за день, как спасать их.
Иногда за день до тысячи операций. Напряжно вводить их заново.
Если при потере питания теряются все записи, введённые за день (с момента последнего запуска программы ?), и FW=ON, то остаётся только одно - научитья делать commit до выхода из программы.
Re: Внешняя таблица как лог изменений в БД
Добавлено: 18 сен 2010, 18:50
DmiSbr
Огромное всем спасибо за помощь.
Базу переименовал.
С внешней таблицей проведу эксперимент.
Если получитьяс интересный результат, отпишусь.