كيفية فهرسة البيانات من Azure SQL في Azure الذكاء الاصطناعي Search

في هذه المقالة، تعرف على كيفية تكوين مفهرس يستورد المحتوى من قاعدة بيانات Azure SQL أو مثيل Azure SQL المدار ويجعله قابلا للبحث في Azure الذكاء الاصطناعي Search.

تكمل هذه المقالة إنشاء مفهرس بمعلومات خاصة ب Azure SQL. ويستخدم واجهات برمجة تطبيقات REST لإظهار سير عمل من ثلاثة أجزاء مشترك بين جميع المفهرسات: إنشاء مصدر بيانات، وإنشاء فهرس، وإنشاء مفهرس.

توفر هذه المقالة أيضا:

  • وصف لسياسات الكشف عن التغيير التي يدعمها مفهرس Azure SQL بحيث يمكنك إعداد الفهرسة التزايدية.

  • قسم الأسئلة المتداولة (FAQ) للحصول على إجابات للأسئلة حول توافق الميزات.

إشعار

مزامنة البيانات في الوقت الحقيقي غير ممكنة مع المفهرس. يمكن للمفهرس إعادة فهرسة الجدول كل خمس دقائق على الأكثر. إذا كانت تحديثات البيانات بحاجة إلى أن تنعكس في الفهرس في وقت أقرب، نوصي بدفع الصفوف المحدثة مباشرة.

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

  • قاعدة بيانات Azure SQL مع بيانات في جدول أو طريقة عرض واحدة، أو مثيل مدار من SQL مع نقطة نهاية عامة.

    استخدم جدولا إذا كانت بياناتك كبيرة أو إذا كنت بحاجة إلى فهرسة تزايدية باستخدام قدرات الكشف عن التغيير الأصلية ل SQL.

    استخدم طريقة عرض إذا كنت بحاجة إلى دمج البيانات من جداول متعددة. طرق العرض الكبيرة ليست مثالية لمفهرس SQL. الحل البديل هو إنشاء جدول جديد فقط لاستيعابه في فهرس Azure الذكاء الاصطناعي Search. ستتمكن من استخدام تتبع التغيير المتكامل ل SQL، وهو أسهل في التنفيذ من High Water Mark.

  • قراءة الأذونات. يدعم Azure الذكاء الاصطناعي Search مصادقة SQL Server، حيث يتم توفير اسم المستخدم وكلمة المرور على سلسلة الاتصال. بدلا من ذلك، يمكنك إعداد هوية مدارة واستخدام أدوار Azure.

للعمل من خلال الأمثلة في هذه المقالة، تحتاج إلى عميل REST.

تتضمن الطرق الأخرى لإنشاء مفهرس Azure SQL Azure SDKs أو معالج استيراد البيانات في مدخل Microsoft Azure. إذا كنت تستخدم مدخل Microsoft Azure، فتأكد من تمكين الوصول إلى جميع الشبكات العامة في جدار حماية Azure SQL ومن أن العميل لديه حق الوصول عبر قاعدة واردة.

تعريف مصدر البيانات

