每天晚上,每晚都会从生产服务器(我无法访问)到azure blob存储进行备份,我在Azure VM中使用SQL Server 2016还原该.bak以提取数据以用于报告目的。
如何识别Blob存储区中最新的.bak
文件的名称以自动恢复?
一种方法是,我可以使用rest API来获取容器中的blob列表,但是如何在没有第3方插件的情况下在SQL中获得其结果。
答案 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