Runbook Powershell Invoke-Sqlcmd соединение SQL Server MI - PullRequest
0 голосов
/ 12 июня 2019

У меня есть некоторый код 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 для подключения к экземпляру, я могу подтвердить, что в поле Разрешить удаленные подключения установлен флажок.

1 Ответ

0 голосов
/ 17 июня 2019

Вы можете использовать последние SQL-команды Azure Rm и удалить базу данных.

   # Get the current context of the account which can perform operations on the database server
    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
    Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose

    # assign resourcegroup, database server and database names
    $rgname = "rgname"
    $dbservername = "servername"
    $dbname = "dbname"

    if(Get-AzureRmSqlDatabase -ResourceGroupName $rgname -ServerName $dbservername -DatabaseName $dbname)
        {
        Try{
            Remove-AzureRmSqlDatabase -ResourceGroupName $rgname -ServerName $dbservername -DatabaseName $dbname -Force
            Write-Output "Dropped Database $database"
        }Catch{
            $errorMessage = $_.Exception.Message
            Write-Output $errorMessage
            Write-Output 'Failed to delete database'
        }
    }

Надеюсь, это поможет.

...