Tietokannan peilausyhteysongelmien ymmärtäminen
Tietokannan peilaus on olennainen strategia korkean käytettävyyden ja redundanssin varmistamiseksi SQL Server -ympäristöissä. Peilauksen määrittäminen voi kuitenkin joskus johtaa turhauttaviin virheisiin, kuten virheeseen 1418, joka ilmoittaa, että palvelimen verkko-osoitetta ei saada yhteyttä tai sitä ei ole olemassa.
Tämä erityinen virhe ilmenee usein, kun yritetään määrittää peilausistunto kahden SQL Server -esiintymän välille, vaikka molemmat tietokannat olisivat käytettävissä erikseen. Ongelma syntyy, kun peilauspäätepisteet eivät kommunikoi keskenään.
Tässä tapauksessa paikallinen työpöytä (192.168.0.80) ja mini-PC (192.168.0.85) ovat mukana peilausprosessissa. Mini-PC on tarkoitettu toimimaan vain luku -kopiona mobiilisovellukselle käyttämällä "High Performance" -peilaustilaa.
Huolimatta oikeasta portin määrityksestä ja palomuurin säädöistä, käyttäjä kohtaa virheen 1418 yrittäessään aloittaa peilausistunnon. Tässä artikkelissa tarkastellaan mahdollisia syitä ja ratkaisuja tämän ongelman ratkaisemiseksi.
Komento | Esimerkki käytöstä |
---|---|
ALTER ENDPOINT | Tätä komentoa käytetään tietokannan peilauksen päätepisteen tilan muokkaamiseen SQL Serverissä. Virheen 1418 ratkaisemisen yhteydessä se varmistaa, että päätepiste käynnistetään oikein ja että se kuuntelee määritettyä porttia. Esimerkki: ALTER ENDPOINT [peilaus] TILA = ALOITETTU; |
GRANT CONNECT ON ENDPOINT | Antaa tietyn kirjautumisen muodostaa yhteyden peilaavaan päätepisteeseen. Tämä on ratkaisevan tärkeää, jotta SQL Server -esiintymät voivat kommunikoida turvallisesti tietokannan peilauksen aikana. Esimerkki: MYÖNTÄ YHTEYS PÄÄTEPOINT::[Peilauksen_päätepiste] TOIMINNALLE [DOMAINUserAccount]; |
SET PARTNER | Määrittää yhden SQL Server -esiintymän kumppaniksi tietokannan peilausistunnossa. Tämä komento määrittää kumppanipalvelimen verkko-osoitteen. Esimerkki: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Luo peilauspäätepisteen, joka kuuntelee tiettyä porttia ja hallitsee tietokannan peilausistuntoja. Se määrittää viestintäroolin (esim. KUMPPANI). Esimerkki: LUO PÄÄTEPISTE [Peilauksen_päätepiste] AS TCP (KUUNTELIJAPORTTI = 5022) TIETOKANNAN_PEILITYSTÄ (ROLI = KUMPPANI); |
netsh advfirewall firewall add rule | Käytetään palomuurisääntöjen määrittämiseen sallimaan liikenne tiettyjen SQL Serverin ja peilauksen edellyttämien porttien kautta (esim. 1433 ja 5022). Tämä on välttämätöntä peilauskumppaneiden välisen viestinnän mahdollistamiseksi. Esimerkki: netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433 |
socket.create_connection | Python-komento, jota käytetään muodostamaan TCP-yhteys määritettyyn palvelimeen ja porttiin. Tässä yhteydessä sitä käytetään tarkistamaan, onko SQL Server -esiintymä tavoitettavissa verkon kautta. Esimerkki: socket.create_connection((palvelin, portti), aikakatkaisu=5); |
New-Object System.Net.Sockets.TcpClient | PowerShell-komento, jota käytetään TCP-asiakkaan luomiseen porttiyhteyden testaamista varten. Se auttaa varmistamaan, ovatko tarvittavat peilausportit auki ja käytettävissä palvelimien välillä. Esimerkki: $tcpClient = New-Object System.Net.Sockets.TcpClient($palvelin, $portti) |
SELECT * FROM sys.database_mirroring | Tämä SQL-komento noutaa tietokannan peilausistunnon tilan, mikä auttaa diagnosoimaan, onko peilausasetukset määritetty oikein vai onko siinä ongelmia. Esimerkki: SELECT * FROM sys.database_miroring; |
Peilausvirheenratkaisukomentosarjojen yksityiskohtainen erittely
Aiemmissa esimerkeissä annettu ensimmäinen komentosarja käyttää Transact-SQL (T-SQL) komennot SQL Serverin peilausvirheen määrittämiseksi ja ratkaisemiseksi. Skriptin kriittisin osa on sen luominen ja konfigurointi peilaavat päätepisteet. Nämä päätepisteet ovat verkkorajapintoja, joiden kautta SQL Server -esiintymät kommunikoivat peilauksen aikana. komento MUUTA PÄÄTEPISTE varmistaa, että molempien palvelimien päätepisteet ovat STARTED-tilassa, mikä mahdollistaa tiedonsiirron. The SET KUMPPANI komentoa käytetään sitten linkittämään tietokannat ja määrittämään kumppanipalvelimen verkko-osoitteen, mikä sallii kahden SQL-esiintymän peilata tietoja verkossa.
Toinen komentosarja on PowerShell-ratkaisu, joka on suunniteltu testaamaan verkkoyhteyksiä kahden palvelimen välillä. PowerShell käyttää New-Object System.Net.Sockets.TcpClient komento luodaksesi TCP-asiakkaan, joka yrittää muodostaa yhteyden määritettyyn IP-osoitteeseen ja porttiin. Tämä on tehokas tapa varmistaa, että vaaditut portit (1433 SQL Serverille ja 5022 peilaukselle) ovat avoinna ja käytettävissä. Tämä komentosarja on erityisen hyödyllinen diagnosoitaessa palomuuri- tai verkko-ongelmia, jotka saattavat estää kahta SQL-ilmentymää kommunikoimasta, mikä aiheuttaa Virhe 1418.
Kolmas komentosarja hyödyntää Windowsin komentokehotekomentoja palomuurin asetusten hallintaan. Tarkemmin sanottuna netsh advfirewall palomuurin lisäyssääntö komentoa käytetään avaamaan tarvittavat portit SQL Serveriä ja peilausta varten. Tämä varmistaa, että sekä tietokantaliikenne (portti 1433) että peilausliikenne (portti 5022) voivat virrata vapaasti kahden palvelimen välillä. Poistamalla palomuuri väliaikaisesti käytöstä netsh advfirewall asettaa kaikki profiilit pois päältä -komento, komentosarja voi tarkistaa, onko palomuuri verkkoyhteysongelman perimmäinen syy. Tämä ratkaisu on erityisen tärkeä palvelimen tiedonsiirto-ongelmien vianmäärityksessä suojatussa ympäristössä.
Lopuksi Python-skripti käyttää socket.create_connection toiminto suorittaa verkkotarkistuksen kahden palvelimen välillä. Tämä komentosarja tarjoaa nopean ja tehokkaan tavan tarkistaa, voivatko palvelimet tavoittaa toisensa vaadittujen TCP-porttien kautta. Se yrittää muodostaa yhteyden, ja jos se onnistuu, se vahvistaa, että verkkoasetukset ovat oikein. Pythonin yksinkertaisuus verkkoon liittyvien ongelmien käsittelyssä tekee siitä hyvän vaihtoehdon yhteyksien testaamiseen erityisesti ympäristöissä, joissa muita työkaluja ei ole saatavilla tai joissa niitä on hankala käyttää. Yhdessä nämä skriptit tarjoavat kattavan lähestymistavan ongelman ratkaisemiseen tietokannan peilaus virheen ja sujuvan viestinnän varmistaminen SQL Server -esiintymien välillä.
Ratkaisu 1: Virheen 1418 korjaaminen SQL Server -tietokannan peilauksessa (T-SQL-lähestymistapa)
Tämä ratkaisu käyttää Transact-SQL:ää (T-SQL) tietokannan peilausongelmien ratkaisemiseen määrittämällä päätepisteitä, todentamalla yhteyksiä ja tarkistamalla palvelinosoitteita.
-- 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
Ratkaisu 2: PowerShell-komentosarja SQL-palvelimen portin käytettävyyden testaamiseksi
Tämä ratkaisu testaa palvelinten välistä porttiyhteyttä PowerShellin avulla ja varmistaa, että tarvittavat portit ovat auki ja kuuntelevat.
# 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
Ratkaisu 3: SQL Server Error 1418 -korjaus (palomuurikokoonpano)
Tämä lähestymistapa käyttää Windowsin komentokehotetta palomuurin kokoonpanojen tarkistamiseen ja varmistaa, että vaaditut portit (1433, 5022) ovat avoinna molemmissa palvelimissa.
-- 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
Ratkaisu 4: Python-skripti palvelimien välisen TCP-yhteyden tarkistamiseksi
Tämä ratkaisu käyttää Pythonia tarkistamaan, voivatko SQL Server -esiintymät viestiä verkon yli tarkistamalla TCP-yhteydet.
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)
Ratkaisu 5: SQL Server Management Studion (SSMS) GUI-määritykset
Tämä ratkaisu käy läpi peilausmäärityksen SSMS GUI:lla käyttäjille, jotka eivät halua käyttää komentoriviliittymiä.
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.
SQL Server Mirroringin verkko- ja tietoturvahaasteiden tutkiminen
Asetettaessa SQL Server -tietokannan peilaus, yksi näkökohta, joka usein unohdetaan, on verkon kokoonpanon ja suojausasetusten rooli. Virhe 1418, joka osoittaa, että palvelimen verkko-osoitetta ei saada yhteyttä, johtuu usein taustalla olevista verkko-ongelmista. Vaikka oikeat portit (1433 ja 5022) avataan ja palomuurit on poistettu käytöstä, muut verkkoelementit, kuten reititys ja DNS-määritykset, voivat aiheuttaa viestintähäiriöitä. On tärkeää varmistaa, että molemmat palvelimet ratkaisevat toistensa IP-osoitteet oikein, erityisesti usean aliverkon ympäristöissä.
Toinen haaste liittyy SQL Server -todennus asetukset peilausasetusten aikana. Tietokannan peilaus edellyttää, että sekä pää- että peilipalvelin todentavat toisensa varmenteiden tai toimialuepohjaisen todennuksen (Kerberos) avulla. Jos tätä asetusta ei ole määritetty oikein tai jos kahden palvelimen suojausprotokollat eivät täsmää, voi ilmetä virhe 1418. Lisäksi SQL Server -palvelutileillä on oltava oikeat käyttöoikeudet molemmissa koneissa, erityisesti peilauspäätepisteiden käyttöoikeudet.
Lopuksi käyttöjärjestelmän valinta voi myös vaikuttaa peilauksen toimintaan. Eri Windows-versiot voivat käsitellä TCP-yhteyksiä eri tavalla, erityisesti siinä, miten ne hallitsevat palomuurisääntöjä ja verkkoliikenteen reititystä. Jos jommankumman palvelimen käyttöjärjestelmässä on vanhentuneita tai yhteensopimattomia verkkoajureita, palvelinten välinen tiedonsiirto saattaa epäonnistua. Sen varmistaminen, että käyttöjärjestelmä on ajan tasalla uusimpien korjaustiedostojen kanssa ja että asianmukaiset palvelut ovat käynnissä, on ratkaisevan tärkeää yhteysongelmien, kuten virheen 1418, ratkaisemisessa.
Yleisiä kysymyksiä SQL Serverin peilausasetuksista ja virheestä 1418
- Mikä aiheuttaa virheen 1418 SQL Server -peilauksessa?
- Virhe 1418 johtuu tyypillisesti kahden palvelimen välisestä tiedonsiirtohäiriöstä. Tämä voi johtua palomuuriasetuksista, väärin mirroring endpointstai verkkoyhteysongelmia.
- Kuinka voin tarkistaa, ovatko portit avoinna SQL Server -peilausta varten?
- Käytä telnet komento tai komentosarja, kuten New-Object System.Net.Sockets.TcpClient PowerShellissä testataksesi, ovatko portit 1433 ja 5022 auki.
- Pitääkö molempien palvelimien olla samassa toimialueella peilausta varten?
- Ei, mutta verkkotunnuksen todennus voi yksinkertaistaa prosessia. Muussa tapauksessa sinun on käytettävä varmenteeseen perustuvaa todennusta mirroring endpoints.
- Mikä on päätepisteen rooli tietokannan peilauksessa?
- The CREATE ENDPOINT -komento luo verkkoliitännän, jonka avulla SQL Server -esiintymät voivat kommunikoida peilauksen aikana. Jokaisella palvelimella on oltava toimiva peilaava päätepiste.
- Voinko peilata tietokantoja eri SQL Server -versioissa?
- Ei, tietokannan peilaus edellyttää, että molemmat SQL Server -esiintymät ovat samassa versiossa ja versiossa toimiakseen oikein.
Viimeisiä ajatuksia tietokannan peilausvirheen 1418 ratkaisemisesta
Tietokannan peilausvirheet, kuten Virhe 1418, johtuvat usein palvelimien välisistä verkko-ongelmista. Tämän ongelman voi ratkaista varmistamalla, että oikeat portit ovat avoinna, palomuurit on määritetty ja päätepisteet on määritetty oikein.
Lisäksi verkkoon pääsyn vahvistaminen PowerShellin kaltaisilla työkaluilla ja todennusprotokollien yhdenmukaisuuden varmistaminen palvelimien välillä parantaa menestymismahdollisuuksiasi. Näiden vaiheiden noudattaminen voi auttaa saavuttamaan luotettavan SQL Server -peilaus tehokkaan toiminnan kannalta.
Referenssit ja resurssit tietokantapeilausratkaisuihin
- Lisätietoja SQL Serverin peilausmäärityksestä ja vianmäärityksestä, mukaan lukien virhe 1418 ja päätepisteasetukset, on osoitteessa Microsoft SQL -dokumentaatio .
- Kattava opas palomuurisääntöjen määrittämiseen ja verkon vianmääritykseen SQL Server -peilausta varten on saatavilla osoitteessa Windowsin palomuurin asetukset .
- PowerShell-komentosarjat porttien testaukseen ja SQL Server -esiintymien välisen verkon varmistukseen ovat saatavilla osoitteessa PowerShell-dokumentaatio .
- Lisätietoja palvelinyhteyksien testauksessa käytetyistä Python-socket-ohjelmointitekniikoista on osoitteessa Python Socket -moduuli .