Delen via


ALTER DATABASE (Transact-SQL) Databasespiegeling

Van toepassing op:SQL Server

Opmerking

Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. Gebruik in plaats daarvan AlwaysOn-beschikbaarheidsgroepen.

Regelt databasespiegeling voor een database. Waarden die met de databasemirroring-opties zijn gespecificeerd, gelden zowel voor kopieën van de database als voor de databasemirroringsessie als geheel. Per ALTER DATABASE-instructie is slechts één <database_mirroring_option> toegestaan.

Opmerking

We raden aan databasespiegeling te configureren tijdens de laagpiekuren, omdat configuratie de prestaties kan beïnvloeden.

Voor opties voor ALTER DATABASE, zie ALTER DATABASE. Voor opties voor ALTER DATABASE SET, ZIE ALTER DATABASE SET Opties.

Transact-SQL syntaxis-conventies

Syntaxis


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

Belangrijk

Een SET PARTNER- of SET WITNESS-commando kan succesvol worden voltooid wanneer het wordt ingevoerd, maar later falen.

Opmerking

ALTER DATABASE databasespiegelingsopties zijn niet beschikbaar voor een besloten database.

database_name Is de naam van de database die aangepast moet worden.

PARTNER <partner_option> Beheert de database-eigenschappen die de failover-partners van een databasespiegelingssessie en hun gedrag definiëren. Sommige SET PARTNER-opties kunnen op beide partners worden ingesteld; andere zijn beperkt tot de hoofdserver of tot de mirrorserver. Voor meer informatie, zie de individuele PARTNER-opties die volgen. Een SET PARTNER-clausule beïnvloedt beide kopieën van de database, ongeacht de partner waarop deze is gespecificeerd.

Om een SET PARTNER-instructie uit te voeren, moet de STATE van de eindpunten van beide partners worden ingesteld op STARTED. Let ook op dat de ROLE van het databasespiegelingseindpunt van elke partnerserverinstantie moet worden ingesteld op PARTNER of ALL. Voor informatie over hoe een endpoint te specificeren, zie Create a Database Mirroring Endpoint for Windows Authentication. Om de rol en status van het databasespiegelingseindpunt van een serverinstantie te leren kennen, gebruik je op die instantie de volgende Transact-SQL-instructie:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<partner_option> ::=

Opmerking

Per SET PARTNER-clausule is slechts één <partner_option> toegestaan.

'partner_server' Specificeert het servernetwerkadres van een instantie van SQL Server om als failoverpartner te fungeren in een nieuwe databasespiegelingssessie. Elke sessie vereist twee partners: één begint als hoofdserver, en de ander als spiegelserver. We raden aan dat deze partners op verschillende computers wonen.

Deze optie wordt één keer per sessie per partner gespecificeerd. Het starten van een databasespiegelingssessie vereist twee ALTER DATABASE-database-SET PARTNER = 'partner_server' -instructies. Hun volgorde is belangrijk. Maak eerst verbinding met de mirrorserver en specificeer de hoofdserverinstantie als partner_server (SET PARTNER ='principal_server'). Ten tweede, verbind met de hoofdserver en specificeer de mirror server-instantie als partner_server (SET PARTNER ='mirror_server'); Dit start een databasespiegelingssessie tussen deze twee partners. Voor meer informatie, zie Setting Up Database Mirroring.

De waarde van partner_server is een servernetwerkadres. Dit heeft de volgende syntaxis:

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

where

  • <system-address> is een string, zoals een systeemnaam, een volledig gekwalificeerde domeinnaam of een IP-adres, die het bestemmingscomputersysteem ondubbelzinnig identificeert.
  • <Port> is een poortnummer dat is gekoppeld aan het spiegelend eindpunt van de partnerserverinstantie.

Voor meer informatie, zie Specificeer een servernetwerkadres - Databasespiegeling.

Het volgende voorbeeld illustreert de clausule SET PARTNER ='partner_server' :

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

Belangrijk

Als een sessie wordt ingesteld met de ALTER DATABASE-instructie in plaats van SQL Server Management Studio, wordt de sessie standaard op volledige transactieveiligheid gezet (SAFETY staat op VOLLEDIG) en draait deze in high-safety-modus zonder automatische failover. Om automatische failover mogelijk te maken, configureer je een getuige; om in high-performance modus te draaien, schakel transaction safety uit (SAFETY OFF).

