Memahami Isu Sambungan Pencerminan Pangkalan Data
Pencerminan pangkalan data ialah strategi penting untuk memastikan ketersediaan tinggi dan redundansi dalam persekitaran SQL Server. Walau bagaimanapun, mengkonfigurasi pencerminan kadangkala boleh membawa kepada ralat yang mengecewakan, seperti Ralat 1418, yang menyatakan bahawa alamat rangkaian pelayan tidak dapat dicapai atau tidak wujud.
Ralat khusus ini sering berlaku apabila cuba menyediakan sesi pencerminan antara dua kejadian SQL Server, walaupun kedua-dua pangkalan data boleh diakses secara individu. Isu timbul apabila titik akhir pencerminan gagal berkomunikasi antara satu sama lain.
Dalam kes yang ada, desktop tempatan (192.168.0.80) dan PC mini (192.168.0.85) terlibat dalam proses pencerminan. PC mini bertujuan untuk berfungsi sebagai replika baca sahaja untuk aplikasi mudah alih, menggunakan mod pencerminan "Prestasi Tinggi".
Walaupun konfigurasi port yang betul dan pelarasan tembok api, pengguna menghadapi Ralat 1418 apabila cuba memulakan sesi pencerminan. Artikel ini akan meneroka kemungkinan punca dan penyelesaian untuk menangani isu ini.
Perintah | Contoh penggunaan |
---|---|
ALTER ENDPOINT | Perintah ini digunakan untuk mengubah suai keadaan titik akhir pencerminan pangkalan data dalam SQL Server. Dalam konteks menyelesaikan Ralat 1418, ia memastikan bahawa titik akhir dimulakan dengan betul dan mendengar pada port yang ditentukan. Contoh: ALTER ENDPOINT [Mirroring] STATE = STARTED; |
GRANT CONNECT ON ENDPOINT | Membenarkan log masuk khusus untuk menyambung ke titik akhir pencerminan. Ini penting untuk membenarkan contoh SQL Server berkomunikasi dengan selamat semasa pencerminan pangkalan data. Contoh: GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint] TO [DOMAINUserAccount]; |
SET PARTNER | Mengkonfigurasikan satu contoh SQL Server sebagai rakan kongsi dalam sesi pencerminan pangkalan data. Perintah ini menetapkan alamat rangkaian untuk pelayan rakan kongsi. Contoh: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Mencipta titik akhir pencerminan yang mendengar pada port tertentu dan mengurus sesi pencerminan pangkalan data. Ia menentukan peranan komunikasi (cth., PARTNER). Contoh: BUAT ENDPOINT [Mirroring_Endpoint] SEBAGAI TCP (LISTENER_PORT = 5022) UNTUK PANGKALAN DATA_MIRRORING (PERANAN = PARTNER); |
netsh advfirewall firewall add rule | Digunakan untuk mengkonfigurasi peraturan firewall untuk membenarkan trafik melalui port tertentu yang diperlukan untuk SQL Server dan pencerminan (cth., 1433 dan 5022). Ini penting untuk membolehkan komunikasi antara rakan kongsi pencerminan. Contoh: netsh advfirewall firewall menambah nama peraturan="SQLPort" dir=in action=allow protocol=TCP localport=1433 |
socket.create_connection | Perintah Python yang digunakan untuk mewujudkan sambungan TCP ke pelayan dan port tertentu. Dalam konteks ini, ia digunakan untuk menyemak sama ada tika SQL Server boleh dicapai melalui rangkaian. Contoh: socket.create_connection((server, port), timeout=5); |
New-Object System.Net.Sockets.TcpClient | Perintah PowerShell digunakan untuk mencipta klien TCP untuk menguji kesambungan port. Ia membantu dalam mengesahkan sama ada port pencerminan yang diperlukan terbuka dan boleh diakses antara pelayan. Contoh: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | Perintah SQL ini mendapatkan semula status sesi pencerminan pangkalan data, membantu dalam mendiagnosis sama ada persediaan pencerminan ditubuhkan dengan betul atau menghadapi masalah. Contoh: PILIH * DARI sys.database_mirroring; |
Pecahan Terperinci Skrip Penyelesaian Ralat Pencerminan
Skrip pertama yang disediakan dalam contoh terdahulu menggunakan Transact-SQL (T-SQL) arahan untuk mengkonfigurasi dan menyelesaikan ralat pencerminan dalam SQL Server. Bahagian yang paling kritikal dalam skrip ialah penciptaan dan konfigurasi mencerminkan titik akhir. Titik akhir ini ialah antara muka rangkaian yang melaluinya contoh SQL Server berkomunikasi semasa pencerminan. Perintah itu UBAH TITIK TAMAT memastikan bahawa titik akhir pada kedua-dua pelayan berada dalam keadaan "MULA", membolehkan komunikasi berlaku. The SET PARTNER arahan kemudiannya digunakan untuk memautkan pangkalan data, menyatakan alamat rangkaian pelayan rakan kongsi, yang membenarkan dua kejadian SQL untuk mencerminkan data merentas rangkaian.
Skrip kedua ialah penyelesaian PowerShell yang direka untuk menguji ketersambungan rangkaian antara kedua-dua pelayan. PowerShell menggunakan New-Object System.Net.Sockets.TcpClient arahan untuk mencipta klien TCP yang cuba menyambung ke alamat IP dan port yang ditentukan. Ini ialah cara yang cekap untuk mengesahkan bahawa port yang diperlukan (1433 untuk SQL Server dan 5022 untuk pencerminan) terbuka dan boleh diakses. Skrip ini amat berguna untuk mendiagnosis firewall atau isu rangkaian yang mungkin menghalang kedua-dua kejadian SQL daripada berkomunikasi, sekali gus menyebabkan Ralat 1418.
Skrip ketiga memanfaatkan arahan Windows Command Prompt untuk mengurus tetapan firewall. Secara khusus, netsh advfirewall firewall menambah peraturan arahan digunakan untuk membuka port yang diperlukan untuk SQL Server dan pencerminan. Ini memastikan bahawa kedua-dua trafik pangkalan data (port 1433) dan trafik pencerminan (port 5022) boleh mengalir dengan bebas antara kedua-dua pelayan. Dengan melumpuhkan sementara tembok api dengan netsh advfirewall menetapkan semua profil dimatikan arahan, skrip boleh mengesahkan sama ada tembok api adalah punca utama isu akses rangkaian. Penyelesaian ini amat penting apabila menyelesaikan masalah komunikasi pelayan dalam persekitaran yang selamat.
Akhir sekali, skrip Python menggunakan socket.create_connection berfungsi untuk melakukan semakan rangkaian antara dua pelayan. Skrip ini menyediakan cara yang cepat dan berkesan untuk mengesahkan sama ada pelayan boleh mencapai satu sama lain melalui port TCP yang diperlukan. Ia cuba mewujudkan sambungan, dan jika berjaya, mengesahkan bahawa persediaan rangkaian adalah betul. Kesederhanaan Python dalam mengendalikan isu berkaitan rangkaian menjadikannya pilihan yang baik untuk menguji ketersambungan, terutamanya dalam persekitaran di mana alat lain tidak tersedia atau menyusahkan untuk digunakan. Bersama-sama, skrip ini menawarkan pendekatan komprehensif untuk menyelesaikan masalah pencerminan pangkalan data ralat dan memastikan komunikasi lancar antara kejadian SQL Server.
Penyelesaian 1: Membetulkan Ralat 1418 dalam Pencerminan Pangkalan Data SQL Server (Pendekatan T-SQL)
Penyelesaian ini menggunakan Transact-SQL (T-SQL) untuk menyelesaikan isu pencerminan pangkalan data dengan mengkonfigurasi titik akhir, mengesahkan sambungan dan mengesahkan alamat pelayan.
-- 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
Penyelesaian 2: Skrip PowerShell untuk Menguji Kebolehcapaian Port Pelayan SQL
Penyelesaian ini menggunakan PowerShell untuk menguji ketersambungan port antara pelayan, memastikan port yang diperlukan terbuka dan mendengar.
# 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
Penyelesaian 3: Ralat Pelayan SQL 1418 Betulkan (Konfigurasi Tembok Api)
Pendekatan ini menggunakan Windows Command Prompt untuk menyemak konfigurasi tembok api, memastikan port yang diperlukan (1433, 5022) dibuka pada kedua-dua pelayan.
-- 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
Penyelesaian 4: Skrip Python untuk Mengesahkan Sambungan TCP Antara Pelayan
Penyelesaian ini menggunakan Python untuk mengesahkan jika kejadian SQL Server boleh berkomunikasi melalui rangkaian dengan menyemak sambungan 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)
Penyelesaian 5: Konfigurasi GUI Studio Pengurusan SQL Server (SSMS).
Penyelesaian ini berjalan melalui penyediaan pencerminan menggunakan GUI SSMS untuk pengguna yang memilih untuk tidak menggunakan antara muka baris arahan.
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.
Meneroka Cabaran Rangkaian dan Keselamatan dalam Pencerminan Pelayan SQL
Apabila menetapkan Pencerminan pangkalan data SQL Server, satu aspek yang sering diabaikan ialah peranan konfigurasi rangkaian dan tetapan keselamatan. Ralat 1418, menunjukkan bahawa alamat rangkaian pelayan tidak dapat dicapai, selalunya disebabkan oleh isu rangkaian yang mendasari. Walaupun apabila port yang betul (1433 dan 5022) dibuka dan tembok api dilumpuhkan, elemen rangkaian lain seperti penghalaan dan konfigurasi DNS boleh menyebabkan kegagalan komunikasi. Adalah penting untuk memastikan bahawa kedua-dua pelayan menyelesaikan alamat IP masing-masing dengan betul, terutamanya dalam persekitaran berbilang subnet.
Cabaran lain melibatkan Pengesahan SQL Server tetapan semasa persediaan pencerminan. Pencerminan pangkalan data memerlukan kedua-dua pelayan utama dan cermin mengesahkan satu sama lain melalui sijil atau pengesahan berasaskan domain (Kerberos). Jika persediaan ini tidak dikonfigurasikan dengan betul, atau jika terdapat ketidakpadanan dalam protokol keselamatan antara kedua-dua pelayan, Ralat 1418 boleh berlaku. Selain itu, akaun perkhidmatan SQL Server mesti mempunyai kebenaran yang betul pada kedua-dua mesin, terutamanya akses kepada titik akhir pencerminan.
Akhir sekali, pilihan sistem pengendalian juga boleh mempengaruhi cara pencerminan bertindak. Versi Windows yang berbeza mungkin mengendalikan sambungan TCP secara berbeza, terutamanya dalam cara mereka mengurus peraturan tembok api dan penghalaan trafik rangkaian. Jika sistem pengendalian sama ada pelayan mempunyai pemacu rangkaian yang lapuk atau tidak sepadan, komunikasi antara pelayan mungkin gagal. Memastikan OS dikemas kini dengan tampung terkini dan perkhidmatan yang sesuai dijalankan adalah penting dalam menyelesaikan isu ketersambungan seperti Ralat 1418.
Soalan Lazim mengenai Persediaan Pencerminan SQL Server dan Ralat 1418
- Apakah yang menyebabkan Ralat 1418 dalam pencerminan SQL Server?
- Ralat 1418 biasanya disebabkan oleh kegagalan komunikasi antara kedua-dua pelayan. Ini boleh disebabkan oleh tetapan firewall, tidak betul mirroring endpoints, atau isu sambungan rangkaian.
- Bagaimanakah saya boleh menyemak sama ada port saya dibuka untuk pencerminan SQL Server?
- Gunakan telnet arahan atau skrip seperti New-Object System.Net.Sockets.TcpClient dalam PowerShell untuk menguji sama ada port 1433 dan 5022 dibuka.
- Adakah kedua-dua pelayan perlu berada dalam domain yang sama untuk pencerminan?
- Tidak, tetapi pengesahan domain boleh memudahkan proses. Jika tidak, anda mesti menggunakan pengesahan berasaskan sijil untuk melindungi mirroring endpoints.
- Apakah peranan titik akhir dalam pencerminan pangkalan data?
- The CREATE ENDPOINT arahan mencipta antara muka rangkaian yang membenarkan contoh SQL Server berkomunikasi semasa pencerminan. Setiap pelayan mesti mempunyai titik akhir pencerminan yang berfungsi.
- Bolehkah saya mencerminkan pangkalan data pada versi SQL Server yang berbeza?
- Tidak, pencerminan pangkalan data memerlukan kedua-dua kejadian SQL Server berada pada versi dan edisi yang sama untuk berfungsi dengan betul.
Pemikiran Akhir untuk Menyelesaikan Ralat Pencerminan Pangkalan Data 1418
Ralat pencerminan pangkalan data seperti Ralat 1418 sering disebabkan oleh isu rangkaian antara pelayan. Memastikan port yang betul dibuka, tembok api dikonfigurasikan dan titik akhir disediakan dengan betul boleh menyelesaikan isu ini.
Selain itu, mengesahkan akses rangkaian dengan alatan seperti PowerShell dan memastikan protokol pengesahan adalah konsisten antara pelayan akan meningkatkan peluang anda untuk berjaya. Mengikuti langkah ini boleh membantu mencapai pencerminan SQL Server yang boleh dipercayai untuk operasi berprestasi tinggi.
Rujukan dan Sumber untuk Penyelesaian Pencerminan Pangkalan Data
- Butiran mengenai konfigurasi pencerminan SQL Server dan penyelesaian masalah, termasuk Ralat 1418 dan tetapan titik akhir boleh didapati di Dokumentasi Microsoft SQL .
- Panduan komprehensif untuk mengkonfigurasi peraturan tembok api dan penyelesaian masalah rangkaian untuk pencerminan SQL Server boleh diakses di Konfigurasi Windows Firewall .
- Skrip PowerShell untuk ujian port dan pengesahan rangkaian antara contoh SQL Server tersedia di Dokumentasi PowerShell .
- Untuk teknik pengaturcaraan soket Python yang digunakan dalam menguji ketersambungan pelayan, lawati Modul Soket Python .