Zrozumienie problemów z połączeniem lustrzanym bazy danych
Dublowanie baz danych jest podstawową strategią zapewniającą wysoką dostępność i redundancję w środowiskach SQL Server. Jednak konfiguracja dublowania może czasami prowadzić do frustrujących błędów, takich jak błąd 1418, który stwierdza, że adres sieciowy serwera jest nieosiągalny lub nie istnieje.
Ten konkretny błąd często występuje podczas próby skonfigurowania sesji lustrzanej między dwiema instancjami SQL Server, nawet jeśli obie bazy danych są dostępne indywidualnie. Problem pojawia się, gdy lustrzane punkty końcowe nie komunikują się ze sobą.
W omawianym przypadku w procesie tworzenia kopii lustrzanej biorą udział lokalny pulpit (192.168.0.80) i mini PC (192.168.0.85). Mini PC ma służyć jako replika tylko do odczytu dla aplikacji mobilnej, korzystająca z trybu kopii lustrzanej „High Performance”.
Pomimo poprawnej konfiguracji portów i ustawień zapory ogniowej, użytkownik napotyka błąd 1418 podczas próby zainicjowania sesji lustrzanej. W tym artykule zostaną omówione potencjalne przyczyny i rozwiązania tego problemu.
Rozkaz | Przykład użycia |
---|---|
ALTER ENDPOINT | To polecenie służy do modyfikowania stanu punktu końcowego kopii lustrzanej bazy danych w programie SQL Server. W kontekście rozwiązywania błędu 1418 sprawdza, czy punkt końcowy został poprawnie uruchomiony i nasłuchuje na określonym porcie. Przykład: ALTER ENDPOINT [Mirroring] STAN = ROZPOCZĘTY; |
GRANT CONNECT ON ENDPOINT | Umożliwia określone logowanie w celu połączenia się z lustrzanym punktem końcowym. Ma to kluczowe znaczenie, aby umożliwić instancjom SQL Server bezpieczną komunikację podczas tworzenia kopii lustrzanej bazy danych. Przykład: GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint] DO [DOMENAUserAccount]; |
SET PARTNER | Konfiguruje jedną instancję SQL Server jako partnera w sesji dublowania bazy danych. To polecenie ustala adres sieciowy serwera partnerskiego. Przykład: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Tworzy lustrzany punkt końcowy, który nasłuchuje na określonym porcie i zarządza sesjami lustrzanymi baz danych. Określa rolę komunikacyjną (np. PARTNER). Przykład: UTWÓRZ PUNKT KOŃCOWY [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) DLA DATABASE_MIRRORING (ROLE = PARTNER); |
netsh advfirewall firewall add rule | Służy do konfigurowania reguł zapory sieciowej w celu zezwolenia na ruch przez określone porty wymagane dla SQL Server i dublowania (np. 1433 i 5022). Jest to niezbędne do umożliwienia komunikacji pomiędzy partnerami lustrzanymi. Przykład: zapora netsh advfirewall dodaj nazwę reguły="SQLPort" katalog=w akcji=zezwól na protokół=port lokalny TCP=1433 |
socket.create_connection | Polecenie języka Python służące do nawiązania połączenia TCP z określonym serwerem i portem. W tym kontekście sprawdza się, czy instancja SQL Server jest osiągalna przez sieć. Przykład: gniazdo.create_connection((serwer, port), timeout=5); |
New-Object System.Net.Sockets.TcpClient | Polecenie programu PowerShell używane do tworzenia klienta TCP do testowania łączności portów. Pomaga w sprawdzeniu, czy niezbędne porty lustrzane są otwarte i dostępne pomiędzy serwerami. Przykład: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | To polecenie SQL pobiera stan sesji dublowania bazy danych, pomagając w diagnozowaniu, czy konfiguracja dublowania została poprawnie ustanowiona, czy też występują problemy. Przykład: SELECT * FROM sys.database_mirroring; |
Szczegółowy podział skryptów rozwiązywania błędów lustrzanych kopii
Pierwszy skrypt podany we wcześniejszych przykładach używa Transact-SQL (T-SQL) polecenia umożliwiające skonfigurowanie i rozwiązanie błędu dublowania w programie SQL Server. Najważniejszą częścią skryptu jest utworzenie i konfiguracja lustrzane punkty końcowe. Te punkty końcowe to interfejsy sieciowe, za pośrednictwem których instancje SQL Server komunikują się podczas tworzenia kopii lustrzanej. Polecenie ZMIEŃ PUNKT KOŃCOWY zapewnia, że punkty końcowe na obu serwerach są w stanie „STARTED”, umożliwiając komunikację. The USTAW PARTNERA polecenie jest następnie używane do łączenia baz danych, określając adres sieciowy serwera partnerskiego, co pozwala dwóm instancjom SQL na lustrzane odbicie danych w sieci.
Drugi skrypt to rozwiązanie PowerShell przeznaczone do testowania łączności sieciowej pomiędzy dwoma serwerami. PowerShell używa Nowy obiekt System.Net.Sockets.TcpClient polecenie, aby utworzyć klienta TCP, który będzie próbował połączyć się z określonym adresem IP i portem. Jest to skuteczny sposób sprawdzenia, czy wymagane porty (1433 dla SQL Server i 5022 dla kopii lustrzanej) są otwarte i dostępne. Skrypt ten jest szczególnie przydatny do diagnozowania problemów z zaporą sieciową lub siecią, które mogą uniemożliwiać komunikację dwóch instancji SQL, powodując w ten sposób błąd Błąd 1418.
Trzeci skrypt wykorzystuje polecenia wiersza poleceń systemu Windows do zarządzania ustawieniami zapory. Konkretnie, reguła dodawania zapory sieciowej netsh advfirewall polecenie służy do otwierania niezbędnych portów dla SQL Server i dublowania. Zapewnia to swobodny przepływ zarówno ruchu bazodanowego (port 1433), jak i ruchu lustrzanego (port 5022) pomiędzy dwoma serwerami. Tymczasowe wyłączenie zapory sieciowej za pomocą pliku netsh advfirewall wyłącza stan wszystkich profili polecenie skrypt może sprawdzić, czy zapora sieciowa jest główną przyczyną problemów z dostępem do sieci. Rozwiązanie to jest szczególnie istotne przy rozwiązywaniu problemów z komunikacją serwerów w bezpiecznym środowisku.
Na koniec skrypt Pythona używa gniazdo.utwórz_połączenie funkcję sprawdzania sieci pomiędzy dwoma serwerami. Skrypt ten zapewnia szybki i skuteczny sposób sprawdzenia, czy serwery mogą łączyć się ze sobą za pośrednictwem wymaganych portów TCP. Próbuje nawiązać połączenie i, jeśli się powiedzie, potwierdza, że konfiguracja sieci jest prawidłowa. Prostota Pythona w rozwiązywaniu problemów związanych z siecią sprawia, że jest to dobry wybór do testowania łączności, szczególnie w środowiskach, w których inne narzędzia są niedostępne lub kłopotliwe w użyciu. Razem te skrypty oferują kompleksowe podejście do rozwiązywania problemów dublowanie bazy danych błędu i zapewnienie płynnej komunikacji pomiędzy instancjami SQL Server.
Rozwiązanie 1: Naprawa błędu 1418 w dublowaniu bazy danych SQL Server (podejście T-SQL)
To rozwiązanie wykorzystuje język Transact-SQL (T-SQL) do rozwiązywania problemów z dublowaniem baz danych poprzez konfigurowanie punktów końcowych, uwierzytelnianie połączeń i sprawdzanie poprawności adresów serwerów.
-- 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
Rozwiązanie 2: Skrypt PowerShell do testowania dostępności portów SQL Server
To rozwiązanie wykorzystuje program PowerShell do testowania łączności portów między serwerami, upewniając się, że wymagane porty są otwarte i nasłuchują.
# 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
Rozwiązanie 3: Poprawka błędu SQL Server 1418 (konfiguracja zapory)
Podejście to wykorzystuje wiersz poleceń systemu Windows do sprawdzania konfiguracji zapory sieciowej, upewniając się, że wymagane porty (1433, 5022) są otwarte na obu serwerach.
-- 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
Rozwiązanie 4: Skrypt Pythona sprawdzający połączenie TCP między serwerami
To rozwiązanie wykorzystuje język Python do sprawdzania, czy instancje SQL Server mogą komunikować się przez sieć, sprawdzając połączenia 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)
Rozwiązanie 5: Konfiguracja GUI programu SQL Server Management Studio (SSMS).
To rozwiązanie prowadzi przez konfigurację dublowania przy użyciu interfejsu GUI SSMS dla użytkowników, którzy wolą nie korzystać z interfejsów wiersza poleceń.
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.
Odkrywanie wyzwań związanych z siecią i bezpieczeństwem w SQL Server Mirroring
Podczas konfigurowania Dublowanie bazy danych SQL Server, często pomijanym aspektem jest rola konfiguracji sieci i ustawień zabezpieczeń. Błąd 1418 wskazujący, że adres sieciowy serwera nie jest osiągalny, jest często spowodowany podstawowymi problemami z siecią. Nawet jeśli otwarte zostaną prawidłowe porty (1433 i 5022) i wyłączone zostaną zapory ogniowe, inne elementy sieciowe, takie jak routing i konfiguracja DNS, mogą powodować błędy w komunikacji. Ważne jest, aby upewnić się, że oba serwery prawidłowo rozpoznają swoje adresy IP, szczególnie w środowiskach z wieloma podsieciami.
Kolejne wyzwanie wiąże się Uwierzytelnianie serwera SQL ustawień podczas konfiguracji kopii lustrzanej. Dublowanie baz danych wymaga, aby zarówno serwer główny, jak i serwer lustrzany uwierzytelniały się wzajemnie za pomocą certyfikatów lub uwierzytelniania opartego na domenie (Kerberos). Jeśli ta konfiguracja nie zostanie poprawnie skonfigurowana lub jeśli protokoły bezpieczeństwa między dwoma serwerami są niezgodne, może wystąpić błąd 1418. Ponadto konta usług SQL Server muszą mieć odpowiednie uprawnienia na obu komputerach, w szczególności dostęp do lustrzanych punktów końcowych.
Wreszcie wybór systemu operacyjnego może również wpływać na zachowanie kopii lustrzanej. Różne wersje systemu Windows mogą w różny sposób obsługiwać połączenia TCP, szczególnie pod względem zarządzania regułami zapory sieciowej i routingiem ruchu sieciowego. Jeśli system operacyjny któregokolwiek serwera ma nieaktualne lub niedopasowane sterowniki sieciowe, komunikacja między serwerami może się nie powieść. Zapewnienie aktualności systemu operacyjnego za pomocą najnowszych poprawek i działania odpowiednich usług ma kluczowe znaczenie w rozwiązywaniu problemów z łącznością, takich jak błąd 1418.
Często zadawane pytania dotyczące konfiguracji dublowania programu SQL Server i błędu 1418
- Co powoduje błąd 1418 w dublowaniu SQL Server?
- Błąd 1418 jest zwykle spowodowany awarią komunikacji między dwoma serwerami. Może to być spowodowane nieprawidłowymi ustawieniami zapory sieciowej mirroring endpointslub problemy z łącznością sieciową.
- Jak mogę sprawdzić, czy moje porty są otwarte dla kopii lustrzanej SQL Server?
- Skorzystaj z telnet polecenie lub skrypt, taki jak New-Object System.Net.Sockets.TcpClient w PowerShell, aby sprawdzić, czy porty 1433 i 5022 są otwarte.
- Czy oba serwery muszą znajdować się w tej samej domenie, aby móc wykonać kopię lustrzaną?
- Nie, ale uwierzytelnianie domeny może uprościć ten proces. W przeciwnym razie w celu zabezpieczenia pliku należy użyć uwierzytelniania opartego na certyfikatach mirroring endpoints.
- Jaka jest rola punktu końcowego w dublowaniu baz danych?
- The CREATE ENDPOINT polecenie tworzy interfejs sieciowy, który umożliwia instancjom SQL Server komunikację podczas tworzenia kopii lustrzanej. Każdy serwer musi mieć działający, lustrzany punkt końcowy.
- Czy mogę wykonać kopię lustrzaną baz danych w różnych wersjach SQL Server?
- Nie, dublowanie baz danych wymaga, aby obie instancje SQL Server były w tej samej wersji i wydaniu, aby działały poprawnie.
Końcowe przemyślenia na temat rozwiązania błędu dublowania bazy danych 1418
Błędy dublowania baz danych, takie jak błąd 1418, są często spowodowane problemami z siecią między serwerami. Zapewnienie, że są otwarte właściwe porty, skonfigurowane zapory ogniowe i prawidłowo skonfigurowane punkty końcowe, może rozwiązać ten problem.
Dodatkowo sprawdzenie dostępu do sieci za pomocą narzędzi takich jak PowerShell i zapewnienie spójności protokołów uwierzytelniania między serwerami zwiększy Twoje szanse na sukces. Wykonanie tych kroków może pomóc w uzyskaniu niezawodnego dublowania programu SQL Server w celu uzyskania operacji o wysokiej wydajności.
Referencje i zasoby dotyczące rozwiązań do tworzenia kopii lustrzanych baz danych
- Szczegóły dotyczące konfiguracji dublowania SQL Server i rozwiązywania problemów, w tym błędu 1418 i ustawień punktu końcowego, można znaleźć pod adresem Dokumentacja Microsoft SQL .
- Obszerny przewodnik dotyczący konfigurowania reguł zapory sieciowej i rozwiązywania problemów sieciowych dla kopii lustrzanej SQL Server można uzyskać pod adresem Konfiguracja Zapory systemu Windows .
- Skrypty PowerShell do testowania portów i weryfikacji sieci między instancjami SQL Server są dostępne pod adresem Dokumentacja PowerShella .
- Informacje na temat technik programowania gniazd w języku Python używanych do testowania łączności z serwerem można znaleźć na stronie Moduł gniazda Pythona .