@ITF

Как убрать таймстамп из имени бэкапа в MS SQL?

Через планировщик заданий делаю разностное резервное копирование всех не системных баз данных, при этом выбираю опцию, что бы для каждой базы был свой файл.
По умолчанию он создаёт файлы в формате: имя_базы_YYYY_MM_DD_HHMMSS_TIMESTAMP
Из-за этого на каждый час у меня свой файл бэкапа.

В общем вопрос: где поменять, что бы не было даты и времени, и разностные бэкапы каждой базы сливались в один отдельный файл
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ITF Автор вопроса
Не нашёл как поменять имя файла бэкапа автоматически генерируемое через планировщик, поэтому резервное копирование делаю через запуск T-SQL.
Собственно тут разностное (для full убираем слово "DIFFERENTIAL"; "DIF" меняем на "Full" - но это уже для красоты)
/**** 
	Делаем архив несистемных баз 
****/

DECLARE @Path VARCHAR(100) = N'C:\BACKUP\'
DECLARE @BaseName VARCHAR(100)
DECLARE @BackUpFileName VARCHAR(100)
DECLARE @BackUpBaseName VARCHAR(100)

DECLARE @backupSetId AS INT

/* Получаем все не системные БД */
DECLARE BaseList CURSOR 
	FOR SELECT NAME 
			FROM master..sysdatabases AS sdb
			WHERE sdb.sid <> 0x01 
		  
OPEN BaseList
FETCH NEXT FROM BaseList INTO @BaseName
WHILE @@FETCH_STATUS = 0
   BEGIN
		PRINT @BaseName	
		SET @BackUpFileName = @Path + @BaseName + '.bak'
		SET @BackUpBaseName = '[DIF]' + @BaseName + '_' +
			CAST(YEAR(getdate()) as varchar) + 
			RIGHT('0' + cast(MONTH(getdate()) as varchar), 2)+
			RIGHT('0' + cast(DAY(getdate()) as varchar), 2)+ '_' +
			RIGHT('0' + cast(datepart(hour, getdate()) as varchar), 2) + 
			RIGHT('0' + cast(datepart(minute, getdate()) as varchar), 2)
			
		/* Делаем резервную копию */
		BACKUP DATABASE @BaseName
			TO DISK = @BackUpFileName
			WITH  DIFFERENTIAL , NOFORMAT, NOINIT,
			NAME = @BackUpBaseName,
			SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10
			
		/* Проверяем резервную копию */	
		SELECT @backupSetId = position 
			FROM msdb..backupset 
			WHERE database_name = @BaseName 
			  AND backup_set_id = (SELECT max(backup_set_id) 
										FROM msdb..backupset 
										WHERE database_name = @BaseName
									)			
		IF @backupSetId is null 
			BEGIN 
				RAISERROR(N'Ошибка верификации. Сведения о резервном копировании для базы данных "@BaseName" не найдены.', 16, 1) 
			END
		RESTORE VERIFYONLY FROM DISK = @BackUpFileName WITH FILE = @backupSetId, NOUNLOAD, NOREWIND			
		
        FETCH NEXT FROM BaseList INTO @BaseName
   END 
DEALLOCATE BaseList
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы