С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 15.05.2020
Сообщений: 12

БЭКАП БД MSSQL

12.01.2023, 20:55. Показов 935. Ответов 8

Студворк — интернет-сервис помощи студентам
Всем привет, вопрос такой как на SQL написать проверку на существование папки для бэкапа и если она отсутствует создать её?
Я подумал что наверно это возможно реализовать через два пути. Но пришёл в тупик, так как нужно создать папку по пути, и записать файл в неё, а как создать не могу найти, помогите пожалуйста!
Пока только это есть в скрипте:

-- Имя базы данных для резервной копии
T-SQL
1
2
3
4
5
6
7
8
9
DECLARE @DBName as nvarchar(40) = 'clear'
DECLARE @Path1 as nvarchar(400) = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\1\' + @DBName + '_' + 'FULL' + '_' + convert(varchar(max),getdate(),112)+'.bak' -- путь к сетевому диску
-- Каталог для резервной копии
DECLARE @Path as nvarchar(400) = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\' + @DBName + '_' + 'FULL' + '_' + convert(varchar(max),getdate(),112)+'.bak' -- путь к сетевому диску
IF @Path = @Path1
BACKUP DATABASE @DBName TO DISK = @Path WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10
--IF @Path1 != @Path
--CREATE Folder??????????
GO
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2023, 20:55
Ответы с готовыми решениями:

Сделать бэкап таблицы (mssql 2005)
прошу помощи в таком вопросе. есть необходимость сделать копию таблицы(структура и данные). сделать бэкап не получится, так как во-первых...

БэкАп MsSQL из Делфи
Здравствуйте, подскажите как реализовать Сохранение и восстановление бекапа БД СКУЛ на Делфе, т.е. соотвтет. есть клиентское приложение...

Переход с mssql Express 2008 R2 на mssql 2012
Уважаемые Гуру! Темы о mssql 2008 попадаются значительно чаще , чем о mssql 2012. Хочу перейти на 2012 enterprise. Есть ли...

8
5958 / 4534 / 1094
Регистрация: 29.08.2013
Сообщений: 28,141
Записей в блоге: 3
12.01.2023, 21:15
папку запросом SQL ты не создашь
ты можешь из SQL запустить батник который это сделает

Добавлено через 1 минуту
не забывай сжимать архив - это ускорит копирование
0
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
13.01.2023, 08:29
Лучший ответ Сообщение было отмечено Даниил001 как решение

Решение

Цитата Сообщение от Даниил001 Посмотреть сообщение
Всем привет, вопрос такой как на SQL написать проверку на существование папки для бэкапа и если она отсутствует создать её?
xp_fileexist вестимо
Ну или для особо упоротых sys.dm_os_file_exists
https://www.sqlshack.com/file-... fileexist/

Цитата Сообщение от qwertehok Посмотреть сообщение
папку запросом SQL ты не создашь
Почему не создашь то? xp_cmdshell
https://learn.microsoft.com/ru... rver-ver16

Добавлено через 2 минуты
Кстати, еще sys.xp_create_subdir есть
https://www.kodyaz.com/article... edure.aspx
1
5958 / 4534 / 1094
Регистрация: 29.08.2013
Сообщений: 28,141
Записей в блоге: 3
13.01.2023, 14:48
ладно, про sys.xp_create_subdir не знал

Цитата Сообщение от uaggster Посмотреть сообщение
Почему не создашь то? xp_cmdshell
потому что cmdshell не создает каталогов, а запускает cmd в котором уже и выполняется команда
об этом я и написал
0
0 / 0 / 0
Регистрация: 15.05.2020
Сообщений: 12
15.01.2023, 09:06  [ТС]
Спасибо, sys.xp_create_subdir помог:

T-SQL
1
2
3
4
5
6
7
8
9
10
11
-- Имя базы данных для резервной копии
DECLARE @DBName as nvarchar(40) = 'clear'
DECLARE @Path as nvarchar(400) = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\Test\' + @DBName + '_' + 'FULL' + '_' + convert(varchar(max),getdate(),112)+'.bak' -- путь к сетевому диску
DECLARE @Path1 as nvarchar(400) = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\Test1\' + @DBName + '_' + 'FULL' + '_' + convert(varchar(max),getdate(),112)+'.bak' -- путь к сетевому диску
IF @Path = @Path1
BACKUP DATABASE @DBName TO DISK = @Path WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10
DECLARE @Path2 as nvarchar(400) = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\Test2\'
IF @Path1 != @Path
EXEC master.sys.xp_create_subdir @Path2 
BACKUP DATABASE @DBName TO DISK = @Path2 WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10 -- не видит эту строку, полагаю что в конструкции если много аргументов и нужно впереди данной строки дописать что-то
GO
А так скрипт почти готов, первое условие смотрит если пути равны просто бэкапим, второе - если не равны создаём папку по пути, и по идее бэкапим в неё, но почему-то скюль игнорирует строку! Пишет: Ошибка операционной системы 3(Системе не удается найти указанный путь.).

