| Есть ли утилита для автоматического 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
						 Сообщений: 88 Зарегистрирован: 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
						 Сообщений: 88 Зарегистрирован: 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
						 Сообщений: 381 Зарегистрирован: 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;
 Сборка мусора происходит и в индексах тоже, так что обновлять статистику лучше после свипа. 
		
		
		
 |  
	| 
		
	 | 
 
 
 | 
	| 
		
 | 
	| 
		
 | 
	| 
		
 | 
	| 
		
 | 
	| 
		
 |