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 に答える