Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
W tym artykule opisano sposób konfigurowania funkcji przesyłania strumieniowego zdarzeń zmian (CES) wprowadzonej w programie SQL Server 2025 (17.x), usłudze Azure SQL Database i usłudze Azure SQL Managed Instance.
Uwaga / Notatka
Strumieniowanie zmian zdarzeń jest obecnie dostępne w wersji zapoznawczej dla:
- SQL Server 2025 (wymagana konfiguracja w zakresie bazy danych dla funkcjonalności w wersji zapoznawczej).
- Azure SQL Database (funkcja w wersji zapoznawczej nie wymaga konfiguracji w zakresie bazy danych).
- Usługa Azure SQL Managed Instance (z programem SQL Server 2025 lub zawsze aktualizowane zasady aktualizacji, konfiguracja zakresu bazy danych funkcji w wersji zapoznawczej nie jest wymagana). W trakcie korzystania z wersji zapoznawczej ta funkcja może ulec zmianie. Aby uzyskać informacje o bieżącej obsłudze, zobacz Ograniczenia.
Przegląd
Aby skonfigurować i użyć strumieniowego przesyłania zdarzeń zmiany, wykonaj następujące kroki:
- Użyj istniejącej lub utwórz nową przestrzeń nazw usługi Azure Event Hubs i wystąpienie usługi Event Hubs. Wystąpienie usługi Event Hubs odbiera zdarzenia.
- Włącz przesyłanie strumieniowe zdarzeń zmian dla bazy danych użytkownika.
- Utwórz grupę strumienia zdarzeń. W tej grupie skonfiguruj lokalizację docelową, poświadczenia, limity rozmiaru komunikatów i schemat partycjonowania.
- Dodaj jedną lub więcej tabel do grupy strumienia zdarzeń.
Każdy krok został szczegółowo opisany w poniższych sekcjach tego artykułu.
Wymagania wstępne
Aby skonfigurować przesyłanie strumieniowe zmian zdarzeń, potrzebne są następujące zasoby, uprawnienia i konfiguracja:
- Przestrzeń nazw usługi Azure Event Hubs
- Wystąpienie usługi Azure Event Hubs
- Nazwa hosta usługi Azure Event Hubs
- Identyfikator logowania w roli db_owner lub z uprawnieniem CONTROL DATABASE dla bazy danych, w której zamierzasz włączyć funkcję CES.
- W przypadku programu SQL Server 2025 (17.x) włącz konfigurację w zakresie bazy danych funkcji w wersji zapoznawczej. Usługa Azure SQL Database nie wymaga tej konfiguracji.
- W przypadku usługi Azure SQL Database skonfigurowanej do używania reguł zapory ruchu wychodzącego oraz usługi Azure SQL Managed Instance z konfiguracją sieci wirtualnej: porty zapory do otwarcia
- W przypadku usługi Azure SQL Database skonfigurowanej do korzystania z obwodu zabezpieczeń sieci zezwalaj na dostęp do docelowej usługi Azure Event Hubs:
W przypadku korzystania ze strumieniowania zdarzeń zmiany w Azure SQL Managed Instance, instancja musi być skonfigurowana zgodnie z polityką aktualizacji SQL Server 2025 lub Always-up-to-date.
Konfigurowanie usługi Azure Event Hubs
Aby dowiedzieć się, jak utworzyć usługę Azure Event Hubs, zobacz Tworzenie centrum zdarzeń przy użyciu witryny Azure Portal.
Kontrola dostępu do usługi Azure Event Hubs
Skonfiguruj kontrolę dostępu dla zasobu SQL w usłudze Azure Event Hubs. Uwierzytelnianie Microsoft Entra to najbezpieczniejsza metoda, jednak obecnie jest obsługiwane tylko przez usługę Azure SQL Database do użytku z CES. Chociaż używanie zasad dostępu współdzielonego jest obsługiwane zarówno przez usługę Azure SQL Database, jak i program SQL Server 2025, użyj jej tylko w usłudze Azure SQL Database, jeśli uwierzytelnianie microsoft Entra nie jest opcją.
- Kontrola dostępu oparta na zasadach dostępu współdzielonego
- Kontrola dostępu oparta na usłudze Microsoft Entra
Zasady dostępu współdzielonego zapewniają uwierzytelnianie i autoryzację w usłudze Azure Event Hubs. Każda zasada dostępu współdzielonego wymaga nazwy, poziomu dostępu (Manage, Send lub Listen) i powiązania zasobu (przestrzeni nazw usługi Event Hubs lub określonego wystąpienia Event Hub). Zasady na poziomie wystąpienia zapewniają większe bezpieczeństwo, postępując zgodnie z zasadą minimalnych uprawnień. Zarówno program SQL Server 2025, jak i usługa Azure SQL Database obsługują tę metodę. Jednak używaj uwierzytelniania firmy Microsoft Entra zawsze, gdy jest to możliwe w usłudze Azure SQL Database, ponieważ zapewnia lepsze zabezpieczenia.
Jeśli używasz zasad dostępu współdzielonego do uwierzytelniania i autoryzacji, klienci wysyłający dane do centrum zdarzeń platformy Azure muszą podać nazwę zasad, których chcą użyć, wraz z tokenem SAS wygenerowanym na podstawie zasad lub klucza usługi zasad.
Tokeny SAS mają przewagę zabezpieczeń nad kluczami usług: jeśli klient zostanie naruszony, token SAS jest ważny tylko do momentu wygaśnięcia, a naruszony klient nie może utworzyć nowych tokenów SAS. Z kolei klucze usługi nie wygasają automatycznie. Naruszony klient z kluczem usługi może generować nowe tokeny SAS przy użyciu klucza.
Aby skonfigurować przesyłanie strumieniowe do usługi Azure Event Hubs przy użyciu protokołu AMQP (domyślnego natywnego protokołu usługi Azure Event Hubs), utwórz lub ponownie użyj zasad dostępu współdzielonego z uprawnieniem Wyślij i wygeneruj token SAS. Token można wygenerować programowo przy użyciu dowolnego języka programowania lub skryptu. W przykładzie w tym artykule pokazano, jak wygenerować token SAS na podstawie nowych lub istniejących zasad przy użyciu skryptu programu PowerShell.
Uwaga / Notatka
Aby zwiększyć bezpieczeństwo, należy użyć kontroli dostępu opartej na usłudze Microsoft Entra, gdy tylko jest to możliwe, jest zdecydowanie zalecane. Jeśli kontrola dostępu oparta na usłudze Microsoft Entra nie jest możliwa i używasz zasad dostępu współdzielonego, użyj uwierzytelniania tokenu SAS zamiast uwierzytelniania opartego na kluczach usługi, jeśli jest to możliwe. Najlepsze rozwiązania dotyczące tokenów SAS obejmują zdefiniowanie odpowiedniego minimalnego wymaganego zakresu dostępu, ustawienie krótkiego terminu wygaśnięcia i regularne obracanie klucza SAS. W przypadku uwierzytelniania opartego na kluczach okresowo obracaj klucze. Bezpiecznie przechowuj wszystkie tajemnice przy użyciu Azure Key Vault lub podobnej usługi.
Instalowanie wymaganych modułów
Do zarządzania zasobami usługi Azure Event Hubs za pomocą skryptów programu PowerShell potrzebne są następujące moduły:
- Moduł Az programu PowerShell
- Moduł Az.EventHub programu PowerShell
Poniższy skrypt instaluje wymagane moduły:
Install-Module -Name Az -AllowClobber -Scope CurrentUser -Repository PSGallery -Force
Install-Module -Name Az.EventHub -Scope CurrentUser -Force
Jeśli masz już wymagane moduły i chcesz zaktualizować je do najnowszej wersji, uruchom następujący skrypt:
Update-Module -Name Az -Force
Update-Module -Name Az.EventHub -Force
Łączenie się z platformą Azure
Możesz użyć usługi Azure Cloud Shell lub zalogować się i ustawić kontekst subskrypcji.
Aby korzystać z usługi Azure Cloud Shell, zapoznaj się z artykułem Logowanie do platformy Azure.
Definiowanie zasad
Aby utworzyć token SAS, potrzebujesz zasad z uprawnieniami do wysyłania . Masz dwie możliwości:
Tworzenie nowych zasad
lub
Korzystanie z istniejących zasad
Uwaga / Notatka
Polityka musi mieć uprawnienia Wyślij.
Tworzenie tokenu SAS dla nowych lub istniejących zasad
Podczas tworzenia nowych zasad upewnij się, że ma ona prawo do wysyłania . Jeśli używasz istniejącej polityki, sprawdź, czy zawiera prawo do wysyłania.
Poniższy skrypt tworzy nowe zasady lub pobiera istniejącą, a następnie generuje pełny token SAS w formacie nagłówka autoryzacji HTTP.
Zastąp wartości w nawiasach kątowych (<value>) wartościami odpowiednimi dla twojego środowiska.
function Generate-SasToken {
$subscriptionId = "<Azure-Subscription-ID>"
$resourceGroupName = "<Resource-group-name>"
$namespaceName = "<Azure-Event-Hub-Namespace-name>"
$eventHubName = "<Azure-Event-Hubs-instance-name>"
$policyName = "<Policy-name>"
$tokenExpireInDays = "<number-of-days-token-will-be-valid>"
# Modifying the rest of the script is not necessary.
# Login to Azure and set Azure Subscription.
Connect-AzAccount
# Get current context and check subscription
$currentContext = Get-AzContext
if ($currentContext.Subscription.Id -ne $subscriptionId) {
Write-Host "Current subscription is $($currentContext.Subscription.Id), switching to $subscriptionId..."
Set-AzContext -SubscriptionId $subscriptionId | Out-Null
} else {
Write-Host "Already using subscription $subscriptionId."
}
# Try to get the authorization policy (it should have Send rights)
$rights = @("Send")
$policy = Get-AzEventHubAuthorizationRule -ResourceGroupName $resourceGroupName -NamespaceName $namespaceName -EventHubName $eventHubName -AuthorizationRuleName $policyName -ErrorAction SilentlyContinue
# If the policy does not exist, create it
if (-not $policy) {
Write-Output "Policy '$policyName' does not exist. Creating it now..."
# Create a new policy with the Manage, Send and Listen rights
$policy = New-AzEventHubAuthorizationRule -ResourceGroupName $resourceGroupName -NamespaceName $namespaceName -EventHubName $eventHubName -AuthorizationRuleName $policyName -Rights $rights
if (-not $policy) {
throw "Error. Policy was not created."
}
Write-Output "Policy '$policyName' created successfully."
} else {
Write-Output "Policy '$policyName' already exists."
}
if ("Send" -in $policy.Rights) {
Write-Host "Authorization rule has required right: Send."
} else {
throw "Authorization rule is missing Send right."
}
$keys = Get-AzEventHubKey -ResourceGroupName $resourceGroupName -NamespaceName $namespaceName -EventHubName $eventHubName -AuthorizationRuleName $policyName
if (-not $keys) {
throw "Could not obtain Azure Event Hub Key. Script failed and will end now."
}
if (-not $keys.PrimaryKey) {
throw "Could not obtain Primary Key. Script failed and will end now."
}
# Get the Primary Key of the Shared Access Policy
$primaryKey = ($keys.PrimaryKey)
Write-Host $primaryKey
## Check that the primary key is not empty.
# Define a function to create a SAS token (similar to the C# code provided)
function Create-SasToken {
param (
[string]$resourceUri, [string]$keyName, [string]$key
)
$sinceEpoch = [datetime]::UtcNow - [datetime]"1970-01-01"
$expiry = [int]$sinceEpoch.TotalSeconds + ((60 * 60 * 24) * [int]$tokenExpireInDays) # seconds since Unix epoch
$stringToSign = [System.Web.HttpUtility]::UrlEncode($resourceUri) + "`n" + $expiry
$hmac = New-Object System.Security.Cryptography.HMACSHA256
$hmac.Key = [Text.Encoding]::UTF8.GetBytes($key)
$signature = [Convert]::ToBase64String($hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign)))
$sasToken = "SharedAccessSignature sr=$([System.Web.HttpUtility]::UrlEncode($resourceUri))&sig=$([System.Web.HttpUtility]::UrlEncode($signature))&se=$expiry&skn=$keyName"
return $sasToken
}
# Construct the resource URI for the SAS token
$resourceUri = "https://$namespaceName.servicebus.windows.net/$eventHubName"
# Generate the SAS token using the primary key from the new policy
$sasToken = Create-SasToken -resourceUri $resourceUri -keyName $policyName -key $primaryKey
# Output the SAS token
Write-Output @"
-- Generated SAS Token --
$sasToken
-- End of generated SAS Token --
"@
}
Generate-SasToken
Dane wyjściowe poprzedniego polecenia powinny wyglądać podobnie do następującego tekstu:
-- Generated SAS Token --
SharedAccessSignature sr=https%3a%2f%YourEventHubNamespace.servicebus.windows.net%2fYourEventHub&sig=xxxxxxxxxxxxxxxxxxxxxxx&se=2059133074&skn=SharedKeyNameIsHERE
-- End of generated SAS Token --
Skopiuj całą wartość tokenu SAS (wiersz rozpoczynający się od SharedAccessSignature) do późniejszego użycia podczas konfigurowania CES, jak w poniższym przykładzie:
SharedAccessSignature sr=https%3a%2f%YourEventHubNamespace.servicebus.windows.net%2fYourEventHub&sig=xxxxxxxxxxxxxxxxxxxxxxx&se=2059133074&skn=SharedKeyNameIsHERE
Włączanie i konfigurowanie przesyłania strumieniowego zdarzeń zmian
Aby włączyć i skonfigurować przesyłanie strumieniowe zdarzeń zmiany, zmień kontekst bazy danych na bazę danych użytkownika, a następnie wykonaj następujące kroki:
- Jeśli nie została jeszcze skonfigurowana, ustaw bazę danych na model pełnego odzyskiwania.
- Utwórz klucz główny i poświadczenie o zakresie bazy danych.
- Włącz strumieniowanie zdarzeń.
- Utwórz grupę strumienia zdarzeń.
- Dodaj jedną lub więcej tabel do grupy strumienia zdarzeń.
W przykładach w tej sekcji pokazano, jak włączyć protokół CES dla protokołu AMQP i protokołu Apache Kafka:
- Przesyłanie strumieniowe do usługi Azure Event Hubs za pośrednictwem protokołu AMQP
- Przesyłanie strumieniowe do usługi Azure Event Hubs za pośrednictwem protokołu Apache Kafka
Poniżej przedstawiono przykładowe wartości parametrów dla przykładów w tej sekcji:
@stream_group_name = N'myStreamGroup'@destination_location = N'myEventHubsNamespace.servicebus.windows.net/myEventHubsInstance'— ta wartość to nazwa FQDN konkretnej usługi Azure Event Hubs i nazwy wystąpienia.@partition_key_scheme = N'None'- (domyślne) partycje są wybierane metodą round robin. Inne możliwe opcje to:-
StreamGroup— partycjonowanie według grupy strumienia -
Table— partycjonowanie według tabeli -
Column— partycjonowanie według kolumn
-
[opcjonalnie, jeśli są używane zasady dostępu współdzielonego za pośrednictwem klucza usługi]
- Podstawowa lub pomocnicza wartość klucza pobrana z zasad dostępu współdzielonego:
Secret = 'BVFnT3baC/K6I8xNZzio4AeoFt6nHeK0i+ZErNGsxiw='
- Podstawowa lub pomocnicza wartość klucza pobrana z zasad dostępu współdzielonego:
EXEC sys.sp_add_object_to_event_stream_group N'myStreamGroup', N'dbo.myTable'@max_message_size_kb = 256— 256 KB jest domyślnym maksymalnym rozmiarem komunikatu, ale ta wartość powinna być zgodna z limitami docelowej usługi Azure Event Hubs.
Przykład: Strumieniowanie do usługi Azure Event Hubs za pośrednictwem protokołu AMQP
W przykładach w tej sekcji pokazano, jak przesyłać strumieniowo zdarzenia zmian do usługi Azure Event Hubs przy użyciu protokołu AMQP. Protokół AMQP jest domyślnym natywnym protokołem usługi Azure Event Hubs.
W przykładzie w tej sekcji użyto tokenu SAS do uwierzytelniania w wystąpieniu usługi Azure Event Hubs za pośrednictwem protokołu AMQP. Jeśli uwierzytelnianie Microsoft Entra nie jest dostępne, użyj tokenu SAS zamiast wartości klucza usługi w celu zwiększenia bezpieczeństwa.
Zastąp wartości w nawiasach kątowych (<value>) wartościami odpowiednimi dla twojego środowiska.
USE <database name>;
-- Create the Master Key with a password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Password>';
CREATE DATABASE SCOPED CREDENTIAL <CredentialName>
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<Generated SAS Token>' -- Be sure to copy the entire token. The SAS token starts with "SharedAccessSignature sr="
EXEC sys.sp_enable_event_stream
EXEC sys.sp_create_event_stream_group
@stream_group_name = N'<EventStreamGroupName>',
@destination_type = N'AzureEventHubsAmqp',
@destination_location = N'<AzureEventHubsHostName>/<EventHubsInstance>',
@destination_credential = <CredentialName>,
@max_message_size_kb = <MaxMessageSize>,
@partition_key_scheme = N'<PartitionKeyScheme>'
EXEC sys.sp_add_object_to_event_stream_group
N'<EventStreamGroupName>',
N'<SchemaName>.<TableName>'
Przykład: przesyłanie strumieniowe danych do usługi Azure Event Hubs za pośrednictwem protokołu Apache Kafka
W przykładach w tej sekcji pokazano, jak przesyłać strumieniowo zmiany zdarzeń do usługi Azure Event Hubs przy użyciu protokołu Apache Kafka.
W przykładzie w tej sekcji użyto tokenu SAS do uwierzytelniania w wystąpieniu usługi Azure Event Hubs za pomocą protokołu Apache Kafka. Jeśli uwierzytelnianie Microsoft Entra nie jest dostępne, użyj tokenu SAS zamiast wartości klucza usługi w celu zwiększenia bezpieczeństwa.
Zastąp wartości w nawiasach kątowych (<value>) wartościami odpowiednimi dla twojego środowiska.
USE <database name>
-- Create the Master Key with a password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Password>'
CREATE DATABASE SCOPED CREDENTIAL <CredentialName>
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<Event Hubs Namespace – Primary or Secondary connection string>'
EXEC sys.sp_enable_event_stream
EXEC sys.sp_create_event_stream_group
@stream_group_name = N'<EventStreamGroupName>',
@destination_type = N'AzureEventHubsApacheKafka',
@destination_location = N'<AzureEventHubsHostName>:<port>/<EventHubsInstance>', -- myEventHubsNamespace.servicebus.windows.net:9093/myEventHubsInstance
@destination_credential = <CredentialName>,
@max_message_size_kb = <MaxMessageSize>,
@partition_key_scheme = N'<PatitionKeyScheme>'
EXEC sys.sp_add_object_to_event_stream_group
N'<EventStreamGroupName>',
N'<SchemaName>.<TableName>'
Wyświetl konfigurację i funkcje CES
W pliku sys.databases wskazuje, is_event_stream_enabled = 1 że dla bazy danych włączono przesyłanie strumieniowe zdarzeń zmiany.
Następujące zapytanie zwraca wszystkie bazy danych z włączonym streamingiem zdarzeń:
SELECT *
FROM sys.databases
WHERE is_event_stream_enabled = 1;
W pliku sys.tables wskazuje, is_replicated = 1 że tabela jest przesyłana strumieniowo, a sp_help_change_feed_table zawiera informacje o grupie tabel i metadanych tabeli na potrzeby przesyłania strumieniowego zdarzeń zmian.
Następujące zapytanie zwraca wszystkie tabele z włączonym przesyłaniem strumieniowym zmian zdarzeń i udostępnia informacje o metadanych:
SELECT name,
is_replicated
FROM sys.tables;
EXECUTE sp_help_change_feed_table
@source_schema = '<schema name>',
@source_name = '<table name>';
Procedury składowane CES, funkcje systemowe oraz widoki zarządzania (DMVs)
W poniższej tabeli wymieniono procedury składowane, funkcje systemowe i DMVs, których można użyć do konfigurowania, wyłączania i monitorowania strumieniowego przesyłania zdarzeń zmiany.
| Obiekt systemowy | Opis |
|---|---|
|
|
|
| sys.sp_enable_event_stream | Włącza usługę CES dla bieżącej bazy danych użytkownika. |
| sys.sp_create_event_stream_group | Tworzy grupę strumieni, która jest konfiguracją przesyłania strumieniowego dla grupy tabel. Grupa strumienia definiuje również lokalizację docelową i powiązane szczegóły (takie jak uwierzytelnianie, rozmiar komunikatu, partycjonowanie). Stream_group_id jest generowany automatycznie i wyświetlany dla użytkownika końcowego po zakończeniu procedury. |
| sys.sp_add_object_to_event_stream_group (dodaje obiekt do grupy strumieni zdarzeń) | Dodaje tabelę do grupy strumieni. |
|
|
|
| sys.sp_remove_object_from_event_stream_group | Usuwa tabelę z grupy strumieniowej. |
| sys.sp_drop_event_stream_group | Usuwa grupę strumienia. Grupa strumienia nie powinna być używana. |
| sys.sp_disable_event_stream | Wyłącza usługę CES dla bieżącej bazy danych użytkownika. |
|
|
|
| sys.dm_change_feed_errors - funkcja raportowania błędów dotyczących zmian w kanale danych | Zwraca błędy dostarczania. |
| sys.dm_change_feed_log_scan_sessions | Zwraca informacje o aktywności skanowania dziennika. |
| sys.sp_help_change_feed_settings | Zapewnia status i informacje o skonfigurowanej transmisji zdarzeń zmiany. |
| sys.sp_help_change_feed | Monitoruje bieżącą konfigurację strumienia zmian. |
| sys.sp_help_change_feed_table_groups | Zwraca metadane używane do konfigurowania zmian grup przesyłania strumieniowego zdarzeń. |
| sys.sp_help_change_feed_table | Zawiera informacje o stanie i metadanych grupy przesyłania strumieniowego i tabeli na potrzeby przesyłania strumieniowego zdarzeń zmiany. |
Wzrost dziennika transakcji
Ponieważ dostarczanie komunikatów jest gwarantowane, dziennik transakcji dla bazy danych z włączoną funkcją CES może nadal rosnąć. Obcięcie dziennika jest blokowane, o ile w dzienniku są zmiany CES do przesłania w strumieniu. Gdy rozmiar dziennika transakcji osiągnie maksymalny zdefiniowany limit, zapisy w bazie danych kończą się niepowodzeniem.
Aby temu zapobiec w usługach Azure SQL Database i Azure SQL Managed Instance, gdy rozmiar dziennika transakcji zbliża się do maksymalnego zdefiniowanego limitu, firma Microsoft może wyłączyć program CES lub zabić długotrwałe transakcje. W przypadku niezarządzanych instancji SQL Server, takich jak lokalne lub w SQL Server na maszynach wirtualnych Azure, odpowiadasz za monitorowanie rozmiaru dziennika transakcji i upewnienie się, że nie osiągnie maksymalnego zdefiniowanego limitu, a w razie potrzeby ręcznie wyłącz program CES lub zakończ długotrwałe transakcje.
Gdy program CES zostanie wyłączony lub długotrwała transakcja zostanie zabita, dziennik transakcji zostanie obcięty, aby zwolnić miejsce. Należy ręcznie ponownie włączyć usługę CES po jej wyłączeniu lub ponowić jakiekolwiek długotrwałe transakcje, które zostały przerwane. Zmiany danych wprowadzone podczas wyłączania ces nie są przechwytywane. Przesyłane są tylko zmiany wprowadzone po ponownym uruchomieniu usługi CES.
Poniżej przedstawiono listę typowych scenariuszy, które mogą prowadzić do wzrostu dziennika transakcji z włączonym programem CES:
- Trwałe błędy. CES ponawia próbę wysłania wiadomości, która jest odrzucana wielokrotnie, a CES nie może kontynuować. Przyczyny trwałych błędów, które mogą prowadzić do odrzucenia komunikatów, to:
- Problemy z siecią lub błędna konfiguracja.
- Błędna konfiguracja poświadczeń.
- Nieprawidłowo skonfigurowany maksymalny rozmiar komunikatu odrzucany przez miejsce docelowe.
- Miejsce docelowe ogranicza zdarzenia przychodzące. Na przykład limity szybkości usługi Azure Event Hubs oparte na jednostce SKU.
- Długotrwałe transakcje, które generują wiele rekordów dziennika i uniemożliwiają obcięcie dziennika.
Aby zapewnić bezproblemowe operacje, regularnie monitoruj rozmiar dziennika transakcji i błędów dostarczania usług CES .
Wydajność
W przypadku programu SQL Server, usługi Azure SQL Managed Instance i elastycznych pul usługi Azure SQL Database można włączyć usługę CES w wielu bazach danych. Każda baza danych z obsługą programu CES zużywa zasoby serwera i konkuruje z innymi obciążeniami serwera. Upewnij się, że serwer jest odpowiednio wyposażony dla oczekiwanego obciążenia i regularnie monitoruj wydajność serwera oraz baz danych.
Ograniczenia
Zmiana przesyłania strumieniowego zdarzeń (CES) ma następujące ograniczenia:
- Azure SQL Database
- Ograniczenia na poziomie serwera i ogólne
- Ograniczenia na poziomie bazy danych
- Ograniczenia na poziomie tabeli
- Ograniczenia na poziomie kolumny
- Uprawnienia w źródłowej bazie danych
- Sieci i łączność
Azure SQL Database
Podczas korzystania z usług CES z usługą Azure SQL Database obowiązują następujące ograniczenia:
- Debugowanie zdarzenia rozszerzonego (xEvent) w usłudze Azure SQL Database nie jest obecnie dostępne.
Ograniczenia na poziomie serwera i ogólne
- Program CES nie jest obsługiwany w programie SQL Server 2025 (17.x) w systemie Linux.
- CES emituje zdarzenia tylko dla zmian danych wynikających z instrukcji DML:
INSERT,UPDATEiDELETE. - Program CES nie obsługuje zmian schematu (operacji DDL), co oznacza, że nie generuje zdarzeń dla tego typu operacji. Jednak operacje DDL nie są blokowane, więc jeśli je wykonasz, schemat kolejnych zdarzeń DML odzwierciedla zaktualizowaną strukturę tabeli. Oczekuje się, że płynnie obsłużysz zdarzenia ze zaktualizowanym schematem.
- Obecnie usługa CES nie przesyła strumieniowo danych dostępnych w tabeli przed włączeniem usługi CES. Istniejące dane nie są inicjalizowane ani wysyłane jako migawka, gdy CES jest włączony.
- Jeśli komunikat przekracza limit rozmiaru komunikatu usługi Azure Event Hubs, błąd jest obecnie widoczny tylko za pośrednictwem zdarzeń rozszerzonych. Zdarzenia CES xEvents są obecnie dostępne tylko w wersji SQL Server 2025, a nie w usłudze Azure SQL Database.
- Zmiana nazw tabel i kolumn skonfigurowanych dla programu CES nie jest obsługiwana. Zmiana nazwy tabeli lub kolumny kończy się niepowodzeniem. Nazwy baz danych są dozwolone.
- Uwierzytelnianie Microsoft Entra w ramach CES nie jest obecnie dostępne w programie SQL Server 2025.
- Usługa CES nie jest dostępna dla usługi Azure SQL Managed Instance skonfigurowanej przy użyciu zasad aktualizacji programu SQL Server 2022. Jest ona dostępna tylko dla wystąpień skonfigurowanych przy użyciu zasad aktualizacji programu SQL Server 2025 lub Always-up-to-date.
Ograniczenia na poziomie bazy danych
- Usługa CES obsługuje tylko bazy danych skonfigurowane przy użyciu pełnego modelu odzyskiwania.
- Program CES nie obsługuje baz danych skonfigurowanych przy użyciu dublowanych baz danych sieci szkieletowej dla programu SQL Server, replikacji transakcyjnej, przechwytywania zmian danych ani usługi Azure Synapse Link. Śledzenie zmian jest obsługiwane w bazach danych skonfigurowanych przy użyciu programu CES.
- Usługa CES może przesyłać strumieniowo tylko z zapisywalnych baz danych podstawowych. Pomocnicze bazy danych będące częścią zawsze włączonych grup dostępności lub korzystające z linku wystąpienia zarządzanego nie można skonfigurować jako źródeł przesyłania strumieniowego.
- Nie można włączyć CES dla widoków ani widoków indeksowanych.
Ograniczenia na poziomie tabeli
Tabela może należeć tylko do jednej grupy przesyłania strumieniowego. Nie można przesyłać strumieniowo tej samej tabeli do wielu miejsc docelowych.
Tabele użytkowników można skonfigurować tylko dla programu CES. Usługa CES nie obsługuje tabel systemu przesyłania strumieniowego.
Można skonfigurować maksymalnie 4096 grup strumieni. Każda grupa strumienia może zawierać maksymalnie 40 000 tabel.
Chociaż program CES jest włączony w tabeli, nie można dodać ani usunąć ograniczenia klucza podstawowego w tej tabeli.
ALTER TABLE SWITCH PARTITIONnie jest obsługiwany w tabelach skonfigurowanych dla programu CES.TRUNCATE TABLEnie jest obsługiwana w tabelach z włączoną obsługą programu CES.Program CES nie obsługuje tabel korzystających z żadnej z następujących funkcji:
- Klastrowane indeksy kolumnowe
- Tabele historii czasowej lub tabele historii rejestru
- Zawsze szyfrowane
- OlTP w pamięci (tabele zoptymalizowane pod kątem pamięci)
- Tabele grafów
- Tabele zewnętrzne
Ważne
Operacje indeksowania online mogą generować znaczne ilości rekordów dziennika transakcji. CES musi przetwarzać znacznie więcej danych, co może spowodować zwiększone opóźnienie zdarzeń.
Ograniczenia na poziomie kolumny
- Usługa CES nie obsługuje następujących typów danych. Przesyłanie strumieniowe pomija kolumny następujących typów:
- geography
- geometry
- image
- json
- rowversion / znacznik czasu
- sql_variant
- Tekst / ntekst
- vector
- xml
- Typy zdefiniowane przez użytkownika (UDT)
Uprawnienia w źródłowej bazie danych i miejscu przechowywania danych
- W przypadku zabezpieczeń na poziomie wiersza program CES emituje zmiany ze wszystkich wierszy, niezależnie od uprawnień użytkownika.
- Dynamiczne maskowanie danych nie ma zastosowania do danych wysyłanych za pośrednictwem programu CES. Dane są przesyłane strumieniowo bez maskowania, nawet jeśli skonfigurowano maskowanie.
- Program CES nie emituje zdarzeń związanych ze zmianami uprawnień na poziomie obiektu (na przykład udzielanie uprawnień do określonych kolumn).
- Usługa CES przesyła strumieniowo dane do skonfigurowanego miejsca docelowego, jeśli zezwala na to konfiguracja sieci. Jeśli miejsce docelowe znajduje się w innym regionie, usługa CES przesyła strumieniowo dane między regionami. Upewnij się, że jest to zgodne z wymaganiami dotyczącymi rezydencji danych oraz zgodności z przepisami.
Sieć i łączność
- Obecnie usługa CES może przesyłać strumieniowo tylko do publicznych punktów końcowych usługi Azure Event Hubs. Punkty końcowe usługi i prywatne punkty końcowe nie są obecnie obsługiwane.