Войти

Показать полную графическую версию : backup database mssql server


lcnet
23-09-2021, 16:02
Приветствую!
Требуется сделать задание для агента.
Само задание есть, но его нужно немного доработать.
А именно, нужно чтобы в имени файла была полная дата, так как это делает management studio.

Как переделать этот скрипт?

declare @pathBackup as varchar(50)
set @pathBackup = N'X:\BACKUPS\MyDB_' + REPLACE(convert(nvarchar(20),GetDate(),120),':','-') + '.bak'
BACKUP DATABASE [MyDB] TO DISK = @pathBackup
WITH COMPRESSION, NOFORMAT, INIT, NAME = N'Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM
Из синтаксиса понятно, что первая часть с датой идет через тире, а время через двоеточие, которое заменяется на тире.
Как сделать, чтобы были подчеркивания?

lcnet
23-09-2021, 16:54
Разобрался, почти...
Добился такого результата

MyDB_yyyy_MM_dd_HHmmss.bak

Как к этому добавить еще 7 знаков (миллисекунды, кажется), чтобы получился формат вида MyDB_yyyy_MM_dd_HHmmss_ххххххх.bak?



declare @pathBackup as varchar(50)
declare @full_path as varchar(50)
declare @x_path as varchar(50)
set @x_path = N'X:\BACKUPS\'
set @pathBackup = N'MyDB_' + convert(nvarchar(20),GetDate(),120)
select @pathBackup = REPLACE(@pathBackup,':','')
select @pathBackup = REPLACE(@pathBackup,'-','_')
select @pathBackup = REPLACE(@pathBackup,' ','_')
set @full_path = @x_path + @pathBackup + '.bak'
BACKUP DATABASE [MyDB] TO DISK = @full_path
WITH COMPRESSION, NOFORMAT, INIT, NAME = N'Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM



Может в T-SQL есть аналог команды PowerShell

Get-Date -Format 'yyyy_MM_dd_HHmmss_fffffff'
или

(get-date).tosrting('yyyy_MM_dd_HHmmss_fffffff')

lcnet
24-09-2021, 16:57
Сделал, может кому пригодиться...


EXECUTE master.dbo.xp_create_subdir N'X:\Backups\MyDB'
GO
declare @pathBackup as varchar(100)
declare @full_path as varchar(100)
declare @x_path as varchar(100)
declare @date as varchar(100)
set @date = SYSDATETIME()
set @x_path = N'X:\BACKUPS\MyDB\'
set @pathBackup = N'MyDB_backup_' + @date
select @pathBackup = REPLACE(@pathBackup,':','')
select @pathBackup = REPLACE(@pathBackup,'-','_')
select @pathBackup = REPLACE(@pathBackup,' ','_')
select @pathBackup = REPLACE(@pathBackup,'.','_')
set @full_path = @x_path + @pathBackup + '.bak'
BACKUP DATABASE [MyDB] TO DISK = @full_path
WITH COMPRESSION, NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM

lcnet
28-09-2021, 08:49
А вот, от добрых людей, сильно упрощенное ))


declare @path varchar(100) = 'X:\BACKUPS\MyDB\MyDB_backup_' + format(getdate(), 'yyyy\_MM\_dd\_HH\_mm\_ss\_fff') + '.bak'
BACKUP DATABASE [MyDB] TO DISK = @path
WITH COMPRESSION, NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM




© OSzone.net 2001-2012