يحدد تعريف مصدر البيانات البيانات للفهرسة وبيانات الاعتماد والنهج لتحديد التغييرات في البيانات. يتم تعريف مصدر البيانات كمورد مستقل بحيث يمكن استخدامه من قبل مفهرسات متعددة.

  1. إنشاء مصدر بيانات أو تحديث مصدر البيانات لتعيين تعريفه:

     POST https://myservice.search.windows.net/datasources?api-version=2020-06-30
     Content-Type: application/json
     api-key: admin-key
    
     {
         "name" : "myazuresqldatasource",
         "description" : "A database for testing Azure AI Search indexes.",
         "type" : "azuresql",
         "credentials" : { "connectionString" : "Server=tcp:<your server>.database.windows.net,1433;Database=<your database>;User ID=<your user name>;Password=<your password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },
         "container" : { 
             "name" : "name of the table or view that you want to index",
             "query" : null (not supported in the Azure SQL indexer)
             },
         "dataChangeDetectionPolicy": null,
         "dataDeletionDetectionPolicy": null,
         "encryptionKey": null,
         "identity": null
     }
    
  2. أدخل اسما فريدا لمصدر البيانات الذي يتبع اصطلاحات تسمية Azure الذكاء الاصطناعي Search.

  3. تعيين "type" إلى "azuresql" (مطلوب).

  4. تعيين "بيانات الاعتماد" إلى سلسلة الاتصال:

    • يمكنك الحصول على وصول كامل سلسلة الاتصال من مدخل Microsoft Azure. ADO.NET connection string استخدم الخيار . تعيين اسم المستخدم وكلمة المرور.

    • بدلا من ذلك، يمكنك تحديد هوية مدارة سلسلة الاتصال لا تتضمن أسرار قاعدة البيانات بالتنسيق التالي: Initial Catalog|Database=<your database name>;ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Sql/servers/<your SQL Server name>/;Connection Timeout=connection timeout length;.

    لمزيد من المعلومات، راجع الاتصال إلى مفهرس قاعدة بيانات Azure SQL باستخدام هوية مدارة.

إضافة حقول بحث إلى فهرس

في فهرس البحث، أضف الحقول التي تتوافق مع الحقول في قاعدة بيانات SQL. تأكد من أن مخطط فهرس البحث متوافق مع مخطط المصدر باستخدام أنواع بيانات مكافئة.

  1. إنشاء فهرس أو تحديثه لتعريف حقول البحث التي ستخزن البيانات:

    POST https://[service name].search.windows.net/indexes?api-version=2020-06-30
    Content-Type: application/json
    api-key: [Search service admin key]
    {
        "name": "mysearchindex",
        "fields": [{
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "searchable": false
        }, 
        {
            "name": "description",
            "type": "Edm.String",
            "filterable": false,
            "searchable": true,
            "sortable": false,
            "facetable": false,
            "suggestions": true
        }
      ]
    }
    
  2. إنشاء حقل مفتاح مستند ("مفتاح": صحيح) يعرف كل مستند بحث بشكل فريد. هذا هو الحقل الوحيد المطلوب في فهرس البحث. عادة ما يتم تعيين المفتاح الأساسي للجدول إلى حقل مفتاح الفهرس. يجب أن يكون مفتاح المستند فريدا وغير فارغ. يمكن أن تكون القيم رقمية في بيانات المصدر، ولكن في فهرس البحث، يكون المفتاح دائما سلسلة.

  3. إنشاء المزيد من الحقول لإضافة المزيد من المحتويات القابلة للبحث. راجع إنشاء فهرس للحصول على إرشادات.

تعيين أنواع البيانات

نوع بيانات SQL أنواع حقول Azure الذكاء الاصطناعي Search ملاحظات
بت Edm.Boolean, Edm.String
int، smallint، tinyint Edm.Int32، Edm.Int64، Edm.String
عدد صحيح كبير Edm.Int64، Edm.String
حقيقي، عائم Edm.Double، Edm.String
smallmoney, money decimal numeric Edm.String لا يدعم Azure الذكاء الاصطناعي Search تحويل الأنواع العشرية إلى Edm.Double لأن القيام بذلك سيفقد الدقة
char, nchar, varchar, nvarchar Edm.String
Collection(Edm.String)
يمكن استخدام سلسلة SQL لملء حقل مجموعة (Edm.String) إذا كانت السلسلة تمثل صفيف JSON من السلاسل: ["red", "white", "blue"]
smalldatetime, datetime, datetime2, date, datetimeoffset Edm.DateTimeOffset, Edm.String
معرف فريد Edm.String
المنطقة الجغرافية Edm.GeographyPoint يتم دعم مثيلات الجغرافيا من نوع POINT مع SRID 4326 (وهو الافتراضي) فقط
rowversion غير قابل للتطبيق لا يمكن تخزين أعمدة إصدار الصف في فهرس البحث، ولكن يمكن استخدامها لتعقب التغييرات
الوقت، الفترة الزمنية، الثنائية، المتغيرة، الصورة، xml، الهندسة، أنواع CLR غير قابل للتطبيق غير مدعوم

تكوين وتشغيل مفهرس Azure SQL

بمجرد إنشاء الفهرس ومصدر البيانات، تصبح جاهزا لإنشاء المفهرس. يحدد تكوين المفهرس المدخلات والمعلمات والخصائص التي تتحكم في سلوكيات وقت التشغيل.

  1. إنشاء مفهرس أو تحديثه عن طريق تسميته والإشارة إلى مصدر البيانات والفهرس الهدف:

    POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
    Content-Type: application/json
    api-key: [search service admin key]
    {
        "name" : "[my-sqldb-indexer]",
        "dataSourceName" : "[my-sqldb-ds]",
        "targetIndexName" : "[my-search-index]",
        "disabled": null,
        "schedule": null,
        "parameters": {
            "batchSize": null,
            "maxFailedItems": 0,
            "maxFailedItemsPerBatch": 0,
            "base64EncodeKeys": false,
            "configuration": {
                "queryTimeout": "00:04:00",
                "convertHighWaterMarkToRowVersion": false,
                "disableOrderByHighWaterMarkColumn": false
            }
        },
        "fieldMappings": [],
        "encryptionKey": null
    }
    
  2. ضمن المعلمات، يحتوي قسم التكوين على معلمات خاصة ب Azure SQL:

    • مهلة الاستعلام الافتراضية لتنفيذ استعلام SQL هي 5 دقائق، والتي يمكنك تجاوزها.

    • "convertHighWaterMarkToRowVersion" يحسن نهج الكشف عن تغيير علامة المياه العالية. يتم تعيين نهج الكشف عن التغيير في مصدر البيانات. إذا كنت تستخدم نهج الكشف عن التغيير الأصلي، فلن يكون لهذه المعلمة أي تأثير.

    • يتسبب "disableOrderByHighWaterMarkColumn" في استعلام SQL المستخدم بواسطة نهج علامة المياه العالية في حذف عبارة ORDER BY. إذا كنت تستخدم نهج الكشف عن التغيير الأصلي، فلن يكون لهذه المعلمة أي تأثير.

  3. حدد تعيينات الحقول إذا كانت هناك اختلافات في اسم الحقل أو نوعه، أو إذا كنت بحاجة إلى إصدارات متعددة من حقل مصدر في فهرس البحث.

  4. راجع إنشاء مفهرس للحصول على مزيد من المعلومات حول الخصائص الأخرى.

يتم تشغيل المفهرس تلقائيا عند إنشائه. يمكنك منع ذلك عن طريق تعيين "معطل" إلى صحيح. للتحكم في تنفيذ المفهرس، قم بتشغيل مفهرس عند الطلب أو وضعه في جدول زمني.

التحقق من حالة المفهرس

لمراقبة حالة المفهرس ومحفوظات التنفيذ، أرسل طلب الحصول على حالة المفهرس:

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2020-06-30
  Content-Type: application/json  
  api-key: [admin key]

تتضمن الاستجابة الحالة وعدد العناصر التي تمت معالجتها. يجب أن يبدو مشابها للمثال التالي:

    {
        "status":"running",
        "lastResult": {
            "status":"success",
            "errorMessage":null,
            "startTime":"2022-02-21T00:23:24.957Z",
            "endTime":"2022-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        "executionHistory":
        [
            {
                "status":"success",
                "errorMessage":null,
                "startTime":"2022-02-21T00:23:24.957Z",
                "endTime":"2022-02-21T00:36:47.752Z",
                "errors":[],
                "itemsProcessed":1599501,
                "itemsFailed":0,
                "initialTrackingState":null,
                "finalTrackingState":null
            },
            ... earlier history items
        ]
    }

يحتوي سجل التنفيذ على ما يصل إلى 50 من أحدث عمليات التنفيذ المكتملة، والتي يتم فرزها بترتيب زمني عكسي بحيث يأتي التنفيذ الأخير أولا.

فهرسة الصفوف الجديدة والمتغيرة والمحذوفة

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

لتمكين الفهرسة التزايدية، قم بتعيين الخاصية "dataChangeDetectionPolicy" في تعريف مصدر البيانات. تخبر هذه الخاصية المفهرس بآلية تعقب التغييرات المستخدمة في الجدول أو طريقة العرض.

بالنسبة لمفهرسات Azure SQL، هناك نهجان للكشف عن التغيير:

  • "SqlIntegratedChangeTrackingPolicy" (ينطبق على الجداول فقط)

  • "HighWaterMarkChangeDetectionPolicy" (يعمل للجداول وطرق العرض)

نهج تتبع التغيير المتكامل ل SQL

نوصي باستخدام "SqlIntegratedChangeTrackingPolicy" لكفاءتها وقدرتها على تحديد الصفوف المحذوفة.

متطلبات قاعدة البيانات:

  • SQL Server 2012 SP3 والإحدث، إذا كنت تستخدم SQL Server على أجهزة Azure الظاهرية
  • قاعدة بيانات Azure SQL أو مثيل SQL المدار
  • الجداول فقط (لا توجد طرق عرض)
  • في قاعدة البيانات، قم بتمكين تعقب التغييرات للجدول
  • لا يوجد مفتاح أساسي مركب (مفتاح أساسي يحتوي على أكثر من عمود واحد) على الجدول
  • لا توجد فهارس مجمعة على الجدول. كحل بديل، يجب إسقاط أي فهرس متفاوت المسافات وإعادة إنشائه كفهرس غير متفاوت المسافات، ومع ذلك، قد يتأثر الأداء في المصدر مقارنة بوجود فهرس متفاوت المسافات

تتم إضافة نهج الكشف عن التغيير إلى تعريفات مصدر البيانات. لاستخدام هذا النهج، قم بإنشاء مصدر البيانات الخاص بك أو تحديثه كما يلي:

POST https://myservice.search.windows.net/datasources?api-version=2020-06-30
Content-Type: application/json
api-key: admin-key
    {
        "name" : "myazuresqldatasource",
        "type" : "azuresql",
        "credentials" : { "connectionString" : "connection string" },
        "container" : { "name" : "table name" },
        "dataChangeDetectionPolicy" : {
            "@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy"
    }

عند استخدام نهج تتبع التغيير المتكامل SQL، لا تحدد نهج الكشف عن حذف البيانات المنفصلة. يحتوي نهج تعقب التغييرات المتكامل SQL على دعم مضمن لتحديد الصفوف المحذوفة. ومع ذلك، لكي يتم الكشف عن الصفوف المحذوفة تلقائيا، يجب أن يكون مفتاح المستند في فهرس البحث هو نفس المفتاح الأساسي في جدول SQL.

إشعار

عند استخدام TRUNCATE TABLE لإزالة عدد كبير من الصفوف من جدول SQL، يجب إعادة تعيين المفهرس لإعادة تعيين حالة تعقب التغييرات لالتقاط عمليات حذف الصف.

سياسة الكشف عن تغيير علامة المياه العالية

يعتمد نهج الكشف عن التغيير هذا على عمود "علامة مائية عالية" في الجدول أو طريقة العرض التي تلتقط الإصدار أو الوقت عند آخر تحديث للصف. إذا كنت تستخدم طريقة عرض، فيجب عليك استخدام نهج علامة مائية عالية.

يجب أن يفي عمود علامة المياه العالية بالمتطلبات التالية:

  • تحدد كافة عمليات الإدراج قيمة للعمود.
  • تقوم جميع التحديثات لعنصر أيضا بتغيير قيمة العمود.
  • تزداد قيمة هذا العمود مع كل إدراج أو تحديث.
  • يمكن تنفيذ الاستعلامات باستخدام عبارات WHERE و ORDER BY التالية بكفاءة: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

إشعار

نوصي بشدة باستخدام نوع بيانات rowversion للعمود علامة مائية عالية. إذا تم استخدام أي نوع بيانات آخر، فلن يكون تعقب التغييرات مضمونا لتسجيل جميع التغييرات في وجود المعاملات التي يتم تنفيذها بشكل متزامن مع استعلام مفهرس. عند استخدام rowversion في تكوين مع النسخ المتماثلة للقراءة فقط، يجب توجيه المفهرس إلى النسخة المتماثلة الأساسية. يمكن استخدام نسخة متماثلة أساسية فقط لسيناريوهات مزامنة البيانات.

تتم إضافة نهج الكشف عن التغيير إلى تعريفات مصدر البيانات. لاستخدام هذا النهج، قم بإنشاء مصدر البيانات الخاص بك أو تحديثه كما يلي:

POST https://myservice.search.windows.net/datasources?api-version=2020-06-30
Content-Type: application/json
api-key: admin-key
    {
        "name" : "myazuresqldatasource",
        "type" : "azuresql",
        "credentials" : { "connectionString" : "connection string" },
        "container" : { "name" : "table or view name" },
        "dataChangeDetectionPolicy" : {
            "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
            "highWaterMarkColumnName" : "[a rowversion or last_updated column name]"
        }
    }

إشعار

إذا لم يكن الجدول المصدر يحتوي على فهرس على عمود علامة مائية عالية، فقد مهلة الاستعلامات المستخدمة من قبل مفهرس SQL. على وجه الخصوص، تتطلب العبارة ORDER BY [High Water Mark Column] فهرسا لتشغيله بكفاءة عندما يحتوي الجدول على العديد من الصفوف.

convertHighWaterMarkToRowVersion

إذا كنت تستخدم نوع بيانات rowversion لعمود علامة مائية عالية، ففكر في تعيين الخاصية convertHighWaterMarkToRowVersion في تكوين المفهرس. يؤدي تعيين هذه الخاصية إلى true إلى السلوكيات التالية:

  • يستخدم نوع بيانات rowversion لعمود علامة مائية عالية في استعلام SQL المفهرس. يؤدي استخدام نوع البيانات الصحيح إلى تحسين أداء استعلام المفهرس.

  • طرح واحد من قيمة rowversion قبل تشغيل استعلام المفهرس. قد تحتوي طرق العرض ذات الصلات واحد إلى متعدد على صفوف مع قيم rowversion مكررة. يضمن طرح واحد عدم تفويت استعلام المفهرس لهذه الصفوف.

لتمكين هذه الخاصية، قم بإنشاء المفهرس أو تحديثه بالتكوين التالي:

    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "convertHighWaterMarkToRowVersion" : true } }
    }

