使用SMO验证备份SQL Server数据库

时间:2014-03-28 12:36:47

标签: vb.net sql-server-2008-r2 smo

我正在使用Vb.net 2013和SQL Server 2008 R2。

我有一个备份数据库,我想用SMO恢复。但在恢复之前,我想验证我要恢复的文件是否是有效的SQL Server数据库备份,并且与我的程序使用的数据库具有相同的结构(表,字段)。

我知道Restore.ReadBackupHeader方法,但我不知道它包含哪些信息以及如何使用它来使用正确数据库的标头测试此标头?

谢谢!

1 个答案:

答案 0 :(得分:0)

我在Powershell中使用smo和backupdevise进行操作。我扫描目录中的某些备份文件,然后在标题中检查数据库的名称是什么以及数据库来自哪个服务器和日期等等。最后,我将它映射到正确的数据库并进行恢复。 请参阅microsoft ref:https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.backupdevice.readbackupheader(v=sql.105).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

找到了这个VB代码

  'Declaration
  Public Function ReadBackupHeader As DataTable
  'Usage
  Dim instance As BackupDevice
  Dim returnValue As DataTable

returnValue = instance.ReadBackupHeader()

这是其他代码: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/c8e5b271-f053-4d3e-bd39-3d2a89e55af0/version-of-sql-back-up-file?forum=sqlsmoanddmo

这是我在github代码中的powershell:https://github.com/patriklindstrom/Powershell-pasen/blob/master/Restore-Sql.ps1

[Microsoft.SqlServer.Management.Smo.BackupDeviceItem]$backupDevice = New-Object ("Microsoft.SqlServer.Management.Smo.BackupDeviceItem") ($f.fullname, "File")
        #set param so the PercentComplete notification is updated every 10 sec

        $smoRestore.Devices.Add($backupDevice)
        $ErrorActionPreference = "SilentlyContinue"
        #read db name, original sql server name and date from the backup file's backup header
        $smoRestoreDetails = $smoRestore.ReadBackupHeader($server)
        $DBNameFromBackup = $smoRestoreDetails.Rows[0]["DatabaseName"]
        $DatabaseList += $DBNameFromBackup
        $OriginalDBServer = $smoRestoreDetails.Rows[0]["ServerName"]
        $OriginalDBBackupDate = $smoRestoreDetails.Rows[0]["BackupFinishDate"] 
        $smoRestore.Database = $DBNameFromBackup

我建议您在备份时从代码仓库中写入描述字段版本号或密钥/变更集。然后在要还原时进行检查。您可以看到标题信息,例如RESTORE HEADERONLY FROM DISK =' E:\ SQL \ big_DB.bak'。我的意思是一个平均数据库可以包含1000个表和30.000个存储过程。你应该如何在恢复脚本中检查它们?