|
|
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Как-то здесь поднимал похожую тему, тогда мне посоветовали архивировать открытый dbf архиватором arj. Верно, в отличие от зипа он архивирует. Сколько времени проблем не было. Поясню, архивировать должно в реальном времени каждый час. Но сейчас возникли затруднения. Дело в том, что архивируемые файла могут чиститься pack или zap. А вот именно такие почищенные файлы уже и не заархивируешь. Что делать? Фишка в том, что нужно любым способом все имеюшиеся DBF файлы вместе с индексами заархивировать. Или переписать в другую директорию. Однако на переписать, открытые эксклюзивно не идут. Горю! Спасайте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 00:24 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Не открывайте эксклюзивно. Никогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 02:52 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Крайне опасная стратегия архивировать таблицы, с которыми в данный момент происходит работа. Любой архиватор упаковывает по одному файлу за раз. Это значит, что есть риск упаковать, например, уже измененный файл FPT, но все еще не измененный файл DBF (или наоборот, не помню в каком порядке они модифицируются). Или же в одной таблице модификация завершилась, а в другой еще не началась. В результате, в архиве будет нарушена ссылочная целостность базы данных. Т.е., в принципе, архивировать открытые таблицы можно, если они открыты в режиме Shared, но есть риск нарушить при этом целостность базы данных. PS: если открыть в режиме Exclusive сам контейнер базы данных (DBC), то никакой другой пользователь не сможет открыть никакие таблицы из этой базы данных. Это можно использовать как способ блокировки всех таблиц базы данных перед проведением административных действий. Например, создания резервной копии таблиц или архива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 16:17 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Hi ВладимирМ! Ещё хуже, архиватор не будет считывать весь файл целиком - и вполне возможна ситуация, когда в процесса архивирования сам dbf файл изменится - т.е. грубо говоря "голова" будет от одного состояния, а "хвост" - от совсем другого... Т.е. как минимум "сломается" счётчик записей из заголовка файла, но может и более серьёзная поломка случится. В общем по любому при ТАКОМ ("горячем") архивировании необходимо обеспечить неизменность даных - т.е. использовать FLOCK() для блокировки... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2005, 03:53 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
А не лучше ли тогда закрыть БД с таблицами и произвести архивацию, а затем снова открыть и продолжить работу??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2005, 06:00 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Max4Поясню, архивировать должно в реальном времени каждый час. ИМХО, в таком случае это надо делать из самой программы, т.к. в ином случае есть возможность огрести кучу проблем (см. предыдущие посты). Еще, может имеет смысл как-то по другому организовать бакап? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2005, 07:21 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
И как тогда производить архивирвание? Допустим, открыт formset, где имеются штук 15 таблиц, оперетор ведет работу. Наспупает час "00". По этому времени срабатывает таймер, который и запускает архивирование с помощью ARJ. В течение минуты таймер проверяет создан ли архив на этот час. Если нет, то архивирует. Предположим, я создам форму с предупреждением, где есть кнопка переключиться в работу formset, чтобы завершить его работу и кнопка продолжить архивирование. Но не усложнит ли это работу пользователям? И время для создания архива тогда надо увеличивать, дабы пользователь мог все завершить. Или вытягивать все запросами select * (для всех таблиц) в отдельные файлы, исключая удаленные строки WHERE DELETED() = .f.? Так пройдет? При восстановлении индексы и переустановить можно. Так будет верно работать или тоже есть ньюансы? Открывать не эксклюзивно не могу, должна же чистка хоть иногда работать. Есть еще варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2005, 00:12 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov ... архивировании необходимо обеспечить неизменность даных - т.е. использовать FLOCK() для блокировки... Posted via ActualForum NNTP Server 1.3 А если файл открыт эксклюзивно, как я его блокирую из другой формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2005, 00:14 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Владимир САА не лучше ли тогда закрыть БД с таблицами и произвести архивацию, а затем снова открыть и продолжить работу??? Нет, одно из условий, чтоб оператора не сильно заморачивать. У него работы с клиентами валом, к тому же многие из них с компьютером на "Вы". Ему нужно минимум кнопочек нажимать. И думать над этим поменьше, какую нажать. Контингент работающих половина - женщины предпенсионного возраста (не в обиду всем, разные есть). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2005, 00:19 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2005, 04:31 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Hi Oopyr! Ну и ещё желательно сделать настройку SET LOCK ON - чтобы за время копирования таблицы через COPY TO не произошло её изменения (в смысле не из самой этой программы, т.к. в фоксе команды выполняются всегда последовательно, а из других программ. работающих с этой таблицей)... Конечно если надо сохранять СОГЛАСОВАННЫЕ таблицы (т.е. не одну, а несколько логически связанных таблиц) - то только ручной блокировкой ВСЕХ таблиц перед началом их копирования и можно решить задачу. 2 Max4 - нет решительно ни одной веской причины в РАБОЧЕЙ программе открывать таблицу эксклюзивно. Это может делать отдельная административная программа, которая во время неактивности системы (ночью, на выходных и т.п.) будет выполнять обслуживание базы - паковку там, переиндексацию и т.п. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2005, 18:22 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Почему такое жесткое условие: Max4...Поясню, архивировать должно в реальном времени каждый час.Хотя бы в обед или технологические перерывы??? Может пересмотреть это место? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2005, 18:28 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Есть там одна закавыка. Работвют несколько таблиц, в которые закачиваются поступающие постоянно текстовые справки. Есть еще другой постоянно работающий таймер, который по мере поступления этих справок обрабатывает из, и информацию с них сажает в соответствующие таблицы. Может, и глупо в свое время написал, но предварительно перед закачкой в них текстового файла для дальнейшей обработки, они ощищаются, так же как и таблицы, в которые садится инфа с них после обработки. Тогда получается их, может, вообще не архивировать? А держать чистыми вместе с запасными CDX, и при восстановлении архива брать оттуда? Насчет того, что выше писал: "Или вытягивать все запросами select * (для всех таблиц) в отдельные файлы, исключая удаленные строки WHERE DELETED() = .f.?" - будет все же работать или тоже может быть нарушена целостность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 05:59 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Hi Max4! > Тогда получается их, может, вообще не архивировать? Ну если они временные, то наверное смысла их архивировать нет никакого :) > Насчет того, что выше писал: "Или вытягивать все запросами select * (для > всех таблиц) в отдельные файлы, исключая удаленные строки WHERE DELETED() > = .f.?" - будет все же работать или тоже может быть нарушена целостность? Будет работать, если на время "вытягивания" обеспечить незыблемость данных - т.е. залочить ВСЕ связанные таблицы. А уж SELECT это будет, COPY TO, или непосредственно архивирование "открытого" файла - принципиального значения не имеет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 03:21 |
|
||
|
Заархивировать открытый DBF
|
|||
|---|---|---|---|
|
#18+
Временные-то не нужны для особого архивирования, то таблиц много, поэтому даю "архивировать все dbf, ftp", соответственно разахивирую тоже все. А тут-то и получается, что те, что "зиповались" либо нет в архиве, либо они бракованные. Но если select будет работать без изъянов (для ВСЕХ связанных таблиц), то это самый приемлемый вариант. Потом просто переиндексировать их надо будет и все. На случай порчи же временных, их буду ворвращать из чистых. На моей практике был случай порчи обычного простого dbf без всяких индексов и ftp. Видимо в момент записи машина сбойнула (возножно отключали энергию, точно не знаю). Но когда я пришел он был нулевой (длина), а там и архивирования кикакого не было, простая запись в него даже без чистки,(pack,zip) и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 08:42 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33429211&tid=1592786]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
154ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 456ms |

| 0 / 0 |
