إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يستخدم مشغل Azure SQL وظيفة تعقب تغيير SQL لمراقبة جدول SQL للتغييرات وتشغيل دالة عند إنشاء صف أو تحديثه أو حذفه. للحصول على تفاصيل التكوين لتعقب التغييرات للاستخدام مع مشغل Azure SQL، راجع إعداد تعقب التغييرات. للحصول على معلومات حول تفاصيل الإعداد لملحق Azure SQL لوظائف Azure، راجع نظرة عامة على ربط SQL.
يتم تنفيذ قرارات التحجيم لمشغل Azure SQL لخطط الاستهلاك وPremium عبر التحجيم المستند إلى الهدف. لمزيد من المعلومات، راجع التحجيم المستند إلى الهدف ومراجعة خيارات استضافة دالات Azure.
إشعار
يتطلب دعم خطط الاستهلاك إصدار الإصدار 3.1.284 أو أحدث من روابط Azure SQL لوظائف Azure.
نظرة عامة على الوظائف
يستخدم ربط مشغل Azure SQL حلقة استقصاء للتحقق من وجود تغييرات، ما يؤدي إلى تشغيل وظيفة المستخدم عند الكشف عن التغييرات. على مستوى عال، تبدو الحلقة كما يلي:
while (true) {
1. Get list of changes on table - up to a maximum number controlled by the Sql_Trigger_MaxBatchSize setting
2. Trigger function with list of changes
3. Wait for delay controlled by Sql_Trigger_PollingIntervalMs setting
}
تتم معالجة التغييرات بالترتيب الذي تم به إجراء تغييراتها، مع معالجة أقدم التغييرات أولا. بعض الملاحظات حول معالجة التغيير:
- إذا تم إجراء تغييرات على صفوف متعددة في وقت واحد، فإن الترتيب الدقيق لإرسالها إلى الدالة يستند إلى الترتيب الذي تم إرجاعه بواسطة الدالة CHANGETABLE
- يتم "تجميع التغييرات" معا لصف. إذا تم إجراء تغييرات متعددة على صف بين كل تكرار للحلقة، فهناك إدخال تغيير واحد فقط لهذا الصف الذي سيظهر الفرق بين الحالة الأخيرة التي تمت معالجتها والحالة الحالية
- إذا تم إجراء تغييرات على مجموعة من الصفوف، ثم تم إجراء مجموعة أخرى من التغييرات على نصف تلك الصفوف نفسها، تتم معالجة نصف الصفوف التي لم يتم تغييرها مرة ثانية أولا. منطق المعالجة هذا يرجع إلى الملاحظة أعلاه مع التغييرات التي يتم تجميعها في دفعات - سيشاهد المشغل فقط التغيير "الأخير" الذي تم إجراؤه واستخدامه للترتيب الذي يعالجه فيها
إشعار
يمكن لتتبع التغييرات في Azure SQL اكتشاف التغيرات على مستوى الصف في الجداول التي تستخدم تقنيات التشفير مثل التشفير المستمر أو تشفير البيانات الشفاف (TDE). ومع ذلك، فإن مشغل Azure SQL لا يقوم بفك تشفير أو كشف قيم الأعمدة المشفرة في حمولة التغيير. يمكن للمشغل اكتشاف حدوث تغيير لكنه لا يستطيع الوصول إلى البيانات المفككة لتلك الأعمدة.
لمزيد من المعلومات حول تعقب التغييرات وكيفية استخدامها من قبل تطبيقات مثل مشغلات Azure SQL، راجع العمل مع تعقب التغييرات .
للحصول على مثال كامل من طرف إلى طرف لاستخدام مشغل Azure SQL، راجع Respond قاعدة بيانات Azure SQL التغييرات باستخدام دالات Azure.
استخدام المثال
تتوفر المزيد من العينات لمشغل Azure SQL في مستودع GitHub.
يشير المثال إلى ToDoItem فئة وجدول قاعدة بيانات مطابق:
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
يتم تمكين تعقب التغييرات على قاعدة البيانات وعلى الجدول:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
يرتبط مشغل SQL ب IReadOnlyList<SqlChange<T>>، قائمة الكائنات لكل منها SqlChange خاصيتين:
-
العنصر: العنصر الذي تم تغييره. يجب أن يتبع نوع العنصر مخطط الجدول كما هو ملاحظ في
ToDoItemالفئة. -
العملية: قيمة من
SqlChangeOperationقائمة التعداد. والقيم المحتملة هيInsertوUpdateوDelete.
يوضح المثال التالي دالة C# التي يتم استدعاؤها عند وجود تغييرات على ToDo الجدول:
using System;
using System.Collections.Generic;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace AzureSQL.ToDo
{
public static class ToDoTrigger
{
[Function("ToDoTrigger")]
public static void Run(
[SqlTrigger("[dbo].[ToDo]", "SqlConnectionString")]
IReadOnlyList<SqlChange<ToDoItem>> changes,
FunctionContext context)
{
var logger = context.GetLogger("ToDoTrigger");
foreach (SqlChange<ToDoItem> change in changes)
{
ToDoItem toDoItem = change.Item;
logger.LogInformation($"Change operation: {change.Operation}");
logger.LogInformation($"Id: {toDoItem.Id}, Title: {toDoItem.title}, Url: {toDoItem.url}, Completed: {toDoItem.completed}");
}
}
}
}
تتوفر المزيد من العينات لمشغل Azure SQL في مستودع GitHub.
يشير المثال إلى ToDoItem فئة وفئة SqlChangeToDoItemSqlChangeOperation تعداد وجدول قاعدة بيانات مطابق:
في ملف ToDoItem.javaمنفصل:
package com.function;
import java.util.UUID;
public class ToDoItem {
public UUID Id;
public int order;
public String title;
public String url;
public boolean completed;
public ToDoItem() {
}
public ToDoItem(UUID Id, int order, String title, String url, boolean completed) {
this.Id = Id;
this.order = order;
this.title = title;
this.url = url;
this.completed = completed;
}
}
في ملف SqlChangeToDoItem.javaمنفصل:
package com.function;
public class SqlChangeToDoItem {
public ToDoItem item;
public SqlChangeOperation operation;
public SqlChangeToDoItem() {
}
public SqlChangeToDoItem(ToDoItem Item, SqlChangeOperation Operation) {
this.Item = Item;
this.Operation = Operation;
}
}
في ملف SqlChangeOperation.javaمنفصل:
package com.function;
import com.google.gson.annotations.SerializedName;
public enum SqlChangeOperation {
@SerializedName("0")
Insert,
@SerializedName("1")
Update,
@SerializedName("2")
Delete;
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
يتم تمكين تعقب التغييرات على قاعدة البيانات وعلى الجدول:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
يرتبط مشغل SQL ب SqlChangeToDoItem[]، صفيف من الكائنات لكل منها SqlChangeToDoItem خاصيتين:
-
العنصر: العنصر الذي تم تغييره. يجب أن يتبع نوع العنصر مخطط الجدول كما هو ملاحظ في
ToDoItemالفئة. -
العملية: قيمة من
SqlChangeOperationقائمة التعداد. والقيم المحتملة هيInsertوUpdateوDelete.
يوضح المثال التالي دالة Java التي يتم استدعاؤها عند وجود تغييرات في ToDo الجدول:
package com.function;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.sql.annotation.SQLTrigger;
import com.function.Common.SqlChangeToDoItem;
import com.google.gson.Gson;
import java.util.logging.Level;
public class ProductsTrigger {
@FunctionName("ToDoTrigger")
public void run(
@SQLTrigger(
name = "todoItems",
tableName = "[dbo].[ToDo]",
connectionStringSetting = "SqlConnectionString")
SqlChangeToDoItem[] todoItems,
ExecutionContext context) {
context.getLogger().log(Level.INFO, "SQL Changes: " + new Gson().toJson(changes));
}
}
تتوفر المزيد من العينات لمشغل Azure SQL في مستودع GitHub.
يشير المثال إلى ToDoItem جدول قاعدة بيانات:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
يتم تمكين تعقب التغييرات على قاعدة البيانات وعلى الجدول:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
يرتبط مشغل SQL ب todoChanges، قائمة الكائنات لكل منها خاصيتين:
- العنصر: العنصر الذي تم تغييره. ستتبع بنية العنصر مخطط الجدول.
-
العملية: القيم المحتملة هي
InsertوUpdateو.Delete
يوضح المثال التالي دالة PowerShell التي يتم استدعاؤها عند وجود تغييرات في ToDo الجدول.
فيما يلي هو ربط البيانات في ملف function.json:
{
"name": "todoChanges",
"type": "sqlTrigger",
"direction": "in",
"tableName": "dbo.ToDo",
"connectionStringSetting": "SqlConnectionString"
}
قسم التكوين يشرح هذه الخصائص.
فيما يلي نموذج التعليمات البرمجية PowerShell للدالة في run.ps1 الملف:
using namespace System.Net
param($todoChanges)
# The output is used to inspect the trigger binding parameter in test methods.
# Use -Compress to remove new lines and spaces for testing purposes.
$changesJson = $todoChanges | ConvertTo-Json -Compress
Write-Host "SQL Changes: $changesJson"
تتوفر المزيد من العينات لمشغل Azure SQL في مستودع GitHub.
يشير المثال إلى ToDoItem جدول قاعدة بيانات:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
يتم تمكين تعقب التغييرات على قاعدة البيانات وعلى الجدول:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
يربط todoChangesمشغل SQL ، صفيف من الكائنات لكل منها خاصيتين:
- العنصر: العنصر الذي تم تغييره. ستتبع بنية العنصر مخطط الجدول.
-
العملية: القيم المحتملة هي
InsertوUpdateو.Delete
يوضح المثال التالي دالة JavaScript التي يتم استدعاؤها عند وجود تغييرات في ToDo الجدول.
فيما يلي هو ربط البيانات في ملف function.json:
{
"name": "todoChanges",
"type": "sqlTrigger",
"direction": "in",
"tableName": "dbo.ToDo",
"connectionStringSetting": "SqlConnectionString"
}
قسم التكوين يشرح هذه الخصائص.
فيما يلي نموذج التعليمات البرمجية JavaScript للدالة في index.js الملف:
module.exports = async function (context, todoChanges) {
context.log(`SQL Changes: ${JSON.stringify(todoChanges)}`)
}
تتوفر المزيد من العينات لمشغل Azure SQL في مستودع GitHub.
يشير المثال إلى ToDoItem جدول قاعدة بيانات:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
يتم تمكين تعقب التغييرات على قاعدة البيانات وعلى الجدول:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
يرتبط مشغل SQL بمتغير todoChanges، قائمة الكائنات لكل منها خاصيتين:
- العنصر: العنصر الذي تم تغييره. ستتبع بنية العنصر مخطط الجدول.
-
العملية: القيم المحتملة هي
InsertوUpdateو.Delete
يوضح المثال التالي دالة Python التي يتم استدعاؤها عند وجود تغييرات على ToDo الجدول.
فيما يلي نموذج التعليمات البرمجية python لملف function_app.py:
import json
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="ToDoTrigger")
@app.sql_trigger(arg_name="todo",
table_name="ToDo",
connection_string_setting="SqlConnectionString")
def todo_trigger(todo: str) -> None:
logging.info("SQL Changes: %s", json.loads(todo))
السمات
تستخدم مكتبة C# السمة SqlTrigger للإعلان عن مشغل SQL على الدالة التي تحتوي على الخصائص التالية:
| خاصية السمة | الوصف |
|---|---|
| اسم الجدول | مطلوب. اسم الجدول الذي يراقبه المشغل. |
| ConnectionStringSetting | مطلوب. اسم إعداد تطبيق يحتوي على سلسلة الاتصال لقاعدة البيانات التي تحتوي على الجدول الذي تمت مراقبته للتغييرات. يتوافق اسم إعداد سلسلة الاتصال مع إعداد التطبيق (في local.settings.json للتطوير المحلي) الذي يحتوي على سلسلة الاتصال بـ Azure SQL أو مثيل SQL Server. |
| LeasesTableName | اختياري. اسم الجدول المستخدم لتخزين عقود الإيجار. إذا لم يتم تحديده، فسيكون اسم جدول الإيجارات Leases_{FunctionId}_{TableId}. يمكن العثور على مزيد من المعلومات حول كيفية إنشاء هذا هنا. |
تعليقات توضيحية
في مكتبة وقت تشغيل وظائف Java، استخدم @SQLTrigger التعليق التوضيحي (com.microsoft.azure.functions.sql.annotation.SQLTrigger) على المعلمات التي تأتي قيمتها من Azure SQL. يدعم هذا التعليق التوضيحي العناصر التالية:
| العنصر | الوصف |
|---|---|
| الاسم | مطلوب. اسم المعلمة التي يرتبط بها المشغل. |
| اسم الجدول | مطلوب. اسم الجدول الذي يراقبه المشغل. |
| connectionStringSetting | مطلوب. اسم إعداد تطبيق يحتوي على سلسلة الاتصال لقاعدة البيانات التي تحتوي على الجدول الذي تمت مراقبته للتغييرات. يتوافق اسم إعداد سلسلة الاتصال مع إعداد التطبيق (في local.settings.json للتطوير المحلي) الذي يحتوي على سلسلة الاتصال بـ Azure SQL أو مثيل SQL Server. |
| LeasesTableName | اختياري. اسم الجدول المستخدم لتخزين عقود الإيجار. إذا لم يتم تحديده، فسيكون اسم جدول الإيجارات Leases_{FunctionId}_{TableId}. يمكن العثور على مزيد من المعلومات حول كيفية إنشاء هذا هنا. |
التكوين
يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.
| خاصية function.json | الوصف |
|---|---|
| الاسم | مطلوب. اسم المعلمة التي يرتبط بها المشغل. |
| النوع | مطلوب. يجب تعيينه إلى sqlTrigger. |
| الاتجاه | مطلوب. يجب تعيينه إلى in. |
| اسم الجدول | مطلوب. اسم الجدول الذي يراقبه المشغل. |
| connectionStringSetting | مطلوب. اسم إعداد تطبيق يحتوي على سلسلة الاتصال لقاعدة البيانات التي تحتوي على الجدول الذي تمت مراقبته للتغييرات. يتوافق اسم إعداد سلسلة الاتصال مع إعداد التطبيق (في local.settings.json للتطوير المحلي) الذي يحتوي على سلسلة الاتصال بـ Azure SQL أو مثيل SQL Server. |
| LeasesTableName | اختياري. اسم الجدول المستخدم لتخزين عقود الإيجار. إذا لم يتم تحديده، فسيكون اسم جدول الإيجارات Leases_{FunctionId}_{TableId}. يمكن العثور على مزيد من المعلومات حول كيفية إنشاء هذا هنا. |
التكوين الاختياري
يمكن تكوين الإعدادات الاختيارية التالية لمشغل SQL للتطوير المحلي أو عمليات النشر السحابية.
host.json
يصف هذا القسم إعدادات التكوين المتوفرة لهذا الربط في الإصدار 2.x والإصدارات الأحدث. تنطبق الإعدادات في ملف host.json على جميع الوظائف في مثيل تطبيق الوظائف. لمزيد من المعلومات حول إعدادات تكوين تطبيق الوظائف، راجع مرجعhost.json ل دالات Azure.
| الإعدادات | افتراضي | الوصف |
|---|---|---|
| MaxBatchSize | 100 | الحد الأقصى لعدد التغييرات التي تمت معالجتها مع كل تكرار لحلقة المشغل قبل إرسالها إلى الدالة المشغلة. |
| IntervalMs للاستطلاع | 1000 | التأخير بالمللي ثانية بين معالجة كل دفعة من التغييرات. (1000 مللي ثانية هي ثانية 1) |
| MaxChangesPerWorker | 1000 | الحد الأعلى لعدد التغييرات المعلقة في جدول المستخدم المسموح بها لكل عامل تطبيق. إذا تجاوز عدد التغييرات هذا الحد، فقد يؤدي ذلك إلى توسيع النطاق. ينطبق الإعداد فقط على Azure Function Apps مع تمكين التحجيم المستند إلى وقت التشغيل. |
مثال host.json الملف
فيما يلي مثال على ملف host.json مع الإعدادات الاختيارية:
{
"version": "2.0",
"extensions": {
"Sql": {
"MaxBatchSize": 300,
"PollingIntervalMs": 1000,
"MaxChangesPerWorker": 100
}
},
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
},
"logLevel": {
"default": "Trace"
}
}
}
local.setting.json
يخزن الملف local.settings.json إعدادات التطبيق وإعداداته المستخدمة من قبل أدوات التطوير المحلية. يتم استخدام الإعدادات الموجودة في الملف local.settings.json فقط عند تشغيل المشروع محليًا. عند نشر مشروعك إلى Azure، تأكد أيضا من إضافة أي إعدادات مطلوبة إلى إعدادات التطبيق لتطبيق الوظائف.
هام
نظرًا إلى احتمالية احتواء الملف local.settings.json على أسرار، مثل سلاسل الاتصال، يجب عدم تخزينها في مستودع بعيد. توفر الأدوات التي تدعم Functions طرقا لمزامنة الإعدادات في ملف local.settings.json مع إعدادات التطبيق في تطبيق الوظائف الذي يتم نشر مشروعك عليه.
| الإعدادات | افتراضي | الوصف |
|---|---|---|
| Sql_Trigger_BatchSize | 100 | الحد الأقصى لعدد التغييرات التي تمت معالجتها مع كل تكرار لحلقة المشغل قبل إرسالها إلى الدالة المشغلة. |
| Sql_Trigger_PollingIntervalMs | 1000 | التأخير بالمللي ثانية بين معالجة كل دفعة من التغييرات. (1000 مللي ثانية هي ثانية 1) |
| Sql_Trigger_MaxChangesPerWorker | 1000 | الحد الأعلى لعدد التغييرات المعلقة في جدول المستخدم المسموح بها لكل عامل تطبيق. إذا تجاوز عدد التغييرات هذا الحد، فقد يؤدي ذلك إلى توسيع النطاق. ينطبق الإعداد فقط على Azure Function Apps مع تمكين التحجيم المستند إلى وقت التشغيل. |
مثال local.settings.json الملف
فيما يلي مثال local.settings.json الملف مع الإعدادات الاختيارية:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"SqlConnectionString": "",
"Sql_Trigger_MaxBatchSize": 300,
"Sql_Trigger_PollingIntervalMs": 1000,
"Sql_Trigger_MaxChangesPerWorker": 100
}
}
إعداد تعقب التغييرات (مطلوب)
يتطلب إعداد تعقب التغييرات للاستخدام مع مشغل Azure SQL خطوتين. يمكن إكمال هذه الخطوات من أي أداة SQL تدعم تشغيل الاستعلامات، بما في ذلك تعليمة Visual Studio برمجية أو SQL Server Management Studio.
تمكين تعقب التغيير على قاعدة بيانات SQL، واستبدال
your database nameباسم قاعدة البيانات حيث يوجد الجدول الذي سيتم مراقبته:ALTER DATABASE [your database name] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);CHANGE_RETENTIONيحدد الخيار الفترة الزمنية التي يتم فيها الاحتفاظ بمعلومات تعقب التغييرات (محفوظات التغيير). قد يؤثر الاحتفاظ بمحفوظات التغيير بواسطة قاعدة بيانات SQL على وظيفة المشغل. على سبيل المثال، إذا تم إيقاف تشغيل Azure Function لعدة أيام ثم استئنافها، فستحتوي قاعدة البيانات على التغييرات التي حدثت في اليومين الماضيين في مثال الإعداد أعلاه.AUTO_CLEANUPيتم استخدام الخيار لتمكين مهمة التنظيف التي تزيل معلومات تعقب التغييرات القديمة أو تعطيلها. إذا كانت هناك مشكلة مؤقتة تمنع المشغل من التشغيل، يمكن أن يكون إيقاف تشغيل التنظيف التلقائي مفيدا لإيقاف إزالة المعلومات الأقدم من فترة الاستبقاء مؤقتا حتى يتم حل المشكلة.تتوفر المزيد من المعلومات حول خيارات تعقب التغييرات في وثائق SQL.
تمكين تعقب التغييرات على الجدول، واستبدال
your table nameباسم الجدول المطلوب مراقبته (تغيير المخطط إذا كان ذلك مناسبا):ALTER TABLE [dbo].[your table name] ENABLE CHANGE_TRACKING;يحتاج المشغل إلى الوصول للقراءة على الجدول الذي تتم مراقبته للتغييرات وإلى جداول نظام تعقب التغييرات. يحتوي كل مشغل دالة على جدول تعقب تغيير مقترن وجدول تأجير في مخطط
az_func. يتم إنشاء هذه الجداول بواسطة المشغل إذا لم تكن موجودة بعد. يتوفر مزيد من المعلومات حول بنيات البيانات هذه في وثائق مكتبة ربط Azure SQL.
منح أذونات لمشغل Azure SQL
عند استخدام مشغل Azure SQL مع دالات Azure (بما في ذلك عند استخدام الهوية المدارة )، يجب منح كيان قاعدة البيانات أذونات إضافية تتجاوز تلك المطلوبة لروابط الإدخال والإخراج.
db_datareader الأدوار المستخدمة db_datawriter لربط الإدخال والإخراج غير كافية لمشغلات SQL.
يعتمد مشغل Azure SQL على تعقب تغيير SQL للكشف عن التغييرات ويستخدم جداول الحالة الداخلية في مخطط az_func. للعمل بشكل صحيح، الأذونات التالية مطلوبة:
امنح أذونات الهوية لإنشاء المخطط والجداول المستخدمة داخليا بواسطة المشغل:
GRANT CREATE TABLE TO [<UserOrManagedIdentity>]; GRANT CREATE SCHEMA TO [<UserOrManagedIdentity>];منح حق الوصول للقراءة وتعقب التغيير على الجدول المراقب:
GRANT SELECT ON [<TableName>] TO [<UserOrManagedIdentity>]; GRANT VIEW CHANGE TRACKING ON [<TableName>] TO [<UserOrManagedIdentity>];az_funcإنشاء المخطط المستخدم داخليا بواسطة المشغل ومنح أذونات عليه:CREATE SCHEMA az_func; GO GRANT ALTER ON SCHEMA::az_func TO [<UserOrManagedIdentity>]; GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::az_func TO [<UserOrManagedIdentity>];
تمكين التحجيم المستند إلى وقت التشغيل
اختياريا، يمكن توسيع نطاق الدالات تلقائيا استنادا إلى عدد التغييرات المعلقة التي سيتم معالجتها في جدول المستخدم. للسماح لوظائفك بالتحجيم بشكل صحيح على خطة Premium عند استخدام مشغلات SQL، تحتاج إلى تمكين مراقبة مقياس وقت التشغيل.
في مدخل Microsoft Azure، في تطبيق الوظائف، حدد Configuration.
في علامة التبويب إعدادات وقت تشغيل الدالة ، لمراقبة مقياس وقت التشغيل، حدد تشغيل.
إعادة محاولة الدعم
تتوفر مزيد من المعلومات حول جداول إعادة محاولة تشغيل مشغل SQL وجداولالإيجار في مستودع GitHub.
إعادة محاولة بدء التشغيل
إذا حدث استثناء أثناء بدء التشغيل، فسيحاول وقت تشغيل المضيف تلقائيا إعادة تشغيل مستمع المشغل باستخدام استراتيجية التراجع الأسي. تستمر عمليات إعادة المحاولة هذه حتى يتم بدء تشغيل وحدة الاستماع بنجاح أو إلغاء بدء التشغيل.
إعادة محاولة الاتصال المقطوعة
إذا بدأت الدالة بنجاح ولكن بعد ذلك يتسبب خطأ في انقطاع الاتصال (مثل الخادم غير متصل) ثم تستمر الدالة في محاولة إعادة فتح الاتصال حتى يتم إيقاف الدالة أو نجاح الاتصال. إذا تمت إعادة تأسيس الاتصال بنجاح، فإنه يلتقط معالجة التغييرات من حيث توقفت.
لاحظ أن عمليات إعادة المحاولة هذه خارج منطق إعادة محاولة الاتصال الخامل المضمن الذي يحتوي عليه SqlClient والذي يمكن تكوينه باستخدام ConnectRetryCount خيارات سلسلة الاتصال و ConnectRetryInterval. تتم محاولة إعادة محاولة الاتصال الخامل المضمنة أولا وإذا فشلت هذه المحاولات في إعادة الاتصال، يحاول ربط المشغل إعادة تأسيس الاتصال نفسه.
إعادة محاولة استثناء الدالة
إذا حدث استثناء في وظيفة المستخدم عند معالجة التغييرات، تتم إعادة محاولة دفعة الصفوف التي تتم معالجتها حاليا مرة أخرى في 60 ثانية. تتم معالجة التغييرات الأخرى كالمعتاد خلال هذا الوقت، ولكن يتم تجاهل الصفوف في الدفعة التي تسببت في الاستثناء حتى انقضاء فترة المهلة.
إذا فشل تنفيذ الدالة خمس مرات في صف لصف معين، تجاهل هذا الصف تماما لجميع التغييرات المستقبلية. نظرا لأن الصفوف في الدفعة ليست محددة، فقد ينتهي الأمر بالصفوف في دفعة فاشلة في دفعات مختلفة في استدعاءات لاحقة. وهذا يعني أنه لن يتم بالضرورة تجاهل جميع الصفوف في الدفعة الفاشلة. إذا كانت الصفوف الأخرى في الدفعة هي الصفوف التي تسبب الاستثناء، فقد ينتهي الأمر بالصفوف "الجيدة" في دفعة مختلفة لا تفشل في استدعاءات المستقبل.
الاتصالات
يتم تعيين connectionStringSetting الخاصية على مفتاح في إعدادات التطبيق يعيد قيمة تستخدم في وقت تشغيل الدوال للاتصال بقاعدة بيانات Azure SQL أو SQL Server المستخدمة في الامتداد. تعتمد قيمة إعداد خاصية الاتصال على نوع الاتصال:
-
اتصال الهوية المدار:
connectionStringSettingتعيد الخاصية سلسلة سلسلة الاتصال تستخدمهاAuthentication=Active Directory Managed Identityللمصادقة بدون أسرار. يمكنك استخدام هوية مدارة معينة من قبل النظام أو معينة من قبل المستخدم. لمزيد من المعلومات، راجع Connect a function app to Azure SQL with managed identity و Define identity connections. -
Key Vault reference:
connectionStringSettingإعداد الخاصية يعيد مرجع Azure Key Vault إلى الموقع الذي يتم فيه صيانة سلسلة الاتصال بشكل مركزي. لمزيد من المعلومات، راجع تعريف اتصالات Key Vault. -
مرجع App Configuration:
connectionStringSettingإعداد الخاصية يعيد مرجع تكوين Azure App يعيد سلسلة سلسلة الاتصال أو مرجع Key Vault. لمزيد من المعلومات، راجع تكوين Azure App في مقالة الاتصالات. -
Connection string:
connectionStringSettingإعداد الخاصية يعيد سلسلة سلسلة الاتصال الحقيقية في SQL. نظرا لأن سلسلة الاتصال قد يحتوي على بيانات اعتماد، يجب عليك استخدام اتصال Managed Identity أو على الأقل تخزين سلسلة الاتصال في Key Vault. لمزيد من المعلومات، راجع تعريف الروابط.
لمعرفة المزيد عن روابط الbindings، راجع إدارة الاتصالات في دالات Azure.
يتم تمرير سلسلة الاتصال إلى Microsoft. Data.SqlClient ويدعم جميع الكلمات المفتاحية المعرفة في وثائق SqlClient ConnectionString. تشمل الكلمات الأساسية البارزة ما يلي:
-
Authentication: Connect to Azure SQL with Microsoft Entra ID. ضبطه علىActive Directory Managed Identityالهويات المدارة. لمزيد من المعلومات، راجع Connect a function app to Azure SQL with managed identity. -
Command Timeout: انتظر وقتا محددا بالثواني قبل إنهاء الاستعلام (الافتراضي 30 ثانية). -
ConnectRetryCount: قم بمحاولات إعادة الاتصال الإضافية تلقائيا، خاصة في المستوى الخالي من الخادم في قاعدة بيانات Azure SQL (الافتراضي 1). -
Pooling: إعادة استخدام الاتصالات مع قاعدة البيانات لتحسين الأداء (الافتراضيtrue). تتضمنConnection Lifetimeالإعدادات الإضافية لتجميع الاتصال وMax Pool Sizeو.Min Pool Sizeتعرف على المزيد في وثائق ADO.NET.