FAILOVER Faalt handmatig over de hoofdserver naar de spiegelserver. Je kunt FAILOVER alleen specificeren op de hoofdserver. Deze optie geldt alleen wanneer de VEILIGHEIDSINSTELLING VOLLEDIG is (de standaardinstelling).

De FAILOVER-optie vereist master als databasecontext.

FORCE_SERVICE_ALLOW_DATA_LOSS Dwingt databaseservice naar de spiegeldatabase nadat de hoofdserver uitvalt met de database in een niet-gesynchroniseerde toestand of in een gesynchroniseerde toestand wanneer automatische failover niet optreedt.

We raden sterk aan om alleen de service te forceren als de hoofdserver niet meer draait. Anders kunnen sommige clients de oorspronkelijke hoofddatabase blijven benaderen in plaats van de nieuwe hoofddatabase. FORCE_SERVICE_ALLOW_DATA_LOSS is alleen beschikbaar op de mirrorserver en alleen onder alle volgende voorwaarden:

  • De hoofdserver ligt uit.
  • WITNESS is UIT of de witness is verbonden met de mirrorserver.

Dwing alleen de dienst af als je bereid bent het risico te nemen om data te verliezen om de dienst direct aan de database te herstellen.

Het forceren van service schorst de sessie, waardoor alle gegevens in de oorspronkelijke hoofddatabase tijdelijk behouden blijven. Zodra de oorspronkelijke principal in gebruik is en kan communiceren met de nieuwe principal server, kan de databasebeheerder de dienst hervatten. Wanneer de sessie wordt hervat, gaan alle niet-verzonden logrecords en de bijbehorende updates verloren.

OFF Verwijdert een databasespiegelingssessie en verwijdert spiegeling uit de database. Je kunt UIT instellen op beide partners. Voor informatie, zie de impact van het verwijderen van spiegeling, zie Databasespiegeling verwijderen.

RESUME Hervat een onderbroken databasespiegelingssessie. Je kunt alleen op de hoofdserver RESUME opgeven.

VEILIGHEID { VOLLEDIG | OFF } Bepaalt het niveau van transactieveiligheid. Je kunt VEILIGHEID alleen specificeren op de hoofdserver.

De standaard is VOL. Met volledige veiligheid draait de databasespiegelingssessie synchroon (in high-safety-modus). Als SAFETY op UIT staat, draait de databasespiegelingssessie asynchroon (in high-performance modus).

Het gedrag van de high-safety-modus hangt deels af van de getuige, als volgt:

  • Wanneer de veiligheid op VOL staat en er een getuige wordt ingesteld voor de sessie, draait de sessie in high-safety-modus met automatische failover. Wanneer de hoofdserver verloren gaat, failover de sessie automatisch als de database gesynchroniseerd is en de mirror server-instantie en witness nog steeds met elkaar verbonden zijn (dat wil zeggen, ze hebben quorum). Voor meer informatie, zie Quorum: Hoe een getuige de beschikbaarheid van de database beïnvloedt - Databasespiegeling.

    Als er een witness voor de sessie is ingesteld maar momenteel is losgekoppeld, zorgt het verlies van de mirrorserver ervoor dat de hoofdserver uitvalt.

  • Wanneer de veiligheid op VOL staat en de getuige op UIT, draait de sessie in high-safety-modus zonder automatische failover. Als de mirror server-instantie uitvalt, blijft de hoofdserverinstantie onaangetast. Als de hoofdserverinstantie uitvalt, kun je de service (met mogelijk dataverlies) naar de mirror server-instantie forceren.

  • Als SAFETY op UIT staat, draait de sessie in high-performance modus en worden automatische failover en handmatige failover niet ondersteund. Problemen op de mirror hebben echter geen invloed op de principal, en als de principal serverinstantie uitvalt, kun je, indien nodig, service (met mogelijk dataverlies) naar de mirror server-instantie forceren – als WITNESS op UIT staat of de witness momenteel met de mirror is verbonden. Voor meer informatie over het forceren van dienst, zie "FORCE_SERVICE_ALLOW_DATA_LOSS" eerder in deze sectie.

Belangrijk

High-performance modus is niet bedoeld om een getuige te gebruiken. Echter, telkens wanneer u VEILIGHEID op UIT zet, raden wij sterk aan ervoor te zorgen dat WITNESS op UIT staat.

SUSPEND pauzeert een databasespiegelingssessie.

Je kunt SUSPEND specificeren op beide partners.

