Résolution de l'erreur 1418 de mise en miroir de bases de données : adresse réseau du serveur inaccessible

Temp mail SuperHeros
Résolution de l'erreur 1418 de mise en miroir de bases de données : adresse réseau du serveur inaccessible
Résolution de l'erreur 1418 de mise en miroir de bases de données : adresse réseau du serveur inaccessible

Comprendre les problèmes de connexion à la mise en miroir de bases de données

La mise en miroir de bases de données est une stratégie essentielle pour garantir la haute disponibilité et la redondance dans les environnements SQL Server. Cependant, la configuration de la mise en miroir peut parfois conduire à des erreurs frustrantes, telles que l'erreur 1418, qui indique que l'adresse réseau du serveur n'est pas accessible ou n'existe pas.

Cette erreur particulière se produit souvent lors de la tentative de configuration d'une session de mise en miroir entre deux instances de SQL Server, même si les deux bases de données sont accessibles individuellement. Le problème survient lorsque les points de terminaison en miroir ne parviennent pas à communiquer entre eux.

Dans le cas présent, un ordinateur de bureau local (192.168.0.80) et un mini PC (192.168.0.85) sont impliqués dans le processus de mise en miroir. Le mini PC est destiné à servir de réplique en lecture seule pour une application mobile, utilisant le mode de mise en miroir « Haute Performance ».

Malgré une configuration correcte des ports et des ajustements du pare-feu, l'utilisateur rencontre l'erreur 1418 lorsqu'il tente de lancer la session de mise en miroir. Cet article explorera les causes potentielles et les solutions pour résoudre ce problème.

Commande Exemple d'utilisation
ALTER ENDPOINT Cette commande est utilisée pour modifier l'état d'un point de terminaison de mise en miroir de bases de données dans SQL Server. Dans le cadre de la résolution de l'erreur 1418, il garantit que le point de terminaison est correctement démarré et écoute sur le port spécifié. Exemple : ALTER ENDPOINT [Mirroring] STATE = STARTED ;
GRANT CONNECT ON ENDPOINT Permet à une connexion spécifique de se connecter à un point de terminaison en miroir. Ceci est crucial pour permettre aux instances SQL Server de communiquer en toute sécurité lors de la mise en miroir de bases de données. Exemple : GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint] TO [DOMAINUserAccount] ;
SET PARTNER Configure une instance de SQL Server en tant que partenaire dans une session de mise en miroir de bases de données. Cette commande établit l'adresse réseau du serveur partenaire. Exemple : ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022';
CREATE ENDPOINT Crée un point de terminaison de mise en miroir qui écoute sur un port spécifique et gère les sessions de mise en miroir de bases de données. Il spécifie le rôle de communication (par exemple, PARTENAIRE). Exemple : CREATE ENDPOINT [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING (ROLE = PARTNER) ;
netsh advfirewall firewall add rule Utilisé pour configurer des règles de pare-feu afin d'autoriser le trafic via des ports spécifiques requis pour SQL Server et la mise en miroir (par exemple, 1433 et 5022). Ceci est essentiel pour permettre la communication entre les partenaires miroirs. Exemple : le pare-feu netsh advfirewall ajoute un nom de règle="SQLPort" dir=in action=allow protocol=TCP localport=1433
socket.create_connection Une commande Python utilisée pour établir une connexion TCP à un serveur et un port spécifiés. Dans ce contexte, il est utilisé pour vérifier si l'instance SQL Server est accessible sur le réseau. Exemple : socket.create_connection((serveur, port), timeout=5);
New-Object System.Net.Sockets.TcpClient Une commande PowerShell utilisée pour créer un client TCP pour tester la connectivité des ports. Cela aide à vérifier si les ports de mise en miroir nécessaires sont ouverts et accessibles entre les serveurs. Exemple : $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port)
SELECT * FROM sys.database_mirroring Cette commande SQL récupère l'état de la session de mise en miroir de la base de données, aidant à diagnostiquer si la configuration de la mise en miroir est correctement établie ou rencontre des problèmes. Exemple : SELECT * FROM sys.database_mirroring ;

