使用 Windows 上的 PowerShell 管理 Linux 上的 SQL Server
適用於:SQL Server - Linux
本文介紹 SQL Server PowerShell,並逐步引導您了解如何用在 Linux 上的 SQL Server 的幾個範例。 SQL Server 的 PowerShell 支援目前適用於 Windows、macOS 與 Linux。 本文將逐步引導您使用 Windows 電腦連線到 Linux 上的遠端 SQL Server 執行個體。
安裝 Windows 上最新版的 SQL PowerShell
Windows 上的 SQL Server PowerShell 模組保存在 PowerShell 資源庫中。 使用 SQL Server 時,您應該一律使用最新版本的 SqlServer PowerShell 模組。
開始之前
閱讀 Linux 上的 SQL Server 的已知問題。
啟動 PowerShell 並匯入 sqlserver 模組
讓我們從啟動 Windows 上的 PowerShell 開始。 在您的 Windows 電腦上使用 Win+R,然後鍵入 PowerShell,啟動新的 Windows PowerShell 工作階段。
SQL Server 提供名為 SqlServer 的 PowerShell 模組。 您可以使用 SqlServer 模組,將 SQL Server 元件 (SQL Server 提供者和 Cmdlet) 匯入 PowerShell 環境或指令碼中。
在 PowerShell 提示字元中複製並貼上下列命令,將 SqlServer 模組匯入到目前的 PowerShell 工作階段:
Import-Module SqlServer
在 PowerShell 提示字元中鍵入下列命令,確認 SqlServer 模組已正確匯入:
Get-Module -Name SqlServer
PowerShell 應該會顯示類似下列輸出的資訊:
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 21.1.18102 SqlServer {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...
連線到 SQL Server 並取得伺服器資訊
讓我們使用 Windows 上的 PowerShell 連線到您在 Linux 上的 SQL Server 執行個體,並顯示幾個伺服器屬性。
在 PowerShell 提示字元中複製並貼上下列命令。 當您執行這些命令時,PowerShell 將會:
- 顯示對話方塊,提示您輸入執行個體的主機名稱或 IP 位址
- 顯示 [Windows PowerShell 認證要求] 對話方塊,它會提示您輸入認證。 您可以使用「SQL 使用者名稱」 和「SQL 密碼」 連線至 Linux 上的 SQL Server 執行個體
- 使用 Get-SqlInstance Cmdlet 連線到伺服器,並顯示一些屬性
(選擇性) 您可以將 $serverInstance
變數取代為您 SQL Server 執行個體的 IP 位址或主機名稱。
# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential
# Connect to the Server and get a few properties
Get-SqlInstance -ServerInstance $serverInstance -Credential $credential
# done
PowerShell 應該會顯示類似下列輸出的資訊:
Instance Name Version ProductLevel UpdateLevel HostPlatform HostDistribution
------------- ------- ------------ ----------- ------------ ----------------
your_server_instance 14.0.3048 RTM CU13 Linux Ubuntu
注意
如果這些值沒有顯示任何內容,與目標 SQL Server 執行個體的連線很可能失敗。 請確定您可以使用相同的連線資訊,從 SQL Server Management Studio 連線。 然後檢閱連線疑難排解建議。
使用 SQL Server PowerShell 提供者
連線到 SQL Server 執行個體的另一個選項是使用 SQL Server PowerShell 提供者。 此提供者可讓您巡覽 SQL Server 執行個體,如同您在物件總管中巡覽樹狀結構一樣,但是在 cmdline 上。 根據預設,此提供者會顯示為名為 SQLSERVER:\
的 PSDrive,您可以用於連線及瀏覽您網域帳戶可存取的 SQL Server 執行個體。 如需如何針對 Linux 上的 SQL Server 設定 Active Directory 驗證的詳細資訊,請參閱組態步驟。
您也可以搭配 SQL Server PowerShell 提供者使用 SQL 驗證。 若要這麼做,請使用 New-PSDrive
Cmdlet 建立新的 PSDrive,並提供適當的認證進行連線。
在下面的範例中,您會看到一個如何使用 SQL 驗證建立新 PSDrive 的範例。
# NOTE: We are reusing the values saved in the $credential variable from the above example.
New-PSDrive -Name SQLonDocker -PSProvider SqlServer -Root 'SQLSERVER:\SQL\localhost,10002\Default\' -Credential $credential
您可以藉由執行 Get-PSDrive
Cmdlet 確認磁碟機是否建立。
Get-PSDrive
建立新的 PSDrive 之後,您就可以開始加以瀏覽。
dir SQLonDocker:\Databases
輸出內容可能如下所示。 您可能注意到了,該輸出類似 SQL Server Management Studio (SSMS) 會顯示於 [資料庫] 節點上的內容。 它會顯示使用者資料庫,而不是系統資料庫。
Name Status Size Space Recovery Compat. Owner
Available Model Level
---- ------ ---- ---------- -------- ------- -----
AdventureWorks2022 Normal 209.63 MB 1.31 MB Simple 130 sa
AdventureWorksDW2022 Normal 167.00 MB 32.47 MB Simple 110 sa
AdventureWorksDW2022 Normal 188.00 MB 78.10 MB Simple 120 sa
AdventureWorksDW2022 Normal 172.00 MB 74.76 MB Simple 130 sa
AdventureWorksDW2022 Normal 208.00 MB 40.57 MB Simple 140 sa
如果您需要查看執行個體上的所有資料庫,其中一個選項是使用 Get-SqlDatabase Cmdlet。
檢查 SQL Server 錯誤記錄檔
下列步驟會使用 Windows 上的 PowerShell,檢查 Linux 上 SQL Server 執行個體上的錯誤記錄檔連線。 我們也會使用 Out-GridView Cmdlet,以方格檢視顯示來顯示錯誤記錄檔中的資訊。
在 PowerShell 提示字元中複製並貼上下列命令。 可能需要幾分鐘的時間執行。 這些命令會執行下列動作:
- 顯示對話方塊,提示您輸入執行個體的主機名稱或 IP 位址
- 顯示 [Windows PowerShell 認證要求] 對話方塊,它會提示您輸入認證。 您可以使用「SQL 使用者名稱」 和「SQL 密碼」 連線至 Linux 上的 SQL Server 執行個體
- 使用 Get-SqlErrorLog Cmdlet 連線到 Linux 上的 SQL Server 執行個體,並擷取自昨天起的錯誤記錄檔
- 將輸出輸送至 Out-GridView Cmdlet
(選擇性) 您可以將 $serverInstance
變數取代為您 SQL Server 執行個體的 IP 位址或主機名稱。
# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential
# Retrieve error logs since yesterday
Get-SqlErrorLog -ServerInstance $serverInstance -Credential $credential -Since Yesterday | Out-GridView
# done