我有一个SQL Server数据库,它每周创建一次完整备份,每天创建一次差异备份,每小时创建一次事务日志备份。这些正在被FTP转到另一个盒子,在那里我想要一个.NET应用程序(我正在编写)来把它们捡起来并恢复到一个工作的数据库中。
每当出现一个新的事务日志文件时,我都希望找到适当的完整备份文件、差异备份文件以及当天的其他日志txn文件,使用它们来恢复数据库。
我可以使用Server管理对象 .NET接口来完成所有这些工作。
问题是,这台机器上将有几个星期的备份文件,所以我需要一种方法将它们适当地组合在一起。做这件事最好的方法是什么?
文件本身的名称确实包含时间戳数据。
MyDatabase_FULL_20150208_000001.bak
但我宁愿不解析文件名来获取日期/时间信息。
SMO对象确实提供了一种读取文件和获取头信息的方法,其中之一就是创建备份的数据/时间。
我想这没关系,但我知道Server可以使用备份文件中的LSN元数据将它们组合在一起。我只是不知道它是如何工作的,也不知道SMO是否允许您访问它。
如果有人对将这些文件组合在一起的简单和/或可靠的方法有任何见解,那就太好了。
发布于 2015-02-12 19:51:54
可以通过SMO访问LSN。一个快速的google把我带到了这页面。它没有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]
}
}要将LSNs链接到一起,您需要:
编辑
https://stackoverflow.com/questions/28486030
复制相似问题