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

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

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

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

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

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

Replication between a managed instance publisher, managed instance distributor, and SQL Server subscriber

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

ملاحظة

توضح هذه المقالة استخدام ⁧⁩النسخ المتماثل للمعاملات⁧⁩ في مثيل Azure SQL المُدار. لا علاقة لها ⁧⁩بمجموعات تجاوز الفشل⁧⁩، وهي ميزة مثيل مدار من Azure SQL تتيح لك إنشاء نسخ متماثلة كاملة قابلة للقراءة من المثيلات الفردية. هناك اعتبارات إضافية عند تكوين ⁧⁩النسخ المتماثل للمعاملات مع مجموعات تجاوز الفشل⁧⁩.

المتطلبات الأساسية

لإكمال البرنامج التعليمي، تأكد من استيفاء المتطلبات الأساسية التالية لديك:

  • ⁩اشتراك Azure⁧⁩.
  • تجربة مع نشر مثيلين مُدارين داخل الشبكة الظاهرية ذاتها.
  • مشترك في SQL Server، إما على الجهاز أو على Azure VM. يستخدم هذا البرنامج التعليمي Azure VM.
  • ⁩SQL Server Management Studio (SSMS) 18.0 أو أحدث⁧⁩.
  • أحدث إصدار من ⁧⁩Azure PowerShell⁧⁩.
  • يسمح المنفذان 445 و1433 بحركة مرور SQL على كل من جدار حماية Azure وجدار حماية Windows.

أنشئ مجموعة الموارد.

استخدم التعليمات البرمجية التالية PowerShell المتكررة لإنشاء مجموعة موارد جديدة:

# set variables
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"

# Create a new resource group
New-AzResourceGroup -Name  $ResourceGroupName -Location $Location

إنشاء مثيلين مُدارين

إنشاء مثيلين مُدارين ضمن مجموعة الموارد الجديدة هذه باستخدام ⁧⁩مدخل Azure⁧⁩.

  • يجب أن يكون اسم المثيل الذي يديره الناشر⁧sql-mi-publisher⁩ (مع بعض الأحرف العشوائية)، ويجب أن يكون اسم الشبكة ظاهرًا⁧vnet-sql-mi-publisher⁩.

  • يجب أن يكون اسم المثيل المُدار من قبل الموزع ⁧sql-mi-distributor⁩(مع عدد قليل من الأحرف للتوزيع العشوائي)، ويجب أن يكون ⁧⁩في نفس الشبكة الظاهرية مثل المثيل الذي يديره الناشر⁧⁩.

    Use the publisher VNet for the distributor

لمزيد من المعلومات حول إنشاء مثيل مُدار، راجع ⁧⁩إنشاء مثيل مُدار في المدخل⁧⁩.

ملاحظة

وتبسيطًا للأمور، ولأنه التكوين الأكثر شيوعًا، يقترح هذا البرنامج التعليمي وضع المثيل المُدار للموزع داخل الشبكة الافتراضية ذاتها مثل الناشر. ومع ذلك، فمن الممكن إنشاء الموزع في شبكة ظاهرية منفصلة. للقيام بذلك، ستحتاج إلى تكوين VNet التناظر بين الشبكات الافتراضية للناشر والموزع، ثم تكوين VNet التناظر بين الشبكات الافتراضية للموزع والمشترك.

إنشاء جهاز خادم SQL الظاهري

إنشاء جهاز ظاهري SQL Server باستخدام ⁧⁩مدخل Azure⁧⁩. يجب أن يكون الجهاز الظاهري SQL Server يتسم بالخصائص التالية:

  • الاسم: sql-vm-sub
  • الصورة: SQL Server 2016 أو أحدث
  • مجموعة الموارد: نفس مثيل مدار
  • تخطيط الشبكة الظاهرية:⁧sql-vm-sub-vnet

لمزيد من المعلومات حول نشر جهاز VM SQL Server إلى Azure، راجع ⁧⁩التشغيل السريع: إنشاء جهاز ظاهري SQL Server⁧⁩.

تكوين نظير VNet

