Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
keepermode Member Откуда: Сообщений: 78 |
Добрый день! Как в sql-запросе, например, set @filename=N'C:\backup_2019-04-01 14-53-05.bak' написать имя файла с датой по шаблону? Как в батнике написал бы backup_*.bak |
1 апр 19, 15:53 [21849078] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Команды sql-сервера не работают с шаблонами командной строки. |
1 апр 19, 15:56 [21849082] Ответить | Цитировать Сообщить модератору |
keepermode Member Откуда: Сообщений: 78 |
Гавриленко Сергей Алексеевич, спасибо! Жаль, и вариантов не найти обозначить имя с любой датой? |
1 апр 19, 16:01 [21849089] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
declare @filename nvarchar(100) = ''; set @filename=N'C:\backup_' + CONVERT(nvarchar(20), getdate(), 120) + '.bak'; print @filename; |
1 апр 19, 16:11 [21849097] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
двоеточия реплейсом замените |
1 апр 19, 16:12 [21849102] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
set @filename=N'C:\backup_*.bak' |
||
1 апр 19, 16:35 [21849131] Ответить | Цитировать Сообщить модератору |
keepermode Member Откуда: Сообщений: 78 |
Konst_One, DECLARE @filename nvarchar(100) = '', @name nvarchar(4000); set @filename=N'C:\backup_' + REPLACE(convert(nvarchar(20),GetDate(),120),':','-') + '.bak'; print @filename; Результат: C:\backup_2019-04-01 16-53-17.bak настоящее сиюминутное время запуска Файл не найден. А имя выгруженного бекап-файла C:\backup_2019-04-01 16-50-05.bak |
1 апр 19, 17:03 [21849168] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Не страдайте фигней -- возьмите имя файла из backuphistory. Или с диска прочитайте. |
1 апр 19, 17:05 [21849171] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
keepermode, вы свою полную задачу не озвучили, поэтому что-то вам советовать очень сложно. никто не понимает, какую проблему вы решаете и каким способом. |
1 апр 19, 17:06 [21849172] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5491 |
в кавычках двойных нужно имя файла (или весь путь), если есть пробелы в названии |
||
1 апр 19, 17:25 [21849200] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Что бы файл нашёлся, нужно указать его настоящее имя, а не генерить из текущей даты "по шаблону" |
||
1 апр 19, 17:26 [21849202] Ответить | Цитировать Сообщить модератору |
keepermode Member Откуда: Сообщений: 78 |
Konst_One, Полная задача автоматизировать процесс бекапа базы и проверка выгруженного файла: Первый шаг здания - бэкап базы в файл с датой-временем set @filename=N'C:\backup_' + REPLACE(convert(nvarchar(20),GetDate(),120),':','-') + '.bak'; BACKUP DATABASE [db] TO DISK = @filename Второй шаг задания - проверка выгруженного бэкапа RESTORE VERIFYONLY FROM DISK = @filename Если выгруженный файл с датой, то "файл не найден" |
2 апр 19, 14:56 [21850134] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
|
||
2 апр 19, 15:05 [21850161] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
пробел у вас в имени файла, замените его подчёркиванием |
2 апр 19, 15:10 [21850176] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
и да, шаги разные, как уже было сказано выше |
2 апр 19, 15:11 [21850178] Ответить | Цитировать Сообщить модератору |
keepermode Member Откуда: Сообщений: 78 |
alexeyvg,set @filename=N'C:\backup_' + REPLACE(convert(nvarchar(20),GetDate(),120),':','-') + '.bak'; BACKUP DATABASE [db] TO DISK = @filename set @filename=N'C:\backup_' + REPLACE(convert(nvarchar(20),GetDate(),120),':','-') + '.bak'; RESTORE VERIFYONLY FROM DISK = @filename Как правильно объявить @filename, чтобы его проверить? |
2 апр 19, 15:12 [21850179] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
keepermode, Если вы ответы не читаете, зачем вопросы задаете? |
2 апр 19, 15:12 [21850181] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
делайте имя без времени , а только дату, тогда найдётся ваш файл |
2 апр 19, 15:12 [21850183] Ответить | Цитировать Сообщить модератору |
keepermode Member Откуда: Сообщений: 78 |
Konst_One, как заменить? Это поможет? |
2 апр 19, 15:14 [21850187] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Потом во втором шаге формируете другой @filename, проверяете сделанный бакап. Немудрено, что @filename в этих двух шагах могут быть разные. Это принципиально неправильный подход. Правильный - это использовать метаданные о сделанном бакапе, как вам написал Гавриленко Сергей Алексеевич, либо проверять бакап в первом шаге, не меняя @filename |
||
2 апр 19, 15:23 [21850199] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Прравильное решение совсем другое. |
||
2 апр 19, 15:24 [21850201] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
а если нужен только один бэкап в день, то тогда в самый раз. ТС так и не обозначил свою конечную задачу |
2 апр 19, 15:32 [21850214] Ответить | Цитировать Сообщить модератору |
Сруль. Member Откуда: Сообщений: 121 |
Я чой-то запутался, мужик. Если ты бэкапы, типа ищешь... Зачем проверять, если можно, просто, найти use master declare @db_name varchar(100) set @db_name='dbnane'--заменить на имя вашей базы. SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, msdb.dbo.backupset.expiration_date, CASE msdb..backupset.type WHEN 'D' THEN 'Database' WHEN 'L' THEN 'Log' END AS backup_type, msdb.dbo.backupset.backup_size, msdb.dbo.backupmediafamily.logical_device_name, msdb.dbo.backupmediafamily.physical_device_name, msdb.dbo.backupset.name AS backupset_name, msdb.dbo.backupset.description FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7) and database_name=@db_name and charindex('\',physical_device_name) >0 ORDER BY msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_finish_date DESC |
2 апр 19, 15:57 [21850273] Ответить | Цитировать Сообщить модератору |
keepermode Member Откуда: Сообщений: 78 |
alexeyvg, Да, для воскресных FULL и ежедневных DIFF подойдетconvert(varchar(500),GetDate(),112) |
2 апр 19, 16:08 [21850307] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
ухх... достаточно давно естьSELECT FORMAT(getdate(),'yyyy-MM-dd hh-mm-ss') |
2 апр 19, 16:16 [21850323] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |