Andmebaasi peegeldamise tõrke 1418 lahendamine: serveri võrguaadress on kättesaamatu

Temp mail SuperHeros
Andmebaasi peegeldamise tõrke 1418 lahendamine: serveri võrguaadress on kättesaamatu
Andmebaasi peegeldamise tõrke 1418 lahendamine: serveri võrguaadress on kättesaamatu

Andmebaasi peegeldamise ühenduse probleemide mõistmine

Andmebaasi peegeldamine on oluline strateegia kõrge kättesaadavuse ja liiasuse tagamiseks SQL Serveri keskkondades. Peegeldamise konfigureerimine võib aga mõnikord põhjustada masendavaid vigu, näiteks tõrget 1418, mis ütleb, et serveri võrguaadressi ei ole võimalik saavutada või seda pole olemas.

See konkreetne tõrge ilmneb sageli kahe SQL Serveri eksemplari vahelise peegeldamisseansi seadistamisel, isegi kui mõlemad andmebaasid on eraldi juurdepääsetavad. Probleem tekib siis, kui peegeldavad lõpp-punktid ei suuda üksteisega suhelda.

Käesoleval juhul on peegeldamisprotsessi kaasatud kohalik töölaud (192.168.0.80) ja mini-arvuti (192.168.0.85). Miniarvuti on mõeldud kasutamiseks mobiilirakenduse kirjutuskaitstud koopiana, kasutades peegeldamise režiimi "High Performance".

Hoolimata õigest pordi konfiguratsioonist ja tulemüüri seadistustest ilmneb kasutajal peegeldamisseansi algatamisel viga 1418. See artikkel uurib selle probleemi võimalikke põhjuseid ja lahendusi.

Käsk Kasutusnäide
ALTER ENDPOINT Seda käsku kasutatakse andmebaasi peegeldamise lõpp-punkti oleku muutmiseks SQL Serveris. Tõrke 1418 lahendamise kontekstis tagab see, et lõpp-punkt on õigesti käivitatud ja kuulab määratud pordis. Näide: ALTER ENDPOINT [Peegeldamine] STATE = ALGATUD;
GRANT CONNECT ON ENDPOINT Võimaldab konkreetsel sisselogimisel luua ühenduse peegeldava lõpp-punktiga. See on ülioluline, et võimaldada SQL Serveri eksemplaridel andmebaasi peegeldamise ajal turvaliselt suhelda. Näide: ANNA ÜHENDUSE LÕPPPOINT::[Peegeldava_lõpp-punkt] TO [DOMAINKasutajakonto];
SET PARTNER Konfigureerib ühe SQL Serveri eksemplari andmebaasi peegeldamise seansi partneriks. See käsk määrab partnerserveri võrguaadressi. Näide: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022';
CREATE ENDPOINT Loob peegeldava lõpp-punkti, mis kuulab konkreetset porti ja haldab andmebaasi peegeldamise seansse. See määrab suhtlusrolli (nt PARTNER). Näide: CREATE ENDPOINT [Peegeldava_lõpp-punkt] AS TCP-na (KUULERI_PORT = 5022) ANDMEBAASI_PEEGLIMISEKS (ROLL = PARTNER);
netsh advfirewall firewall add rule Kasutatakse tulemüürireeglite konfigureerimiseks, et võimaldada liiklust läbi SQL Serveri ja peegeldamise jaoks vajalike kindlate portide (nt 1433 ja 5022). See on oluline peegeldavate partnerite vahelise suhtluse võimaldamiseks. Näide: netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433
socket.create_connection Pythoni käsk, mida kasutatakse TCP-ühenduse loomiseks määratud serveri ja pordiga. Selles kontekstis kasutatakse seda kontrollimaks, kas SQL Serveri eksemplar on võrgu kaudu kättesaadav. Näide: socket.create_connection((server, port), timeout=5);
New-Object System.Net.Sockets.TcpClient PowerShelli käsk, mida kasutatakse TCP-kliendi loomiseks pordi ühenduvuse testimiseks. See aitab kontrollida, kas vajalikud peegeldamispordid on avatud ja serverite vahel juurdepääsetavad. Näide: $tcpClient = Uus-objekt System.Net.Sockets.TcpClient($server, $port)
SELECT * FROM sys.database_mirroring See SQL-käsk toob välja andmebaasi peegeldamise seansi oleku, aidates diagnoosida, kas peegeldamise seadistus on õigesti loodud või esineb probleeme. Näide: SELECT * FROM sys.database_milroring;

Peegeldavate vigade lahendamise skriptide üksikasjalik jaotus

Varasemates näidetes esitatud esimene skript kasutab Transact-SQL (T-SQL) käske SQL Serveri peegeldamisvea konfigureerimiseks ja lahendamiseks. Skripti kõige kriitilisem osa on selle loomine ja konfigureerimine lõpp-punktide peegeldamine. Need lõpp-punktid on võrguliidesed, mille kaudu SQL Serveri eksemplarid suhtlevad peegeldamise ajal. Käsk MUUDA LÕPP-PUNKTI tagab, et mõlema serveri lõpp-punktid on olekus "ALGATUD", võimaldades sidet. The MÄÄRATA PARTNER Seejärel kasutatakse andmebaaside linkimiseks käsku, mis määrab partnerserveri võrguaadressi, mis võimaldab kahel SQL-i eksemplaril andmeid kogu võrgus peegeldada.

Teine skript on PowerShelli lahendus, mis on loodud kahe serveri vahelise võrguühenduse testimiseks. PowerShell kasutab New-Object System.Net.Sockets.TcpClient käsk TCP-kliendi loomiseks, mis proovib luua ühendust määratud IP-aadressi ja pordiga. See on tõhus viis kontrollida, kas vajalikud pordid (1433 SQL Serveri jaoks ja 5022 peegeldamiseks) on avatud ja juurdepääsetavad. See skript on eriti kasulik tulemüüri või võrguprobleemide diagnoosimiseks, mis võivad takistada kahe SQL-i eksemplari suhtlemist, põhjustades seega Viga 1418.

Kolmas skript kasutab tulemüüri sätete haldamiseks Windowsi käsuviiba käske. Täpsemalt, netsh advfirewall tulemüüri lisamise reegel käsku kasutatakse SQL Serveri ja peegeldamise jaoks vajalike portide avamiseks. See tagab, et nii andmebaasiliiklus (port 1433) kui ka peegeldav liiklus (port 5022) saavad kahe serveri vahel vabalt voolata. Keelates ajutiselt tulemüüri rakendusega netsh advfirewall lülitas kõigi profiilide oleku välja käsuga saab skript kontrollida, kas tulemüür on võrgule juurdepääsu probleemi algpõhjus. See lahendus on eriti oluline serveri sideprobleemide tõrkeotsingul turvalises keskkonnas.

Lõpuks kasutab Pythoni skript socket.create_connection funktsioon võrgu kontrollimiseks kahe serveri vahel. See skript pakub kiiret ja tõhusat viisi kontrollimaks, kas serverid saavad nõutavate TCP-portide kaudu üksteisega ühendust võtta. See proovib ühendust luua ja kui see õnnestub, kinnitab, et võrgu seadistus on õige. Pythoni lihtsus võrguga seotud probleemide käsitlemisel muudab selle hea valiku ühenduvuse testimiseks, eriti keskkondades, kus muud tööriistad pole saadaval või tülikas kasutada. Need skriptid koos pakuvad terviklikku lähenemisviisi probleemi lahendamiseks andmebaasi peegeldamine viga ja SQL Serveri eksemplaride vahelise sujuva suhtluse tagamine.

Lahendus 1: SQL Serveri andmebaasi peegeldamise tõrke 1418 parandamine (T-SQL-i lähenemisviis)

See lahendus kasutab Transact-SQL-i (T-SQL) andmebaasi peegeldamise probleemide lahendamiseks lõpp-punktide konfigureerimise, ühenduste autentimise ja serveriaadresside valideerimise kaudu.

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

Lahendus 2: PowerShelli skript SQL Serveri pordi juurdepääsetavuse testimiseks

See lahendus kasutab PowerShelli serveritevahelise pordiühenduse testimiseks, tagades, et vajalikud pordid on avatud ja kuulavad.

# 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

Lahendus 3: SQL Serveri vea 1418 parandamine (tulemüüri konfiguratsioon)

See lähenemisviis kasutab tulemüüri konfiguratsioonide kontrollimiseks Windowsi käsuviipa, tagades, et nõutavad pordid (1433, 5022) on mõlemas serveris avatud.

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

Lahendus 4: Pythoni skript serveritevahelise TCP-ühenduse kinnitamiseks

See lahendus kasutab Pythonit, et kontrollida, kas SQL Serveri eksemplarid saavad TCP-ühendusi kontrollides võrgu kaudu suhelda.

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)

Lahendus 5: SQL Server Management Studio (SSMS) GUI konfiguratsioon

See lahendus kirjeldab peegeldamise seadistamist SSMS-i GUI abil kasutajatele, kes ei eelista käsurea liideseid kasutada.

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.

Võrgu- ja turbeprobleemide uurimine SQL Serveri peegeldamises

Seadistamisel SQL Serveri andmebaasi peegeldamine, üks sageli tähelepanuta jäetud aspekt on võrgu konfiguratsiooni ja turvaseadete roll. Tõrge 1418, mis näitab, et serveri võrguaadressi ei saa kätte, on sageli põhjustatud võrguprobleemidest. Isegi kui õiged pordid (1433 ja 5022) on avatud ja tulemüürid on keelatud, võivad muud võrguelemendid, nagu marsruutimine ja DNS-i konfiguratsioon, põhjustada sidetõrkeid. Oluline on tagada, et mõlemad serverid lahendaksid üksteise IP-aadressid õigesti, eriti mitme alamvõrguga keskkondades.

Teine väljakutse hõlmab SQL Serveri autentimine seaded peegeldamise seadistamise ajal. Andmebaasi peegeldamine nõuab, et nii põhi- kui ka peegelserver autentiksid üksteist sertifikaatide või domeenipõhise autentimise (Kerberos) kaudu. Kui see seadistus pole õigesti konfigureeritud või kui kahe serveri turvaprotokollid ei ühti, võib ilmneda tõrge 1418. Lisaks peavad SQL Serveri teenusekontodel olema mõlemas masinas õiged õigused, eriti juurdepääs peegeldavatele lõpp-punktidele.

Lõpuks võib operatsioonisüsteemi valik mõjutada ka peegeldamise käitumist. Erinevad Windowsi versioonid võivad TCP-ühendusi käsitleda erinevalt, eriti tulemüürireeglite ja võrguliikluse marsruutimise osas. Kui kummagi serveri operatsioonisüsteemil on aegunud või mittevastavad võrgudraiverid, võib serveritevaheline side ebaõnnestuda. Ühenduvusprobleemide (nt tõrge 1418) lahendamisel on ülioluline tagada, et OS oleks ajakohastatud uusimate paikadega ja et vastavad teenused töötaksid.

Levinud küsimused SQL Serveri peegeldamise häälestuse ja tõrke 1418 kohta

  1. Mis põhjustab SQL Serveri peegeldamisel tõrke 1418?
  2. Tõrke 1418 põhjustab tavaliselt kahe serveri vaheline sidetõrge. Selle põhjuseks võivad olla tulemüüri sätted, valed mirroring endpointsvõi võrguühenduse probleemid.
  3. Kuidas kontrollida, kas mu pordid on SQL Serveri peegeldamiseks avatud?
  4. Kasutage telnet käsk või skript, näiteks New-Object System.Net.Sockets.TcpClient PowerShellis, et testida, kas pordid 1433 ja 5022 on avatud.
  5. Kas peegeldamiseks peavad mõlemad serverid olema samas domeenis?
  6. Ei, kuid domeeni autentimine võib protsessi lihtsustada. Vastasel juhul peate turvalisuse tagamiseks kasutama sertifikaadipõhist autentimist mirroring endpoints.
  7. Milline on lõpp-punkti roll andmebaasi peegeldamisel?
  8. The CREATE ENDPOINT käsk loob võrguliidese, mis võimaldab SQL Serveri eksemplaridel peegeldamise ajal suhelda. Igal serveril peab olema toimiv peegeldav lõpp-punkt.
  9. Kas ma saan peegeldada andmebaase erinevates SQL Serveri versioonides?
  10. Ei, andmebaasi peegeldamine nõuab, et mõlemad SQL Serveri eksemplarid oleksid samal versioonil ja väljaandel, et korralikult töötada.

Viimased mõtted andmebaasi peegeldamise vea 1418 lahendamise kohta

Andmebaasi peegeldamise vead, nagu tõrge 1418, on sageli põhjustatud serveritevahelisest võrguprobleemidest. Selle probleemi saab lahendada, kui veenduda, et õiged pordid on avatud, tulemüürid on konfigureeritud ja lõpp-punktid on õigesti seadistatud.

Lisaks parandab teie eduvõimalusi võrgujuurdepääsu kinnitamine selliste tööriistadega nagu PowerShell ja autentimisprotokollide järjepidevuse tagamine serverite vahel. Nende sammude järgimine võib aidata saavutada suure jõudlusega toimingute jaoks usaldusväärset SQL Serveri peegeldamist.

Andmebaasi peegeldamise lahenduste viited ja ressursid
  1. Üksikasjad SQL Serveri peegeldamise konfiguratsiooni ja tõrkeotsingu, sealhulgas tõrke 1418 ja lõpp-punkti sätete kohta leiate aadressilt Microsoft SQL-i dokumentatsioon .
  2. SQL Serveri peegeldamise tulemüürireeglite konfigureerimise ja võrgu tõrkeotsingu põhjalik juhend on saadaval aadressil Windowsi tulemüüri konfiguratsioon .
  3. SQL Serveri eksemplaride vahelise pordi testimise ja võrgu kontrollimise PowerShelli skriptid on saadaval aadressil PowerShelli dokumentatsioon .
  4. Serveri ühenduvuse testimisel kasutatavate Pythoni soklite programmeerimistehnikate kohta külastage veebisaiti Pythoni pistikupesa moodul .