تكوين نظير VNet لتمكين الاتصال بين الشبكة الظاهرية للمثيلين المُدارة وشبكة الاتصال الظاهرية SQL Server. للقيام بذلك، استخدم قصاصات التعليمة البرمجية PowerShell المتكررة:

# Set variables
$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-sub-vnet'
$pubsubName = 'Pub-to-Sub-Peer'
$subpubName = 'Sub-to-Pub-Peer'

$virtualNetwork1 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $pubvNet

 $virtualNetwork2 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $subvNet  

# Configure VNet peering from publisher to subscriber
Add-AzVirtualNetworkPeering `
  -Name $pubsubName `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

# Configure VNet peering from subscriber to publisher
Add-AzVirtualNetworkPeering `
  -Name $subpubName `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

# Check status of peering on the publisher VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $pubvNet `
 | Select PeeringState

# Check status of peering on the subscriber VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $subvNet `
 | Select PeeringState

بمجرد إنشاء نظير VNet، اختبر الاتصال عن طريق تشغيل SQL Server Management Studio (SSMS) على SQL Server والاتصال بكلا المثيلين المُدارين. لمزيد من المعلومات حول الاتصال بمثيل مدار باستخدام SSMS، راجع ⁧⁩استخدام SSMS للاتصال بمثيل SQL المُدار⁧⁩.

Test connectivity to the managed instances

إنشاء منطقة DNS خاصة

تسمح منطقة DNS الخاصة بتوجيه DNS بين مثيلات SQL Server المُدارة.

إنشاء منطقة DNS خاصة

  1. «تسجيل الدخول» إلى ⁧⁩مدخل Azure⁧⁩.

  2. حدد ⁧⁩Create a resource⁧⁩ لإنشاء مورد Azure جديد.

  3. البحث في⁧private dns zone⁩ Azure Marketplace.

  4. اختر مورد ⁧⁩Private DNS zone⁧⁩ التي نشرتها Microsoft ثم حدد ⁧⁩Create⁧⁩ لإنشاء منطقة DNS.

  5. اختر مجموعة الاشتراك والموارد من القائمة المنسدلة.

  6. توفير اسم إجباري لمنطقة DNS، مثل ⁧repldns.com⁩.

    Create private DNS zone

  7. حدد Review + create. راجع المعلمات الخاصة بمنطقة DNS الخاصة ثم حدد ⁧⁩Create⁧⁩ لإنشاء المورد الخاص بك.

إنشاء سجل

  1. انتقل إلى ⁧⁩Private DNS zone⁧⁩ الجديدة وحدد ⁧⁩Overview⁧⁩.

  2. حدد ⁧⁩+ Record set⁧⁩ لإنشاء سجل A جديد.

  3. قم بتوفير اسم الجهاز الظاهري SQL Server الخاص بك بالإضافة إلى عنوان IP الداخلي الخاص بك.

    Configure an A record

  4. وحدد ⁧⁩OK⁧⁩ لإنشاء الشبكة الفرعية.

  1. انتقل إلى ⁧⁩Private DNS zone⁧⁩ الجديدة وحدد ⁧⁩Virtual network links⁧⁩.

  2. حدد ⁧⁩⁩+ Add⁦⁩.

  3. قم بتوفير اسم للارتباط، مثل ⁧Pub-link⁩.

  4. حدد اشتراكك من القائمة المنسدلة ثم حدد الشبكة الظاهرية لمثيل الناشر المُدار.

  5. حدد المربع بجوار ⁧⁩Enable auto registration⁧⁩.

    Create VNet link

  6. حدد ⁧⁩OK⁧⁩ لربط الشبكة الظاهرية.

  7. كرر هذه الخطوات لإضافة ارتباط للشبكة الظاهرية المشترك مع الاسم مثل ⁧Sub-link⁩.

إنشاء حساب تخزين 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

لمزيدٍ من المعلومات، راجع ⁧⁩إدارة مفاتيح الوصول إلى حساب التخزين⁧⁩.

إنشاء قاعدة بيانات

