SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Есть ли утилита для автоматического backup/restore
Есть ли утилита для автоматического backup/restore [сообщение #2125] Mon, 24 April 2023 22:31 Переход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
Существует ли в природе утилита, которая в качестве параметра берет на входе пусть к файлу FDB, делает ее последовательный бэкап и рестор? Знаю, что можно батником эти вещи сделать, но в процессе рестора может оказаться, что база занята и не дает восстановить. В хозяйстве десятки файлов баз, хотелось бы периодически их от мусора чистить
Re: Есть ли утилита для автоматического backup/restore [сообщение #2126 является ответом на сообщение #2125] Mon, 24 April 2023 23:15 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Ну а что мешает отследить в батнике if not "%errorlevel%"=="0" после gbak?

[Обновления: Mon, 24 April 2023 23:16]

Известить модератора

Re: Есть ли утилита для автоматического backup/restore [сообщение #2127 является ответом на сообщение #2126] Mon, 24 April 2023 23:24 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Вот короткий алгоритм

0. При наличии удаляем файл C:\Data\database.fdb.old
1. Переименовьіваем файл БД в C:\Data\database.fdb.old. Тут уже получаем ошибку о занятой БД
2. Делаем backup/restore одной командой
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\database.fdb.old stdout | gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\database.fdb
Re: Есть ли утилита для автоматического backup/restore [сообщение #2128 является ответом на сообщение #2127] Tue, 25 April 2023 00:11 Переход к предыдущему сообщениюПереход к следующему сообщению
kdv в настоящее время не в онлайне  kdv
Сообщений: 89
Зарегистрирован: June 2022
Member
От "мусора" помогает периодический gfix -sweep.
А gstat -r ... позволяет посмотреть, есть вообще "мусор" в базе, или нет.
Re: Есть ли утилита для автоматического backup/restore [сообщение #2129 является ответом на сообщение #2127] Tue, 25 April 2023 00:13 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: 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 в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: 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 [сообщение #2133 является ответом на сообщение #2131] Tue, 25 April 2023 00:22 Переход к предыдущему сообщениюПереход к следующему сообщению
kdv в настоящее время не в онлайне  kdv
Сообщений: 89
Зарегистрирован: June 2022
Member
базы там какого размера? чтобы вместо set statistics index... учинять перестройку индексов?

p.s. нет никакой "перекомпиляции" индексов в ФБ.
Re: Есть ли утилита для автоматического backup/restore [сообщение #2134 является ответом на сообщение #2133] Tue, 25 April 2023 00:24 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Да, обновляю статистику. Неправильно выразился
Re: Есть ли утилита для автоматического backup/restore [сообщение #2135 является ответом на сообщение #2134] Tue, 25 April 2023 00:42 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время в онлайне  SD
Сообщений: 328
Зарегистрирован: August 2022
Senior Member
При отсутствии в скрипте коммита... Это как повезёт.
Re: Есть ли утилита для автоматического backup/restore [сообщение #2136 является ответом на сообщение #2131] Tue, 25 April 2023 00:45 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 290
Зарегистрирован: 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;
Сборка мусора происходит и в индексах тоже, так что обновлять статистику лучше после свипа.
Re: Есть ли утилита для автоматического backup/restore [сообщение #2137 является ответом на сообщение #2136] Tue, 25 April 2023 00:46 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Спасибо, учту
Re: Есть ли утилита для автоматического backup/restore [сообщение #2138 является ответом на сообщение #2135] Tue, 25 April 2023 00:49 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
SD писал(а) Tue, 25 April 2023 00:42
При отсутствии в скрипте коммита... Это как повезёт.
Зачем? В IBE autocommit ddl
Re: Есть ли утилита для автоматического backup/restore [сообщение #2141 является ответом на сообщение #2138] Tue, 25 April 2023 14:03 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время в онлайне  SD
Сообщений: 328
Зарегистрирован: August 2022
Senior Member
А SET STATISTICS это DDL?..
Re: Есть ли утилита для автоматического backup/restore [сообщение #2142 является ответом на сообщение #2141] Tue, 25 April 2023 14:16 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 65
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
SD писал(а) Tue, 25 April 2023 14:03
А SET STATISTICS это DDL?..
С т.з. Firebird 3.0 Language Reference очень даже DDL
Firebird 3.0 Language Reference

Chapter 5. Data Definition (DDL) Statements
...
5.5 INDEX
....
5.5.4 SET STATISTICS

[Обновления: Tue, 25 April 2023 14:19]

Известить модератора

Re: Есть ли утилита для автоматического backup/restore [сообщение #2143 является ответом на сообщение #2141] Tue, 25 April 2023 14:22 Переход к предыдущему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 290
Зарегистрирован: August 2022
Senior Member
SD писал(а) Tue, 25 April 2023 14:03
А SET STATISTICS это DDL?..
Всегда им был Smile
Предыдущая тема: Инкрементальный backup на другой сервер
Следующая тема: Firebird 5.0 Beta 1
Переход к форуму:
  


Текущее время: Thu Mar 28 15:28:09 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00950 секунд