|
|
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Леди и джентльмены! Сделала, наконец-то, в проекте пункт меню Архивация данных - для папки с базой данных и таблицами. Указываю на все файлы *.* Все бы ничего, но RAR пакует лишь таблицы, индексы и memo, а на файлы .dbc, .dct и .dcx выдает, что они заняты системой (извините, пишу по памяти, под рукой проекта сейчас нет). Пришлось конкретизировать RAR'у, чтобы он работал лишь с dbf, cdx и fpt. Отсюда 2 вопроса: 1. А нужно ли вообще архивировать dbc, dct и dcx файлы? 2. Если нужно, то писать отдельную программку-утилитку вне проекта? Благодарю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 16:46 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 17:55 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
1. Архивировать лучше все. Можно не архивировать индексные файлы, при условии, что у тебя есть процедура, восстанавливающая индексы. 2. RAR не может архивировать файлы, если они открыты экслюзивно. Т.е. надо либо дать команду Close Databases All, либо открывать БД неэксклюзивно, а в RAR-е поставить галочку Open shared files. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 19:32 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Да, я поняла. Использовать ключ -dh. Завтра попробую в проекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 22:13 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Объясните мне, пожалуйста. Какова гарантия, что при архивировании открытых другими пользователями (или процессами) файлов БД они заархивируются в целостном, консистентном состоянии, и все их содержимое будет затем правильно сопрягаться со всеми другими файлами, с которыми они могут быть в отношениях (dbf-dbf, dbf-cdx, dbf-fpt)? Как избежать непротиворечивости в бэкапе, не обеспечив закрытие всех файлов всеми пользователями на весь период бэкапа? Или я не понял того, что программа однопользовательская? Но и в этом случае остается вопрос: все ли буферы сброшены на диск к началу архивирования (как это ни нереально, теоретически неполный сброс буфера возможен - или, все-таки, нет)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 00:29 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Раз вопрос возник, занчит нужны пояснения Сначала по поводу того, нужно ли копировать контейнер базы данных (DBC, DCT, DCX). Контейнер базы данных содержит часть информации по структуре самих таблиц (например, длинные имена полей - более 10 символов) и все процедуры взаимодействия таблиц (постоянные связи, триггера, правила, значения по умолчанию и т.п.). Кроме того, сами таблицы содержат ссылку на контейнер базы данных. Т.е. получаются взаимные ссылки: таблицы на контейнер, а контейнер на таблицы. Это значит, что открыть таблицы без контейнера не нарушая структуры данных - не получится. Как следствие, контейнер базы данных необходимо сохранять вместе с таблицами. Теперь вопрос собственно по архивированию. На самом деле, нужно не столько архивирование, сколько создание резервной копии. Т.е. вполне достаточно скопировать всю базу данных в отдельный каталог. Желательно, на другой машине или хотя бы на другом винчестере (другой железке). Арихивирование - это просто вопрос экономии физического места на диске. Можно делать, но не обязательно. Сложность заключается в самой технологии создания резервной копии. Дело в том, что недопустимо копировать таблицы в процессе работы других пользователей. Это может привести к нарушению целостности данных. Одна таблица скопировалась в состоянии после изменения, а другая - в состоянии до изменения. Чтобы обеспечить непротиворечивость резервной копии достаточно открыть сам контейнер базы данных в режиме Exclusive. В этом случае никакой другой пользователь не сможет открыть не только контейнер базы данных, но и таблицы в него входящие. Теперь можно спокойно скопировать все таблицы. После этого можно переключить контейнер базы данных в режим Shared и скопировать его средствами, например, FileSystemObject. Он позволяет копировать файлы, открытые в режиме Shared. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 00:38 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Лисонька...Сделала, наконец-то, в проекте пункт меню Архивация данных - для папки с базой данных и таблицами. Указываю на все файлы *.* Все бы ничего, но RAR пакует лишь таблицы, индексы и memo, а на файлы .dbc, .dct и .dcx выдает, что они заняты системой (извините, пишу по памяти, под рукой проекта сейчас нет).... У меня лично стоит вот такой код на событие Click кнопки архивирование, и работает и остаюсь в приложении как в EXE-ке, так и в самом VFP. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 06:45 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Ура! Поняла, почему, как я ни старалась, файлы самой базы RAR никак не желал архивировать. Я запускала приложение прямо из редактора проекта. А вот через EXE все проходит нормально. Ну на счет других пользователей - то можно сделать защиту, где-то на форуме был топик, как проверить, работает ли кто с базой или нет. А вот на счет буферизации и потери из за этого данных... CLOSE DATEBASE ALL не спасет от потери информации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 09:46 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Лисонька...Ну на счет других пользователей - то можно сделать защиту, где-то на форуме был топик, как проверить, работает ли кто с базой или нет....Если у тебя файл-серверное приложение, то по-моему архивацию надо запускать при условии, что никто не работает с БД, а это, по-моему, вне рабочее время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 10:20 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Владимир САЕсли у тебя файл-серверное приложение, то по-моему архивацию надо запускать при условии, что никто не работает с БД, а это, по-моему, вне рабочее время. Нет, Вы немного не поняли моего последнего вопроса. Как заметил уважаемый Urri, что делать с буфером, как перевести из него все содержащиеся данные на винт? Думаю, что одной команды CLOSE DATABASE здесь будет недостаточно. Как можно быть в полной уверенности, что архивация (или просто создание резервной копии файлов) пройдет корректно и сохранится вся необходимая информация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 16:05 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Лисонька...что делать с буфером, как перевести из него все содержащиеся данные на винт? Думаю, что одной команды CLOSE DATABASE здесь будет недостаточно. Как можно быть в полной уверенности, что архивация (или просто создание резервной копии файлов) пройдет корректно и сохранится вся необходимая информация?Может я как раз и не понял. Но если у вас локальное приложение, то CLOSE DATABASE ALL закроет все таблицы, сбросив предварительно буферы (если они были организованы), и закроет БД. А вот если задача сразу предполагалась, что будет файл-серверной, то как я писал выше: "...по-моему архивацию надо запускать при условии, что никто не работает с БД, а это, по-моему, вне рабочее время". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 16:11 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Приложение файл-серверное. Не ахти какое, опыта у меня в этом совсем нет, но работает уже с ноября прошлого года. Вроде все нормально, я регулярно проверяю данные. Значит, вето на работу операторов и в самом начале кода архивирования прописываю CLOSE DATEBASE. Благодарю всех-всех-всех! Елизавета Скрунскайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 16:30 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
ЛисонькаПриложение файл-серверное. Не ахти какое, опыта у меня в этом совсем нет, но работает уже с ноября прошлого года. Вроде все нормально, я регулярно проверяю данные. Значит, вето на работу операторов и в самом начале кода архивирования прописываю CLOSE DATEBASE. Благодарю всех-всех-всех! Елизавета СкрунскайтеМожно использовать проверенный временем подход: создание в каталоге файла-флажка, увидев который ни одна из программ пользователей не позволит работать с БД. Т.е.: 1. создаете файл-флажок, 2. убеждаетесь, что с БД никто не работает (например, открыв dbc эксклюзивно), 3. если получилось, начинаете все архивировать, как у ВладимираМ написано. 4. Стираете файл-флажок. Если не получилось - возможны варианты. Например выгнать пользователя из сети. ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 18:14 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
А я сейчас по-другому придумала сделать. Хочу включить в базу еще одну табличку Usernumber с единственным полем nArchiv. Значение поля по умолчанию 0. При запуске приложения на любом компьютере происходит следущее: nArchiv=nArchiv+1. При выходе nArchiv=nArchiv-1. А при выборе пункта меню 'Архивирование данных' делаем проверку: Код: plaintext 1. 2. 3. 4. 5. 6. Благодарю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 20:36 |
|
||
|
Архивация БД - все или часть?
|
|||
|---|---|---|---|
|
#18+
Hi Лисонька! > Дома сейчас не могу все это проверить. Подскажите, совсем чушь я > придумала? Стоит завтра пробовать на месте? Учти, что некорректные выходы оставят счётчик в некорректном состоянии. Так что по нормальному надо бы запись соответствующую блокировать, а при попытке архивирования пытаться либо "сбросить" все флаги (при этом ограничив число попыток в SET REPROCESS и организовав отлов ошибки) либо пытаться заблокировать таблицу - т.к. при слёте программы её блокировки снимаются автоматически (на некоторых криво настроенных или просто кривых ОС это может происходить с заметной задержкой, но тем не менее в конце концов блокировка будет снята). Что касается архивирования открытых файлов - то теоретически FLOCK() на все таблицы должен обеспечить "непротиворечивое" состояние базы на момент архивирования. dbc и прочие файлы самой базы можно не архивировать каждый раз - если в приложении конечно нет кода меняющего по ходу работы структуру таблиц, настройки коннекшенов и т.п. - т.е. если для приложения можно спокойно открыть саму базу в режиме NOUPDATE и всё будет работать. Впрочем для сетевой базы именно так и должна быть организована работа с базой - единственное исключение - процедуры обновления структур - но тут уж по любому надо всех "выгонять" и организовывать монопольный доступ к базе. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 02:20 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33575422&tid=1592205]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
168ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 507ms |

| 0 / 0 |
