Datu bāzes spoguļošanas kļūdas 1418 atrisināšana: servera tīkla adrese nav sasniedzama

Temp mail SuperHeros
Datu bāzes spoguļošanas kļūdas 1418 atrisināšana: servera tīkla adrese nav sasniedzama
Datu bāzes spoguļošanas kļūdas 1418 atrisināšana: servera tīkla adrese nav sasniedzama

Izpratne par datu bāzes spoguļošanas savienojuma problēmām

Datu bāzes spoguļošana ir būtiska stratēģija augstas pieejamības un dublēšanas nodrošināšanai SQL Server vidēs. Tomēr spoguļošanas konfigurēšana dažkārt var izraisīt nepatīkamas kļūdas, piemēram, kļūdu 1418, kas norāda, ka servera tīkla adresi nevar sasniegt vai tā nepastāv.

Šī konkrētā kļūda bieži rodas, mēģinot iestatīt spoguļošanas sesiju starp diviem SQL Server gadījumiem, pat ja abas datu bāzes ir pieejamas atsevišķi. Problēma rodas, ja spoguļošanas galapunkti nespēj sazināties viens ar otru.

Šajā gadījumā spoguļošanas procesā ir iesaistīta lokālā darbvirsma (192.168.0.80) un mini dators (192.168.0.85). Mini dators ir paredzēts kā tikai lasāma kopija mobilajai lietojumprogrammai, izmantojot spoguļošanas režīmu "High Performance".

Neskatoties uz pareizu porta konfigurāciju un ugunsmūra pielāgojumiem, mēģinot sākt spoguļošanas sesiju, lietotājs saskaras ar kļūdu 1418. Šajā rakstā tiks apskatīti iespējamie cēloņi un risinājumi šīs problēmas risināšanai.

Komanda Lietošanas piemērs
ALTER ENDPOINT Šo komandu izmanto, lai modificētu datu bāzes spoguļošanas galapunkta stāvokli programmā SQL Server. Kļūdas 1418 atrisināšanas kontekstā tas nodrošina, ka galapunkts ir pareizi startēts un tiek atskaņots norādītajā portā. Piemērs: ALTER ENDPOINT [Spoguļošana] STATE = STARTED;
GRANT CONNECT ON ENDPOINT Ļauj noteiktam pieteikumvārdam izveidot savienojumu ar spoguļošanas galapunktu. Tas ir ļoti svarīgi, lai ļautu SQL Server gadījumiem droši sazināties datu bāzes spoguļošanas laikā. Piemērs: PIEŠĶIRT SAVIENOJUMU ENDPOINT::[Miroring_Endpoint] TO [DOMAINUserAccount];
SET PARTNER Konfigurē vienu SQL Server gadījumu kā partneri datu bāzes spoguļošanas sesijā. Šī komanda nosaka partnera servera tīkla adresi. Piemērs: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022';
CREATE ENDPOINT Izveido spoguļošanas galapunktu, kas klausās noteiktā portā un pārvalda datu bāzes spoguļošanas sesijas. Tajā ir norādīta komunikācijas loma (piemēram, PARTNERIS). Piemērs: CREATE ENDPOINT [Miroring_Endpoint] AS TCP (LISTENER_PORT = 5022) DATABASE_MIRRORING (ROLE = PARTNERIS);
netsh advfirewall firewall add rule Izmanto, lai konfigurētu ugunsmūra noteikumus, lai atļautu trafiku caur noteiktiem portiem, kas nepieciešami SQL Server un spoguļošanai (piemēram, 1433 un 5022). Tas ir būtiski, lai nodrošinātu saziņu starp spoguļpartneriem. Piemērs: netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433
socket.create_connection Python komanda, ko izmanto, lai izveidotu TCP savienojumu ar noteiktu serveri un portu. Šajā kontekstā to izmanto, lai pārbaudītu, vai SQL Server gadījums ir sasniedzams tīklā. Piemērs: socket.create_connection((serveris, ports), taimauts=5);
New-Object System.Net.Sockets.TcpClient PowerShell komanda, ko izmanto, lai izveidotu TCP klientu portu savienojamības pārbaudei. Tas palīdz pārbaudīt, vai nepieciešamie spoguļošanas porti ir atvērti un pieejami starp serveriem. Piemērs: $tcpClient = New-Object System.Net.Sockets.TcpClient($serveris, $ports)
SELECT * FROM sys.database_mirroring Šī SQL komanda izgūst datu bāzes spoguļošanas sesijas statusu, palīdzot diagnosticēt, vai spoguļošanas iestatījums ir pareizi izveidots vai radušās problēmas. Piemērs: SELECT * FROM sys.database_mirroring;

Detalizēts spoguļošanas kļūdu risināšanas skriptu sadalījums

Tiek izmantots pirmais skripts, kas sniegts iepriekšējos piemēros Transact-SQL (T-SQL) komandas, lai konfigurētu un atrisinātu spoguļošanas kļūdu SQL Server. Vissvarīgākā skripta daļa ir skripta izveide un konfigurēšana galapunktu atspoguļošana. Šie galapunkti ir tīkla saskarnes, caur kurām SQL Server gadījumi sazinās spoguļošanas laikā. Komanda MAINĪT END PONT nodrošina, ka galapunkti abos serveros ir stāvoklī "STARTED", ļaujot notikt saziņai. The IESTATĪT PARTNERI komanda tiek izmantota datu bāzu saistīšanai, norādot partnera servera tīkla adresi, kas ļauj diviem SQL gadījumiem atspoguļot datus visā tīklā.

Otrais skripts ir PowerShell risinājums, kas paredzēts, lai pārbaudītu tīkla savienojumu starp diviem serveriem. PowerShell izmanto New-Object System.Net.Sockets.TcpClient komandu, lai izveidotu TCP klientu, kas mēģina izveidot savienojumu ar norādīto IP adresi un portu. Tas ir efektīvs veids, kā pārbaudīt, vai nepieciešamie porti (1433 SQL Server un 5022 spoguļošanai) ir atvērti un pieejami. Šis skripts ir īpaši noderīgs, lai diagnosticētu ugunsmūra vai tīkla problēmas, kas var traucēt diviem SQL gadījumiem sazināties, tādējādi izraisot Kļūda 1418.

Trešais skripts izmanto Windows komandu uzvednes komandas, lai pārvaldītu ugunsmūra iestatījumus. Konkrēti, netsh advfirewall ugunsmūra pievienošanas kārtula komanda tiek izmantota, lai atvērtu nepieciešamos portus SQL Server un spoguļošanai. Tas nodrošina, ka gan datu bāzes trafika (ports 1433), gan spoguļošanas trafika (ports 5022) var brīvi plūst starp diviem serveriem. Uz laiku atspējojot ugunsmūri ar netsh advfirewall izslēdza visu profilu stāvokli komandu, skripts var pārbaudīt, vai ugunsmūris ir tīkla piekļuves problēmas galvenais iemesls. Šis risinājums ir īpaši svarīgs, novēršot servera sakaru problēmas drošā vidē.

Visbeidzot, Python skripts izmanto socket.create_connection funkcija, lai veiktu tīkla pārbaudi starp diviem serveriem. Šis skripts nodrošina ātru un efektīvu veidu, kā pārbaudīt, vai serveri var sazināties viens ar otru, izmantojot nepieciešamos TCP portus. Tas mēģina izveidot savienojumu un, ja tas izdodas, apstiprina, ka tīkla iestatīšana ir pareiza. Python vienkāršība ar tīklu saistītu problēmu risināšanā padara to par labu izvēli savienojamības pārbaudei, īpaši vidēs, kur citi rīki nav pieejami vai ir apgrūtinoši lietojami. Kopā šie skripti piedāvā visaptverošu pieeju, lai atrisinātu problēmu datu bāzes spoguļošana kļūdu un nodrošināt vienmērīgu saziņu starp SQL Server gadījumiem.

1. risinājums: SQL Server datu bāzes spoguļošanas kļūdas 1418 labošana (T-SQL pieeja)

Šis risinājums izmanto Transact-SQL (T-SQL), lai atrisinātu datu bāzes spoguļošanas problēmas, konfigurējot galapunktus, autentificējot savienojumus un validējot servera adreses.

-- 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

2. risinājums: PowerShell skripts, lai pārbaudītu SQL servera porta pieejamību

Šis risinājums izmanto PowerShell, lai pārbaudītu portu savienojumu starp serveriem, nodrošinot, ka nepieciešamie porti ir atvērti un klausās.

# 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

3. risinājums: SQL servera kļūdas 1418 labojums (ugunsmūra konfigurācija)

Šī pieeja izmanto Windows komandu uzvedni, lai pārbaudītu ugunsmūra konfigurācijas, nodrošinot, ka nepieciešamie porti (1433, 5022) ir atvērti abos serveros.

-- 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

4. risinājums: Python skripts, lai pārbaudītu TCP savienojumu starp serveriem

Šis risinājums izmanto Python, lai pārbaudītu, vai SQL Server gadījumi var sazināties tīklā, pārbaudot TCP savienojumus.

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)

5. risinājums: SQL Server Management Studio (SSMS) GUI konfigurācija

Šajā risinājumā ir aprakstīta spoguļošanas iestatīšana, izmantojot SSMS GUI lietotājiem, kuri nevēlas izmantot komandrindas saskarnes.

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.

Tīkla un drošības izaicinājumu izpēte SQL Server spoguļošanā

Uzstādot SQL Server datu bāzes spoguļošana, viens aspekts, kas bieži tiek ignorēts, ir tīkla konfigurācijas un drošības iestatījumu nozīme. Kļūdu 1418, kas norāda, ka servera tīkla adresi nevar sasniegt, bieži izraisa pamata tīkla problēmas. Pat tad, ja ir atvērti pareizie porti (1433 un 5022) un ugunsmūri ir atspējoti, citi tīkla elementi, piemēram, maršrutēšana un DNS konfigurācija, var izraisīt sakaru kļūmes. Ir svarīgi nodrošināt, ka abi serveri pareizi atrisina viens otra IP adreses, īpaši vairāku apakštīklu vidēs.

Vēl viens izaicinājums ietver SQL servera autentifikācija iestatījumi spoguļošanas iestatīšanas laikā. Datu bāzes spoguļošanai ir nepieciešams, lai gan galvenais, gan spoguļserveris viens otru autentificētu, izmantojot sertifikātus vai domēna autentifikāciju (Kerberos). Ja šī iestatīšana nav pareizi konfigurēta vai ja starp diviem serveriem ir neatbilstība drošības protokolos, var rasties kļūda 1418. Turklāt SQL Server pakalpojumu kontiem ir jābūt pareizām atļaujām abās iekārtās, jo īpaši piekļuvei spoguļošanas galapunktiem.

Visbeidzot, operētājsistēmas izvēle var ietekmēt arī spoguļošanas darbību. Dažādas Windows versijas var atšķirīgi apstrādāt TCP savienojumus, jo īpaši attiecībā uz ugunsmūra noteikumu pārvaldību un tīkla trafika maršrutēšanu. Ja jebkura servera operētājsistēmā ir novecojuši vai neatbilstoši tīkla draiveri, saziņa starp serveriem var neizdoties. Lai atrisinātu savienojamības problēmas, piemēram, kļūdu 1418, ir ļoti svarīgi nodrošināt, lai operētājsistēma būtu atjaunināta ar jaunākajiem ielāpiem un darbotos atbilstošie pakalpojumi.

Bieži uzdotie jautājumi par SQL Server spoguļošanas iestatīšanu un kļūdu 1418

  1. Kas izraisa kļūdu 1418 SQL Server spoguļošanā?
  2. Kļūdu 1418 parasti izraisa sakaru kļūme starp diviem serveriem. Tas var būt saistīts ar ugunsmūra iestatījumiem, nepareizi mirroring endpointsvai tīkla savienojuma problēmas.
  3. Kā es varu pārbaudīt, vai mani porti ir atvērti SQL Server spoguļošanai?
  4. Izmantojiet telnet komandu vai skriptu, piemēram, New-Object System.Net.Sockets.TcpClient programmā PowerShell, lai pārbaudītu, vai porti 1433 un 5022 ir atvērti.
  5. Vai spoguļošanai abiem serveriem ir jāatrodas vienā domēnā?
  6. Nē, bet domēna autentifikācija var vienkāršot procesu. Pretējā gadījumā jums ir jāizmanto uz sertifikātiem balstīta autentifikācija, lai nodrošinātu mirroring endpoints.
  7. Kāda ir galapunkta loma datu bāzes spoguļošanā?
  8. The CREATE ENDPOINT komanda izveido tīkla saskarni, kas ļauj SQL Server gadījumiem sazināties spoguļošanas laikā. Katram serverim ir jābūt funkcionējošam spoguļošanas galapunktam.
  9. Vai varu atspoguļot datu bāzes dažādās SQL Server versijās?
  10. Nē, datu bāzes spoguļošanai ir nepieciešams, lai abi SQL Server gadījumi darbotos vienā un tajā pašā versijā un izdevumā.

Pēdējās domas par datu bāzes spoguļošanas kļūdas 1418 atrisināšanu

Datu bāzes spoguļošanas kļūdas, piemēram, kļūdu 1418, bieži izraisa tīkla problēmas starp serveriem. Šo problēmu var atrisināt, pārliecinoties, ka ir atvērti pareizie porti, konfigurēti ugunsmūri un pareizi iestatīti galapunkti.

Turklāt tīkla piekļuves apstiprināšana ar tādiem rīkiem kā PowerShell un autentifikācijas protokolu konsekvences nodrošināšana starp serveriem uzlabos jūsu izredzes gūt panākumus. Šo darbību veikšana var palīdzēt sasniegt uzticamu SQL Server spoguļošanu augstas veiktspējas operācijām.

Atsauces un resursi datu bāzu spoguļošanas risinājumiem
  1. Sīkāku informāciju par SQL Server spoguļošanas konfigurāciju un problēmu novēršanu, tostarp kļūdu 1418 un galapunkta iestatījumiem, var atrast vietnē Microsoft SQL dokumentācija .
  2. Visaptverošam ceļvedim ugunsmūra noteikumu konfigurēšanai un tīkla problēmu novēršanai SQL Server spoguļošanai var piekļūt vietnē Windows ugunsmūra konfigurācija .
  3. PowerShell skripti portu testēšanai un tīkla verifikācijai starp SQL Server gadījumiem ir pieejami vietnē PowerShell dokumentācija .
  4. Lai uzzinātu par Python ligzdas programmēšanas metodēm, ko izmanto servera savienojamības testēšanā, apmeklējiet vietni Python Socket modulis .