Delen via


Problemen met databasespiegelingconfiguratie (SQL Server) oplossen

Van toepassing op:SQL Server

Dit onderwerp bevat informatie over het oplossen van problemen bij het instellen van een databasespiegelingssessie.

Waarschuwing

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 voor hoge beschikbaarheid.

Belangrijk

Databasespiegeling in SQL Server is een andere technologie dan Microsoft Fabric Database Mirroring. Spiegeling naar Fabric biedt betere analytische prestaties, de mogelijkheid om uw gegevensdomein te combineren met OneLake in Fabric en open toegang tot uw gegevens in Delta Parquet-indeling.

Met spiegeling naar Microsoft Fabric kunt u uw bestaande gegevensomgeving continu rechtstreeks repliceren naar OneLake in Fabric, inclusief gegevens van SQL Server 2016+, Azure SQL Database, Azure SQL Managed Instance, Cosmos DB, Oracle, Snowflake en meer.

Zorg ervoor dat u voldoet aan alle vereisten voor databasespiegeling.

Probleem Samenvatting
Foutbericht 1418 Dit SQL Server-bericht geeft aan dat het adres van het servernetwerk niet kan worden bereikt of niet bestaat, en geeft aan dat u de naam van het netwerkadres controleert en de opdracht opnieuw verzendt.
Rekeningen Beschrijft de vereisten voor het correct configureren van de accounts waaronder SQL Server wordt uitgevoerd.
Eindpunten Beschrijft de vereisten voor het correct configureren van het databasespiegelingseindpunt van elke serverinstantie.
SystemAddress Geeft een overzicht van de mogelijkheden voor het opgeven van de systeemnaam van een serverexemplaar in een databasespiegelingsconfiguratie.
Netwerktoegang Beschrijft de vereiste dat elke serverexemplaar toegang heeft tot de poorten van de andere serverexemplaar of exemplaren via TCP.
Voorbereiding van een spiegelend database Geeft een overzicht van de vereisten voor het voorbereiden van de gespiegelde database, zodat spiegeling kan worden gestart.
Mislukte bestand aanmaken-operatie Hierin wordt beschreven hoe u kunt reageren op een mislukte bewerking voor het maken van bestanden.
Spiegeling starten met Transact-SQL Beschrijft de vereiste volgorde voor ALTER DATABASE database_name SET PARTNER ='partner_server' -instructies.
Transacties tussen databases Een automatische failover kan leiden tot een automatische en mogelijk onjuiste afhandeling van twijfelachtige transacties. Daarom biedt databasespiegeling geen ondersteuning voor transacties tussen databases.

Accounts

De accounts waaronder SQL Server wordt uitgevoerd, moeten correct zijn geconfigureerd.

  1. Hebben de accounts de juiste machtigingen?

    1. Als de accounts op hetzelfde domein gebruikt worden, wordt de kans op onjuiste configuratie verminderd.

    2. Als de accounts zich in verschillende domeinen bevinden of geen domeinaccounts zijn, moet de login van het ene account op de andere computer in de master worden gemaakt en moet aan die login verbindingsmachtigingen worden verleend op het eindpunt. Voor meer informatie, zie Metagegevens beheren bij het beschikbaar maken van een database op een ander serverexemplaar (SQL Server). Dit omvat het netwerkserviceaccount.

  2. Als SQL Server wordt uitgevoerd als een service die gebruikmaakt van het lokale systeemaccount, moet u certificaten gebruiken voor verificatie. Zie Certificaten gebruiken voor een eindpunt voor databasespiegeling (Transact-SQL) voor meer informatie.

Endpoints

