使用 PowerShell 建立 Always On 可用性群組

適用於:SQL Server

本主題說明如何透過 SQL Server 中的 PowerShell,使用 PowerShell Cmdlet 來建立和設定 Always On 可用性群組。 「可用性群組」 (Availability Group) 會定義當做單一單位容錯移轉的一組使用者資料庫,以及支援容錯移轉的一組容錯移轉夥伴 (也稱為 「可用性複本」 (Availability Replica))。

注意

如需可用性群組的簡介,請參閱 Always On 可用性群組概觀 (SQL Server)

注意

除了使用 PowerShell Cmdlet,您也可以使用 [建立可用性群組精靈] 或 Transact-SQL。 如需詳細資訊,請參閱使用新增可用性群組對話方塊 (SQL Server Management Studio)建立可用性群組 (Transact-SQL)

開始之前

必要條件、限制及建議

  • 建立可用性群組之前,請確認 SQL Server 的主控件執行個體分別位於 Windows Server 容錯移轉叢集 (WSFC) 容錯移轉叢集的不同 WSFC 節點上。 此外,請確認您的伺服器執行個體符合其他伺服器執行個體必要條件和所有其他 Always On 可用性群組需求,而且您了解建議事項。 如需詳細資訊,強烈建議您閱讀 Always On 可用性群組的必要條件、限制和建議 (SQL Server)

權限

需要 系統管理員 (sysadmin) 固定伺服器角色的成員資格,以及 CREATE AVAILABILITY GROUP 伺服器權限、ALTER ANY AVAILABILITY GROUP 權限或 CONTROL SERVER 權限。

使用 PowerShell 建立和設定可用性群組

下表列出與設定可用性群組有關的基本工作,並指出 PowerShell 指令程式支援哪些工作。 Always On 可用性群組工作必須依照其出現在表格中的順序來執行。

Task PowerShell 指令程式 (如果可用) 或 Transact-SQL 陳述式 在何處執行工作
建立資料庫鏡像端點 (每個 SQL Server 執行個體一次) New-SqlHadrEndPoint 在缺少資料庫鏡像端點的每一個伺服器執行個體上執行。

若要變更現有資料庫鏡像端點,請使用 Set-SqlHadrEndpoint
建立可用性群組 首先,使用 New-SqlAvailabilityReplica Cmdlet 搭配 -AsTemplate 參數,針對您打算包含在可用性群組內之兩個可用性複本的每一個來建立記憶體內的可用性複本物件。

然後,使用 New-SqlAvailabilityGroup Cmdlet 及參考可用性複本物件來建立可用性群組。
於裝載初始主要複本的伺服器執行個體上執行。
將次要複本加入可用性群組 Join-SqlAvailabilityGroup 在裝載次要複本的每一個伺服器執行個體上執行。
準備次要資料庫 Backup-SqlDatabaseRestore-SqlDatabase 在裝載主要複本的伺服器執行個體上建立備份。

使用 NoRecovery 還原參數,還原裝載次要複本之每個伺服器執行個體上的備份。 如果在裝載主要複本的電腦和裝載目標次要複本的電腦之間有檔案路徑差異,也要使用 RelocateFile 還原參數。
將每一個次要資料庫加入可用性群組來啟動資料同步處理。 Add-SqlAvailabilityDatabase 在裝載次要複本的每一個伺服器執行個體上執行。

注意

若要執行指定的工作,請將目錄 (cd) 變更為指定的伺服器執行個體或執行個體。

使用 PowerShell

設定並使用 SQL Server PowerShell 提供者

注意

若要檢視指定 Cmdlet 的語法和範例,請使用 SQL Server PowerShell 環境中的 Get-Help Cmdlet。 如需詳細資訊,請參閱 Get Help SQL Server PowerShell

  1. 將目錄 (cd) 變更為要裝載主要複本的伺服器執行個體。

  2. 針對主要複本建立記憶體中的可用性複本物件。

  3. 針對每一個次要複本建立記憶體中的可用性複本物件。

  4. 建立可用性群組。

    注意

    可用性群組名稱的最大長度為 128 個字元。

  5. 若要將新的次要複本聯結至可用性群組,請參閱將次要複本聯結至可用性群組 (SQL Server)

  6. 如果是可用性群組中的每個資料庫,請使用 RESTORE WITH NORECOVERY 還原主要資料庫的最近備份來建立次要資料庫。

  7. 若要將每個新的次要資料庫聯結至可用性群組,請參閱將次要複本聯結至可用性群組 (SQL Server)

  8. (選擇性) 使用 Windows dir 命令來確認新可用性群組的內容。

