Автор | Сообщение |
|
| Администратор
|
Пост N: 2229
Зарегистрирован: 23.05.05
|
|
Отправлено: 16.01.12 10:36. Заголовок: Архивация в letodb
Хочу посоветоваться. Задача - сделать бэкап (архив) базы в произвольный момент времени. Пусть архиватор будет 7z, хотя это не принципиально. Утилита запускается на сервере, где установлен letodb, по определенному графику (хотя бы планировщиком). Входные параметры: каталог БД и список расширений файлов, которые надо поместить в архив. Предлагается такой алгоритм: сканируется все содержимое каталога БД, и формируется список @listfiles для архиватора. Если это не файл данных, он просто добавляется в список. Если это файл данных, то выполняется попытка его открыть монопольно. Если попытка успешная - файл закрывается и добавляется в список. Если нет - добавляется в список № 2 для 2-го прохода. Для 1-го прохода через run вызывается архиватор, и ему дается список файлов. Для 2-го прохода создается новый каталог, куда средствами letodb через команду copy to копируются открытые файлы, затем вызывается архиватор с командой добавления в архив файлов, которые не были заархивированы во время 1-го прохода. Какие будут идеи ?
|
|
|
Ответов - 127
, стр:
1
2
3
4
5
6
7
All
[только новые]
|
|
|
| Администратор
|
Пост N: 2282
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.02.12 13:01. Заголовок: AlexMyr пишет: Так,..
AlexMyr пишет: цитата: | Так, тестирую на удаленной машине и получаю |
| Так я делал эту утилиту для запуска на сервере, там, где расположена БД Если расчитывать на бэкап с клиентской машины, тогда копирование неоткрытых файлов прийдется выполнять не файловыми операциями, а средствами letodb, что будет заметно медленнее.
|
|
|
|
| |
Пост N: 456
Зарегистрирован: 11.06.10
|
|
Отправлено: 27.02.12 13:05. Заголовок: Pasha пишет: Так я ..
Pasha пишет: цитата: | Так я делал эту утилиту для запуска на сервере, там, где расположена БД |
|
Ясно, так работает.
|
|
|
|
| Администратор
|
Пост N: 2283
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.02.12 13:07. Заголовок: Dima пишет: Каким о..
Dima пишет: цитата: | Каким образом копировать только изменившиеся данные ? Не понятно как удается вложиться в 5 секунд при копировании базы в 300 метров. Провел эксперимент |
| Если делать бэкап неоткрытой БД, то 300М у меня скопировалось за 6.5-7 сек (не 5, урезаю осетра, говорил "на глаз") Открытая БД 300М копируется за 40 сек, это средствами rdd. Copy to не использую, так как тогда бекап надо делать в пределах видимости letodb. Можно сделать отдельную опцию для использования copy to Отслеживается изменение таблицы в целом, изменение отдельных записей не отслеживается
|
|
|
|
| Администратор
|
Пост N: 2286
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.02.12 19:36. Заголовок: Пробую использовать ..
Пробую использовать __dbCopy. И оказывается, что letobackup блокирует сервер и сама себе не дает копировать таблицы. Прийдется наверное не делать блокировку для пользователя, который блокировал сервер.
|
|
|
|
| |
Пост N: 2333
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.02.12 19:48. Заголовок: Pasha пишет: Если д..
Pasha пишет: цитата: | Если делать бэкап неоткрытой БД, то 300М у меня скопировалось за 6.5-7 сек (не 5, урезаю осетра, говорил "на глаз") |
| Как происходит бэкап неоткрытой БД ? Функцию MakeCopy я смотрел. Копирование происходит в следующем куске кода и я ни как не пойму как можно уложиться за 7 секунд при копировании базы в 300 метров коли база копируется целиком. В чем же фишка то ? select leto_old leto_SetSkipBuffer( 1000 ) set order to 0 go top while ! eof() dbf_new->(dbAppend()) for i := 1 to FCount() dbf_new->(FieldPut( i, leto_old->(FieldGet( i )) )) next if Deleted() dbf_new->(dbDelete()) endif skip enddo
|
|
|
|
| Администратор
|
Пост N: 2287
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.02.12 19:58. Заголовок: Если файл не открыт ..
Если файл не открыт letodb, то работает другая ветка: if ASCAN(aTables, {|a| Lower(a[2]) == Lower(af[1])}) != 0 // не эта elseif ! IsMemoFile( aTables, Lower(af[1]) ) // а простое копирование файла ?? Padr( "Copying file " + af[1], MaxCol() ) __CopyFile( cDB + af[1], cNewFile ) hb_FSetDateTime( cNewFile, af[3], af[4] ) nFiles ++ endif
|
|
|
|
| |
Пост N: 2334
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.02.12 20:02. Заголовок: Pasha пишет: Если ф..
Pasha пишет: цитата: | Если файл не открыт letodb, то работает другая ветка: |
| Это я промахнулся ;)
|
|
|
Ответов - 127
, стр:
1
2
3
4
5
6
7
All
[только новые]
|
|