从Blob存储中选择最新的.bak以自动还原到SQL Server 2016

时间:2019-10-24 03:29:24

标签: sql-server sql-server-2016 restore azure-blob-storage

每天晚上,每晚都会从生产服务器(我无法访问)到azure blob存储进行备份,我在Azure VM中使用SQL Server 2016还原该.bak以提取数据以用于报告目的。

如何识别Blob存储区中最新的.bak文件的名称以自动恢复?

一种方法是,我可以使用rest API来获取容器中的blob列表,但是如何在没有第3方插件的情况下在SQL中获得其结果。

2 个答案:

答案 0 :(得分:0)

如果是使用本机备份(或与本机备份集成的文件)备份的,则可以从以下内容开始获取文件的名称\位置

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

但是,如果您的physical_device_name带有guid,则您可能正在使用某些第三方备份工具,您将不得不以其他方式进行管理...

答案 1 :(得分:0)

我通过创建一个powershell脚本解决了这个问题,该脚本获取blob的列表并将其保存到csv

DbContext

然后我将csv加载到具有ssis的蔚蓝sql数据库中并检索最新记录

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

然后在ssis tsql脚本中用作变量来还原数据库

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