Невозможно получить доступ к базе данных на сервере БД с другого удаленного сервера

Невозможно получить доступ к базе данных на сервере БД с другого удаленного сервера

Я пытаюсь запустить скрипт, который выполняет SQL-запрос. Он отлично работает при выполнении на самом сервере БД, но когда я пытаюсь запустить тот же скрипт на удаленном сервере, он терпит неудачу. Затем я попытался сохранить файл powershell на сервере БД и просто заставить удаленный сервер выполнить этот файл powershell, но он утверждает, что файл не существует.

 Invoke-Command -ComputerName "advtch-db1" -ScriptBlock {
 Push-Location C:\Scripts\SQL 
 ls -r
 } 

Вывод этого кода показывает все, КРОМЕ нового файла PowerShell, который я только что создал.

Invoke-Command -ComputerName advtch-db1 -ScriptBlock {
Invoke-Sqlcmd -ServerInstance "advtch-db1" -Query "
SELECT TOP (1000) [SettingID]
      ,[Name]
      ,[Value]
      ,[LastUpdated]
  FROM [advtch_TEST].[dbo].[Settings]
"
} 

Когда я запускаю команду, которая находится внутри -ScriptBlock на сервере БД, она выполняется нормально. Но когда я пытаюсь запустить ее на удаленном сервере, она выдает следующую ошибку.

 Database 'advtch_TEST' cannot be opened because it is offline.
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
    + FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
    + PSComputerName        : advtch-db1 

решение1

Попробуйте устранить неполадки с помощью интерактивного сеанса:

PS C:\> Enter-PSSession Enter-PSSession -ComputerName "advtch-db1"
[advtch-db1]: PS C:\WINDOWS\system32> Invoke-Sqlcmd -ServerInstance "advtch-db1" -Query "My query"

Модуль SQL может не загружаться, или, может быть, есть другие проблемы, которые можно прояснить таким образом. Для справки, вот команда, которую я использую для той же цели:

$result = Invoke-Command -ComputerName 'MySQLServer.domain.com' {
    Invoke-Sqlcmd -ServerInstance '.\SQLEXPRESS'  -Database MyDB -Query "SELECT strDisplayName,field1,field2,field3 
FROM t_table
WHERE field1 IN (6,7,43,83,94,95,96)
ORDER BY strDisplayName"
} | select strDisplayName,field1,field2,field3 

Вы также можете попробовать подключиться с помощьюsqlcmd.exeс вашей локальной машины, хотя это вернет только строки вместо объектов. Достаточно хорошо для отчетов и прочего:

sqlcmd.exe -S myServer\instanceName

Связанный контент