注意

如果 SQL Server 執行個體的伺服器服務帳戶在不同的網域使用者帳戶下執行,請在每一個伺服器執行個體上建立其他伺服器執行個體的登入,並將此登入 CONNECT 權限授與本機資料庫鏡像端點。

範例

下列 PowerShell 範例會建立及設定一個名為 <myAvailabilityGroup> 的簡單可用性群組,其包含兩個可用性複本和一個可用性資料庫。 範例:

  1. 備份 <myDatabase> 及其交易記錄。

  2. 使用 <myDatabase> -NoRecovery 選項還原 和其交易記錄。

  3. 建立將由 SQL Server 本機執行個體裝載之主要複本的記憶體內表示法 (名為 PrimaryComputer\Instance)。

  4. 建立將由 SQL Server 執行個體裝載之次要複本的記憶體內表示法 (名為 SecondaryComputer\Instance)。

  5. 建立名為 <myAvailabilityGroup>的可用性群組。

  6. 將次要複本聯結至可用性群組。

  7. 將次要資料庫加入可用性群組。

# Backup my database and its log on the primary  
Backup-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.bak" `  
    -ServerInstance "PrimaryComputer\Instance"  
  
Backup-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.log" `  
    -ServerInstance "PrimaryComputer\Instance" `  
    -BackupAction Log   
  
# Restore the database and log on the secondary (using NO RECOVERY)  
Restore-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.bak" `  
    -ServerInstance "SecondaryComputer\Instance" `  
    -NoRecovery  
  
Restore-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.log" `  
    -ServerInstance "SecondaryComputer\Instance" `  
    -RestoreAction Log `  
    -NoRecovery  
  
# Create an in-memory representation of the primary replica.  
$primaryReplica = New-SqlAvailabilityReplica `  
    -Name "PrimaryComputer\Instance" `  
    -EndpointURL "TCP://PrimaryComputer.domain.com:5022" `  
    -AvailabilityMode "SynchronousCommit" `  
    -FailoverMode "Automatic" `  
    -Version 12 `  
    -AsTemplate  
  
# Create an in-memory representation of the secondary replica.  
$secondaryReplica = New-SqlAvailabilityReplica `  
    -Name "SecondaryComputer\Instance" `  
    -EndpointURL "TCP://SecondaryComputer.domain.com:5022" `  
    -AvailabilityMode "SynchronousCommit" `  
    -FailoverMode "Automatic" `  
    -Version 12 `  
    -AsTemplate  
  
# Create the availability group  
New-SqlAvailabilityGroup `  
    -Name "<myAvailabilityGroup>" `  
    -Path "SQLSERVER:\SQL\PrimaryComputer\Instance" `  
    -AvailabilityReplica @($primaryReplica,$secondaryReplica) `  
    -Database "<myDatabase>"  
  
# Join the secondary replica to the availability group.  
Join-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\SecondaryComputer\Instance" -Name "<myAvailabilityGroup>"  
  
# Join the secondary database to the availability group.  
Add-SqlAvailabilityDatabase -Path "SQLSERVER:\SQL\SecondaryComputer\Instance\AvailabilityGroups\<myAvailabilityGroup>" -Database "<myDatabase>"  

相關工作

設定 AlwaysOn 可用性群組的伺服器執行個體

若要設定可用性群組和複本屬性

若要完成可用性群組組態

建立可用性群組的其他方法

疑難排解 AlwaysOn 可用性群組組態

相關內容

另請參閱

資料庫鏡像端點 (SQL Server)
AlwaysOn 可用性群組概觀 (SQL Server)