我有一个SQL Server数据库,每周创建一次完整备份,每天创建一次差异备份,每小时创建一次事务日志备份。这些是FTP到另一个盒子,在那里我想要一个.NET应用程序(我正在编写)来接收它们并将它们恢复到一个工作的数据库中。
每当新的事务日志文件进入时,我想找到当天适当的完整备份文件,差异备份文件和其他日志txn文件,使用它们来恢复数据库。
我可以使用SQL Server Management Objects .NET接口完成所有这些。
问题是这台机器上有几周的备份文件,所以我需要一种方法将它们组合在一起。这样做的最佳方式是什么?
文件名称本身包含时间戳数据,例如
MyDatabase_FULL_20150208_000001.bak
但我宁愿不解析文件名以获取日期/时间信息。
SMO对象确实提供了一种读取文件并获取头信息的方法,其中一个是创建备份的数据/时间。
我没想,但我知道SQL Server有办法在备份文件中使用LSN元数据将它们组合在一起。我只是不知道它是如何工作的,或者SMO API是否允许您访问它。
如果有人对将这些文件组合在一起的简单和/或可靠的方法有任何见解,那就太棒了。
答案 0 :(得分:1)
可以通过SMO访问LSN。快速谷歌将我带到this页面。它没有C#示例,但有一个用于VB.NET或PowerShell。
$srv = new-object Microsoft.SqlServer.Management.Smo.Server("(local)")
$res = new-object Microsoft.SqlServer.Management.Smo.Restore
$backup = new-object Microsoft.SqlServer.Management.Smo.Backup
$backup.Devices.AddDevice("C:\AdventureWorks2012Backup.bak", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)
$backup.Database = "AdventureWorks2012"
$backup.Action = [Microsoft.SqlServer.Management.Smo.BackupActionType]::Database
$backup.Initialize = $TRUE
$backup.SqlBackup($srv)
$res.Devices.AddDevice("C:\AdventureWorks2012Backup.bak", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)
$dt = $res.ReadBackupHeader($srv)
foreach($r in $dt.Rows)
{
foreach ($c in $dt.Columns)
{
Write-Host $c "=" $r[$c]
}
}
要将LSN链接在一起,您需要: