0

大家下午好——

我进行了相当多的搜索,发现了一些关于如何动态确定包含在 SQL .bak 文件中的逻辑数据文件名的好资源。我使用的 SMO 方法要求我传递 ServerName,但是我的要求要求将实际文件路径传递给备份。我可以在 T-SQL 中得到我需要的东西,但我真的很想确定一种利用 SMO 的方法。下面是 T-SQL,它为我提供了我需要的信息:

RESTORE FILELISTONLY
FROM N'C:\Directory\File.bak'
WITH FILE = 1

不幸的是 SqlRestore.ReadFileList(ServerName) 将不起作用,因为备份集尚未恢复到服务器。本质上我需要这些信息,所以我可以将它传递给Restore.RelocateFiles.Add。我实际上是一名刚刚涉足 C# 的 DBA,所以如果您需要更多信息,请告诉我,我会尽力填补空白。感谢您的帮助!

4

1 回答 1

1

下面的 Powershell 脚本显示了如何根据文件路径读取备份文件:

$ServerName="SERVER\MYSQLSERVER"
$svrConn = new-object Microsoft.SqlServer.Management.Common.ServerConnection
$svrConn.ServerInstance=$secondaryServerName
$svrConn.LoginSecure = $true
$svr = new-object Microsoft.SqlServer.Management.Smo.Server ($svrConn)
$fullResotrePath = "\\Path\MyDatabase.bak"
$res = new-object Microsoft.SqlServer.Management.Smo.Restore
$res.Devices.AddDevice($fullRestorePath, [Microsoft.SqlServer.Management.Smo.DeviceType]::File)

$dt = $res.ReadFileList($svr)

foreach($r in $dt.Rows)
{
    foreach ($c in $dt.Columns)
    {
        Write-Host $c "=" $r[$c]
    }
}
于 2014-10-30T15:41:18.583 回答