Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2022, 12:44   #1
ДаниилSQL
Новичок
Джуниор
 
Регистрация: 29.06.2022
Сообщений: 2
Подмигивание Восстановление копии базы в автоматическом режиме

Здравствуйте всем! Я новичок в SQL. Есть такая задача:
1. Найти последний бэкап базы данных (\\10.10.10.161\Disk5\BackupSQl\sib prodwork) в сетевой папке
2. Выгнать всех пользователей из копии (sql5\reports_sp)
3. Восстановить бэкап в эту копию (sql5\reports_sp)

Почти всё готово, у меня есть три переменные в скрипте, которые нужно вводить самому (@BackupTakePath, @VosstanPath, @VosstanLogPath). Как сделать, чтобы например путь именно последнего бэкапа заносился в переменную автоматически? Есть идея записывать путь в txt, но не могу найти как это делать на SQL.
Мой скрипт:
DECLARE @BackupTakePath as nvarchar(500) = N'\\10.10.10.161\Disk5\BackupSQl\si bprodwork\Gilev.bak', -- откуда брать бэкап (нужен полный бэкап)
@VosstanPath as nvarchar(500) = N'D:\Bases\reports_sp.mdf', -- куда восстанавливать базу
@VosstanLogPath as nvarchar(500) = N'D:\Bases\reports_sp_log.ldf', -- куда восстанавливать log
@DBName as nvarchar(40) = 'reports_sp'
-- шаг 1: обрубить соединение
USE master; -- выйти из БД самому
ALTER DATABASE reports_sp SET SINGLE_USER WITH ROLLBACK IMMEDIATE; -- выгнать всех остальных пользователей:
ALTER DATABASE reports_sp SET OFFLINE; -- запретить сеансам восстанавливать соединение:

-- шаг 2: Восстановить БД
RESTORE DATABASE reports_sp FROM DISK = @BackupTakePath WITH FILE = 1, MOVE N'Gilev' TO @VosstanPath, MOVE N'Gilev_log' TO @VosstanLogPath, NOUNLOAD, REPLACE, STATS = 5

-- шаг 3: Восстановить соединение
ALTER DATABASE reports_sp SET ONLINE;
ALTER DATABASE reports_sp SET MULTI_USER;
GO

И код нахождения последнего бэкапа:
DECLARE @DBName as nvarchar(40) = 'prodaji',
@Path as nvarchar(500)
USE msdb;
SELECT physical_device_name
FROM dbo.backupmediafamily
WHERE media_set_id = (SELECT top 1 media_set_id
FROM dbo.backupset
WHERE dbo.backupset.database_name = @DBName
ORDER BY backup_finish_date DESC);

ЗАРАНЕЕ СПАСИБО!
ДаниилSQL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание копии базы Access v.v.1992 C/C++ Базы данных 0 08.04.2012 17:24
Резервные копии gamaiunov_alex Microsoft Office Access 4 03.11.2010 23:58
Копии таблиц Spaun БД в Delphi 2 25.05.2010 11:02
буфер обмена в автоматическом режиме vizor9 Общие вопросы Delphi 1 03.05.2010 15:31
Cохранение и восстановление базы Canadec БД в Delphi 1 23.10.2007 02:34