TIMEOUT integer Specificeert de time-out periode in seconden. De time-outperiode is de maximale tijd die een serverinstantie wacht om een PING-bericht van een andere instantie in de spiegelingssessie te ontvangen voordat die andere instantie als losgekoppeld wordt beschouwd.

Je kunt de TIMEOUT-optie alleen op de hoofdserver specificeren. Als je deze optie niet specificeert, is de tijdsperiode standaard 10 seconden. Als je 5 of hoger opgeeft, wordt de time-out periode ingesteld op het opgegeven aantal seconden. Als je een time-out waarde van 0 tot 4 seconden specificeert, wordt de time-out periode automatisch ingesteld op 5 seconden.

Belangrijk

U wordt aangeraden de time-outperiode op 10 seconden of hoger te houden. Het instellen van de waarde op minder dan 10 seconden creëert de mogelijkheid dat een zwaar belast systeem PING's mist en een valse storing aankondigt.

Voor meer informatie, zie Mogelijke storingen tijdens databasespiegeling.

WITNESS <witness_option> Beheert de database-eigenschappen die een database-spiegelende witness definiëren. Een SET WITNESS-clausule beïnvloedt beide kopieën van de database, maar je kunt SET WITNESS alleen op de hoofdserver specificeren. Als er een getuige wordt ingesteld voor een zitting, is quorum vereist om de database te betekenen, ongeacht de VEILIGHEIDSINSTELLING; voor meer informatie, zie Quorum: Hoe een getuige de beschikbaarheid van de database beïnvloedt - Databasespiegeling.

Wij raden aan dat de getuige en failover-partners op aparte computers zitten. Voor informatie over de getuige, zie Database Mirroring Witness.

Om een SET WITNESS-instructie uit te voeren, moet de STATE van de eindpunten van zowel de hoofd- als de witness-serverinstanties worden ingesteld op START. Let ook op dat de ROLE van het databasespiegelingseindpunt van een witness-serverinstantie moet worden ingesteld op WITNESS of ALL. Voor informatie over het specificeren van een eindpunt, zie Het Databasespiegelingseindpunt.

Om de rol en status van het databasespiegelingseindpunt van een serverinstantie te leren kennen, gebruik je op die instantie de volgende Transact-SQL-instructie:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

Opmerking

Database-eigenschappen kunnen niet op de getuige worden ingesteld.

<witness_option> ::=

Opmerking

Volgens de clausule SET WITNESS is slechts één <witness_option> toegestaan.

'witness_server' Specificeert een instantie van de Database Engine die fungeert als witness-server voor een databasespiegelingssessie. Je kunt SET WITNESS-statements alleen op de hoofdserver specificeren.

In een SET WITNESS ='witness_server' -instructie is de syntaxis van witness_server hetzelfde als die van partner_server.

OFF Verwijdert de getuige uit een database-mirroringsessie. Het uitzetten van de getuige schakelt automatische failover uit. Als de database op VOLLEDIGE VEILIGHEID staat en de getuige op UIT, zorgt een storing op de spiegelserver ervoor dat de hoofdserver de database onbeschikbaar maakt.

Opmerkingen

Voorbeelden

Eén. Een databasespiegelingssessie met een getuige aanmaken

Het instellen van databasemirroring met een getuige vereist het configureren van beveiliging en het voorbereiden van de mirrordatabase, en ook het gebruik van ALTER DATABASE om de partners in te stellen. Voor een voorbeeld van het volledige installatieproces, zie Setting Up Database Mirroring.

B. Handmatig falen tijdens een databasespiegelingssessie

Handmatig failover kan worden gestart door beide databasemirroringpartners. Voordat je failovert, moet je controleren of de server waarvan je denkt dat die momenteel de hoofdserver is, daadwerkelijk de hoofdserver is. Bijvoorbeeld, voor de AdventureWorks2025 database, op die serverinstantie waarvan je denkt dat die de huidige hoofdserver is, voer je de volgende query uit:

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

Als de serverinstantie inderdaad de principal is, is Principalde waarde van mirroring_role_desc . Als deze serverinstantie de mirrorserver was, zou de SELECT instructie teruggeven Mirror.

Het volgende voorbeeld gaat ervan uit dat de server de huidige principal is.

  1. Handmatig failover naar de database mirroring-partner:

    ALTER DATABASE AdventureWorks2022 SET PARTNER FAILOVER;
    GO
    
  2. Om de resultaten van de failover op de nieuwe spiegel te verifiëren, voer je de volgende query uit:

    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
    

De huidige waarde van mirroring_role_desc is nu Mirror.

Zie ook