إنشاء قاعدة بيانات جديدة على مثيل الناشر المدار. للقيام بذلك، اتبع الخطوات التالية:

  1. قم بإطلاق SQL Server Management Studio على SQL Server.
  2. الاتصال بـ ⁧sql-mi-publisher⁩ المثيل المُدار.
  3. افتح إطار ⁧⁩New Query⁧⁩ وتنفيذ الاستعلام T-SQL التالي لإنشاء قاعدة البيانات.
-- Create the databases
USE [master]
GO

-- Drop database if it exists
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
    DROP DATABASE ReplTutorial
END
GO

-- Create new database
CREATE DATABASE [ReplTutorial]
GO

-- Create table
USE [ReplTutorial]
GO
CREATE TABLE ReplTest (
   ID INT NOT NULL PRIMARY KEY,
   c1 VARCHAR(100) NOT NULL,
   dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

-- Populate table with data
USE [ReplTutorial]
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

تكوين التوزيع

بمجرد تأسيس الاتصال والحصول على قاعدة بيانات نموذج يمكنك تكوين التوزيع على ⁧sql-mi-distributor⁩ المثيل المُدار. للقيام بذلك، اتبع الخطوات التالية:

  1. قم بإطلاق SQL Server Management Studio على SQL Server.

  2. الاتصال بـ ⁧sql-mi-distributor⁩ المثيل المُدار.

  3. فتح إطار ⁧⁩New Query⁧⁩ وتشغيل التعليمات البرمجية SQL Transact التالية لتكوين التوزيع على مثيل الموزع المُدار.

    EXEC sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    
    EXEC sp_adddistributiondb @database = N'distribution'
    
    EXEC sp_adddistpublisher @publisher = 'sql-mi-publisher.b6bf57.database.windows.net', -- primary publisher
         @distribution_db = N'distribution',
         @security_mode = 0,
         @login = N'azureuser',
         @password = N'<publisher_password>',
         @working_directory = N'\\replstorage.file.core.windows.net\replshare',
         @storage_connection_string = N'<storage_connection_string>'
         -- example: @storage_connection_string = N'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net'
    
    

    ملاحظة

    تأكد من استخدام خط مائل عكسي فقط (⁧\⁩) ⁧@working_directory⁩ للمعلمة. يمكن أن يؤدي استخدام مائل أمامي (⁧/⁩) إلى حدوث خطأ عند الاتصال بمشاركة الملف.

  4. الاتصال بـ ⁧sql-mi-publisher⁩ المثيل المُدار.

  5. فتح إطار ⁧⁩New Query⁧⁩ وتشغيل التعليمات البرمجية SQL Transact التالية لتسجيل الموزع في الناشر:

    Use MASTER
    EXEC sys.sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    

إنشاء المنشور

بمجرد تكوين التوزيع، يمكنك الآن إنشاء المنشور. للقيام بذلك، اتبع الخطوات التالية:

  1. قم بإطلاق SQL Server Management Studio على SQL Server.

  2. الاتصال بـ ⁧sql-mi-publisher⁩ المثيل المُدار.

  3. في ⁧⁩Object Explorer⁧⁩، قم بتوسيع عقدة ⁧⁩Replication⁧⁩ وانقر بزر الماوس الأيمن فوق المجلد ⁧⁩Local Publication.⁧⁩ حدد ⁧⁩New Publication...⁧⁩.

  4. حدد ⁧⁩Next⁧⁩ لتجاوز صفحة الترحيب.

  5. في صفحة ⁧⁩Publication Database⁧⁩، حدد قاعدة البيانات التي ⁧ReplTutorial⁩ قمت بإنشائها مسبقا. حدد "Next".

  6. في صفحة ⁧⁩Publication type⁧⁩، حدد ⁧⁩Transactional publication⁧⁩. حدد "Next".

  7. في صفحة ⁧⁩Articles⁧⁩، حدد المربع بجوار ⁧⁩Tables⁧⁩. حدد "Next".

  8. في الصفحة ⁧⁩Filter Table Rows⁧⁩، حدد ⁧⁩Next⁧⁩ دون إضافة أي عوامل تصفية.

  9. في الصفحة ⁧⁩Snapshot Agent⁧⁩ حدد المربع بجوار ⁧⁩Create snapshot immediately and keep the snapshot available to initialize subscriptions⁧⁩. حدد "Next".

  10. في صفحة ⁧⁩Agent Security⁧⁩، حدد ⁧⁩Security Settings...⁧⁩. توفير بيانات اعتماد تسجيل الدخول SQL Server لاستخدامها في "Snapshot Agent" والاتصال بالناشر. حدد ⁧⁩OK⁧⁩ لإغلاق صفحة ⁧⁩Snapshot Agent Security.⁧⁩ حدد "Next".

    Configure Snapshot Agent security

  11. في الصفحة ⁧⁩Wizard Actions⁧⁩، اختر ⁧⁩Create the publication⁧⁩ واختر (اختياريًا)⁧⁩Generate a script file with steps to create the publication⁧⁩ إذا كنت ترغب في حفظ هذا البرنامج النصي في وقت لاحق.

  12. في صفحة ⁧⁩Complete the Wizard⁧⁩، قم بتسمية المنشور⁧ReplTest⁩ وحدد ⁧⁩Next⁧⁩ لإنشاء المنشور.

  13. بمجرد إنشاء المنشور الخاص بك، قم بتحديث عقدة ⁧⁩Replication⁧⁩ في ⁧⁩Object Explorer⁧⁩ ثم قم بتوسيع ⁧⁩Local Publications⁧⁩ لرؤية المنشور الجديد.

إنشاء الاشتراك

بمجرد إنشاء المنشور، يمكنك إنشاء الاشتراك. للقيام بذلك، اتبع الخطوات التالية:

  1. قم بإطلاق SQL Server Management Studio على SQL Server.
  2. الاتصال بـ ⁧sql-mi-publisher⁩ المثيل المُدار.
  3. فتح نافذة ⁧⁩New Query⁧⁩ثم قم بتشغيل التعليمات البرمجية SQL Transact التالية لإضافة عامل الاشتراك والتوزيع. استخدم DNS كجزء من اسم المشترك.
use [ReplTutorial]
exec sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@destination_db = N'ReplSub',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0

exec sp_addpushsubscription_agent
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@subscriber_db = N'ReplSub',
@job_login = N'azureuser',
@job_password = '<Complex Password>',
@subscriber_security_mode = 0,
@subscriber_login = N'azureuser',
@subscriber_password = '<Complex Password>',
@dts_package_location = N'Distributor'
GO

اختبار النسخ المتماثل

بمجرد تكوين النسخ المتماثل، يمكنك اختباره عن طريق إدراج عناصر جديدة على الناشر ومشاهدة نشر التغييرات على المشترك.

تشغيل مقتطف T-SQL التالي لعرض الصفوف على المشترك:

Use ReplSub
select * from dbo.ReplTest

تشغيل مقتطف T-SQL التالي لإدراج صفوف إضافية على الناشر، ثم تحقق من الصفوف مرة أخرى على المشترك.

Use ReplTutorial
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')

تنظيف الموارد

  1. انتقل إلى مجموعة الموارد الخاصة بك في ⁧⁩مدخل Azure⁧⁩.
  2. حدد المثيلات المُدارة ثم حدد ⁧⁩Delete⁧⁩. اكتب ⁧yes⁩ في مربع النص لتأكيد رغبتك في حذف المورد ثم حدد ⁧⁩Delete⁧⁩. قد تستغرق هذه العملية بعض الوقت للاكتمال في الخلفية، وحتى يتم ذلك، لن تتمكن من حذف ⁧⁩virtual cluster⁧⁩ أو أي موارد تابعة أخرى. مراقبة الحذف في علامة التبويب ⁧⁩Activity⁧⁩ لتأكيد حذف المثيل المُدار.
  3. بمجرد حذف المثيل المُدار، احذف ⁧⁩virtual cluster⁧⁩ بتحديدها في مجموعة الموارد، ثم اختر ⁧⁩Delete⁧⁩. اكتب ⁧yes⁩ في مربع النص لتأكيد رغبتك في حذف المورد ثم حدد ⁧⁩Delete⁧⁩.
  4. حذف أية موارد متبقية. اكتب ⁧yes⁩ في مربع النص لتأكيد رغبتك في حذف المورد ثم حدد ⁧⁩Delete⁧⁩.
  5. حذف مجموعة الموارد عن طريق تحديد ⁧⁩Delete resource group⁧⁩، والكتابة باسم مجموعة ⁧myResourceGroup⁩ الموارد، ثم تحديد ⁧⁩Delete⁧⁩.

أخطاء معروفة

تسجيلات دخول Windows غير معتمدة

Exception Message: Windows logins are not supported in this version of SQL Server.

تم تكوين العامل مع تسجيل دخول Windows ويحتاج إلى استخدام تسجيل دخول SQL Server بدلًا من ذلك. استخدم صفحة ⁧⁩Agent Security⁧⁩ لـ ⁧⁩Publication properties⁧⁩ لتغيير بيانات اعتماد تسجيل الدخول إلى تسجيل دخول SQL Server.

فشل الاتصال بـ Azure Storage

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 53.

2019-11-19 02:21:05.07 سلسلة اتصال تخزين Azure التي تم الحصول عليها لإعادة التخزين 2019-11-19 02:21:05.07 الاتصال بتخزين ملفات '\replstorage.file.core.windows.net\replshare' 2019-11-19 02:21:31.21 فشل الاتصال بـ Azure Storage'' بسبب خطأ نظام التشغيل: 53.

من المحتمل أن يكون هذا بسبب إغلاق المنفذ 445 في جدار حماية Azure أو جدار حماية Windows أو كليهما.

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.

يمكن أن يؤدي استخدام مائل للأمام بدلاً من الخط المائل العكسي في مسار الملف لمشاركة الملف هذا الخطأ.

  • هذا لا بأس به: ⁧\\replstorage.file.core.windows.net\replshare
  • يمكن أن يؤدي هذا إلى خطأ OS 55: ⁧'\\replstorage.file.core.windows.net/replshare'

تعذر الاتصال بالمشترك

The process could not connect to Subscriber 'SQL-VM-SUB Could not open a connection to SQL Server [53]. A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections.

الحلول الممكنة:

  • تأكد أن المنفذ 1433 مفتوح.
  • تأكد من تمكين TCP/IP على المشترك.
  • تأكيد استخدام اسم DNS عند إنشاء المشترك.
  • تحقق من أن الشبكات الظاهرية مرتبطة بشكل صحيح في منطقة DNS الخاصة.
  • تحقق من تكوين السجل A بشكل صحيح.
  • تحقق من تكوين نظير VNet بشكل صحيح.

لا توجد منشورات يمكنك الاشتراك فيها

عند إضافة اشتراك جديد باستخدام معالج ⁧⁩New Subscription⁧⁩، في صفحة ⁧⁩Publication⁧⁩، قد تجد أنه لا توجد قواعد بيانات ومنشورات مدرجة كخيارات متوفرة، وقد ترى رسالة الخطأ التالية:

There are no publications to which you can subscribe, either because this server has no publications or because you do not have sufficient privileges to access the publications.

على الرغم من أنه من الممكن أن تكون رسالة الخطأ هذه دقيقة، فستكون هناك منشورات فعالة على الناشر الذي تتصل به، أو أنك تفتقر إلى أذونات كافية، يمكن أيضًا أن يكون هذا الخطأ ناتجًا أيضًا عن إصدار أقدم من SQL Server Management Studio. حاول الترقية إلى SQL Server Management Studio 18.0 أو أحدث لاستبعاد هذا كسبب جذر.

الخطوات التالية

تمكين ميزات الأمان

راجع ⁧⁩ما المقصود بمثيل Azure SQL المُدار؟⁧⁩ مقالة للحصول على قائمة شاملة بطرق تأمين قاعدة البيانات الخاصة بك. تتم مناقشة ميزات الأمان التالية:

قدرات مثيل SQL المُدار

للحصول على نظرة عامة كاملة على قدرات المثيل المُدار، راجع: