Duomenų bazės atspindėjimo klaidos 1418 sprendimas: serverio tinklo adresas nepasiekiamas

Temp mail SuperHeros
Duomenų bazės atspindėjimo klaidos 1418 sprendimas: serverio tinklo adresas nepasiekiamas
Duomenų bazės atspindėjimo klaidos 1418 sprendimas: serverio tinklo adresas nepasiekiamas

Duomenų bazės atspindėjimo ryšio problemų supratimas

Duomenų bazės atspindėjimas yra esminė strategija, užtikrinanti aukštą pasiekiamumą ir dubliavimą SQL serverio aplinkose. Tačiau konfigūruojant dubliavimą kartais gali atsirasti varginančių klaidų, pvz., 1418 klaida, kuri nurodo, kad serverio tinklo adresas nepasiekiamas arba jo nėra.

Ši konkreti klaida dažnai įvyksta bandant nustatyti dubliavimo seansą tarp dviejų SQL serverio egzempliorių, net jei abi duomenų bazės pasiekiamos atskirai. Problema iškyla, kai atspindintys galiniai taškai nesugeba susisiekti vienas su kitu.

Šiuo atveju dubliavimo procese dalyvauja vietinis darbalaukis (192.168.0.80) ir mini kompiuteris (192.168.0.85). Mini kompiuteris skirtas naudoti kaip tik skaitoma mobiliosios programos kopija, naudojant „High Performance“ atspindėjimo režimą.

Nepaisant teisingos prievado konfigūracijos ir ugniasienės koregavimų, bandydamas inicijuoti dubliavimo seansą, vartotojas susiduria su 1418 klaida. Šiame straipsnyje bus nagrinėjamos galimos priežastys ir sprendimai, kaip išspręsti šią problemą.

komandą Naudojimo pavyzdys
ALTER ENDPOINT Ši komanda naudojama duomenų bazės atspindimo galutinio taško būsenai modifikuoti SQL serveryje. Išspręsdamas 1418 klaidą, jis užtikrina, kad galutinis taškas būtų tinkamai paleistas ir klausomas nurodytame prievade. Pavyzdys: ALTER ENDPOINT [veidrodis] STATE = PRADĖTA;
GRANT CONNECT ON ENDPOINT Leidžia konkrečiam prisijungimui prisijungti prie veidrodinio galinio taško. Tai labai svarbu, kad SQL serverio egzemplioriai galėtų saugiai bendrauti duomenų bazės atspindėjimo metu. Pavyzdys: SUTEIKTI PRISIJUNGTI ENDPOINT::[Mirroring_Endpoint] Į [DOMENASUserAccount];
SET PARTNER Konfigūruoja vieną SQL serverio egzempliorių kaip duomenų bazės atspindėjimo seanso partnerį. Ši komanda nustato partnerio serverio tinklo adresą. Pavyzdys: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022';
CREATE ENDPOINT Sukuria veidrodinį galinį tašką, kuris klausosi konkretaus prievado ir valdo duomenų bazės atspindėjimo seansus. Jame nurodomas komunikacijos vaidmuo (pvz., PARTNERIS). Pavyzdys: CREATE END POINT [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING (ROLE = PARTNERIS);
netsh advfirewall firewall add rule Naudojamas ugniasienės taisyklėms konfigūruoti, kad srautas būtų leidžiamas per konkrečius prievadus, reikalingus SQL serveriui ir dubliavimui (pvz., 1433 ir 5022). Tai būtina norint užtikrinti ryšį tarp atspindinčių partnerių. Pavyzdys: netsh advfirewall ugniasienė pridėti taisyklę name="SQLPort" dir=in action=allow protocol=TCP localport=1433
socket.create_connection Python komanda, naudojama užmegzti TCP ryšį su nurodytu serveriu ir prievadu. Šiame kontekste jis naudojamas patikrinti, ar SQL serverio egzempliorius pasiekiamas tinkle. Pavyzdys: socket.create_connection((serveris, prievadas), timeout=5);
New-Object System.Net.Sockets.TcpClient „PowerShell“ komanda, naudojama sukurti TCP klientą, skirtą prievado ryšiui išbandyti. Tai padeda patikrinti, ar būtini veidrodiniai prievadai yra atviri ir pasiekiami tarp serverių. Pavyzdys: $tcpClient = Naujo objekto sistema.Net.Sockets.TcpClient($serveris, $prievadas)
SELECT * FROM sys.database_mirroring Ši SQL komanda nuskaito duomenų bazės atspindėjimo seanso būseną ir padeda diagnozuoti, ar dubliavimo sąranka tinkamai nustatyta, ar kyla problemų. Pavyzdys: SELECT * FROM sys.database_mirroring;

Išsamus veidrodinių klaidų sprendimo scenarijų suskirstymas

Naudojamas pirmasis scenarijus, pateiktas ankstesniuose pavyzdžiuose Transact-SQL (T-SQL) komandas, kad sukonfigūruotumėte ir išspręstumėte dubliavimo klaidą SQL serveryje. Svarbiausia scenarijaus dalis yra jo kūrimas ir konfigūravimas atspindintys galinius taškus. Šie galiniai taškai yra tinklo sąsajos, per kurias SQL serverio egzemplioriai palaiko ryšį dubliavimo metu. Komanda PAKEISTI TAŠKĄ užtikrina, kad abiejų serverių galiniai taškai yra „STARTED“ būsenoje, leidžiantys užmegzti ryšį. The NUSTATYTI PARTNERĮ Tada komanda naudojama duomenų bazėms susieti, nurodant partnerio serverio tinklo adresą, kuris leidžia dviem SQL egzemplioriams atspindėti duomenis visame tinkle.

Antrasis scenarijus yra „PowerShell“ sprendimas, skirtas patikrinti tinklo ryšį tarp dviejų serverių. „PowerShell“ naudoja New-Object System.Net.Sockets.TcpClient komanda sukurti TCP klientą, kuris bando prisijungti prie nurodyto IP adreso ir prievado. Tai yra efektyvus būdas patikrinti, ar reikalingi prievadai (1433 SQL serveriui ir 5022 dubliavimui) yra atviri ir pasiekiami. Šis scenarijus ypač naudingas diagnozuojant ugniasienės arba tinklo problemas, kurios gali trukdyti dviems SQL egzemplioriams susisiekti ir taip sukelti Klaida 1418.

Trečiasis scenarijus naudoja „Windows“ komandų eilutės komandas ugniasienės parametrams valdyti. Tiksliau, netsh advfirewall ugniasienės pridėti taisyklė komanda naudojama norint atidaryti būtinus SQL serverio ir atspindėjimo prievadus. Tai užtikrina, kad tiek duomenų bazės srautas (1433 prievadas), tiek dubliavimo srautas (5022 prievadas) galėtų laisvai tekėti tarp dviejų serverių. Laikinai išjungus ugniasienę su netsh advfirewall išjungė visų profilių būseną komandą, scenarijus gali patikrinti, ar užkarda yra pagrindinė tinklo prieigos problemos priežastis. Šis sprendimas ypač svarbus sprendžiant serverio ryšio problemas saugioje aplinkoje.

Galiausiai Python scenarijus naudoja socket.create_connection funkcija atlikti tinklo patikrinimą tarp dviejų serverių. Šis scenarijus suteikia greitą ir efektyvų būdą patikrinti, ar serveriai gali pasiekti vienas kitą per reikiamus TCP prievadus. Jis bando užmegzti ryšį ir, jei pavyks, patvirtina, kad tinklo sąranka yra teisinga. Dėl „Python“ paprastumo sprendžiant su tinklu susijusias problemas jis yra geras pasirinkimas bandant ryšį, ypač aplinkoje, kurioje kiti įrankiai nepasiekiami arba juos sunku naudoti. Kartu šie scenarijai siūlo visapusišką požiūrį į problemos sprendimą duomenų bazės atspindėjimas klaidą ir užtikrinti sklandų ryšį tarp SQL serverio egzempliorių.

1 sprendimas: 1418 klaidos taisymas SQL serverio duomenų bazės veidrodyje (T-SQL metodas)

Šis sprendimas naudoja Transact-SQL (T-SQL), kad išspręstų duomenų bazės dubliavimo problemas, konfigūruodamas galinius taškus, autentifikuodamas ryšius ir patvirtindamas serverio adresus.

-- 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 sprendimas: „PowerShell“ scenarijus, skirtas patikrinti SQL serverio prievado prieinamumą

Šis sprendimas naudoja „PowerShell“, kad patikrintų prievadų ryšį tarp serverių, užtikrinant, kad reikiami prievadai būtų atidaryti ir klausosi.

# 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 sprendimas: SQL serverio klaidos 1418 pataisymas (ugniasienės konfigūracija)

Šis metodas naudoja „Windows“ komandų eilutę, kad patikrintų ugniasienės konfigūracijas, užtikrinant, kad reikiami prievadai (1433, 5022) būtų atidaryti abiejuose serveriuose.

-- 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 sprendimas: Python scenarijus, skirtas patvirtinti TCP ryšį tarp serverių

Šis sprendimas naudoja Python, kad patikrintų, ar SQL serverio egzemplioriai gali susisiekti tinkle, tikrindami TCP ryšius.

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 sprendimas: SQL Server Management Studio (SSMS) GUI konfigūracija

Šis sprendimas leidžia nustatyti dubliavimą naudojant SSMS GUI vartotojams, kurie nenori naudoti komandų eilutės sąsajų.

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.

Tinklo ir saugos iššūkių tyrinėjimas naudojant „SQL Server Mirroring“.

Nustatant SQL serverio duomenų bazės atspindėjimas, vienas dažnai nepastebimas aspektas yra tinklo konfigūracijos ir saugos nustatymų vaidmuo. Klaida 1418, nurodanti, kad serverio tinklo adresas nepasiekiamas, dažnai kyla dėl pagrindinių tinklo problemų. Netgi atidarius tinkamus prievadus (1433 ir 5022) ir išjungus užkardas, kiti tinklo elementai, pvz., maršruto parinkimas ir DNS konfigūracija, gali sukelti ryšio trikčių. Svarbu užtikrinti, kad abu serveriai tinkamai nustatytų vienas kito IP adresus, ypač kelių potinklių aplinkoje.

Kitas iššūkis apima SQL serverio autentifikavimas nustatymai veidrodžio nustatymo metu. Duomenų bazės atspindėjimas reikalauja, kad pagrindinis ir veidrodinis serveris vienas kitą autentifikuotų naudodami sertifikatus arba domeno autentifikavimą (Kerberos). Jei ši sąranka netinkamai sukonfigūruota arba jei dviejų serverių saugos protokolai nesutampa, gali įvykti 1418 klaida. Be to, SQL serverio paslaugų paskyros turi turėti tinkamus leidimus abiejuose įrenginiuose, ypač prieigą prie atspindinčių galinių taškų.

Galiausiai, operacinės sistemos pasirinkimas taip pat gali turėti įtakos atspindėjimo veikimui. Skirtingos „Windows“ versijos gali skirtingai tvarkyti TCP ryšius, ypač tai, kaip jos valdo ugniasienės taisykles ir tinklo srauto nukreipimą. Jei kurio nors serverio operacinėje sistemoje yra pasenusių arba neatitinkančių tinklo tvarkyklių, ryšys tarp serverių gali nutrūkti. Norint išspręsti ryšio problemas, pvz., 1418 klaidą, labai svarbu užtikrinti, kad OS būtų atnaujinta naudojant naujausius pataisymus ir veiktų atitinkamos paslaugos.

Įprasti klausimai apie SQL serverio atspindėjimo sąranką ir 1418 klaidą

  1. Kas sukelia 1418 klaidą SQL serverio veidrodyje?
  2. Klaida 1418 paprastai atsiranda dėl ryšio tarp dviejų serverių gedimo. Tai gali būti dėl ugniasienės nustatymų, neteisingų mirroring endpointsarba tinklo ryšio problemos.
  3. Kaip patikrinti, ar mano prievadai yra atviri SQL serverio atspindėjimui?
  4. Naudokite telnet komanda arba scenarijus, pvz New-Object System.Net.Sockets.TcpClient PowerShell, kad patikrintumėte, ar 1433 ir 5022 prievadai yra atidaryti.
  5. Ar abu serveriai turi būti tame pačiame domene, kad būtų galima atspindėti?
  6. Ne, bet domeno autentifikavimas gali supaprastinti procesą. Kitu atveju, norėdami apsaugoti, turite naudoti sertifikatu pagrįstą autentifikavimą mirroring endpoints.
  7. Koks yra galutinio taško vaidmuo duomenų bazės veidrodyje?
  8. The CREATE ENDPOINT komanda sukuria tinklo sąsają, leidžiančią SQL serverio egzemplioriams susisiekti dubliavimo metu. Kiekvienas serveris turi turėti veikiantį veidrodinį galinį tašką.
  9. Ar galiu atspindėti skirtingų SQL serverio versijų duomenų bazes?
  10. Ne, duomenų bazės atspindėjimas reikalauja, kad abu SQL serverio egzemplioriai būtų tos pačios versijos ir leidimo, kad tinkamai veiktų.

Paskutinės mintys, kaip išspręsti duomenų bazės atspindėjimo klaidą 1418

Duomenų bazės atspindėjimo klaidas, tokias kaip 1418 klaida, dažnai sukelia tinklo problemos tarp serverių. Užtikrinus, kad atidaryti tinkami prievadai, sukonfigūruotos ugniasienės ir tinkamai nustatyti galiniai taškai, galite išspręsti šią problemą.

Be to, patvirtinus prieigą prie tinklo naudojant tokius įrankius kaip „PowerShell“ ir užtikrinus, kad autentifikavimo protokolai būtų suderinti tarp serverių, padidins jūsų sėkmės galimybes. Atlikę šiuos veiksmus, galite pasiekti patikimą SQL serverio atspindėjimą didelio našumo operacijoms.

Duomenų bazių atspindėjimo sprendimų nuorodos ir ištekliai
  1. Išsamią informaciją apie SQL serverio dubliavimo konfigūraciją ir trikčių šalinimą, įskaitant 1418 klaidą ir galutinio taško nustatymus, rasite adresu Microsoft SQL dokumentacija .
  2. Išsamų ugniasienės taisyklių konfigūravimo ir tinklo trikčių šalinimo vadovą, skirtą SQL serverio dubliavimui, galite rasti adresu „Windows“ ugniasienės konfigūracija .
  3. „PowerShell“ scenarijus, skirtas prievadų testavimui ir tinklo tikrinimui tarp SQL serverio egzempliorių, pasiekiami adresu „PowerShell“ dokumentacija .
  4. Norėdami sužinoti apie Python socket programavimo metodus, naudojamus bandant serverio ryšį, apsilankykite Python Socket modulis .