SQL SMO对象SqlRestore方法(ReadFileList)

时间:2012-04-17 18:14:00

标签: sql restore smo

下午好 -

我搜索了很多,并找到了一些关于如何动态确定一个和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,所以如果您需要更多信息,请告诉我,我会尽量填补空白。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

下面的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]
    }
}