Подключение к базе данных SQL Azure через Powershell

Я пытался подключить powershell к базе данных SQL Azure из локальной сети. Я попробовал следующий фрагмент

$params = @{
  'Database' = 'dbsitenamehere'
  'ServerInstance' =  'instancename.database.windows.net'
  'Username' = 'abcites'
  'Password' = 'atbasIcpr0d'
  'OutputSqlErrors' = $true
  'Query' = 'SELECT * FROM Users'
 }
 Invoke-Sqlcmd  @params

Но я получил это предупреждение:

ПРЕДУПРЕЖДЕНИЕ. Не удалось получить информацию о службе SQL Server. Попытка подключиться к WMI на «Microsoft.WindowsAzure.Commands.SqlDatabase.Types.ps1xml» не удалась со следующей ошибкой: сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)

Я думаю, что вышеизложенное было решено с помощью решения, включив службу локатора RPC из ссылки на службы компонентов вручную, как это было предоставлено Hodentek @ http://hodentekmsss.blogspot.in/2014/11/how-to-overcome-error-while-importing.html >> "Как устранить ошибку при импорте модуля SQLPS в Powershell?"

PS SQLSERVER:\> Import-Module “sqlps” -DisableNameChecking
PS SQLSERVER:\> cd SQL
PS SQLSERVER:\SQL> dir
  MachineName                     
  -----------                     
  PC181578                        

PS SQLSERVER:\SQL> cd LocalHost
PS SQLSERVER:\SQL\LocalHost> dir

Но я получаю следующую ошибку и застреваю. Я упускаю что-то глупое, я думаю. . Измученный, :(

Invoke-Sqlcmd : Invalid object name 'Users'.
At line:17 char:3
+   Invoke-Sqlcmd  @params
+   ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
+ FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

Запросите несколько предложений, которые могли бы заставить меня двигаться. Я чувствую, что чего-то не хватает в моем подходе к подключению.

Спасибо

Х Бала


person H Bala    schedule 02.06.2016    source источник


Ответы (1)


Запуск службы локатора RPC был определенно правильным шагом. Было исправлено предупреждение и локальный поиск.

Но причина, по которой я получил «Ошибка недопустимого объекта», заключалась в том, что импорт завершался, но не создавал всю схему, как определено.

Близкие наблюдения выявили следующее:

<сильный>1. Get-AzureSqlDatabaseImportExportStatus не возвращает статус.

Get-AzureSqlDatabaseImportExportStatus -RequestId $ImportRequest.RequestGuid            
  -ServerName $deployParameters.Item('sqlserverName') 
  -Username $credential.UserName
  1. Попытка программным путем, как показано ниже, узнать прогресс, показывает, что он зависает на 5%, а затем внезапно мигает complete.

        $ImportRequest = Start-AzureSqlDatabaseImport -SqlConnectionContext $SqlCtx -StorageContainer $Container -DatabaseName $deployParameters.Item('databaseName') -BlobName $BlobName
    
                        # Check the status of the import
                    Do
                    {
                        $importStatus = Get-AzureSqlDatabaseImportExportStatus -Request $importRequest
    
                        # Check if import failed
                        if($importStatus.Status -eq "Failed")
                        {
                            Write-Output -Message $importStatus.ErrorMessage
                            $importDone = 1;
                        }
    
                        # Check if import is completed
                        if($importStatus.Status -eq "Completed")
                        {
                            Write-Output "$(Get-Date -f $timeStampFormat) - Restore database complete"
                            $importDone = 1;
                        }
    
                        # If not failed or completed, return the status of the current import
                        if(($importStatus.Status -ne "Completed" -or $importStatus.Status -ne "Failed") -and $importDone -ne 1)
                        {
                            Write-Output "$(Get-Date -f $timeStampFormat) - Import status: $($importStatus.Status)"
                        }
    
                        # Added a sleep so that the Write-Output doesn't get flooded
                        Start-Sleep -s 3
                    }While($importDone -ne 1)
    
  2. Попытка непосредственно в приглашении PS возвращает мне импорт как завершенный, хотя в SSMS я вижу только 30% созданных таблиц!!

      PS SQLSERVER:\> Get-AzureSqlDatabaseImportExportStatus -RequestId  
      $ImportRequest.RequestGuid -ServerName   
      $deployParameters.Item('sqlserverName') -Username $credential.UserName
      cmdlet Get-AzureSqlDatabaseImportExportStatus at command pipeline   position 1
      Supply values for the following parameters:
      (Type !? for Help.)
      Password: ABCEfg1pr0
    

BlobUri: https://ABC.blob.core.windows.net/kind-snapshot/kind-snapshot.bacpac

Имя базы данных: Pilotdbtrialrun

Сообщение об ошибке :

LastModifiedTime : 03.06.2016 14:29:29

Время в очереди : 03.06.2016 14:27:42

Идентификатор запроса: 0f76af7b-7452-4cd4-a7a8-d6XXX4dc5923

Тип запроса: Импорт

Имя сервера: pilotsrvrtrialrun.database.windows.net

Статус: Завершено

Данные расширения:

<сильный>4. Импорт через портал для того же рюкзака правильно создает полные таблицы базы данных.

person H Bala    schedule 03.06.2016
comment
Любые предложения о том, почему импорт bacpac ведет себя по-разному при выполнении через Powershell и портал? - person H Bala; 03.06.2016