فهم مشكلات اتصال النسخ المتطابق لقاعدة البيانات
يعد النسخ المتطابق لقاعدة البيانات إستراتيجية أساسية لضمان التوفر والتكرار العالي في بيئات SQL Server. ومع ذلك، يمكن أن يؤدي تكوين النسخ المتطابق في بعض الأحيان إلى أخطاء محبطة، مثل الخطأ 1418، الذي ينص على أنه لا يمكن الوصول إلى عنوان شبكة الخادم أو أنه غير موجود.
يحدث هذا الخطأ غالبًا عند محاولة إعداد جلسة النسخ المتطابق بين مثيلين لـ SQL Server، حتى لو كان من الممكن الوصول إلى قاعدتي البيانات بشكل فردي. تنشأ المشكلة عندما تفشل نقاط النهاية المتطابقة في التواصل مع بعضها البعض.
في الحالة المطروحة، يشارك سطح المكتب المحلي (192.168.0.80) وجهاز كمبيوتر صغير (192.168.0.85) في عملية النسخ المتطابق. تم تصميم الكمبيوتر الصغير ليكون بمثابة نسخة طبق الأصل للقراءة فقط لتطبيقات الهاتف المحمول، وذلك باستخدام وضع النسخ المتطابق "الأداء العالي".
على الرغم من تكوين المنفذ الصحيح وتعديلات جدار الحماية، يواجه المستخدم خطأ 1418 عند محاولة بدء جلسة النسخ المتطابق. سوف تستكشف هذه المقالة الأسباب والحلول المحتملة لمعالجة هذه المشكلة.
يأمر | مثال للاستخدام |
---|---|
ALTER ENDPOINT | يتم استخدام هذا الأمر لتعديل حالة نقطة النهاية التي تعكس قاعدة البيانات في SQL Server. وفي سياق حل الخطأ 1418، فإنه يضمن بدء تشغيل نقطة النهاية بشكل صحيح والاستماع على المنفذ المحدد. مثال: ALTER ENDPOINT [Mirroring] STATE = STARTED; |
GRANT CONNECT ON ENDPOINT | يسمح بتسجيل دخول محدد للاتصال بنقطة نهاية النسخ المتطابق. يعد هذا أمرًا بالغ الأهمية للسماح لمثيلات SQL Server بالاتصال بشكل آمن أثناء النسخ المتطابق لقاعدة البيانات. مثال: منح الاتصال عند نقطة النهاية::[Mirroring_Endpoint] إلى [DOMAINUserAccount]؛ |
SET PARTNER | تكوين مثيل SQL Server واحد كشريك في جلسة النسخ المتطابق لقاعدة البيانات. يحدد هذا الأمر عنوان الشبكة للخادم الشريك. مثال: تغيير قاعدة بيانات YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | ينشئ نقطة نهاية متطابقة تستمع إلى منفذ معين وتدير جلسات النسخ المتطابق لقاعدة البيانات. ويحدد دور الاتصال (على سبيل المثال، الشريك). مثال: إنشاء نقطة النهاية [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) لـ DATABASE_MIRRORING (ROLE = PARTNER)؛ |
netsh advfirewall firewall add rule | يُستخدم لتكوين قواعد جدار الحماية للسماح بحركة المرور عبر منافذ محددة مطلوبة لـ SQL Server والنسخ المتطابق (على سبيل المثال، 1433 و5022). يعد هذا أمرًا ضروريًا لتمكين الاتصال بين شركاء النسخ المتطابق. مثال: يضيف جدار الحماية netsh advfirewall اسم القاعدة = "SQLPort" dir = قيد الإجراء = السماح بالبروتوكول = TCP localport = 1433 |
socket.create_connection | أمر Python يُستخدم لتأسيس اتصال TCP بخادم ومنفذ محددين. في هذا السياق، يتم استخدامه للتحقق مما إذا كان يمكن الوصول إلى مثيل SQL Server عبر الشبكة. مثال: المقبس.create_connection((الخادم، المنفذ)، timeout=5); |
New-Object System.Net.Sockets.TcpClient | أمر PowerShell يُستخدم لإنشاء عميل TCP لاختبار اتصال المنفذ. فهو يساعد في التحقق مما إذا كانت منافذ النسخ المتطابق الضرورية مفتوحة ويمكن الوصول إليها بين الخوادم. مثال: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | يسترد أمر SQL هذا حالة جلسة النسخ المتطابق لقاعدة البيانات، مما يساعد في تشخيص ما إذا كان إعداد النسخ المتطابق قد تم إنشاؤه بشكل صحيح أو أنه يواجه مشكلات. مثال: SELECT * FROM sys.database_mirroring؛ |
تفصيل تفصيلي للبرامج النصية لتحليل أخطاء النسخ المتطابق
يستخدم البرنامج النصي الأول المقدم في الأمثلة السابقة SQL للعمليات (T-SQL) أوامر لتكوين خطأ النسخ المتطابق وحله في SQL Server. الجزء الأكثر أهمية في البرنامج النصي هو إنشاء وتكوين تعكس نقاط النهاية. نقاط النهاية هذه هي واجهات الشبكة التي تتواصل من خلالها مثيلات SQL Server أثناء النسخ المتطابق. الأمر تغيير نقطة النهاية يضمن أن نقاط النهاية على كلا الخادمين في حالة "البدء"، مما يسمح بحدوث الاتصال. ال تعيين شريك يتم بعد ذلك استخدام الأمر لربط قواعد البيانات، وتحديد عنوان الشبكة للخادم الشريك، والذي يسمح لمثيلي SQL بعكس البيانات عبر الشبكة.
البرنامج النصي الثاني هو حل PowerShell المصمم لاختبار اتصال الشبكة بين الخادمين. يستخدم PowerShell كائن جديد System.Net.Sockets.TcpClient لإنشاء عميل TCP يحاول الاتصال بعنوان IP والمنفذ المحددين. تعد هذه طريقة فعالة للتحقق من أن المنافذ المطلوبة (1433 لـ SQL Server و5022 للنسخ المتطابق) مفتوحة ويمكن الوصول إليها. يعد هذا البرنامج النصي مفيدًا بشكل خاص لتشخيص مشكلات جدار الحماية أو الشبكة التي قد تمنع مثيلي SQL من الاتصال، مما يتسبب في حدوث خطأ 1418.
يستفيد البرنامج النصي الثالث من أوامر Windows Command Prompt لإدارة إعدادات جدار الحماية. على وجه التحديد، إضافة قاعدة جدار الحماية netsh advfirewall يتم استخدام الأمر لفتح المنافذ الضرورية لـ SQL Server والنسخ المتطابق. وهذا يضمن أن حركة مرور قاعدة البيانات (المنفذ 1433) وحركة النسخ المتطابق (المنفذ 5022) يمكن أن تتدفق بحرية بين الخادمين. عن طريق تعطيل جدار الحماية مؤقتًا باستخدام قام netsh advfirewall بإيقاف تشغيل حالة كافة الملفات الشخصية الأمر، يمكن للبرنامج النصي التحقق مما إذا كان جدار الحماية هو السبب الجذري لمشكلة الوصول إلى الشبكة. يعد هذا الحل مهمًا بشكل خاص عند استكشاف مشكلات الاتصال بالخادم وإصلاحها في بيئة آمنة.
وأخيرًا، يستخدم برنامج Python النصي المقبس. create_connection وظيفة لإجراء فحص الشبكة بين الخادمين. يوفر هذا البرنامج النصي طريقة سريعة وفعالة للتحقق من إمكانية وصول الخوادم إلى بعضها البعض عبر منافذ TCP المطلوبة. يحاول إنشاء اتصال، وإذا نجح، فإنه يؤكد صحة إعداد الشبكة. إن بساطة لغة Python في التعامل مع المشكلات المتعلقة بالشبكة تجعلها خيارًا جيدًا لاختبار الاتصال، خاصة في البيئات التي لا تتوفر فيها الأدوات الأخرى أو التي يكون استخدامها مرهقًا. توفر هذه البرامج النصية معًا نهجًا شاملاً لحل مشكلة النسخ المتطابق لقاعدة البيانات الخطأ وضمان الاتصال السلس بين مثيلات SQL Server.
الحل 1: إصلاح الخطأ 1418 في النسخ المتطابق لقاعدة بيانات SQL Server (نهج T-SQL)
يستخدم هذا الحل Transact-SQL (T-SQL) لحل مشكلات النسخ المتطابق لقاعدة البيانات عن طريق تكوين نقاط النهاية ومصادقة الاتصالات والتحقق من صحة عناوين الخادم.
-- 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: البرنامج النصي PowerShell لاختبار إمكانية الوصول إلى منفذ SQL Server
يستخدم هذا الحل PowerShell لاختبار اتصال المنافذ بين الخوادم، مما يضمن أن المنافذ المطلوبة مفتوحة ومستمعة.
# 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: إصلاح خطأ SQL Server 1418 (تكوين جدار الحماية)
يستخدم هذا الأسلوب موجه أوامر Windows للتحقق من تكوينات جدار الحماية، مما يضمن أن المنافذ المطلوبة (1433، 5022) مفتوحة على كلا الخادمين.
-- 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: برنامج Python النصي للتحقق من صحة اتصال TCP بين الخوادم
يستخدم هذا الحل لغة Python للتحقق من إمكانية اتصال مثيلات SQL Server عبر الشبكة عن طريق التحقق من اتصالات 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)
الحل 5: تكوين واجهة المستخدم الرسومية لـ SQL Server Management Studio (SSMS).
يشرح هذا الحل كيفية إعداد النسخ المتطابق باستخدام واجهة المستخدم الرسومية SSMS للمستخدمين الذين يفضلون عدم استخدام واجهات سطر الأوامر.
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
عند الإعداد النسخ المتطابق لقاعدة بيانات SQL Server، أحد الجوانب التي غالبًا ما يتم تجاهلها هو دور تكوين الشبكة وإعدادات الأمان. الخطأ 1418، الذي يشير إلى أنه لا يمكن الوصول إلى عنوان شبكة الخادم، يحدث بشكل متكرر بسبب مشكلات الشبكة الأساسية. حتى عند فتح المنافذ الصحيحة (1433 و5022) وتعطيل جدران الحماية، فإن عناصر الشبكة الأخرى مثل التوجيه وتكوين DNS قد تتسبب في فشل الاتصال. من المهم التأكد من أن كلا الخادمين يحلان عناوين IP الخاصة بكل منهما بشكل صحيح، خاصة في بيئات الشبكات الفرعية المتعددة.
التحدي الآخر ينطوي على مصادقة خادم SQL الإعدادات أثناء إعداد النسخ المتطابق. يتطلب النسخ المتطابق لقاعدة البيانات أن يقوم كل من الخادم الرئيسي والخادم المرآة بمصادقة بعضهما البعض عبر الشهادات أو المصادقة المستندة إلى المجال (Kerberos). إذا لم يتم تكوين هذا الإعداد بشكل صحيح، أو إذا كان هناك عدم تطابق في بروتوكولات الأمان بين الخادمين، فمن الممكن أن يحدث الخطأ 1418. بالإضافة إلى ذلك، يجب أن تتمتع حسابات خدمة SQL Server بالأذونات الصحيحة على كلا الجهازين، وخاصة الوصول إلى نقاط النهاية المتطابقة.
وأخيرًا، يمكن أن يؤثر اختيار نظام التشغيل أيضًا على كيفية عمل النسخ المتطابق. قد تتعامل إصدارات Windows المختلفة مع اتصالات TCP بشكل مختلف، لا سيما في كيفية إدارة قواعد جدار الحماية وتوجيه حركة مرور الشبكة. إذا كان نظام التشغيل الخاص بأي من الخادمين يحتوي على برامج تشغيل شبكة قديمة أو غير متطابقة، فقد يفشل الاتصال بين الخوادم. يعد التأكد من تحديث نظام التشغيل بأحدث التصحيحات وتشغيل الخدمات المناسبة أمرًا بالغ الأهمية في حل مشكلات الاتصال مثل الخطأ 1418.
الأسئلة الشائعة حول إعداد النسخ المتطابق لـ SQL Server والخطأ 1418
- ما الذي يسبب الخطأ 1418 في النسخ المتطابق لـ SQL Server؟
- يحدث الخطأ 1418 عادةً بسبب فشل الاتصال بين الخادمين. يمكن أن يكون هذا بسبب إعدادات جدار الحماية، غير صحيحة mirroring endpointsأو مشاكل في الاتصال بالشبكة.
- كيف يمكنني التحقق مما إذا كانت المنافذ الخاصة بي مفتوحة لنسخ SQL Server؟
- استخدم telnet أمر أو برنامج نصي مثل New-Object System.Net.Sockets.TcpClient في PowerShell لاختبار ما إذا كان المنفذان 1433 و5022 مفتوحين.
- هل يجب أن يكون كلا الخادمين في نفس المجال للنسخ المتطابق؟
- لا، ولكن مصادقة المجال يمكن أن تبسط العملية. بخلاف ذلك، يجب عليك استخدام المصادقة المستندة إلى الشهادة لتأمين الملف mirroring endpoints.
- ما هو دور نقطة النهاية في النسخ المتطابق لقاعدة البيانات؟
- ال CREATE ENDPOINT يقوم الأمر بإنشاء واجهة الشبكة التي تسمح لمثيلات SQL Server بالاتصال أثناء النسخ المتطابق. يجب أن يكون لدى كل خادم نقطة نهاية متطابقة فعالة.
- هل يمكنني نسخ قواعد البيانات على إصدارات مختلفة من SQL Server؟
- لا، يتطلب النسخ المتطابق لقاعدة البيانات أن تكون مثيلات SQL Server على نفس الإصدار والإصدار للعمل بشكل صحيح.
الأفكار النهائية حول حل خطأ النسخ المتطابق لقاعدة البيانات 1418
غالبًا ما تنتج أخطاء النسخ المتطابق لقاعدة البيانات مثل الخطأ 1418 عن مشكلات في الشبكة بين الخوادم. يمكن أن يؤدي التأكد من فتح المنافذ الصحيحة وتكوين جدران الحماية وإعداد نقاط النهاية بشكل صحيح إلى حل هذه المشكلة.
بالإضافة إلى ذلك، سيؤدي التحقق من صحة الوصول إلى الشبكة باستخدام أدوات مثل PowerShell والتأكد من اتساق بروتوكولات المصادقة بين الخوادم إلى تحسين فرص نجاحك. يمكن أن يساعد اتباع هذه الخطوات في تحقيق النسخ المتطابق الموثوق به لـ SQL Server للعمليات عالية الأداء.
المراجع والموارد لحلول النسخ المتطابق لقاعدة البيانات
- يمكن العثور على تفاصيل حول تكوين النسخ المتطابق لـ SQL Server واستكشاف الأخطاء وإصلاحها، بما في ذلك الخطأ 1418 وإعدادات نقطة النهاية على وثائق مايكروسوفت SQL .
- يمكن الوصول إلى دليل شامل لتكوين قواعد جدار الحماية واستكشاف أخطاء الشبكة وإصلاحها لنسخ SQL Server على الموقع تكوين جدار حماية ويندوز .
- تتوفر البرامج النصية PowerShell لاختبار المنفذ والتحقق من الشبكة بين مثيلات SQL Server على وثائق بوويرشيل .
- للتعرف على تقنيات برمجة مقبس Python المستخدمة في اختبار اتصال الخادم، تفضل بزيارة وحدة مقبس بايثون .