null

Ошибки модуля SQLPS при работе с SSHFS-WIN в MS SQL SERVER

Некоторое время назад один из моих коллег разместил несколько статей по использованию SFTP с авторизацией по ключам в среде Windows.

Как показала практика, решение работоспособно, но имеет некоторые особенности, и требует внимания к поведению некоторых модулей MS SQL SERVER .

Напомню, что для монтирования диска используется PowerShell-скрипт, запускаемый через задание MS SQL Agent.

При подобном методе запуска нужно понимать, что исполнение кода будет происходить ВНЕ инстанса MS SQL, в отдельном окне. Поведение системы аналогично случаю, когда мы просто запустили sqlps.exe и далее пытаемся выполнить код.

Это приводит к тому, что самостоятельно задание в MS SQL не завершится.

Вечно длящееся задание само по себе нездоровое явление, но  с этим можно было бы смириться(ввести таймаут, наконец), если бы не поведение при этом процесса sqlps.exe.  Этот процесс страдает утечкой памяти, и незавершенный sqlps.exe может привести к полной остановке системы примерно за сутки своего существования.

​​​​​​​Решение может быть разным, и в данной заметке я не ставлю перед собой цели перечислить все возможные пути - кому-то проще использовать .bat-файлы, кто-то может запускать скрипт через планировщик... мы же остановились на принудительном завершении процесса по выполнению скрипта.

Для этого используется процедура
​​​​​​​
    [Environment]::Exit(0)

в конце выполняемого скрипта. Попытки использовать exit или  Exit-PSHostProcess успеха не имели.

 

Но и это еще не все. Даже при принудительном завершении процесса, ИНОГДА (причины и влияние внешних условий неясны) могут наблюдаться сбои при работе SFTP  - например, sqlps.exe  отказывается завершаться после отработки скрипта и остается висеть в системе, или же смонтированный диск оказывается недоступен, хотя и отображается корректно... и прочие трудноуловимые глюки подобного рода. 


Для борьбы с подобным был разработан небольшой workaround

1) в task manager завершить процессы sshfs-win, sshfs, ssh  и возможно sqlps.exe(при наличии)
2) запустить задание [имя задания в MS SQL SERVER] , убедиться что оно в статусе "выполняется"
3) вручную завершить процесс sqlps.exe, что приведет к неуспешному завершению задания MS SQL
4) заново запустить [имя задания в MS SQL SERVER] , убедиться что оно отработало и завершилось корректно, а sqlps.exe ​​​​​​​выгрузился

После вышеуказанных действий обычно диск монтируется успешно, лишних процессов в памяти нет, и все работает штатно. Однако еще раз отмечу, что это именно workaround ​​​​​​​, а не универсальное решение.

 

Коротко о себе:

Работаю инженером в компании Tune IT.

Ничего не найдено. n is 0