Отказ от ответственности: я новичок в Powershell.
Я пытаюсь создать сценарий резервного копирования двух баз данных SQL Server Express с помощью сценария SQL, запускаемого из Powershell.Когда я запускаю SQL From SSMS, он работает без таймаута.Когда я запускаю SQL из сценария Powershell, резервное копирование небольшой базы данных завершается успешно, но резервное копирование большей базы данных завершается неудачно с этой ошибкой:
Invoke-Sqlcmd : Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
At C:\Program Files\DBBackups\dbfull_backup.ps1:5 char:1
+ Invoke-Sqlcmd -ServerInstance "$serverInstance" -InputFile "C:\Program Files\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
+ FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
Вот строка 5 из сценария .ps1, который имеет Invoke-SqlCmd:
Invoke-Sqlcmd -ServerInstance "$serverInstance" -InputFile "C:\Program Files\DBBackups\dbfull_backups.sql" -Variable $sqlVariable -Verbose *> $outputFile
Вот команда BACKUP из SQL:
BACKUP DATABASE FrameStore TO DISK = @framestore_backup_file;
Отличается ли время ожидания при запуске через Powershell / Invoke-Sqlcmd от SSMS?При запуске в SSMS резервное копирование занимает менее 3 минут, поэтому оно не близко к 10-минутному числу, которое я видел в документации по docs.microsoft.Вот выходные данные резервного копирования при запуске в SSMS:
BACKUP DATABASE successfully processed 467003 pages in 176.917 seconds (20.622 MB/sec).
Информация о версии:
ОС: Windows Server 2012 R2
MS SQL Server Express 2017
PSVersion 4.0
(Приношу свои извинения, если это уже решено на другой странице SO. Я не смог найти эту конкретную проблему, хотя она кажется довольно простой.)
РЕДАКТИРОВАТЬ: * 1028Я пошел дальше и попытался добавить параметр -QueryTimeout, установленный в 3600 секунд.Это позволило выполнить резервное копирование без ошибок.Итак, что по умолчанию?
Согласно странице Microsoft Docs для параметра Invoke-Sqlcmd -QueryTimeout :
Задает количество секунд до истечения времени ожидания запросов.Если значение тайм-аута не указано, запросы не истекают.
Итак ... если это правда, и я не указал время ожидания, почему оно истекло?Изменилось ли это с версии PS 4 на версию, документированную?Кажется ли плохой практикой устанавливать время ожидания для резервной копии?Мне интересны мнения по этому поводу.Это работает сейчас, но я все еще не уверен в своем решении (обходной путь?).