Répartition détaillée des scripts de résolution des erreurs de mise en miroir

Le premier script fourni dans les exemples précédents utilise Transact-SQL (T-SQL) commandes pour configurer et résoudre l’erreur de mise en miroir dans SQL Server. La partie la plus critique du script est la création et la configuration de mise en miroir des points de terminaison. Ces points de terminaison sont les interfaces réseau via lesquelles les instances SQL Server communiquent pendant la mise en miroir. La commande MODIFIER LE POINT DE FIN garantit que les points de terminaison sur les deux serveurs sont dans l'état « STARTED », permettant ainsi la communication. Le DÉFINIR UN PARTENAIRE La commande est ensuite utilisée pour relier les bases de données, en spécifiant l'adresse réseau du serveur partenaire, ce qui permet aux deux instances SQL de mettre en miroir les données sur le réseau.

Le deuxième script est une solution PowerShell conçue pour tester la connectivité réseau entre les deux serveurs. PowerShell utilise le Nouvel objet System.Net.Sockets.TcpClient commande pour créer un client TCP qui tente de se connecter à l’adresse IP et au port spécifiés. Il s'agit d'un moyen efficace de vérifier que les ports requis (1433 pour SQL Server et 5022 pour la mise en miroir) sont ouverts et accessibles. Ce script est particulièrement utile pour diagnostiquer les problèmes de pare-feu ou de réseau qui peuvent empêcher les deux instances SQL de communiquer, provoquant ainsi le Erreur 1418.

Le troisième script exploite les commandes de l'invite de commande Windows pour gérer les paramètres du pare-feu. Plus précisément, le netsh advfirewall pare-feu ajouter une règle La commande est utilisée pour ouvrir les ports nécessaires pour SQL Server et la mise en miroir. Cela garantit que le trafic de la base de données (port 1433) et le trafic de mise en miroir (port 5022) peuvent circuler librement entre les deux serveurs. En désactivant temporairement le pare-feu avec le netsh advfirewall désactive l'état de tous les profils , le script peut vérifier si le pare-feu est à l'origine du problème d'accès au réseau. Cette solution est particulièrement importante lors du dépannage des problèmes de communication du serveur dans un environnement sécurisé.

Enfin, le script Python utilise le socket.create_connection fonction pour effectuer une vérification du réseau entre les deux serveurs. Ce script fournit un moyen rapide et efficace de valider si les serveurs peuvent se joindre via les ports TCP requis. Il tente d'établir une connexion et, en cas de succès, confirme que la configuration du réseau est correcte. La simplicité de Python dans la gestion des problèmes liés au réseau en fait un bon choix pour tester la connectivité, en particulier dans les environnements où d'autres outils ne sont pas disponibles ou sont difficiles à utiliser. Ensemble, ces scripts offrent une approche globale pour résoudre les problèmes mise en miroir de bases de données erreur et assurer une communication fluide entre les instances de SQL Server.

Solution 1 : correction de l'erreur 1418 dans la mise en miroir de la base de données SQL Server (approche T-SQL)

Cette solution utilise Transact-SQL (T-SQL) pour résoudre les problèmes de mise en miroir de bases de données en configurant les points de terminaison, en authentifiant les connexions et en validant les adresses des serveurs.

-- Enable server to listen on the specified ports
ALTER ENDPOINT [Mirroring] 
STATE = STARTED;
GO

-- Ensure both databases are in FULL recovery mode
ALTER DATABASE YourDatabaseName 
SET RECOVERY FULL;
GO

-- Create mirroring endpoints on both servers
CREATE ENDPOINT [Mirroring_Endpoint]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER);
GO

-- Grant CONNECT permissions to the login account
GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint] 
TO [DOMAIN\UserAccount];
GO

-- Set up mirroring using T-SQL command
ALTER DATABASE YourDatabaseName 
SET PARTNER = 'TCP://192.168.0.85:5022';
GO

-- Verify the status of the mirroring configuration
SELECT * FROM sys.database_mirroring;
GO

Solution 2 : script PowerShell pour tester l'accessibilité des ports SQL Server

Cette solution utilise PowerShell pour tester la connectivité des ports entre les serveurs, garantissant que les ports requis sont ouverts et à l'écoute.

# Define server IPs and ports
$server1 = "192.168.0.80"
$server2 = "192.168.0.85"
$port = 5022

# Function to test port connectivity
function Test-Port {
   param([string]$server, [int]$port)
   try {
       $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port)
        Write-Host "$server on port $port is reachable."
       $tcpClient.Close()
   } catch {
        Write-Host "$server on port $port is not reachable."
    }
}

# Test both servers
Test-Port -server $server1 -port $port
Test-Port -server $server2 -port $port

Solution 3 : correctif de l'erreur 1418 de SQL Server (configuration du pare-feu)

Cette approche utilise l'invite de commande Windows pour vérifier les configurations du pare-feu, en garantissant que les ports requis (1433, 5022) sont ouverts sur les deux serveurs.

-- Check if SQL Server and mirroring ports are open
netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433
netsh advfirewall firewall add rule name="MirrorPort" dir=in action=allow protocol=TCP localport=5022

-- Disable firewall temporarily for testing purposes
netsh advfirewall set allprofiles state off

-- Enable firewall again after testing
netsh advfirewall set allprofiles state on

Solution 4 : script Python pour valider la connexion TCP entre les serveurs

Cette solution utilise Python pour valider si les instances SQL Server peuvent communiquer sur le réseau en vérifiant les connexions TCP.

import socket

# Define server IPs and port
server1 = '192.168.0.80'
server2 = '192.168.0.85'
port = 5022

# Function to check connectivity
def check_connection(server, port):
    try:
        sock = socket.create_connection((server, port), timeout=5)
       print(f'Connection successful to {server}:{port}')
        sock.close()
   except socket.error:
       print(f'Cannot connect to {server}:{port}')

# Check both servers
check_connection(server1, port)
check_connection(server2, port)

Solution 5 : configuration de l'interface graphique de SQL Server Management Studio (SSMS)

Cette solution explique la configuration de la mise en miroir à l'aide de l'interface graphique SSMS pour les utilisateurs qui préfèrent ne pas utiliser les interfaces de ligne de commande.

1. Open SQL Server Management Studio (SSMS).
2. Right-click your database -> Tasks -> Mirror...
3. Click Configure Security and follow the wizard.
4. Ensure both Principal and Mirror servers are correct.
5. Set the port for the mirroring endpoints to 5022.
6. Complete the configuration and click Start Mirroring.
7. Verify the mirroring status by checking the "Database Properties" window.

Explorer les défis de réseau et de sécurité dans la mise en miroir de SQL Server

Lors de la mise en place Mise en miroir de bases de données SQL Server, un aspect souvent négligé est le rôle de la configuration réseau et des paramètres de sécurité. L'erreur 1418, indiquant que l'adresse réseau du serveur ne peut pas être atteinte, est fréquemment provoquée par des problèmes de réseau sous-jacents. Même lorsque les ports appropriés (1433 et 5022) sont ouverts et que les pare-feu sont désactivés, d'autres éléments du réseau tels que le routage et la configuration DNS peuvent provoquer des échecs de communication. Il est important de s'assurer que les deux serveurs résolvent correctement leurs adresses IP respectives, en particulier dans les environnements multi-sous-réseaux.

Un autre défi implique Authentification SQL Server paramètres lors de la configuration de la mise en miroir. La mise en miroir de bases de données nécessite que le serveur principal et le serveur miroir s'authentifient mutuellement via des certificats ou une authentification basée sur le domaine (Kerberos). Si cette configuration n'est pas correctement configurée ou s'il existe une incompatibilité dans les protocoles de sécurité entre les deux serveurs, l'erreur 1418 peut se produire. De plus, les comptes de service SQL Server doivent disposer des autorisations appropriées sur les deux machines, en particulier l'accès aux points de terminaison en miroir.

Enfin, le choix du système d'exploitation peut également affecter le comportement de la mise en miroir. Différentes versions de Windows peuvent gérer les connexions TCP différemment, notamment dans la manière dont elles gèrent les règles de pare-feu et le routage du trafic réseau. Si le système d'exploitation de l'un ou l'autre serveur possède des pilotes réseau obsolètes ou incompatibles, la communication entre les serveurs pourrait échouer. S'assurer que le système d'exploitation est à jour avec les derniers correctifs et que les services appropriés sont en cours d'exécution est crucial pour résoudre les problèmes de connectivité comme l'erreur 1418.

Questions courantes sur la configuration de la mise en miroir de SQL Server et l'erreur 1418

  1. Quelles sont les causes de l’erreur 1418 dans la mise en miroir de SQL Server ?
  2. L'erreur 1418 est généralement provoquée par un échec de communication entre les deux serveurs. Cela peut être dû à des paramètres de pare-feu incorrects mirroring endpoints, ou des problèmes de connectivité réseau.
  3. Comment puis-je vérifier si mes ports sont ouverts pour la mise en miroir de SQL Server ?
  4. Utilisez le telnet commande ou un script tel que New-Object System.Net.Sockets.TcpClient dans PowerShell pour tester si les ports 1433 et 5022 sont ouverts.
  5. Les deux serveurs doivent-ils se trouver dans le même domaine pour la mise en miroir ?
  6. Non, mais l'authentification de domaine peut simplifier le processus. Sinon, vous devez utiliser une authentification basée sur un certificat pour sécuriser le mirroring endpoints.
  7. Quel est le rôle du point de terminaison dans la mise en miroir de bases de données ?
  8. Le CREATE ENDPOINT La commande crée l'interface réseau qui permet aux instances SQL Server de communiquer pendant la mise en miroir. Chaque serveur doit disposer d'un point de terminaison de mise en miroir fonctionnel.
  9. Puis-je mettre en miroir des bases de données sur différentes versions de SQL Server ?
  10. Non, la mise en miroir de bases de données nécessite que les deux instances de SQL Server soient sur la même version et édition pour fonctionner correctement.

Réflexions finales sur la résolution de l'erreur 1418 de mise en miroir de bases de données

Les erreurs de mise en miroir de bases de données telles que l'erreur 1418 sont souvent causées par des problèmes de réseau entre les serveurs. S'assurer que les ports appropriés sont ouverts, que les pare-feu sont configurés et que les points de terminaison sont correctement configurés peut résoudre ce problème.

De plus, valider l'accès au réseau avec des outils tels que PowerShell et garantir la cohérence des protocoles d'authentification entre les serveurs améliorera vos chances de succès. Suivre ces étapes peut aider à obtenir une mise en miroir SQL Server fiable pour des opérations hautes performances.

Références et ressources pour les solutions de mise en miroir de bases de données
  1. Des détails sur la configuration et le dépannage de la mise en miroir de SQL Server, y compris l'erreur 1418 et les paramètres du point de terminaison, sont disponibles sur Documentation Microsoft SQL .
  2. Un guide complet sur la configuration des règles de pare-feu et le dépannage réseau pour la mise en miroir de SQL Server est accessible sur Configuration du pare-feu Windows .
  3. Les scripts PowerShell pour le test des ports et la vérification du réseau entre les instances SQL Server sont disponibles sur Documentation PowerShell .
  4. Pour connaître les techniques de programmation de socket Python utilisées pour tester la connectivité du serveur, visitez Module de socket Python .