2012-04-17 11 views
0

こんにちは、私はかなりの周りに検索したオールSQL SMOはSqlRestore法(ReadFileList)

オブジェクト、および動的に含まれる論理データファイル名の名前を決定する方法についていくつかの良いリソースを発見しましたおよびSQL .bakファイル。実際のファイルパスをバックアップに渡すためには、私の要件ではServerNameを渡す必要があります。私はT-SQLで必要なものを手に入れることができますが、SMOを活用する方法を決定したいと思っています。以下は私が必要な情報を取得するT-SQLである:

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

バックアップセットがまだサーバーに復元されていなかったとして残念ながらSqlRestore.ReadFileList(ServerNameが)、動作しません。基本的に私はこの情報を必要とするので、Restore.RelocateFiles.Addに渡すことができます。私は実際にはC#でちょうどdabbling DBAだから、もっと情報が必要な場合は私に知らせて、ギャップを埋めようとします。助けてくれてありがとう!

+0

私はSqlRestore.ReadFileListがサーバ(HTTPに復元するバックアップセットが必要であることを読んでいません: //msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.restore.readfilelist.aspx)。バックアップファイルからバックアップセットファイルリストを読み取ることができるSQLエンジンを持つためには、サーバインスタンスへの参照が必要になると思います。あなたはそのメソッドを呼び出すとどうなりますか?何らかのエラーメッセージが表示されますか? – mellamokb

+0

あなたが提供したリンクでは、サーバーレベルから読み取られたバックアップセットが表示されます。ファイル名を読み取ってリストアに渡すために、バックアップデバイス(bakへのパス)を渡す必要があります。移転する。 – user1253174

答えて

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] 
    } 
}