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