다른 원격 서버에서 DB 서버의 데이터베이스에 접속할 수 없습니다.

다른 원격 서버에서 DB 서버의 데이터베이스에 접속할 수 없습니다.

SQL 쿼리를 실행하는 스크립트를 실행하려고 합니다. DB 서버 자체에서 실행할 때는 제대로 작동하지만 원격 서버에서 동일한 스크립트를 실행하려고 하면 실패합니다. 그런 다음 DB 서버에 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]
"
} 

DB 서버의 -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

관련 정보