On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
Администратор




Пост N: 2229
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.01.12 10:36. Заголовок: Архивация в letodb


Хочу посоветоваться. Задача - сделать бэкап (архив) базы в произвольный момент времени.
Пусть архиватор будет 7z, хотя это не принципиально.
Утилита запускается на сервере, где установлен letodb, по определенному графику (хотя бы планировщиком).
Входные параметры: каталог БД и список расширений файлов, которые надо поместить в архив.
Предлагается такой алгоритм: сканируется все содержимое каталога БД, и формируется список @listfiles для архиватора.
Если это не файл данных, он просто добавляется в список. Если это файл данных, то выполняется попытка его открыть монопольно. Если попытка успешная - файл закрывается и добавляется в список.
Если нет - добавляется в список № 2 для 2-го прохода.
Для 1-го прохода через run вызывается архиватор, и ему дается список файлов.
Для 2-го прохода создается новый каталог, куда средствами letodb через команду copy to копируются открытые файлы, затем вызывается архиватор с командой добавления в архив файлов, которые не были заархивированы во время 1-го прохода.
Какие будут идеи ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 127 , стр: 1 2 3 4 5 6 7 All [только новые]


Администратор




Пост N: 2282
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.02.12 13:01. Заголовок: AlexMyr пишет: Так,..


AlexMyr пишет:

 цитата:
Так, тестирую на удаленной машине и получаю



Так я делал эту утилиту для запуска на сервере, там, где расположена БД
Если расчитывать на бэкап с клиентской машины, тогда копирование неоткрытых файлов прийдется выполнять не файловыми операциями, а средствами letodb, что будет заметно медленнее.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 456
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 27.02.12 13:05. Заголовок: Pasha пишет: Так я ..


Pasha пишет:

 цитата:
Так я делал эту утилиту для запуска на сервере, там, где расположена БД

Ясно, так работает.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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
Отслеживается изменение таблицы в целом, изменение отдельных записей не отслеживается

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2286
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.02.12 19:36. Заголовок: Пробую использовать ..


Пробую использовать __dbCopy. И оказывается, что letobackup блокирует сервер и сама себе не дает копировать таблицы.
Прийдется наверное не делать блокировку для пользователя, который блокировал сервер.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2334
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.02.12 20:02. Заголовок: Pasha пишет: Если ф..


Pasha пишет:

 цитата:
Если файл не открыт letodb, то работает другая ветка:


Это я промахнулся ;)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 127 , стр: 1 2 3 4 5 6 7 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 137
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет