البرنامج التعليمي: تكوين النسخ المتماثل بين مثيلين مدارين
ينطبق على: مثيل Azure SQL المُدار
يسمح لك النسخ المتماثل للمعاملات بنسخ البيانات من قاعدة بيانات إلى أخرى مستضافة إما على SQL Server أو مثيل Azure SQL المُدار. يمكن أن يكون مثيل SQL المدار ناشرًا أو موزعًا أو مشتركًا في طبولوجيا النسخ المتماثل. راجع تكوينات النسخ المتماثل للمعاملات للتكوينات المتوفرة.
النسخ المتماثل للمعاملات حاليًا في المعاينة العامة ل SQL المثيل المدار.
في هذا البرنامج التعليمي، تتعلم كيفية:
- تكوين مثيل مدار كناشر النسخ المتماثل والموزع.
- تكوين مثيل مدار كمشترك النسخ متماثل.
هذا البرنامج التعليمي مخصص لجمهور من ذوي الخبرة ويفترض أن المستخدم على دراية بنشر والاتصال بكل من المثيلات المدارة SQL Server VMs داخل Azure.
ملاحظة
- توضح هذه المقالة استخدام النسخ المتماثل للمعاملات في مثيل Azure SQL المُدار. لا علاقة لها بمجموعات تجاوز الفشل، وهي ميزة مثيل مدار من Azure SQL تتيح لك إنشاء نسخ متماثلة كاملة قابلة للقراءة من المثيلات الفردية. هناك اعتبارات إضافية عند تكوين النسخ المتماثل للمعاملات مع مجموعات تجاوز الفشل.
المتطلبات
يتطلب تكوين SQL المثيل المدار ليعمل كناشر و/أو موزع:
- لدرجة أن المثيل الذي يديره الناشر موجود على نفس الشبكة الظاهرية مثل الموزع والمشترك، أو أن بوابات VPNقد تم تكوينها بين الشبكات الظاهرية للكيانات الثلاثة.
- يستخدم الاتصال مصادقة SQL بين المشاركين في النسخ المتماثل.
- مشاركة حساب تخزين Azure لدليل عمل النسخ المتماثل.
- المنفذ 445 (TCP الصادر) مفتوح في قواعد أمان NSG للمثيلات المدارة للوصول إلى مشاركة ملف Azure. إذا واجهت الخطأ،
failed to connect to azure storage <storage account name> with os error 53
فستحتاج إلى إضافة قاعدة صادرة إلى NSG للشبكة الفرعية المناسبة لـ SQL Managed Instance.
1 - إنشاء مجموعة موارد
استخدم مدخل Azure لإنشاء مجموعة موارد بالاسمSQLMI-Repl
.
2- إنشاء مثيلات مدارة
استخدم مدخل AzureلإنشاءSQL Managed Instancesعلى نفس الشبكة الظاهرية والشبكة الفرعية. على سبيل المثال، قم بتسمية المثلين المُدارين:
-
sql-mi-pub
(مع بعض الشخصيات للتوزيع العشوائي) -
sql-mi-sub
(مع بعض الشخصيات للتوزيع العشوائي)
ستحتاج أيضًا إلى تكوين Azure VM للاتصال بالمثيلات المُدارة.
3 - إنشاء حساب تخزين في Azure
إنشاء حساب تخزين Azure لدليل العمل، ثم قم بإنشاء مشاركة ملف داخل حساب التخزين.
نسخ مسار مشاركة الملف بتنسيق: \\storage-account-name.file.core.windows.net\file-share-name
مثال: \\replstorage.file.core.windows.net\replshare
انسخ مفاتيح الوصول إلى وحدة التخزين بتنسيق: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net
مثال: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net
لمزيدٍ من المعلومات، راجع إدارة مفاتيح الوصول إلى حساب التخزين.
4 - إنشاء قاعدة بيانات ناشر
اتصل sql-mi-pub
بالمثيل المُدار باستخدام SQL Server Management Studio وقم بتشغيل كود Transact-SQL (T-SQL) التالي لإنشاء قاعدة بيانات الناشر:
USE [master]
GO
CREATE DATABASE [ReplTran_PUB]
GO
USE [ReplTran_PUB]
GO
CREATE TABLE ReplTest (
ID INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100) NOT NULL,
dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO
USE [ReplTran_PUB]
GO
INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub')
GO
SELECT * FROM ReplTest
GO
5 - إنشاء قاعدة بيانات المشتركين
اتصل sql-mi-sub
بالمثيل المُدار باستخدام SQL Server Management Studio وقم بتشغيل كود T-SQL التالي لإنشاء قاعدة بيانات المشتركين الفارغة:
USE [master]
GO
CREATE DATABASE [ReplTran_SUB]
GO
USE [ReplTran_SUB]
GO
CREATE TABLE ReplTest (
ID INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100) NOT NULL,
dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO
6 - تكوين التوزيع
اتصل sql-mi-pub
بالمثيل المُدار باستخدام SQL Server Management Studio وقم بتشغيل كود T-SQL التالي لتكوين قاعدة بيانات التوزيع الخاصة بك.
USE [master]
GO
EXEC sp_adddistributor @distributor = @@ServerName;
EXEC sp_adddistributiondb @database = N'distribution';
GO
7 - تكوين الناشر لاستخدام الموزع
في مثيل SQL المُدار للناشر، sql-mi-pub
قم بتغيير تنفيذ الاستعلام إلى وضع SQLCMD وقم بتشغيل الكود التالي لتسجيل الموزع الجديد مع الناشر الخاص بك.
:setvar username loginUsedToAccessSourceManagedInstance
:setvar password passwordUsedToAccessSourceManagedInstance
:setvar file_storage "\\storage-account-name.file.core.windows.net\file-share-name"
-- example: file_storage "\\replstorage.file.core.windows.net\replshare"
:setvar file_storage_key "DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net"
-- example: file_storage_key "DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net"
USE [master]
EXEC sp_adddistpublisher
@publisher = @@ServerName,
@distribution_db = N'distribution',
@security_mode = 0,
@login = N'$(username)',
@password = N'$(password)',
@working_directory = N'$(file_storage)',
@storage_connection_string = N'$(file_storage_key)'; -- Remove this parameter for on-premises publishers
ملاحظة
تأكد من استخدام خط مائل عكسي فقط (\
) لامتداد file_storage. يمكن أن يؤدي استخدام خط مائل أمامي (/
) إلى حدوث خطأ عند الاتصال بمشاركة الملف.
يقوم هذا البرنامج النصي بتكوين ناشر محلي على المثيل المدار، ويضيف خادمًا مرتبطًا، ويخلق مجموعة من الوظائف لعامل SQL Server.
8 - إنشاء المنشور والمشترك
باستخدام وضع SQLCMD، قم بتشغيل البرنامج النصي T-SQL التالي لتمكين النسخ المتماثل لقاعدة البيانات الخاصة بك، وتكوين النسخ المتماثل بين الناشر والموزع والمشترك.
-- Set variables
:setvar username sourceLogin
:setvar password sourcePassword
:setvar source_db ReplTran_PUB
:setvar publication_name PublishData
:setvar object ReplTest
:setvar schema dbo
:setvar target_server "sql-mi-sub.wdec33262scj9dr27.database.windows.net"
:setvar target_username targetLogin
:setvar target_password targetPassword
:setvar target_db ReplTran_SUB
-- Enable replication for your source database
USE [$(source_db)]
EXEC sp_replicationdboption
@dbname = N'$(source_db)',
@optname = N'publish',
@value = N'true';
-- Create your publication
EXEC sp_addpublication
@publication = N'$(publication_name)',
@status = N'active';
-- Configure your log reader agent
EXEC sp_changelogreader_agent
@publisher_security_mode = 0,
@publisher_login = N'$(username)',
@publisher_password = N'$(password)',
@job_login = N'$(username)',
@job_password = N'$(password)';
-- Add the publication snapshot
EXEC sp_addpublication_snapshot
@publication = N'$(publication_name)',
@frequency_type = 1,
@publisher_security_mode = 0,
@publisher_login = N'$(username)',
@publisher_password = N'$(password)',
@job_login = N'$(username)',
@job_password = N'$(password)';
-- Add the ReplTest table to the publication
EXEC sp_addarticle
@publication = N'$(publication_name)',
@type = N'logbased',
@article = N'$(object)',
@source_object = N'$(object)',
@source_owner = N'$(schema)';
-- Add the subscriber
EXEC sp_addsubscription
@publication = N'$(publication_name)',
@subscriber = N'$(target_server)',
@destination_db = N'$(target_db)',
@subscription_type = N'Push';
-- Create the push subscription agent
EXEC sp_addpushsubscription_agent
@publication = N'$(publication_name)',
@subscriber = N'$(target_server)',
@subscriber_db = N'$(target_db)',
@subscriber_security_mode = 0,
@subscriber_login = N'$(target_username)',
@subscriber_password = N'$(target_password)',
@job_login = N'$(username)',
@job_password = N'$(password)';
-- Initialize the snapshot
EXEC sp_startpublication_snapshot
@publication = N'$(publication_name)';
9 - تعديل معلمات العامل
يواجه مثيل Azure SQL المُدار حاليًا بعض مشكلات الواجهة الخلفية مع الاتصال بوكلاء النسخ المتماثل. في أثناء معالجة هذه المشكلة الحل البديل هو زيادة قيمة مهلة تسجيل الدخول لعوامل النسخ المتماثل.
تشغيل الأمر T-SQL التالي على الناشر لزيادة مهلة تسجيل الدخول:
-- Increase login timeout to 150s
update msdb..sysjobsteps set command = command + N' -LoginTimeout 150'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'
تشغيل الأمر T-SQL التالي مرة أخرى لتعيين مهلة تسجيل الدخول مرة أخرى إلى القيمة الافتراضية، إذا كنت بحاجة إلى القيام بذلك:
-- Increase login timeout to 30
update msdb..sysjobsteps set command = command + N' -LoginTimeout 30'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'
أعد تشغيل كافة العوامل الثلاثة لتطبيق هذه التغييرات.
10 - اختبار النسخ المتماثل
بمجرد تكوين النسخ المتماثل، يمكنك اختباره عن طريق إدراج عناصر جديدة على الناشر ومشاهدة نشر التغييرات على المشترك.
تشغيل مقتطف T-SQL التالي لعرض الصفوف على المشترك:
select * from dbo.ReplTest
تشغيل مقتطف T-SQL التالي لإدراج صفوف إضافية على الناشر، ثم تحقق من الصفوف مرة أخرى على المشترك.
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')
تنظيف الموارد
لإسقاط المنشور، قم بتشغيل الأمر T-SQL التالي:
-- Drops the publication
USE [ReplTran_PUB]
EXEC sp_droppublication @publication = N'PublishData'
GO
لإزالة خيار النسخ المتماثل من قاعدة البيانات، قم بتشغيل الأمر T-SQL التالي:
-- Disables publishing of the database
USE [ReplTran_PUB]
EXEC sp_removedbreplication
GO
لتعطيل النشر والتوزيع، قم بتشغيل الأمر T-SQL التالي:
-- Drops the distributor
USE [master]
EXEC sp_dropdistributor @no_checks = 1
GO
يمكنك تنظيف موارد Azure عن طريق حذف موارد SQL المُدارة من مجموعة الموارد ثم حذف مجموعة المواردSQLMI-Repl
.
الخطوات التالية
يمكنك أيضًا معرفة المزيد من المعلومات حول النسخ المتماثل للمعاملات باستخدام مثيل Azure SQL المُدار أو تعلم كيفية تكوين النسخ المتماثل بين ناشر/موزع مثيل مُدار من SQL وSQL على مشترك Azure VM.