queryTimeout

إذا واجهت أخطاء المهلة، فقم بتعيين queryTimeout إعداد تكوين المفهرس إلى قيمة أعلى من المهلة الافتراضية البالغة 5 دقائق. على سبيل المثال، لتعيين المهلة إلى 10 دقائق، قم بإنشاء المفهرس أو تحديثه بالتكوين التالي:

    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "queryTimeout" : "00:10:00" } }
    }

disableOrderByHighWaterMarkColumn

يمكنك أيضا تعطيل ORDER BY [High Water Mark Column] عبارة . ومع ذلك، لا يوصى بذلك لأنه إذا تمت مقاطعة تنفيذ المفهرس بسبب خطأ، يجب على المفهرس إعادة معالجة جميع الصفوف إذا تم تشغيله لاحقا، حتى إذا كان المفهرس قد عالج جميع الصفوف تقريبا في وقت مقاطعته. لتعطيل ORDER BY عبارة ، استخدم disableOrderByHighWaterMarkColumn الإعداد في تعريف المفهرس:

    {
     ... other indexer definition properties
     "parameters" : {
            "configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
    }

نهج الكشف عن حذف عمود الحذف المبدئي

عند حذف الصفوف من الجدول المصدر، ربما تريد حذف هذه الصفوف من فهرس البحث أيضا. إذا كنت تستخدم نهج تتبع التغيير المتكامل SQL، يتم الاهتمام بذلك نيابة عنك. ومع ذلك، لا يساعدك نهج تتبع تغيير علامة المياه العالية في الصفوف المحذوفة. ما الذي يجب فعله؟

إذا تمت إزالة الصفوف فعليا من الجدول، فلن يكون لدى Azure الذكاء الاصطناعي Search طريقة للاستدلال على وجود سجلات لم تعد موجودة. ومع ذلك، يمكنك استخدام تقنية "الحذف المبدئي" لحذف الصفوف منطقيا دون إزالتها من الجدول. أضف عمودا إلى الجدول أو اعرض الصفوف وضع علامة عليها على أنها محذوفة باستخدام هذا العمود.

عند استخدام تقنية الحذف المبدئي، يمكنك تحديد نهج الحذف المبدئي كما يلي عند إنشاء مصدر البيانات أو تحديثه:

    {
        …,
        "dataDeletionDetectionPolicy" : {
           "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
           "softDeleteColumnName" : "[a column name]",
           "softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
        }
    }

يجب أن يكون softDeleteMarkerValue سلسلة في تمثيل JSON لمصدر البيانات الخاص بك. استخدم تمثيل السلسلة للقيمة الفعلية. على سبيل المثال، إذا كان لديك عمود عدد صحيح حيث يتم وضع علامة على الصفوف المحذوفة بالقيمة 1، فاستخدم "1". إذا كان لديك عمود BIT حيث يتم وضع علامة على الصفوف المحذوفة بالقيمة المنطقية الحقيقية، فاستخدم القيمة الحرفية "True" للسلسلة أو "true"، فإن الحالة لا تهم.

إذا كنت تقوم بإعداد نهج حذف مبدئي من مدخل Microsoft Azure، فلا تقم بإضافة علامات اقتباس حول قيمة علامة الحذف المبدئي. محتويات الحقل مفهومة بالفعل كسلسلة وسيتم ترجمتها تلقائيا إلى سلسلة JSON نيابة عنك. في الأمثلة أعلاه، اكتب ببساطة 1، True أو true في حقل المدخل.

الأسئلة المتداولة

س: هل يمكنني فهرسة الأعمدة Always Encrypted؟

‏‏لا. أعمدة Always Encrypted غير مدعومة حاليا من قبل مفهرسات Azure الذكاء الاصطناعي Search.

س: هل يمكنني استخدام مفهرس Azure SQL مع قواعد بيانات SQL التي تعمل على أجهزة IaaS الظاهرية في Azure؟

نعم. ومع ذلك، تحتاج إلى السماح لخدمة البحث بالاتصال بقاعدة البيانات الخاصة بك. لمزيد من المعلومات، راجع تكوين اتصال من مفهرس Azure الذكاء الاصطناعي Search إلى SQL Server على جهاز Azure الظاهري.

س: هل يمكنني استخدام مفهرس Azure SQL مع قواعد بيانات SQL التي تعمل محليا؟

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

س: هل يمكنني استخدام نسخة متماثلة ثانوية في مجموعة تجاوز الفشل كمصدر بيانات؟

وهذا مشروط. للفهرسة الكاملة لجدول أو طريقة عرض، يمكنك استخدام نسخة متماثلة ثانوية.

للفهرسة المتزايدة، يدعم Azure الذكاء الاصطناعي Search نهجين للكشف عن التغيير: تتبع التغيير المتكامل ل SQL وعلامة المياه العالية.

في النسخ المتماثلة للقراءة فقط، لا تدعم قاعدة بيانات SQL تعقب التغيير المتكامل. لذلك، يجب عليك استخدام نهج High Water Mark.

توصيتنا القياسية هي استخدام نوع بيانات rowversion لعمود علامة المياه العالية. ومع ذلك، يعتمد استخدام rowversion على الدالة MIN_ACTIVE_ROWVERSION ، وهي غير مدعومة في النسخ المتماثلة للقراءة فقط. لذلك، يجب توجيه المفهرس إلى نسخة متماثلة أساسية إذا كنت تستخدم rowversion.

إذا حاولت استخدام rowversion على نسخة متماثلة للقراءة فقط، فسترى الخطأ التالي:

"استخدام عمود rowversion لتعقب التغييرات غير مدعوم في النسخ المتماثلة الثانوية (للقراءة فقط). يرجى تحديث مصدر البيانات وتحديد اتصال بالنسخة المتماثلة الأساسية للتوفر. الخاصية "قابلية التحديث" لقاعدة البيانات الحالية هي "READ_ONLY".

س: هل يمكنني استخدام عمود بديل غير rowversion لتتبع تغيير علامة المياه العالية؟

لا ينصح به. يسمح rowversion فقط بمزامنة البيانات الموثوق بها. ومع ذلك، اعتمادا على منطق التطبيق الخاص بك، قد يكون آمنا إذا:

  • يمكنك التأكد من أنه عند تشغيل المفهرس، لا توجد معاملات معلقة على الجدول الذي تتم فهرسته (على سبيل المثال، تحدث جميع تحديثات الجدول كدفعة في جدول زمني، ويتم تعيين جدول مفهرس البحث في Azure الذكاء الاصطناعي لتجنب التداخل مع جدول تحديث الجدول).

  • تقوم بشكل دوري بإعادة المراجعة الكاملة لالتقاط أي صفوف فائتة.