New-SqlAvailabilityGroup

Crea un gruppo di disponibilità.

Sintassi

New-SqlAvailabilityGroup
   -AvailabilityReplica <AvailabilityReplica[]>
   [-Database <String[]>]
   [-AutomatedBackupPreference <AvailabilityGroupAutomatedBackupPreference>]
   [-FailureConditionLevel <AvailabilityGroupFailureConditionLevel>]
   [-HealthCheckTimeout <Int32>]
   [-BasicAvailabilityGroup]
   [-ContainedAvailabilityGroup]
   [-ReuseSystemDatabases]
   [-DatabaseHealthTrigger]
   [-DtcSupportEnabled]
   [-ClusterType <AvailabilityGroupClusterType>]
   [-RequiredSynchronizedSecondariesToCommit <Int32>]
   [-Name] <String>
   [[-Path] <String>]
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [-ProgressAction <ActionPreference>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
New-SqlAvailabilityGroup
   -AvailabilityReplica <AvailabilityReplica[]>
   [-Database <String[]>]
   [-AutomatedBackupPreference <AvailabilityGroupAutomatedBackupPreference>]
   [-FailureConditionLevel <AvailabilityGroupFailureConditionLevel>]
   [-HealthCheckTimeout <Int32>]
   [-BasicAvailabilityGroup]
   [-ContainedAvailabilityGroup]
   [-ReuseSystemDatabases]
   [-DatabaseHealthTrigger]
   [-DtcSupportEnabled]
   [-ClusterType <AvailabilityGroupClusterType>]
   [-RequiredSynchronizedSecondariesToCommit <Int32>]
   [-Name] <String>
   [-InputObject] <Server>
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [-ProgressAction <ActionPreference>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Descrizione

Il cmdlet New-SqlAvailabilityGroup crea un gruppo di disponibilità in Gruppi di disponibilità AlwaysOn.

Il parametro InputObject o Path specifica il server che ospita la replica primaria iniziale.

Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.

Esempio

Esempio 1: Creare un gruppo di disponibilità

PS C:\> $PrimaryServer = Get-Item "SQLSERVER:\SQL\PrimaryServer\Instance22"
PS C:\> $SecondaryServer = Get-Item "SQLSERVER:\SQL\SecondaryServer\Instance22"
PS C:\> $PrimaryReplica = New-SqlAvailabilityReplica -Name "PrimaryServer\Instance22" -EndpointUrl "TCP://PrimaryServer.domain:5022" -FailoverMode "Automatic" -AvailabilityMode "SynchronousCommit" -AsTemplate -Version ($PrimaryServer.Version)
PS C:\> $SecondaryReplica = New-SqlAvailabilityReplica -Name "SecondaryServer\Instance22" -EndpointUrl "TCP://SecondaryServer.domain:5022" -FailoverMode "Automatic" -AvailabilityMode "SynchronousCommit" -AsTemplate -Version ($SecondaryServer.Version) 
PS C:\> New-SqlAvailabilityGroup -InputObject $PrimaryServer -Name "MainAG" -AvailabilityReplica ($PrimaryReplica, $SecondaryReplica) -Database @("Database01","Database02")

Il primo comando ottiene un'istanza di SQL Server nel server primario e quindi la archivia nella variabile $PrimaryServer.

Il quarto comando crea una replica che include l'istanza del server secondario usando New-SqlAvailabilityReplica e quindi la archivia nella variabile $SecondaryReplica.

Il comando specifica la versione dell'istanza del server utilizzando la proprietà Version di $SecondaryServer.

Esempio 2: Creare un gruppo di disponibilità supportato da WSFC

# Get server
PS C:\> cd 'SQLSERVER:\SQL\some-hostname\Default'
PS SQLSERVER:\SQL\some-hostname\Default> $server = Get-Item $PWD

# Create primary replica
PS SQLSERVER:\SQL\some-hostname\Default> $primaryReplica = New-SqlAvailabilityReplica -Name 'some-hostname' -EndpointUrl 'tcp://some-hostname:5022' -FailoverMode Automatic -AvailabilityMode SynchronousCommit -AsTemplate

# Create AG with explicit cluster type WSFC (same as not passing -ClusterType, since it is the default value)
PS SQLSERVER:\SQL\some-hostname\Default> $server | New-SqlAvailabilityGroup -Name 'ag1' -AvailabilityReplica $PrimaryReplica -Script -ClusterType Wsfc

Esempio 3: Creare un cluster di gruppi di disponibilità indipendente

# Get server
PS C:\> CD 'SQLSERVER:\SQL\some-hostname\Default'
PS SQLSERVER:\SQL\some-hostname\Default> $server = Get-Item $PWD

# Create primary replica
PS SQLSERVER:\SQL\some-hostname\Default> $primaryReplica = New-SqlAvailabilityReplica -Name 'some-hostname' -EndpointUrl 'tcp://some-hostname:5022' -FailoverMode Automatic -AvailabilityMode SynchronousCommit -AsTemplate

# Create AG cluster group independent
PS SQLSERVER:\SQL\some-hostname\Default> $server | New-SqlAvailabilityGroup -Name 'ag1' -AvailabilityReplica $PrimaryReplica -Script -ClusterType None

Esempio 4: Creare un gruppo di disponibilità impostando il numero di SYNCHRONOUS_COMMIT database secondari che devono essere disponibili per il commit delle transazioni nel database primario

# Get server
PS C:\> Get-Item 'SQLSERVER:\SQL\some-hostname\Default'
# Create primary replica
PS C:\> $primaryReplica = New-SqlAvailabilityReplica -Name 'some-hostname' -EndpointUrl 'tcp://some-hostname:5022' -FailoverMode Automatic -AvailabilityMode SynchronousCommit -AsTemplate
# Create AG with RequiredSynchronizedSecondariesToCommit = 3
PS C:\> $server | New-SqlAvailabilityGroup -Name 'ag1' -AvailabilityReplica $PrimaryReplica -RequiredSynchronizedSecondariesToCommit 3

Nota: verrà generata un'eccezione se il parametro -RequiredSynchronizedSecondariesToCommit viene usato quando la versione del server di destinazione è SQL Server 2016 o versione precedente.

Parametri

-AccessToken

Token di accesso usato per eseguire l'autenticazione a SQL Server, come alternativa all'autenticazione utente/password o windows.

Può essere usato, ad esempio, per connettersi a SQL Azure DB e SQL Azure Managed Instance usando un Service Principal o un Managed Identity.

Il parametro da usare può essere una stringa che rappresenta il token o un oggetto PSAccessToken restituito eseguendo Get-AzAccessToken -ResourceUrl https://database.windows.net.

Questo parametro è nuovo nella versione 22 del modulo.

Tipo:PSObject
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-AutomatedBackupPreference

Specifica la preferenza di backup automatizzata per il gruppo di disponibilità.

I valori accettabili per questo parametro sono:

  • Primario. Specifica che i backup vengono sempre eseguiti nella replica primaria. Questa opzione supporta l'uso di funzionalità non disponibili durante l'esecuzione del backup in una replica secondaria, ad esempio backup differenziali.
  • SecondaryOnly. Specifica che i backup non vengono mai eseguiti nelle repliche primarie. Se la replica primaria è l'unica replica online, il backup non viene eseguito.
  • Secondario. Specifica che i backup vengono eseguiti nelle repliche secondarie, a meno che la replica primaria non sia l'unica replica online. Il backup viene quindi eseguito nella replica primaria.
  • Nessuno. Specifica che lo stato primario o secondario non viene preso in considerazione quando si decide quale replica esegue i backup. Al contrario, la priorità di backup e lo stato online determinano quali repliche eseguono backup.
Tipo:AvailabilityGroupAutomatedBackupPreference
Valori accettati:Primary, SecondaryOnly, Secondary, None, Unknown
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-AvailabilityReplica

Specifica una matrice di repliche di disponibilità incluse nel gruppo di disponibilità. Per ottenere un AvailabilityReplica, usare il cmdlet New-SqlAvailabilityReplica . Specificare il parametro AsTemplate .

Tipo:AvailabilityReplica[]
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-BasicAvailabilityGroup

Specifica se creare un advanced (impostazione predefinita) o un gruppo di disponibilità basic.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ClusterType

Tipo di cluster che esegue il backup del gruppo di disponibilità. I valori possibili sono:

  • Wsfc. Il gruppo di disponibilità verrà integrato nel cluster di failover di Windows Server. Questo è il modo in cui vengono creati gruppi di disponibilità in SQL Server 2016 e versioni successive. Si tratta dell'impostazione predefinita.
  • Nessuno. Il gruppo di disponibilità sarà indipendente dal cluster.
  • Esterno. Il gruppo di disponibilità verrà gestito da un gestore cluster che non è un cluster di failover di Windows Server, ad esempio Pacemaker in Linux. Questa funzionalità è supportata in SQL Server 2017 e versioni successive. Quando la destinazione è SQL Server in Linux, è necessario specificare questo valore o verrà eseguito un errore.

Nota: verrà generata un'eccezione se il parametro -ClusterType viene usato quando il server di destinazione è SQL Server 2016 e versioni successive.

Tipo:AvailabilityGroupClusterType
Valori accettati:Wsfc, None, External
Posizione:Named
Valore predefinito:Wsfc
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Confirm

Richiede conferma prima di eseguire il cmdlet.

Tipo:SwitchParameter
Alias:cf
Posizione:Named
Valore predefinito:False
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ContainedAvailabilityGroup

Usato per creare un gruppo di disponibilità indipendente. Questa opzione viene usata per creare un gruppo di disponibilità con i propri database master e msdb, mantenuti sincronizzati tra il set di repliche nel gruppo di disponibilità. Questo parametro può essere usato con il relativo complementare -ReuseSystemDatabases.

Questo parametro è consentito solo quando SQL Server di destinazione supporta i gruppi di disponibilità indipendenti (SQL 2022 e versioni successive). Il tentativo di usare è rispetto alle versioni di SQL che non supportano i gruppi di disponibilità indipendenti causerebbe la visualizzazione di un errore da parte del cmdlet.

Questo parametro è disponibile solo nella versione 22+ del modulo.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Database

Specifica una matrice di database utente di lettura/scrittura locali. Questi database devono usare il modello di recupero con registrazione completa e non devono usare AUTO_CLOSE. Questi database non possono appartenere a un altro gruppo di disponibilità e non possono essere configurati per il mirroring del database. È necessario specificare un valore per questo parametro.

Tipo:String[]
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-DatabaseHealthTrigger

Specifica se attivare un failover automatico del gruppo di disponibilità se una replica di database utente all'interno di un gruppo di disponibilità rileva una condizione di errore del database.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-DtcSupportEnabled

Specifica se i database all'interno di un gruppo di disponibilità vengono registrati con MSDTC a livello di istanza (impostazione predefinita) o a livello di database.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Encrypt

Tipo di crittografia da usare per la connessione a SQL Server.

Questo valore esegue il mapping alla proprietà EncryptSqlConnectionEncryptOption sull'oggetto SqlConnection del driver Microsoft.Data.SqlClient.

Nella versione 22 del modulo, il valore predefinito è Optional (per compatibilità con v21). Nella versione 23+ del modulo, il valore predefinito sarà "Obbligatorio", che potrebbe creare una modifica di rilievo per gli script esistenti.

Questo parametro è nuovo nella versione 22 del modulo.

Tipo:String
Valori accettati:Mandatory, Optional, Strict
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-FailureConditionLevel

Specifica il comportamento di failover automatico del gruppo di disponibilità. I valori accettabili per questo parametro sono:

  • OnServerDown. Failover o riavvio se il servizio SQL Server si arresta.
  • OnServerUnresponsive. Failover o riavvio se viene soddisfatta una condizione di valore inferiore, oltre a quando il servizio SQL Server è connesso al cluster e il HealthCheckTimeout soglia viene superata o se la replica di disponibilità attualmente nel ruolo primario è in uno stato di errore.
  • OnCriticalServerError. Failover o riavvio se viene soddisfatta una condizione di valore inferiore, oltre a quando si verifica un errore interno critico del server, che include una condizione di memoria insufficiente, una grave violazione dell'accesso in scrittura o un dump eccessivo.
  • OnModerateServerError. Failover o riavvio se viene soddisfatta una condizione di valore inferiore, più se si verifica un errore moderato del server, che include una condizione persistente di memoria insufficiente.
  • OnAnyQualifiedFailureConditions. Failover o riavvio se viene soddisfatta una condizione di valore inferiore, oltre a se si verifica una condizione di errore idonea, che include l'esaurimento del thread di lavoro del motore e il deadlock non risolvibile rilevato.
Tipo:AvailabilityGroupFailureConditionLevel
Valori accettati:OnServerDown, OnServerUnresponsive, OnCriticalServerErrors, OnModerateServerErrors, OnAnyQualifiedFailureCondition, Unknown
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-HealthCheckTimeout

Specifica l'intervallo di tempo, espresso in millisecondi, dopo il quale i gruppi di disponibilità Always On dichiarano un server non rispondente in modo che non sia integro.

Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-HostNameInCertificate

Nome host da usare per convalidare il certificato TLS/SSL di SQL Server. È necessario passare questo parametro se l'istanza di SQL Server è abilitata per Forza crittografia e si vuole connettersi a un'istanza usando nome host/nome breve. Se questo parametro viene omesso, è necessario passare il nome di dominio completo (FQDN) a -ServerInstance per connettersi a un'istanza di SQL Server abilitata per Forza crittografia.

Questo parametro è nuovo nella versione 22 del modulo.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-InputObject

Specifica l'istanza di SQL Server che ospita la replica primaria del gruppo di disponibilità creato da questo cmdlet.

Tipo:Server
Posizione:2
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-Name

Specifica il nome del gruppo di disponibilità creato da questo cmdlet.

Tipo:String
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Path

Specifica il percorso dell'istanza di SQL Server che ospita la replica primaria iniziale del gruppo di disponibilità creato da questo cmdlet. Se non si specifica questo parametro, questo cmdlet usa la posizione di lavoro corrente. Se si specifica un valore, il percorso deve essere attualmente esistente.

Tipo:String
Posizione:2
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ProgressAction

Determina in che modo PowerShell risponde agli aggiornamenti dello stato generati da uno script, un cmdlet o un provider, ad esempio le barre di stato generate dal cmdlet Write-Progress. Il cmdlet Write-Progress crea barre di stato che mostrano lo stato di un comando.

Tipo:ActionPreference
Alias:proga
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-RequiredSynchronizedSecondariesToCommit

Numero di repliche secondarie con commit sincrono che devono essere disponibili per poter eseguire il commit nel database primario.

Se un SYNCHRONOUS_COMMIT secondario viene disconnesso dal database primario per un certo periodo di tempo, la replica primaria viene abbassata di livello a ASYNCHRONOUS_COMMIT per evitare il blocco dei commit. Se il database primario diventa quindi non disponibile e l'utente vuole eseguire il failover in uno di questi database secondari, potrebbe comportare una perdita di dati. Impostando RequiredSynchronizedSecondariesToCommit su un numero, l'utente può impedire la perdita di dati perché il database primario inizierà a bloccare i commit se troppi database secondari vengono abbassati di livello a ASYNCHRONOUS_COMMIT.

Il valore predefinito di questa impostazione è 0, il che significa che il database primario non bloccherà mai i commit. Questo comportamento è identico a quello precedente a SQL Server 2017.

Tipo:Int32
Posizione:Named
Valore predefinito:0
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ReuseSystemDatabases

Questo parametro fa sì che i database master contenuti e msdb da una versione precedente del gruppo di disponibilità vengano usati nella creazione di questo nuovo gruppo di disponibilità.

Se si tenta di usare questo parametro senza specificare -ContainedAvailabilityGroup non è consentito, il cmdlet genererà un errore.

Questo parametro è disponibile solo nella versione 22+ del modulo.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Script

Indica che questo cmdlet restituisce un Transact-SQL script che esegue l'attività eseguita da questo cmdlet.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-TrustServerCertificate

Indica se il canale verrà crittografato durante il bypass della catena di certificati per convalidare l'attendibilità.

Nella versione 22 del modulo, il valore predefinito è $true (per compatibilità con v21). Nella versione 23+ del modulo, il valore predefinito sarà "$false", che potrebbe creare una modifica di rilievo per gli script esistenti.

Questo parametro è nuovo nella versione 22 del modulo.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-WhatIf

Mostra cosa accadrebbe se il cmdlet viene eseguito. Il cmdlet non viene eseguito.

Tipo:SwitchParameter
Alias:wi
Posizione:Named
Valore predefinito:False
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

Input

Microsoft.SqlServer.Management.Smo.Server

È possibile passare un'istanza del server a questo cmdlet.

Output

Microsoft.SqlServer.Management.Smo.AvailabilityGroup

Questo cmdlet restituisce un gruppo di disponibilità.