Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Способы Архивации БД


Автор: MarinaK 19.2.2006, 19:57
Хочется сохранять базу в архиве, желательно ежедневно. Думаю при закрытии БД или по нажатию кнопки создавать директорию, названную по дате, и копировать туда файл - часть базы (с данными).

А как вы, опытные, поступаете? smile

Автор: NikolayBY 20.2.2006, 17:16
Если отталкиваться от самого простого, то, так бы и делал, но все зависит от исходного размера. Если очень большой размер, то надо продумывать алгоритм сравнения и сохранять только произведенные изменения в некую базу, служащую для хранения данных

Автор: Akina 20.2.2006, 18:22
Во-первых, отдели код от данных. Тогда данные бэкапятся по расписанию или событию, а код (запросы, формы, отчеты, модули и макросы) - по завершении очередного этапа раз(до)работки.

Код сохраняется вручную. И тут в общем ничего не сделать - SourceSafe не обслуживает Access.

Что до сохранения данных - мой личный опыт привел меня к следующей методике:
1) Структура таблиц сохраняется автоматически генерируемым запросом на создание этой таблицы. Тут ничего сложного нет - пишешь один раз удобную тебе процедуру парсинга и сохранения TablEDef и напускаешь его на коллекцию (ForEach).
2) Сами данные сохраняются в текстовый файл. Формат разрабатывается самостоятельно в зависимости от собсно данных - он не должен допускать пересечения разделителей и контента. По сравнению с самой базой такой бэкап меньше в разы, даже без архивирования.
3) Для восстановления данных пишется еще одна универсальная процедура. Что же до восстановления структуры таблиц - запрос есть, только выполни.
4) Связи и протчая аналогичная ерунда - это просто бэкап данных из системных таблиц. Всего-то...

Это - для БД, с которой не работают монопольно... если же с база на момент резервирования заведомо свободна - можно просто написАть VBS-скриптик, копирующий ее куда надо. Что-нить типа

Код

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile ...

Автор: vADIKg 21.2.2006, 09:45
1. Скрипт в шедулер
2. Есть специальные проги для бакапа - там все уже реализовано: создание отдельных каталогов, бакап измененных файлов, архивация

Автор: MarinaK 21.2.2006, 17:16
Цитата(vADIKg @ 21.2.2006, 09:45)
1. Скрипт в шедулер
2. Есть специальные проги для бакапа - там все уже реализовано: создание отдельных каталогов, бакап измененных файлов, архивация

Мне это и надо, я думаю. В шедулере - автоматический бэкап. А конкретно, какой программой пользуетесь?
И еще вопрос. Если в момент автозапуска такого бэкапа база будет открыта... Не скопируется, боюсь...

Автор: Akina 21.2.2006, 17:59
Цитата(MarinaK @ 21.2.2006, 18:16 Найти цитируемый пост)
В шедулере - автоматический бэкап. А конкретно, какой программой пользуетесь?

Бери WinRAR - не ошибешься smile

Цитата(MarinaK @ 21.2.2006, 18:16 Найти цитируемый пост)
Если в момент автозапуска такого бэкапа база будет открыта...

А ты контролируй это дело... простейший способ - по отсутствию соотв. LDB-файла.

Автор: MarinaK 21.2.2006, 19:59
Цитата(Akina @ 21.2.2006, 17:59)

Цитата(MarinaK @  21.2.2006,  18:16 Найти цитируемый пост)
Если в момент автозапуска такого бэкапа база будет открыта...

А ты контролируй это дело... простейший способ - по отсутствию соотв. LDB-файла.

Мудро!

Автор: Akina 22.2.2006, 10:11
MarinaK

Учти - даже в момент отпущенной БД файл может существовать. Тогда проверяй что он 1) не занят 2) имеет нулевой размер.

Автор: vADIKg 22.2.2006, 12:30
Цитата(MarinaK @ 21.2.2006, 17:16)
А конкретно, какой программой пользуетесь?

Шедулер - LaunchPad v.3.03, работает безотказно
А вот прога для бакапа простой копировщик, заменяющий файлы на более новые
в папке, соответствующей дню недели. Не пакую по двум причинам:
1. база весит около 2 гигов (распаковывать потом долго,а нужна мегаоперативность)
2. места для бакапа полно smile

Раньше, когда с местом был напряг паковал WinRar

Автор: Akina 22.2.2006, 14:29
Цитата(vADIKg @ 22.2.2006, 13:30 Найти цитируемый пост)
1. база весит около 2 гигов

Если база MS Access перевалит за 2 гига - умрет...

Автор: vADIKg 22.2.2006, 15:12
Цитата(Akina @ 22.2.2006, 14:29)
Если база MS Access перевалит за 2 гига - умрет...

Спасибо за предупреждение. Вообще, большие базы на Аксессе стараюсь не рисовать.
Двухгиговая база написана на первасиве и сами данные занимают много меньше места, нежели побочная бяка. Просто разговор шел о бакапе.
До этого я обслуживал продукт (АБС), который весил более 5 гигов и основную массу занимала БД, которая являлась архивом данных и использовалась гораздо чаще, нежели текущие данные. Сервак был старенький и места было ну очень мало. Бакапилась системка в течение 5-6 часов ночью и рассовывалась по двум писюкам в сети. А вот однажды пришлось восстанавливать. Весь банк стоял, только после обеда начали работу. Нервов было утрачено немеряно.
ЗЫ: руководство так и не поверило в целесообразность усовершенствования оборудования. но это уже лирика.

Автор: SerJo 27.2.2006, 22:57
Виндовый шедулер, WinRar
"C:\Program Files\WinRAR\WinRAR.exe" a -o+ -dh -r -ibck -inul -ep1 -agyyyy.mm.dd C:\root\Disk\All\arc\mdb\ C:\root\Disk\DataBase\db\office\off.mdb
В результате создается архив даже открытой базы вида 2006.02.27.rar
Задание запускается ежечасно (база небольшая) с утра до 21.00. В итоге всегда имеею последний архивчик.

Автор: vADIKg 28.2.2006, 08:23
Цитата(SerJo @ 27.2.2006, 22:57)
Виндовый шедулер, WinRar
"C:\Program Files\WinRAR\WinRAR.exe" a -o+ -dh -r -ibck -inul -ep1 -agyyyy.mm.dd C:\root\Disk\All\arc\mdb\          C:\root\Disk\DataBase\db\office\off.mdb
В результате создается архив даже открытой базы вида 2006.02.27.rar
Задание запускается ежечасно (база небольшая) с утра до 21.00. В итоге всегда имеею последний архивчик.

Таким образом архив перезаписывается 10-13 раз. А смысл? Если данные "поползут" и попадут в архив, то по-любому придется восстанавливать бакап за прошлый день. Создавай тогда уж файлы YYYYMMDDHH.rar.

Автор: Akina 28.2.2006, 08:44
Цитата(SerJo @ 27.2.2006, 23:57 Найти цитируемый пост)
В результате создается архив даже открытой базы

Есть определенный шанс заархивировать голову от одного состояния, а хвост - от другого. И в результате поиметь нерабочую резервную копию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)