Есть ли утилита для автоматического backup/restore [сообщение #2125] |
Mon, 24 April 2023 22:31 |
GrigoryFomin
Сообщений: 91 Зарегистрирован: April 2023
|
Member |
|
|
Существует ли в природе утилита, которая в качестве параметра берет на входе пусть к файлу FDB, делает ее последовательный бэкап и рестор? Знаю, что можно батником эти вещи сделать, но в процессе рестора может оказаться, что база занята и не дает восстановить. В хозяйстве десятки файлов баз, хотелось бы периодически их от мусора чистить
|
|
|
|
|
|
Re: Есть ли утилита для автоматического backup/restore [сообщение #2129 является ответом на сообщение #2127] |
Tue, 25 April 2023 00:13 |
shavluk
Сообщений: 82 Зарегистрирован: June 2022 Географическое положение: Одеса
|
Member |
|
|
Вот набросал такой батник
backup_restore.bat
@echo off
set db=%~f1
set fb=C:\Program Files\Firebird\Firebird_3_0
if not exist "%1" exit /b
set db_old=%db%.old
if exist "%db_old%" del "%db_old%"
echo [%time%] Переименование %db%
move "%db%" "%db_old%" > nul
if not "%errorlevel%"=="0" (
echo [%time%] Ошибка при переименовании БД
exit /b
)
echo [%time%] Пересоздание БД
set sw=-se localhost:service_mgr -user sysdba -password masterkey
"%fb%\gbak" -b -g %sw% "%db_old%" stdout|"%fb%\gbak" -c %sw% stdin "%db%" -v -st tdrw -z > "%db%.log"
if "%errorlevel%"=="0" (
echo [%time%] База создана успешно
exit /b
)
if exist "%db%" (
del "%db%"
if not "%errorlevel%"=="0" (
echo [%time%] База заблокирована, очистка невозможна
exit /b
)
)
move "%db_old%" "%db%" > nul
echo [%time%] Ошибка при создании БД
Его можно вызывать сразу для нескольких БД в другом батнике
@call backup_restore database1.fdb
@call backup_restore.bat database2.fdb
[Обновления: Tue, 25 April 2023 14:02] Известить модератора
|
|
|
Re: Есть ли утилита для автоматического backup/restore [сообщение #2131 является ответом на сообщение #2129] |
Tue, 25 April 2023 00:15 |
shavluk
Сообщений: 82 Зарегистрирован: June 2022 Географическое положение: Одеса
|
Member |
|
|
Но вообще лучше backup/restore не делать.
У моих клиентов по ночам делается sweep + перекомпиляция обновление статистики индексов
Выполняю через IBEScript такой файл
execute ibeblock as
begin
c = ibec_GetDefaultConnection();
u = ibec_GetConnectionProp(c, 'user');
p = ibec_GetConnectionProp(c, 'password');
d = ibec_GetConnectionProp(c, 'dbname');
f = ibec_GetConnectionProp(c, 'clientlib');
b = 'execute ibeblock (s variant) as begin ibec_Progress(s); end';
select list('set statistics index "'||trim(i.rdb$index_name)||'";', '')
from rdb$indices i
join rdb$relations r on r.rdb$relation_name = i.rdb$relation_name
where i.rdb$system_flag = 0 and i.rdb$index_inactive = 0 and coalesce(r.rdb$relation_type, 0) = 0
into sql;
ibec_Progress(ibec_time()||' Пересчет статистики индексов');
ibec_ExecSQLScript(c, sql, '', b);
ibec_Progress(ibec_time()||' Сборка мусора');
ibec_Exec(ibec_ExtractFileDir(f)||'\gfix.exe -sw -z -user '||u||' -pa '||p||' '||d, 'OutFile=log\gfix_'||ibec_ExtractFileName(d)||'.log;ConvertToANSI', b);
ibec_Progress(ibec_time()||' Окончание сборки мусора');
end;
[Обновления: Tue, 25 April 2023 00:26] Известить модератора
|
|
|
|
|
|
Re: Есть ли утилита для автоматического backup/restore [сообщение #2136 является ответом на сообщение #2131] |
Tue, 25 April 2023 00:45 |
hvlad
Сообщений: 357 Зарегистрирован: August 2022
|
Senior Member |
|
|
shavluk писал(а) Tue, 25 April 2023 00:15Но вообще лучше backup/restore не делать.
У моих клиентов по ночам делается sweep + перекомпиляция обновление статистики индексов
Выполняю через IBEScript такой файл
execute ibeblock as
begin
c = ibec_GetDefaultConnection();
u = ibec_GetConnectionProp(c, 'user');
p = ibec_GetConnectionProp(c, 'password');
d = ibec_GetConnectionProp(c, 'dbname');
f = ibec_GetConnectionProp(c, 'clientlib');
b = 'execute ibeblock (s variant) as begin ibec_Progress(s); end';
select list('set statistics index "'||trim(i.rdb$index_name)||'";', '')
from rdb$indices i
join rdb$relations r on r.rdb$relation_name = i.rdb$relation_name
where i.rdb$system_flag = 0 and i.rdb$index_inactive = 0 and coalesce(r.rdb$relation_type, 0) = 0
into sql;
ibec_Progress(ibec_time()||' Пересчет статистики индексов');
ibec_ExecSQLScript(c, sql, '', b);
ibec_Progress(ibec_time()||' Сборка мусора');
ibec_Exec(ibec_ExtractFileDir(f)||'\gfix.exe -sw -z -user '||u||' -pa '||p||' '||d, 'OutFile=log\gfix_'||ibec_ExtractFileName(d)||'.log;ConvertToANSI', b);
ibec_Progress(ibec_time()||' Окончание сборки мусора');
end;
Сборка мусора происходит и в индексах тоже, так что обновлять статистику лучше после свипа.
|
|
|
|
|
|
|
|