Добавлено через 7 минут
Хотя он сам строкой выше создал этот путь.
0
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
15.01.2023, 10:10
Кстати, а чем вам не подходят Maintenance Plans?
https://learn.microsoft.com/en... rver-ver16
0
 Аватар для alecko5
205 / 145 / 35
Регистрация: 05.08.2022
Сообщений: 676
15.01.2023, 17:20
может после этой строки
Цитата Сообщение от Даниил001 Посмотреть сообщение
EXEC master.sys.xp_create_subdir @Path2
добавить?
SQL
1
SET @Path2=@Path2 + @DBName + '_' + 'FULL' + '_' + CONVERT(VARCHAR(MAX),getdate(),112)+'.bak
0
0 / 0 / 0
Регистрация: 15.05.2020
Сообщений: 12
17.01.2023, 13:02  [ТС]
Спасибо, оказалось я просто в переменной @Path2 название файла и расширение не указал, а только путь прописал)

Добавлено через 14 минут
СКРИПТ ГОТОВ:

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE @DBName as nvarchar(40) = 'Buh_Anikina' -- Имя БД для резервной копии
DECLARE @Path as nvarchar(400) = '\\10.10.54.161\Disk5\BackupSQl\' + @DBName + '_' + 'FULL' + '_' + convert(varchar(max),getdate(),112)+'.bak' -- путь к сетевому диску
DECLARE @Path1 as nvarchar(400) = '\\10.10.54.161\Disk5\BackupSQl1\' + @DBName + '_' + 'FULL' + '_' + convert(varchar(max),getdate(),112)+'.bak' -- путь к сетевому диску
IF @Path = @Path1
BACKUP DATABASE @DBName TO DISK = @Path WITH COMPRESSION, NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10
DECLARE @Path2 as nvarchar(400) = '\\10.10.54.161\Disk5\BackupSQl\' + @DBName + '_popitka' + '\' 
IF @Path1 != @Path
EXEC master.sys.xp_create_subdir @Path2 -- создаю папку по пути с именем БД
DECLARE @Path3 as nvarchar(400) = @Path2 + @DBName + '_' + 'FULL' + '_' + convert(varchar(max),getdate(),112)+'.bak'
BACKUP DATABASE @DBName TO DISK = @Path3 WITH COMPRESSION, NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10 -- не видит эту строку, полагаю что в конструкции если много аргументов и нужно впереди данной строки дописать что-то
GO
-- первое условие смотрит если пути равны просто бэкапим, второе - если не равны создаём папку по пути, и бэкапим в неё
0
5958 / 4534 / 1094
Регистрация: 29.08.2013
Сообщений: 28,141
Записей в блоге: 3
17.01.2023, 14:26
Даниил001, не забывай про проверки, логи и отправку письма если бэкап не сделался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2023, 14:26
Помогаю со студенческими работами здесь

Перенос данных с mssql 2008 R2 на mssql 2012
Уважаемые Гуру! Пытаюсь перенести базу данных с сервера mssql 2008 R2 на mssql server 2012. Сделал backup в mssql server management...

Совместимость datetime в MSSQL 7 и MSSQL 2000
Господа, помогите разобраться. Такая ситуация, понаписал скриптов под SQL 7, перенесли на SQL 2000, возникла проблема с форматом datetime. ...

Совместимость datetime в MSSQL 7 и MSSQL 2000
Господа, помогите разобраться. Такая ситуация, понаписал скриптов под SQL 7, перенесли на SQL 2000, возникла проблема с форматом datetime. ...

Перенос БД из MSSQL 6.5 на MSSQL 7.0
Как перенести базу с сервера 6.5 на сервер 7.0? Серверы стоят на разных компьютерах. В помощи написано, что можно с помощью DTS Import /...

От MSSQL 7.0 к MSSQL 2000
Скоростные характеристики ранее оптимизированных сложных запросов упали при переходе к серверу MSSQL 2000. Конкретнее - оптимизатор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru