Entendre els problemes de connexió de duplicació de bases de dades
La duplicació de bases de dades és una estratègia essencial per garantir una alta disponibilitat i redundància en entorns SQL Server. Tanmateix, la configuració de la rèplica de vegades pot provocar errors frustrants, com ara l'error 1418, que indica que no es pot accedir a l'adreça de xarxa del servidor o que no existeix.
Aquest error en particular es produeix sovint quan s'intenta configurar una sessió de duplicació entre dues instàncies d'SQL Server, fins i tot si les dues bases de dades són accessibles individualment. El problema sorgeix quan els punts finals de duplicació no es comuniquen entre ells.
En el cas que ens ocupa, un escriptori local (192.168.0.80) i un mini PC (192.168.0.85) estan implicats en el procés de duplicació. El mini PC està pensat per servir com a rèplica de només lectura per a una aplicació mòbil, utilitzant el mode de duplicació "Alt rendiment".
Malgrat la configuració correcta del port i els ajustos del tallafoc, l'usuari troba l'error 1418 quan intenta iniciar la sessió de duplicació. Aquest article explorarà les possibles causes i solucions per solucionar aquest problema.
Comandament | Exemple d'ús |
---|---|
ALTER ENDPOINT | Aquesta ordre s'utilitza per modificar l'estat d'un punt final de duplicació de bases de dades a SQL Server. En el context de la resolució de l'error 1418, assegura que el punt final s'inicia correctament i escolta al port especificat. Exemple: ALTER ENDPOINT [Mirroring] STATE = STARTED; |
GRANT CONNECT ON ENDPOINT | Permet que un inici de sessió específic es connecti a un punt final de rèplica. Això és crucial per permetre que les instàncies d'SQL Server es comuniquin de manera segura durant la duplicació de bases de dades. Exemple: GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint] A [DOMAINUserCompcount]; |
SET PARTNER | Configura una instància d'SQL Server com a soci en una sessió de duplicació de bases de dades. Aquesta ordre estableix l'adreça de xarxa per al servidor associat. Exemple: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Crea un punt final de rèplica que escolta en un port específic i gestiona les sessions de rèplica de bases de dades. Especifica la funció de comunicació (p. ex., PARTNER). Exemple: CREATE ENDPOINT [Mirroring_Endpoint] COM TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING (ROL = PARTNER); |
netsh advfirewall firewall add rule | S'utilitza per configurar les regles del tallafoc per permetre el trànsit a través de ports específics necessaris per a SQL Server i la rèplica (p. ex., 1433 i 5022). Això és essencial per permetre la comunicació entre els socis duplicats. Exemple: netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433 |
socket.create_connection | Una ordre de Python que s'utilitza per establir una connexió TCP a un servidor i port especificats. En aquest context, s'utilitza per comprovar si la instància de SQL Server és accessible a través de la xarxa. Exemple: socket.create_connection((servidor, port), timeout=5); |
New-Object System.Net.Sockets.TcpClient | Una ordre de PowerShell que s'utilitza per crear un client TCP per provar la connectivitat del port. Ajuda a verificar si els ports de rèplica necessaris estan oberts i accessibles entre servidors. Exemple: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | Aquesta ordre SQL recupera l'estat de la sessió de rèplica de la base de dades, ajudant a diagnosticar si la configuració de rèplica s'ha establert correctament o s'enfronta a problemes. Exemple: SELECT * FROM sys.database_mirroring; |
Desglossament detallat dels scripts de resolució d'errors de duplicació
El primer script proporcionat en els exemples anteriors utilitza Transact-SQL (T-SQL) ordres per configurar i resoldre l'error de duplicació a SQL Server. La part més crítica del guió és la creació i configuració de mirant punts finals. Aquests punts finals són les interfícies de xarxa a través de les quals es comuniquen les instàncies d'SQL Server durant la duplicació. La comanda ALTERA EL PUNT FINAL assegura que els punts finals d'ambdós servidors estiguin en l'estat "INICIAT", permetent que es produeixi la comunicació. El SET PARTNER A continuació, s'utilitza l'ordre per enllaçar les bases de dades, especificant l'adreça de xarxa del servidor associat, que permet que les dues instàncies SQL reflecteixin les dades a la xarxa.
El segon script és una solució de PowerShell dissenyada per provar la connectivitat de xarxa entre els dos servidors. PowerShell utilitza el Nou-objecte System.Net.Sockets.TcpClient comanda per crear un client TCP que intenta connectar-se a l'adreça IP i al port especificats. Aquesta és una manera eficient de verificar que els ports necessaris (1433 per a SQL Server i 5022 per a la rèplica) estiguin oberts i accessibles. Aquest script és especialment útil per diagnosticar problemes de tallafoc o de xarxa que poden impedir que les dues instàncies SQL es comuniquin, provocant així el Error 1418.
El tercer script aprofita les ordres del símbol del sistema de Windows per gestionar la configuració del tallafoc. Concretament, el netsh advfirewall firewall afegir regla L'ordre s'utilitza per obrir els ports necessaris per a SQL Server i la rèplica. Això garanteix que tant el trànsit de la base de dades (port 1433) com el trànsit de rèplica (port 5022) puguin fluir lliurement entre els dos servidors. Desactivant temporalment el tallafoc amb el netsh advfirewall ha desactivat l'estat de tots els perfils comanda, l'script pot verificar si el tallafoc és la causa principal del problema d'accés a la xarxa. Aquesta solució és especialment important quan es resolen problemes de comunicació del servidor en un entorn segur.
Finalment, l'script de Python utilitza el socket.create_connection funció per realitzar una comprovació de xarxa entre els dos servidors. Aquest script proporciona una manera ràpida i eficaç de validar si els servidors es poden connectar entre ells a través dels ports TCP necessaris. Intenta establir una connexió i, si té èxit, confirma que la configuració de la xarxa és correcta. La senzillesa de Python a l'hora de gestionar els problemes relacionats amb la xarxa el converteix en una bona opció per provar la connectivitat, especialment en entorns on no hi ha altres eines disponibles o són complicats d'utilitzar. En conjunt, aquests scripts ofereixen un enfocament integral per resoldre el problema duplicació de bases de dades error i garantir una comunicació fluida entre instàncies de SQL Server.
Solució 1: correcció de l'error 1418 a la duplicació de bases de dades SQL Server (enfocament T-SQL)
Aquesta solució utilitza Transact-SQL (T-SQL) per resoldre problemes de duplicació de bases de dades mitjançant la configuració de punts finals, l'autenticació de connexions i la validació d'adreces de servidor.
-- 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
Solució 2: Script de PowerShell per provar l'accessibilitat del port d'SQL Server
Aquesta solució utilitza PowerShell per provar la connectivitat dels ports entre els servidors, assegurant-se que els ports necessaris estan oberts i escoltant.
# 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
Solució 3: correcció de l'error 1418 de SQL Server (configuració del tallafoc)
Aquest enfocament utilitza el sistema d'ordres de Windows per comprovar les configuracions del tallafoc, assegurant-se que els ports necessaris (1433, 5022) estiguin oberts als dos servidors.
-- 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
Solució 4: Script Python per validar la connexió TCP entre servidors
Aquesta solució utilitza Python per validar si les instàncies de SQL Server es poden comunicar a través de la xarxa comprovant 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)
Solució 5: Configuració de la GUI de SQL Server Management Studio (SSMS).
Aquesta solució explica la configuració de la duplicació mitjançant la GUI SSMS per als usuaris que prefereixen no utilitzar interfícies de línia d'ordres.
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.
Explorant els reptes de la xarxa i de la seguretat en la duplicació de SQL Server
Quan es configura Replica de bases de dades SQL Server, un aspecte que sovint es passa per alt és el paper de la configuració de la xarxa i la configuració de seguretat. L'error 1418, que indica que no es pot accedir a l'adreça de xarxa del servidor, sovint es produeix per problemes de xarxa subjacents. Fins i tot quan s'obren els ports correctes (1433 i 5022) i els tallafocs estan desactivats, altres elements de xarxa, com ara l'encaminament i la configuració de DNS, poden provocar errors de comunicació. És important assegurar-se que ambdós servidors resolguin les adreces IP de l'altre correctament, especialment en entorns de diverses subxarxes.
Un altre repte implica Autenticació SQL Server configuració durant la configuració de la rèplica. La rèplica de la base de dades requereix que tant el servidor principal com la rèplica s'autentiquin entre ells mitjançant certificats o autenticació basada en domini (Kerberos). Si aquesta configuració no està correctament configurada, o si hi ha una discrepància en els protocols de seguretat entre els dos servidors, es pot produir l'error 1418. A més, els comptes de servei d'SQL Server han de tenir els permisos correctes en ambdues màquines, especialment l'accés als punts finals de duplicació.
Finalment, l'elecció del sistema operatiu també pot afectar el comportament de la rèplica. Les diferents versions de Windows poden gestionar les connexions TCP de manera diferent, especialment en com gestionen les regles del tallafoc i l'encaminament del trànsit de xarxa. Si el sistema operatiu de qualsevol dels servidors té controladors de xarxa obsolets o no coincidents, la comunicació entre servidors podria fallar. Assegurar-se que el sistema operatiu està al dia amb els darrers pedaços i que s'executen els serveis adequats és crucial per resoldre problemes de connectivitat com l'error 1418.
Preguntes habituals sobre la configuració de la duplicació de SQL Server i l'error 1418
- Què causa l'error 1418 a la rèplica de SQL Server?
- L'error 1418 sol ser causat per una fallada de comunicació entre els dos servidors. Això pot ser degut a la configuració del tallafoc, incorrecta mirroring endpoints, o problemes de connectivitat de xarxa.
- Com puc comprovar si els meus ports estan oberts per a la duplicació de SQL Server?
- Utilitza el telnet comanda o un script com ara New-Object System.Net.Sockets.TcpClient a PowerShell per provar si els ports 1433 i 5022 estan oberts.
- Els dos servidors han d'estar al mateix domini per a la duplicació?
- No, però l'autenticació del domini pot simplificar el procés. En cas contrari, heu d'utilitzar l'autenticació basada en certificats per protegir el fitxer mirroring endpoints.
- Quin és el paper del punt final en la rèplica de bases de dades?
- El CREATE ENDPOINT crea la interfície de xarxa que permet que les instàncies d'SQL Server es comuniquin durant la duplicació. Cada servidor ha de tenir un punt final de rèplica que funcioni.
- Puc duplicar bases de dades en diferents versions de SQL Server?
- No, la rèplica de bases de dades requereix que les dues instàncies d'SQL Server estiguin a la mateixa versió i edició per funcionar correctament.
Pensaments finals sobre la resolució de l'error 1418 de duplicació de la base de dades
Els errors de duplicació de bases de dades com l'error 1418 sovint es deuen a problemes de xarxa entre servidors. Assegureu-vos que els ports correctes estiguin oberts, que els tallafocs estiguin configurats i que els punts finals estiguin correctament configurats pot resoldre aquest problema.
A més, validar l'accés a la xarxa amb eines com PowerShell i assegurar-vos que els protocols d'autenticació són coherents entre servidors millorarà les vostres possibilitats d'èxit. Seguir aquests passos pot ajudar a aconseguir una rèplica fiable de SQL Server per a operacions d'alt rendiment.
Referències i recursos per a solucions de duplicació de bases de dades
- Els detalls sobre la configuració i la resolució de problemes de la duplicació de SQL Server, inclòs l'error 1418 i la configuració del punt final es poden trobar a Documentació de Microsoft SQL .
- Es pot accedir a una guia completa per configurar les regles del tallafoc i la resolució de problemes de xarxa per a la duplicació de SQL Server Configuració del tallafoc de Windows .
- Els scripts de PowerShell per a proves de ports i verificació de xarxa entre instàncies de SQL Server estan disponibles a Documentació de PowerShell .
- Per conèixer les tècniques de programació de socket Python utilitzades per provar la connectivitat del servidor, visiteu Mòdul Python Socket .