البرنامج التعليمي: تكوين النسخ المتماثل بين مثيلين مدارين

ينطبق على: مثيل Azure SQL المُدار

يسمح لك النسخ المتماثل للمعاملات بنسخ البيانات من قاعدة بيانات إلى أخرى مستضافة إما على SQL Server أو ⁧⁩مثيل Azure SQL المُدار.⁧⁩ يمكن أن يكون مثيل SQL المدار ناشرًا أو موزعًا أو مشتركًا في طبولوجيا النسخ المتماثل. راجع ⁧⁩تكوينات النسخ المتماثل للمعاملات⁧⁩ للتكوينات المتوفرة.

النسخ المتماثل للمعاملات حاليًا في المعاينة العامة ل SQL المثيل المدار.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • تكوين مثيل مدار كناشر النسخ المتماثل والموزع.
  • تكوين مثيل مدار كمشترك النسخ متماثل.

Replicate between two managed instances

هذا البرنامج التعليمي مخصص لجمهور من ذوي الخبرة ويفترض أن المستخدم على دراية بنشر والاتصال بكل من المثيلات المدارة SQL Server VMs داخل Azure.

ملاحظة

المتطلبات

يتطلب تكوين 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⁧⁩.