Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
Всем доброго дня,

1. событие прогресса подразумевает просто передачу текста, eсть ли возможность получить процентуальное значение?
+

......
TFDPhysServiceProgressEvent = procedure (ASender: TFDPhysDriverService; const AMessage: String) of object;
......
property OnProgress: TFDPhysServiceProgressEvent read FOnProgress write FOnProgress;
......


2. Не видно и возможности прерывать выполнение резервного копирования, есть ли возможность прервать этот процесс корректно?
+

TFDFBNBackup = class (TFDIBService)
..............

TFDIBService = class (TFDPhysDriverService)
  ..........
  published
    property DriverLink: TFDPhysIBBaseDriverLink read GetDriverLink write SetDriverLink;
    property Protocol: TIBProtocol read FProtocol write FProtocol default ipLocal;
    property Host: String read FHost write SetHost;
    property Port: Integer read FPort write FPort default 0;
    property InstanceName: String read FInstanceName write FInstanceName;
    property UserName: String read FUserName write FUserName;
    property Password: String read FPassword write FPassword;
    property SqlRoleName: String read FSqlRoleName write FSqlRoleName;
    property ConnectTimeout: LongWord read FConnectTimeout write FConnectTimeout default 0;
    property QueryTimeout: LongWord read FQueryTimeout write FQueryTimeout default 0;
    property OnProgress: TFDPhysServiceProgressEvent read FOnProgress write FOnProgress;
    // Interbase encryption
    property SEPassword: String read FSEPassword write FSEPassword;
  end;



Спасибо
8 июн 21, 15:54    [22332965]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

1. Нет, нельзя.
2. Просто пристрели сервис с помощью Detach (StopService или что там у твоих компонент
способно вызвать isc_detach_service()) и молись чтобы сервер это заметил.

Posted via ActualForum NNTP Server 1.5

8 июн 21, 16:20    [22332979]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
Dimitry Sibiryakov

1. Нет, нельзя.
2. Просто пристрели сервис с помощью Detach (StopService или что там у твоих компонент
способно вызвать isc_detach_service()) и молись чтобы сервер это заметил.


т.е. без "молиться" никак?
А как же с Delta которая может остаться? или TFDFBNBackup корректно обработает эту ситуацию?
8 июн 21, 16:29    [22332986]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

Никак.
Нет.

Posted via ActualForum NNTP Server 1.5

8 июн 21, 16:42    [22332989]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29815
hlopotun,

из компонент сервером "управлять" можно только через services api. Это кидание разных команд на сервер.
Команду кинул - сервер начинает выполнять. Команды обычно "непрерываемые". Например,
если запустить nbackup и грохнуть его, то база автоматически не разблокируется и сервер дельту не удалит, потому что даже nbackup просто кидает команды серверу. Разве что он после "блокирования" БД умеет базу скопировать куда-то.
И с обычным gbak-ом так же - если приложение можно пристрелить, то его запуск с -se или через services api только команду серверу дает, и сервер дальше ее выполняет до упора.

"Прогресс" при операциях что gbak, что nbackup оценить невозможно. Потому что серверу неинтересен ни размер базы, ни скорость, с которой делается бэкап или нбэкап.
Такие дела.

p.s. т.е. размер базы-то получить можно через isc_database_info (или какой-то компонент), но в БД могут быть пустые страницы, версии записей, и т.д.
p.p.s. прогресс можно получить разве что в процессе шифрования/дешифрования БД в ФБ 3 или 4.
10 июн 21, 19:16    [22334073]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
kdv
hlopotun,
..........
"Прогресс" при операциях что gbak, что nbackup оценить невозможно. Потому что серверу неинтересен ни размер базы, ни скорость, с которой делается бэкап или нбэкап.
..........

при создании резервной копии получаю прогресс тупо сравнивая в таймере размер файла базы данных и размер файла резервной копии в момент резервного копирования. Это работает, единственно нужно правильно выбрать функцию получения размера файлов (не все опробованные варианты отрабатывали правильно с открытыми файлами).
А вот при восстановлении из резервной копии уже засада. База данных сразу создаётся в полном размере и сравнивать его с размером резервной копии смысла не имеет. Думал может можно что то из события OnProgress компонента TFDFBNRestore выяснить, но он почемуто не вызывается (в отличии от OnError, AfterExecute итп). Тут народ дискутирует на эту тему, но как решить эту проблему не нашли, посылают в форум поддержки firebird. Возможно TFDFBTrace может тут помочь. Короче тут решения пока не нашел.
Может у кого есть какие идеи?

Спасибо

Сообщение было отредактировано: 11 июн 21, 10:11
11 июн 21, 10:17    [22334199]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
hlopotun,

единственное что приходит в голову это заглядывать в сам файл базы и смотреть смещение откуда начинаются пустые данные в процессе восстановления. Если FB сразу создаёт базу в полном размере значит чем то забивает пустое место. Остаётся разобраться чем забивает.
11 июн 21, 10:32    [22334213]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
hlopotun,

да, забивает 00
11 июн 21, 10:34    [22334214]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
hlopotun,

алгоритм примерно такой.
Смешаться из конца файла в сторону начала до появления первых не 00 данных.

