現在ログインしているユーザーとは異なる資格情報を使用するネットワーク共有があります。この共有内には、毎日更新されるサードパーティのデータベースから取得される完全な差分バックアップとログバックアップがあります。
私は、ローカルデータベースへのこれらのバックアップの復元を自動化することを任されています。
これに対するソリューションを設計および実装するための最良の方法は何ですか?
上記のように、各フォルダには日付などに応じてファイル名が異なる複数のファイルがあります。
更新:
以下に掲載されているソリューションに続いて、私はそれを機能させるために提案されたPowerShellコードを少し修正する必要がありました:
$pass ="xxx"|ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PsCredential('Domain\Account',$pass)
New-PSDrive -Name K -PSProvider "FileSystem" -Credential $cred -Root '\\UNC PATH TO FOLDER WHERE BACKUP IS STORED';
Get-PsDrive;
Copy-Item K:\ -Recurse M:\DESTINATION;
Restore-DbaDatabase -server MRVAPPSQL01 -path M:\DESTINATION -MaintenanceSolutionBackup -WithReplace;
Remove-PSDrive -Name K;
Remove-Item M:\DESTINATION\*.*;
これらのバックアップは Ola HallengrenのMaintenance Solution を使用して作成されているようですので、その仮定に基づいてこれを記述します。
dbatools PowerShellモジュール には、必要な機能を正確に実行する関数があります- Restore-DbaDatabase
。基本的な復元の場合:
Restore-DbaDatabase -server DESTINATIONSERVER -path \\BackupServer\Path\To\Backups -MaintenanceSolutionBackup
インスタンスのデフォルトパス以外の場所にファイルを配置したり、データベースやファイルの名前を変更したり、最後のバックアップより前の特定の時点でさえ指定できる追加のパラメーターがあります(ただし、この時点は指定されたファイルから到達可能)。
宛先のSQL Serverインスタンスが、バックアップが保存されているUNCパスへの読み取りアクセスを必要とするアカウント。それが不可能な場合は、そのディレクトリ構造をアクセス可能な場所にコピーするか、別の資格情報を使用してドライブをマップする必要があります。
これを行うには、 New-PSDrive
代替の認証情報を使用してドライブをマップします(もしそうなら、これらの認証情報を安全に保存する 必要があります タスクスケジューラを介して実行されるスクリプトからこれを行う)。
New-PSDrive -Name R -Root \\BackupServer\Path\To\Backups;
Copy-Item -path r:\*.* -destination \\Path\That\Destination\Instance\Can\Read
Restore-DbaDatabase -server DESTINATIONSERVER -path \\Path\That\Destination\Instance\Can\Read;
Remove-PSDrive -Name R;