Estou trabalhando com um diretório de arquivos mistos de backup do SQL Server e preciso restaurar um banco de dados específico usando dbatools no PowerShell. Abaixo está a estrutura de diretórios da minha pasta de backup:
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>
Ao tentar restaurar o banco de dados de crédito node2
com o seguinte comando, encontro problemas:
$files = Get-ChildItem -Path \\dc1\backup -Recurse -Include *.trn,*.bak
Restore-DbaDatabase -SqlInstance node2 -Path $files -DatabaseName Credit -NoRecovery -ExecuteAs sa
Isso resulta no erro:
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.
Usando este comando:
Restore-DbaDatabase -SqlInstance node2 -Path \\dc1\backup -DirectoryRecurse -DatabaseName Credit
Leva a um erro diferente:
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.
Entendo que posso selecionar manualmente os arquivos relacionados ao banco de dados de crédito por sua convenção de nomenclatura, mas e se os arquivos de backup não tiverem o nome do banco de dados em seu nome de arquivo? Qual seria a melhor abordagem para automatizar essa restauração enquanto filtra arquivos não relacionados?
Qualquer orientação ou dica sobre o uso adequado de dbatools para este cenário seria muito apreciada! Agradeço antecipadamente.
Se você soubesse o caminho real, basta ir diretamente para a pasta desse banco de dados.
Caso contrário, você pode usar
Get-DbaBackupInformation
para obter apenas backups relevantes para esse banco de dados.