我正在使用混合 SQL Server 备份文件的目录,并且需要使用 PowerShell 中的 dbatools 恢复特定数据库。以下是我的备份文件夹的目录结构:
PS C:\Users\administrator> tree \\dc1\backup /F
Folder PATH listing
\\DC1\BACKUP.
│ Hadr_endpoint_cert.cer
│ Hadr_endpoint_cert.pvk
│
└───NODE1
└───MSSQLSERVER
├───AdventureWorks2016
│ ├───Full
│ │ Full_AdventureWorks2016_20240219011641.bak
│ │
│ └───Log
│ Log_AdventureWorks2016_20240219011647.trn
│
└───Credit
├───Full
│ Full_Credit_20240219012730.bak
│
└───Log
Log_Credit_20240219012735.trn
PS C:\Users\administrator>
node2
当尝试使用以下命令恢复信用数据库时,我遇到了问题:
$files = Get-ChildItem -Path \\dc1\backup -Recurse -Include *.trn,*.bak
Restore-DbaDatabase -SqlInstance node2 -Path $files -DatabaseName Credit -NoRecovery -ExecuteAs sa
这会导致错误:
WARNING: [01:27:36][Restore-DbaDatabase] Multiple Databases' backups passed in, but only 1 name to restore them under. Stopping as cannot work out how to proceed.
使用此命令代替:
Restore-DbaDatabase -SqlInstance node2 -Path \\dc1\backup -DirectoryRecurse -DatabaseName Credit
导致不同的错误:
WARNING: [01:32:00][Get-DbaBackupInformation] Failure on node2 | The media family on device '\\dc1\backup\Hadr_endpoint_cert.cer' is incorrectly formed. SQL Server cannot process this media family. RESTORE HEADERONLY is terminating abnormally.
我知道我可以通过命名约定手动选择与 Credit 数据库相关的文件,但如果备份文件的文件名中没有数据库名称怎么办?在过滤掉不相关文件的同时自动执行此恢复的最佳方法是什么?
任何关于在这种情况下正确使用 dbatools 的指导或提示将不胜感激!先感谢您。
如果您知道实际路径,则可以直接转到该数据库的文件夹。
否则,您可以用来
Get-DbaBackupInformation
仅获取该数据库的相关备份。