Veeam. Ошибка при бекапе SQL 0x800401fd. Failed to invoke func [ExploreInstances]

В версии 9.5.4.2866 сервера для резервного копирования Veeam Backup & Replication похоже есть небольшая проблема при бекапе логов MS SQL. В процессе их копирования можно столкнуться иногда с ошибкой Ошибка при бекапе SQL 0x800401fd. Failed to invoke func [ExploreInstances].

Для решения этой проблемы есть фикс, который можно скачать по ссылке. А вот инструкция по его установке от сотрудника поддержки Veeam:
1. Остановите все задания, в том числе бекап логов (для этого придется перевести исходные задания в статус Disabled, см. https://helpcenter.veeam.com/docs/backup/hyperv/starting_transaction_log_jobs.html?ver=95u4#parent).
2. Закройте консоль Veeam, остановите все службы Veeam на всех серверах, которые могут использоваться в качестве Guest Interaction Proxy (в вашем случае, судя по всему, используется только admin-srv, но, пожалуйста, проделайте эту операцию на всех возможных узлах)
3. На сервере Veeam и всех используемых Guest Interaction Proxy перейдите в каталог C:\Program Files (x86)\Veeam\Backup Transport\GuestInteraction и переименуйте файл Veeam.Guest.Interaction.Proxy.exe в Veeam.Guest.Interaction.Proxy.exe_orig
4. Замените файл на новую версию из загруженного архива.
5. Запустите все службы Veeam (порядок произвольный) на серверах, откройте консоль, включите задания резервного копирования

Veeam — Восстановление на нестандартный порт SQL

Если у вас SQL работает на нестандартном порту, например как здесь:то тогда при восстановлении SQL через консоль Veeam Backup & Replication на такой порт вы столкнетесь с тем, что будет стандартная ошибка:

«The server was not found or was not accessible».
Для решения этой проблемы при восстановлении нужно указывать порт, но при этом в инструкциях Veeam об этом ничего не сказано. Вот как это сделать правильно:

порт указываем после адреса сервера и запятой. Для DBA такое написание не новость, а вот для остальных админов это немного непривычно.

 

 

Ошибка «[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied»

При бекапе SQL находящимся на сервере, на котором отключен TLS 1.0 возникает ошибка, указанная в заголовке темы.
Для ее решения у Veeam есть статья , в которой сказано, что нужно создать ключ UseSqlNativeClientProvider типа DWORD со значением 1 в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Veeam\Veeam Backup and Replication.
Самое обидное, что в этой статье ничего не сказано про агенты Veeam, на которых у меня возникла проблема. Для них оказалось нужно создать тот же ключ в другой ветке реестра- HKLM\SOFTWARE\Veeam\Veeam Endpoint Backup.
После этого достаточно перезапустить службы Veeam на сервере.

Veeam BR: Сбор информации о способах бекапа SQL-серверов

Привет!
Понадобилось выяснить как резервируются сервера SQL в Veeam Backup & Replication. Как известно, их можно бекапить несколькими способами

Вариант бекапа «Try application processing, but ignore failures» у меня не используется, поэтому в скрипте он не обрабатывается. Проверка идет только заданий типа «Windows Agent Backup» и «VMware Backup», то есть Linux, Copy Backup и ленты я не рассматриваю.

Add-PSSnapin VeeamPSSnapIn
$Jobs = Get-VBRJob | where {($_.IsScheduleEnabled -like "True") -and ($_.VssOptions.VssSnapshotOptions.ApplicationProcessingEnabled -like "True") -and ($_.VssOptions.VssSnapshotOptions.Enabled -like "True") -and (($_.TypeToString -like "Windows Agent Backup") -or ($_.TypeToString -like "VMware Backup"))}
foreach ($Job in $Jobs)
{
$Objects = $Job.GetObjectsInJob()
foreach ($Object in $Objects)
{
if (($Object.VssOptions.VssSnapshotOptions.Enabled -like 'True') -and ($Object.VssOptions.VssSnapshotOptions.IgnoreErrors -like 'False'))
{
if ($Object.VssOptions.VssSnapshotOptions.IsCopyOnly)
{
Write-Host "-----------------------------------------------------------------"
Write-Host "Имя задания: " $Job.Name
Write-Host "Имя сервера: " $Object.Name
Write-Host "Тип бекапа SQL: Transaction logs copy only (Lets another application use logs)"
}
else
{
if ($Object.VssOptions.SqlBackupOptions.TransactionLogsProcessing -like 'NeverTruncate')
{
Write-Host "-----------------------------------------------------------------"
Write-Host "Имя задания: " $Job.Name
Write-Host "Имя сервера: " $Object.Name
Write-Host "Тип бекапа SQL: Do not truncate logs (Simple Recovery Model)"
}
if ($Object.VssOptions.SqlBackupOptions.TransactionLogsProcessing -like 'TruncateOnlyOnSuccessJob')
{
Write-Host "-----------------------------------------------------------------"
Write-Host "Имя задания: " $Job.Name
Write-Host "Имя сервера: " $Object.Name
Write-Host "Тип бекапа SQL: Truncate logs (prevents logs from growing forever)"
}
if ($Object.VssOptions.SqlBackupOptions.TransactionLogsProcessing -like 'Backup')
{
$Time_min = $Object.VssOptions.SqlBackupOptions.BackupLogsFrequencyMin
Write-Host "-----------------------------------------------------------------"
Write-Host "Имя задания: " $Job.Name
Write-Host "Имя сервера: " $Object.Name
Write-Host "Тип бекапа SQL: Backup SQL logs every $Time_min minutes"
}
}
}

}
}

Veeam backup error Code: 1326

Привет! Если вы поменяете пароль для учетной записи, с помощью которой Veeam подключается к серверам для бекапа, то можете столкнуться с ошибкой  «Failed to connect to Oracle Details: Failed to logon user Win32 error:Logon failure: unknown user name or bad password. Code: 1326«, даже если он реально правильный. Ошибка возникает после смены пароля в бекапных заданиях, где включена функция «Application-aware processing» и где используется Veeam Agent. Конкретно у меня ошибка была только при ночных системных бекапах  серверов SQL, бекапы логов успешно проводились. Для решения проблемы необходимо обновить Veeam Backup and Recovery и Veeam Agent. Их версии должны быть 9.5.4.2866 и 3.0.2 соответственно. В моем случае понадобилось только обновить агенты и даже не пришлось перезагружать сервера.

Автоматическое восстановление базы данных SQL из Veeam Backup

Понадобилось автоматически восстанавливать MS SQL базу данных из Veeam Backup & Replication 9.5. Задание должно было запускаться сразу после того, как заканчивалось резервное копирование и восстановление должно было происходить на другой сервер. Вот какой скрипт у меня получился:

Add-PSSnapin VeeamPSSnapIn

$source_host        = "SQL_Original"
$source_db1         = "DB1"
$source_db2         = "DB2"
$source_db3         = "DB3"
$source_db4         = "DB4"
$target_host        = "SQL_Target"
$target_cred        = Get-VBRCredentials -Name "onix\onix_backup"
$target_instance    = "test"

$target_db1    = $source_db1
$target_db2    = $source_db2
$target_db3    = $source_db3
$target_db4    = $source_db4

$(
$restorepoint = Get-VBRApplicationRestorePoint -SQL -Name $source_host| Sort-Object creationtime -Descending | Select-Object -First 1
$database1 = Get-VBRSQLDatabase -ApplicationRestorePoint $restorepoint -Name $source_db1
$database2 = Get-VBRSQLDatabase -ApplicationRestorePoint $restorepoint -Name $source_db2
$database3 = Get-VBRSQLDatabase -ApplicationRestorePoint $restorepoint -Name $source_db3
$database4 = Get-VBRSQLDatabase -ApplicationRestorePoint $restorepoint -Name $source_db4
$restore_session = Start-VBRSQLDatabaseRestore -Database $database1 -ServerName $target_host -InstanceName $target_instance -DatabaseName $target_db1 -GuestCredentials $target_cred -SqlCredentials $target_cred -Force -Wait
$restore_session = Start-VBRSQLDatabaseRestore -Database $database2 -ServerName $target_host -InstanceName $target_instance -DatabaseName $target_db2 -GuestCredentials $target_cred -SqlCredentials $target_cred -Force -Wait
$restore_session = Start-VBRSQLDatabaseRestore -Database $database3 -ServerName $target_host -InstanceName $target_instance -DatabaseName $target_db3 -GuestCredentials $target_cred -SqlCredentials $target_cred -Force -Wait
$restore_session = Start-VBRSQLDatabaseRestore -Database $database4 -ServerName $target_host -InstanceName $target_instance -DatabaseName $target_db4 -GuestCredentials $target_cred -SqlCredentials $target_cred -Force -Wait
) *>&1 >> "C:\SQLRestore_errors.log"

Все достаточно просто: берется оригинальный хост с базами данных, список баз для восстановления, хост на который надо восстановить, учетная запись от имени которой будет восстановление (должна быть сохранена в «Manage Credentials» и целевой инстанс SQL если требуется). Находится последняя точка резервного копирования базы (на точку восстановления с проигрыванием логов восстановиться можно, но не получится это сделать автоматически) и восстанавливается. Если происходят ошибки, то они выводятся в текстовый файл (в консоли Veeam ошибки работы скрипта показаны не будут).

Остается в задаче, которая бекапит SQL-сервер, настроить запуск скрипта, делаем это в «Advanced Settings». Задаем так строку C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noninteractive -file «C:\Scripts\SQLRestore.ps1»