У меня есть некоторый код Powershell для удаления базы данных в управляемом экземпляре SQL Server, который я хотел бы запланировать с помощью Azure Automation. Код отлично работает в Windows Powershell ISE.
#Type the Managed instance admin login
$username = "uname"
#Type the Managed instance admin password
$password = 'pwd'
#Type the Full Managed instance name
$managedInstance = "sql-srvr_mangedinstance.database.windows.net"
#Leave this parameter as is
$database = "master"
#Drop Database before restore
Invoke-Sqlcmd -ServerInstance $managedInstance -Database $database -Username $username -Password $password -Query "DROP DATABASE [DB_NAME]"
Write "Dropped Database DB_NAME"
К сожалению, это дает мне эту ошибку, когда я запускаю ее через Runbooks в Azure.
Invoke-Sqlcmd: во время установления соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром.
Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Server
настроен для разрешения удаленных подключений. (поставщик: поставщик TCP, ошибка: 0 - попытка подключения не удалась, поскольку
подключенная сторона не ответила должным образом через некоторое время или не удалось установить соединение, так как подключено
хост не ответил.)
В строке: 32 символа: 1
+ Invoke-Sqlcmd -ServerInstance $ managedInstance -Database $ database -U ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (:) [Invoke-Sqlcmd], SqlException
+ FullyQualifiedErrorId: SqlExceptionError, Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
Invoke-Sqlcmd:
В строке: 32 символа: 1
+ Invoke-Sqlcmd -ServerInstance $ managedInstance -Database $ database -U ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: ParserError: (:) [Invoke-Sqlcmd], ParserException
+ FullyQualifiedErrorId: ExecutionFailureException, Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
Я видел решения этой проблемы, изменив подключение к серверу на «Server = tcp: managedinstancename.database.windows.net: 1433», но это больше похоже на базу данных Sql Server на виртуальной машине. Я также включил команду Import-Module Sqlserver в начало моего кода, хотя этот модуль уже находится в блейд-модуле модулей Runbook. Используя SSMS для подключения к экземпляру, я могу подтвердить, что в поле Разрешить удаленные подключения установлен флажок.