Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   backup database mssql server (http://forum.oszone.net/showthread.php?t=349676)

lcnet 23-09-2021 16:02 2967365

backup database mssql server
 
Приветствую!
Требуется сделать задание для агента.
Само задание есть, но его нужно немного доработать.
А именно, нужно чтобы в имени файла была полная дата, так как это делает 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 2967370

Разобрался, почти...
Добился такого результата

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 2967444

Сделал, может кому пригодиться...

Код:

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 2967686

А вот, от добрых людей, сильно упрощенное ))

Код:

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



Время: 23:44.

Время: 23:44.
© OSzone.net 2001-