Выберите последний .bak из хранилища BLOB-объектов, чтобы автоматизировать восстановление в SQL Server 2016 - PullRequest
0 голосов
/ 24 октября 2019

Каждую ночь выполняется резервное копирование с рабочего сервера (к которому я не могу получить доступ) в хранилище BLOB-объектов Azure каждую ночь. Я использую SQL Server 2016 на виртуальной машине Azure, чтобы восстановить этот .bak для извлечения данных для целей создания отчетов.

Как определить имя самого последнего файла .bak из моего хранилища BLOB-объектов для автоматического восстановления?

Один из способов - использовать API остальных, чтобы получить список больших двоичных объектов вконтейнер, но как я могу получить результаты этого в SQL без сторонних плагинов.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Я решил эту проблему, создав сценарий powershell, который получает список больших двоичных объектов и сохраняет их в csv

    $ctx = New-AzureStorageContext -StorageAccountName "" -SASToken ""
Get-AzureStorageBlob -Context $ctx -Container "" | Select-Object Name,LastModified,{""}, {""}, {""} | Export-Csv "C:\bloblist.csv"

Затем я загружаю csv в базу данных azure sql с помощью ssis и получаю последнюю запись

SELECT TOP 1 URI + [Name] as bak
FROM [stg].[ext_BlobList]
ORDER BY cast(lastmodified as datetime2) DESC

, который затем используется в качестве переменной в сценарии ssis tsql для восстановления базы данных

USE [master]
ALTER DATABASE [pc] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE [pc] FROM  URL = ? WITH  FILE = 1,  MOVE N'pc' TO N'F:\Data\pc.mdf',  MOVE N'pc_log' TO N'F:\Log\pc_log.ldf',  NOUNLOAD,  REPLACE,  STATS = 5
ALTER DATABASE [pc] SET MULTI_USER

GO
0 голосов
/ 24 октября 2019

вы можете начать со следующего, чтобы получить имя \ местоположение файла, если резервное копирование было выполнено с использованием собственной резервной копии (или чего-то, что интегрируется с собственной резервной копией)

select  top 1 
        bs.database_name, backup_finish_date
       ,bmf.physical_device_name
from msdb.dbo.backupset bs 
Inner join msdb.dbo.backupmediafamily bmf on bs.media_set_id = bmf.media_set_id
where bs.database_name Like 'master%'
and bs.type = 'D'  -- full backup
order by bs.backup_finish_date desc

Но если ваше физическое_устройство_имя приходитс помощью guid, вы, вероятно, используете какой-то сторонний инструмент для резервного копирования, которым вам придется управлять другим способом ...

...