Eindpunten moeten correct zijn geconfigureerd.

  1. Zorg ervoor dat elke serverinstantie (de principal-server, de mirrorserver en de witness, indien van toepassing) een eindpunt voor databasespiegeling heeft. Zie voor meer informatie sys.database_mirroring_endpoints (Transact-SQL) en, afhankelijk van de vorm van verificatie, een databasespiegelingseindpunt maken voor Windows-verificatie (Transact-SQL) of certificaten gebruiken voor een databasespiegelingseindpunt (Transact-SQL).

  2. Controleer of de poortnummers juist zijn.

    Als u de poort wilt identificeren die momenteel is gekoppeld aan het eindpunt voor databasespiegeling van een serverexemplaar, gebruikt u de sys.database_mirroring_endpoints - en sys.tcp_endpoints catalogusweergaven.

  3. Voor problemen met het instellen van databasespiegeling die moeilijk uit te leggen zijn, raden we u aan om elke serverinstantie te inspecteren en te bepalen of deze op de juiste poorten luistert.

  4. Zorg ervoor dat de eindpunten gestart zijn (STATE=STARTED). Gebruik op elk serverexemplaar de volgende Transact-SQL query.

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

    Zie sys.database_mirroring_endpoints (Transact-SQL) voor meer informatie over de kolom state_desc.

    Gebruik de volgende Transact-SQL-instructie om een eindpunt te starten.

    ALTER ENDPOINT Endpoint_Mirroring   
    STATE = STARTED   
    AS TCP (LISTENER_PORT = <port_number>)  
    FOR database_mirroring (ROLE = ALL);  
    GO  
    

    Zie ALTER ENDPOINT (Transact-SQL)voor meer informatie.

  5. Controleer of de ROL juist is. Gebruik op elke serverexemplaar de volgende Transact-SQL instructie.

    SELECT role FROM sys.database_mirroring_endpoints;  
    GO  
    

    Zie sys.database_mirroring_endpoints (Transact-SQL)voor meer informatie.

  6. Voor de aanmelding voor het serviceaccount van het andere serverexemplaar is VERBINDINGSRECHTEN vereist. Zorg ervoor dat de aanmelding van de andere server de CONNECT-machtiging heeft. Als u wilt bepalen wie de CONNECT-machtiging heeft voor een eindpunt, gebruikt u op elk serverexemplaar de volgende Transact-SQL-instructie.

    SELECT 'Metadata Check';  
    SELECT EP.name, SP.STATE,   
       CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id))   
          AS GRANTOR,   
       SP.TYPE AS PERMISSION,  
       CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id))   
          AS GRANTEE   
       FROM sys.server_permissions SP , sys.endpoints EP  
       WHERE SP.major_id = EP.endpoint_id  
       ORDER BY Permission,grantor, grantee;   
    GO  
    
    

Systeemadres

Voor de systeemnaam van een serverexemplaar in een database mirroring configuratie kunt u elke naam gebruiken die het systeem ondubbelzinnig identificeert. Het serveradres kan een systeemnaam zijn (als de systemen zich in hetzelfde domein bevinden), een volledig gekwalificeerde domeinnaam of een IP-adres (bij voorkeur een statisch IP-adres). Het gebruik van de volledig gekwalificeerde domeinnaam werkt gegarandeerd. Zie Een servernetwerkadres opgeven (databasespiegeling) voor meer informatie.

Netwerktoegang

Elke serverexemplaar moet toegang hebben tot de poorten van de andere serverexemplaren via TCP. Dit is vooral belangrijk als de serverexemplaren zich in verschillende domeinen bevinden die elkaar niet vertrouwen (niet-vertrouwde domeinen). Dit beperkt veel van de communicatie tussen de serverexemplaren.

Voorbereiding van mirror-database

Controleer of de gespiegelde database is voorbereid voor spiegeling, of het nu de eerste keer is dat er wordt gespiegeld of dat het opnieuw wordt gestart nadat de spiegeling is verwijderd.

Wanneer u de gespiegelde database op de mirrorserver aanmaakt, moet u ervoor zorgen dat u de back-up van de hoofd-database herstelt met dezelfde databasenaam en de optie WITH NORECOVERY. Ook moeten alle logboekback-ups die zijn gemaakt nadat deze back-up is gemaakt, ook worden toegepast, opnieuw MET NORECOVERY.

We raden u ook aan om, indien mogelijk, het bestandspad (inclusief de stationsletter) van de gespiegelde database identiek te zijn aan het pad van de principal-database. Als de bestandspaden moeten verschillen, bijvoorbeeld als de principal-database zich op station F:bevindt, maar het spiegelsysteem geen F:-station heeft, moet u de optie MOVE opnemen in de instructie RESTORE.

Belangrijk

Als u de databasebestanden verplaatst wanneer u de gespiegelde database maakt, kunt u mogelijk later geen bestanden aan de database toevoegen zonder dat spiegeling wordt onderbroken.