У кого то есть подходявая процедура которая корректно сможет просканировать эти данные из открытого другим процессом файла?
11 июн 21, 10:43    [22334227]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12885
hlopotun
У кого то есть подходявая процедура которая корректно сможет просканировать эти данные из открытого другим процессом файла?
CreateFile(..FILE_SHARE_READ or FILE_SHARE_WRITE...)

Сообщение было отредактировано: 11 июн 21, 11:06
11 июн 21, 11:15    [22334255]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

_Vasilisk_,

Не учи человека плохому, угробит ведь пользователям базы...

Posted via ActualForum NNTP Server 1.5

11 июн 21, 12:42    [22334325]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12885
Dimitry Sibiryakov
угробит ведь пользователям базы...
Как? Если открывать с GENERIC_READ?

Не слышал историю, как в базе нужно было поменять номер телефона? Люди открыли базу в блокноте, нашли нужную строку и поменяли. Когда приложение перестало запускаться, открыли еще раз и вернули номер обратно.
11 июн 21, 12:52    [22334338]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
Dimitry Sibiryakov

_Vasilisk_,

Не учи человека плохому, угробит ведь пользователям базы...


другими словами корректного способа нет кроме как пытаться это выяснить у самого FB.
А любое чтение со стороны может нарушить целостность восстанавливаемой базы?
11 июн 21, 12:53    [22334341]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32387

11.06.2021 12:42, Dimitry Sibiryakov пишет:
> Не учи человека плохому, угробит ведь пользователям базы...

он и без этого очень настойчиво и упорно сооружает квадратный пинзец.

зы: а "прогресс" нужен чтоб рисовать градусник!

Posted via ActualForum NNTP Server 1.5

11 июн 21, 12:54    [22334342]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

Корректного способа нет в принципе. Целостность восстанавливаемой базы может нарушить то
для чего ты свой "прогресс" используешь.

Posted via ActualForum NNTP Server 1.5

11 июн 21, 12:55    [22334344]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29815
hlopotun
единственное что приходит в голову это заглядывать в сам файл базы и смотреть смещение откуда начинаются пустые данные в процессе восстановления. Если FB сразу создаёт базу в полном размере значит чем то забивает пустое место. Остаётся разобраться чем забивает.

господи помилуй, вы серьезно? Раз вы про нбэкап, а не про бэкап, то
Нбэкап это КОПИРОВАНИЕ ФАЙЛА БАЗЫ.
Ничего там не "создается".
Вот вы делаете нбэкап базы
nbackup -b 0 db.fdb db.nb0
база копируется. Файл копируется, целиком.
Дальше
nbackup -b 1 db.fdb db.nb1

в db.nb1 копируются страницы, измененные с момента -b 0.

Потом, вы "восстанавливаете" базу из нбэкапа.
nbackup -r db.nb0 db.nb1
здесь просто сначала копируется db.nb0, потом на него "накатываются" изменения db.nb1.
Никакого "создания" базы данных тут нет, это тупо копирование файла, и вообще, db.nb0 это УЖЕ готовая база данных, которую для использования надо всего-лишь "разблокировать" (nbackup -f db.nb0).

Вы бы хоть прочитали документацию, пару раз.
https://www.ibase.ru/files/firebird/nbackup_ru.pdf
11 июн 21, 14:10    [22334409]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29815
hlopotun
единственное что приходит в голову это заглядывать в сам файл базы и смотреть смещение откуда начинаются пустые данные в процессе восстановления.


и, соответственно, поскольку копирование файла это последовательное копирование блоков из одного файла в другой, если вы "заглянете" в создаваемый из копии файл, то сам файл БД Firebird это random access file, вы или получите сообщение что "база данных повреждена", или какую-то другую хрень. Просто потому, что целостный файл БД еще не скопирован до конца.
Это не gbak -c, который создает пустую базу, а потом наливает в нее данные.

я просто потрясён, что такие примитивы приходится объяснять. random access, sequential access, не, не знакомы?
11 июн 21, 14:14    [22334415]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
kdv,

спасибо что обьяснили. Доку по nbackup читал, и не раз, но не всё запомнил походу.
А вывод что сразу создаётся наполненный файл сделал из того что размер его сразу после начала копирования был равен файлу резервной копии а если изнасиловать и прервать то полько начальная часть была заполнена данными. Про рандомную запись даже не подумал. Каюсь ...
Уже переделываю просто на бесконечный прогрессбар без всякого анализа размера. Пользователя развлекать во время восстановления как то надо по любому, иначе он прибивает задачу и потом проблем ещё больше.
11 июн 21, 14:47    [22334453]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29815
hlopotun
А вывод что сразу создаётся наполненный файл сделал из того

это винда так делает, давно. пора бы уж и узнать :-)
вы когда любой файл копируете, он сначала создается пустой весь, а уж потом наполняется содержимым из копии, поблочно. И ФБ тут вообще ни при чем.
11 июн 21, 19:41    [22334559]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - TFDFBNBackup - прогресс и прерывание резервного копирования  [new]
hlopotun
Member

Откуда:
Сообщений: 367
kdv
hlopotun
А вывод что сразу создаётся наполненный файл сделал из того

это винда так делает, давно. пора бы уж и узнать :-)
вы когда любой файл копируете, он сначала создается пустой весь, а уж потом наполняется содержимым из копии, поблочно. И ФБ тут вообще ни при чем.

ну, например, при создании файла резервной копии этого не происходит. И отслеживание размера вполне себе работает.
вчера, 20:10    [22335651]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить