ALTER DATABASE (Transact-SQL) Databasspegling

Gäller för:SQL Server

Anmärkning

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Använd AlwaysOn-tillgänglighetsgrupper i stället.

Styr databasspegelning för en databas. Värden som anges med databasspeglingsalternativen gäller både för kopior av databasen och för databasspeglingssessionen som helhet. Endast en <database_mirroring_option> är tillåten per ALTER DATABASE-sats.

Anmärkning

Vi rekommenderar att du konfigurerar databasspegling under lågtrafik eftersom konfiguration kan påverka prestandan.

För alternativ för ALTER DATABASE, se ALTER DATABASE. För alternativ för ALTER DATABASE SET, se ALTER DATABASE SET Options.

Transact-SQL syntaxkonventioner

Syntax


ALTER DATABASE database_name
SET { <partner_option> | <witness_option> }
  <partner_option> ::=
    PARTNER { = 'partner_server'
            | FAILOVER
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME
            | SAFETY { FULL | OFF }
            | SUSPEND
            | TIMEOUT integer
            }
  <witness_option> ::=
    WITNESS { = 'witness_server'
            | OFF
            }
  

Arguments

Viktigt!

Ett kommando SET PARTNER eller SET WITNESS kan slutföras framgångsrikt när det matas in, men misslyckas senare.

Anmärkning

ALTER DATABASE-spegelalternativ för databaser finns inte tillgängliga för en innehållen databas.

database_name Är namnet på databasen som ska ändras.

PARTNER <partner_option> Styr databasens egenskaper som definierar failover-partners för en databasspeglingssession och deras beteende. Vissa SET PARTNER-alternativ kan ställas in på båda parterna; andra är begränsade till huvudservern eller spegelservern. För mer information, se de individuella PARTNER-alternativen som följer. En SET Partner-klausul påverkar båda kopiorna av databasen, oavsett vilken partner den är specificerad på.

För att köra ett SET PARTNER-sats måste STATE för ändpunkterna hos båda partnerna sättas till START. Observera också att ROLLEN för databasspegeländpunkten för varje partnerserverinstans måste sättas till antingen PARTNER eller ALL. För information om hur man specificerar en endpoint, se Create a Database Mirroring Endpoint for Windows Authentication. För att lära dig rollen och tillståndet för databasspegelns endpoint i en serverinstans, använd följande Transact-SQL sats på den instansen:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<partner_option> ::=

Anmärkning

Endast en <partner_option> är tillåten enligt SET PARTNER-klausulen.

'partner_server' Specificerar servernätverksadressen för en instans av SQL Server för att fungera som failover-partner i en ny databasspegelsession. Varje session kräver två partners: en börjar som huvudserver, och den andra som spegelserver. Vi rekommenderar att dessa partners sitter vid olika datorer.

Detta alternativ anges en gång per session för varje partner. För att initiera en databasspegelsession krävs två ALTER DATABASE-databas SET PARTNER = 'partner_server' -satser. Deras ordning är betydelsefull. Först ansluter du till spegelservern och specificerar huvudserverinstansen som partner_server (SET PARTNER ='principal_server'). För det andra, koppla till huvudservern och ange spegelserverinstansen som partner_server (SET PARTNER ='mirror_server'); Detta startar en databasspegelningssession mellan dessa två partners. För mer information, se Setting Up Database Mirroring.

Värdet av partner_server är en servernätverksadress. Denna har följande syntax:

TCP**://<system-address>:**<port>

where

  • <system-adress> är en sträng, såsom ett systemnamn, ett fullt kvalificerat domännamn eller en IP-adress, som entydigt identifierar destinationsdatorn.
  • <Port> är ett portnummer som är kopplat till speglingsändpunkten för partnerserverinstansen.

För mer information, se Specificera en servernätverksadress - Databasspegling.

Följande exempel illustrerar satsen SET PARTNER ='partner_server' :

'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'

Viktigt!

Om en session ställs upp med ALTER DATABASE-satsen istället för SQL Server Management Studio, ställs sessionen in på full transaktionssäkerhet som standard (SAFETY är inställd på FULL) och körs i högsäkerhetsläge utan automatisk failover. För att möjliggöra automatisk failover, konfigurera ett vittne; för att köra i högpresterande läge, stäng av transaktionssäkerheten (SAFETY OFF).

FAILOVER Manuellt misslyckas över huvudservern till spegelservern. Du kan ange FAILOVER endast på huvudservern. Detta alternativ gäller endast när SÄKERHETSINSTÄLLNINGEN är FULL (standardinställningen).

FAILOVER-alternativet kräver master som databaskontext.

FORCE_SERVICE_ALLOW_DATA_LOSS Tvingar databastjänsten till spegeldatabasen efter att huvudservern fallerat med databasen i ett osynkroniserat tillstånd eller i ett synkroniserat tillstånd när automatisk failover inte sker.

Vi rekommenderar starkt att du tvingar fram tjänsten endast om huvudservern inte längre är igång. Annars kan vissa klienter fortsätta att komma åt den ursprungliga huvuddatabasen istället för den nya huvudsakliga databasen. FORCE_SERVICE_ALLOW_DATA_LOSS är endast tillgänglig på spegelservern och endast under alla följande villkor:

  • Huvudservern är nere.
  • WITNESS är satt till AV eller så är vittnet anslutet till spegelservern.

Tvinga fram service endast om du är villig att riskera att förlora viss data för att omedelbart återställa tjänsten till databasen.

Tvingande service pausar sessionen och bevarar tillfälligt all data i den ursprungliga huvuddatabasen. När den ursprungliga principalen är i tjänst och kan kommunicera med den nya principalservern kan databasadministratören återuppta tjänsten. När sessionen återupptas förloras alla oskickade loggposter och motsvarande uppdateringar.

OFF Tar bort en databas-speglingssession och tar bort spegeln från databasen. Du kan ange AV på båda parterna. För information, se om effekten av att ta bort spegling, se Removal Database Mirroring.

RESUME Återupptar en avstängd databasspegelsession. Du kan ange RESUME endast på huvudservern.

SÄKERHET { FULL | OFF } Anger nivån på transaktionssäkerhet. Du kan ange SÄKERHET endast på huvudservern.

Standardinställningen är FULL. Med full säkerhet körs databasspelandets session synkront (i högsäkerhetsläge). Om SAFETY är satt till AV körs databasspegelsessionen asynkront (i högpresterande läge).

Beteendet i högsäkerhetsläget beror delvis på vittnet, enligt följande:

  • När säkerheten är satt på FULL och ett vittne är inställt för sessionen, körs sessionen i högsäkerhetsläge med automatisk failover. När huvudservern förloras failover sessionen automatiskt om databasen är synkroniserad och spegelserverinstansen och vittnet fortfarande är kopplade till varandra (det vill säga de har kvorum). För mer information, se Quorum: Hur ett vittne påverkar databastillgänglighet – Databasspegling.

    Om ett vittne är inställt för sessionen men för närvarande är frånkopplat, orsakar förlusten av spegelservern att huvudservern går ner.

  • När säkerheten är inställd på FULL och vittnet på AV, körs sessionen i högsäkerhetsläge utan automatisk failover. Om spegelserverinstansen går ner, påverkas inte huvudserverinstansen. Om huvudserverinstansen går ner kan du tvinga tjänsten (med möjlig dataförlust) till spegelserverinstansen.

  • Om SAFETY är satt på AV körs sessionen i högpresterande läge, och automatisk failover och manuell failover stöds inte. Men problem på spegeln påverkar inte huvudpersonen, och om huvudserverinstansen går ner kan du, om nödvändigt, tvinga fram tjänsten (med möjlig dataförlust) till spegelserverinstansen – om WITNESS är satt till AV eller vittnet för närvarande är anslutet till spegeln. För mer information om tvingande tjänstgöring, se "FORCE_SERVICE_ALLOW_DATA_LOSS" tidigare i detta avsnitt.

Viktigt!

Högpresterande läge är inte avsett att använda ett vittne. Men varje gång du ställer in SAFETY på AV, rekommenderar vi starkt att du ser till att WITNESS är inställt på AV.

SUSPEND pausar en databasspegelsession.

Du kan specificera SUSPEND på någon av parterna.

TIMEOUT heltal Anger time-out-perioden i sekunder. Time-out-perioden är den maximala tid en serverinstans väntar på att få ett PING-meddelande från en annan instans i speglingssessionen innan den anses vara den andra instansen frånkopplad.

Du kan ange TIMEOUT-alternativet endast på huvudservern. Om du inte specificerar detta alternativ är tidsperioden som standard 10 sekunder. Om du anger 5 eller mer sätts timeout-perioden till det angivna antalet sekunder. Om du anger ett time-out-värde på 0 till 4 sekunder sätts time-out-perioden automatiskt till 5 sekunder.

Viktigt!

Vi rekommenderar att du behåller tidsgränsen på 10 sekunder eller högre. Att sätta värdet till mindre än 10 sekunder skapar risken för att ett kraftigt belastat system saknar PING:er och deklarerar ett falskt fel.

För mer information, se Möjliga fel under databasspegling.

WITNESS <witness_option> Styr databasens egenskaper som definierar ett databasspeglande vittne. En SET WITNESS-klausul påverkar båda kopiorna av databasen, men du kan ange SET WITNESS endast på huvudservern. Om ett vittne är inställt till en session krävs kvorum för att delge databasen, oavsett SÄKERHETSINSTÄLLNINGEN; för mer information, se Quorum: Hur ett vittne påverkar databastillgänglighet – Databasspegling.

Vi rekommenderar att vittnet och failover-partnerna bor vid separata datorer. För information om vittnet, se Database Mirroring Witness.

För att köra ett SET WITNESS-uttalande måste STATE för ändpunkterna för både huvud- och vittnesserverinstanserna ställas in till START. Observera också att ROLLEN för databasspeglingsändpunkten i en vittnesserverinstans måste sättas till antingen WITNESS eller ALL. För information om att specificera en endpoint, se The Database Mirroring Endpoint.

För att lära dig rollen och tillståndet för databasspegelns endpoint i en serverinstans, använd följande Transact-SQL sats på den instansen:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

Anmärkning

Databasens egenskaper kan inte ställas in på vittnet.

<witness_option> ::=

Anmärkning

Endast en <witness_option> är tillåten enligt SET WITNESS-klausulen.

'witness_server' Specificerar en instans av Databasmotorn som ska fungera som vittnesserver för en databasspegelningssession. Du kan ange SET WITNESS-satser endast på huvudservern.

I ett SET WITNESS ='witness_server' -uttalande är syntaxen för witness_server densamma som syntaxen för partner_server.

OFF Tar bort vittnet från en databas-speglingssession. Att ställa vittnet till AV inaktiverar automatisk failover. Om databasen är inställd på FULL SÄKERHET och vittnet är inställt på AV, orsakar ett fel på spegelservern att huvudservern gör databasen otillgänglig.

Anmärkningar

Examples

A. Skapa en databas-speglingssession med ett vittne

Att ställa upp databasspegling med ett vittne kräver att man konfigurerar säkerheten och förbereder spegeldatabasen, samt att använda ALTER DATABASE för att sätta partnerna. För ett exempel på hela installationsprocessen, se Setting Up Database Mirroring.

B. Manuellt misslyckande över en databasspegelningssession

Manuell failover kan initieras från vilken som helst databasspegelpartner. Innan du failover bör du verifiera att den server du tror är den nuvarande huvudservern faktiskt är huvudservern. Till exempel, för databasen AdventureWorks2025 , på den serverinstans som du tror är den aktuella huvudservern, kör följande fråga:

SELECT db.name, m.mirroring_role_desc
FROM sys.database_mirroring m
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks2022';
GO

Om serverinstansen faktiskt är principalen, är Principalvärdet av mirroring_role_desc . Om denna serverinstans var spegelservern skulle satsen SELECT returnera Mirror.

Följande exempel antar att servern är den nuvarande principalen.

  1. Manuell failover till databasspegelpartnern:

    ALTER DATABASE AdventureWorks2022 SET PARTNER FAILOVER;
    GO
    
  2. För att verifiera resultaten av failovern på den nya spegeln, kör följande fråga:

    SELECT db.name, m.mirroring_role_desc
    FROM sys.database_mirroring m
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks2022';
    GO
    

Det aktuella värdet av mirroring_role_desc är nu Mirror.

Se även