無法從不同的遠端伺服器存取資料庫伺服器上的資料庫

無法從不同的遠端伺服器存取資料庫伺服器上的資料庫

我正在嘗試執行一個執行 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

相關內容