Als databasespiegeling is gestopt, moeten alle volgende logboekback-ups die op de principal-database worden gemaakt, worden toegepast op de gespiegelde database voordat spiegeling opnieuw kan worden gestart.

Zie Een mirrordatabase voorbereiden voor spiegeling (SQL Server) voor meer informatie.

Mislukte bestand-aanmaakbewerking

Als u een bestand toevoegt zonder dat dit van invloed is op een spiegelingssessie, moet het pad van het bestand op beide servers bestaan. Als u de databasebestanden verplaatst bij het maken van de gespiegelde database, kan een latere bewerking voor het toevoegen van bestanden in de gespiegelde database mislukken en ervoor zorgen dat spiegeling wordt onderbroken.

Ga als volgt te werk om het probleem op te lossen:

  1. De eigenaar van de database moet de spiegelingssessie verwijderen en een volledige back-up van de bestandsgroep herstellen die het toegevoegde bestand bevat.

  2. De eigenaar moet vervolgens een back-up maken van het logboek met de bewerking voor het toevoegen van bestanden op de principal-server en de logboekback-up handmatig herstellen in de gespiegelde database met behulp van de opties WITH NORECOVERY en WITH MOVE. Hiermee maakt u het opgegeven bestandspad op de mirrorserver en herstelt u het nieuwe bestand naar die locatie.

  3. Om de database voor te bereiden op een nieuwe spiegelingssessie, moet de eigenaar ook zonder herstel andere openstaande logboekback-ups van de principal-server herstellen.

Zie Databasespiegeling verwijderen (SQL Server) voor meer informatie, een mirrordatabase voorbereiden voor spiegeling (SQL Server),een databasespiegelingssessie opzetten met behulp van Windows-verificatie (Transact-SQL), certificaten gebruiken voor een databasespiegelingseindpunt (Transact-SQL) of een databasespiegelingssessie tot stand brengen met behulp van Windows-verificatie (SQL Server Management Studio).

Spiegeling starten met behulp van Transact-SQL

De volgorde waarin de ALTER DATABASE database_name SET PARTNER ='partner_server' verklaringen worden uitgegeven, is erg belangrijk.

  1. De eerste opdracht moet worden uitgevoerd op de mirrorserver. Wanneer deze instructie wordt uitgegeven, probeert de mirrorserver geen contact op te nemen met een ander serverexemplaar. In plaats daarvan geeft de mirror-server de database de opdracht om te wachten totdat er contact is opgenomen met de mirrorserver door de principal-server.

  2. De tweede ALTER DATABASE-instructie moet worden uitgevoerd op de principal-server. Deze instructie zorgt ervoor dat de principal-server verbinding probeert te maken met de mirror-server. Nadat deze verbinding is gemaakt, probeert de spiegel vervolgens verbinding te maken met de principal-server op een andere verbinding.

Zie ALTER DATABASE (Transact-SQL)voor meer informatie.

Opmerking

Zie Een databasespiegelingssessie maken met behulp van Windows-verificatie (SQL Server Management Studio) voor informatie over het gebruik van SQL Server Management Studio om spiegeling te starten.

Transacties tussen databases

Wanneer een database wordt gespiegeld in modus voor hoge veiligheid met automatische failover, kan een automatische failover leiden tot automatische en mogelijk onjuiste oplossing van transacties in onzekerheid. Als een automatische failover op een van beide databases plaatsvindt terwijl een transactie tussen databases wordt doorgevoerd, kunnen er logische inconsistenties optreden tussen de databases.

De typen transacties tussen databases die kunnen worden beïnvloed door een automatische failover zijn onder andere:

  • Een transactie die meerdere databases in hetzelfde exemplaar van SQL Server bijwerkt.

  • Transacties die gebruikmaken van een Microsoft Distributed Transaction Coordinator (MS DTC).

Zie Cross-Database Transactions and Distributed Transactions for AlwaysOn Availability Groups and Database Mirroring (SQL Server)voor meer informatie.

Zie ook

Databasespiegeling instellen (SQL Server)
Transportbeveiliging voor databasespiegeling en AlwaysOn-beschikbaarheidsgroepen (SQL Server)