Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Yönetilen Örneği
Hizmet Aracısı hizmetine veritabanı veya sunucu olayı hakkında bilgi gönderen bir nesne oluşturur. Olay bildirimleri yalnızca Transact-SQL deyimleri kullanılarak oluşturulur.
Transact-SQL söz dizimi kuralları
Sözdizimi
CREATE EVENT NOTIFICATION event_notification_name
ON { SERVER | DATABASE | QUEUE queue_name }
[ WITH FAN_IN ]
FOR { event_type | event_group } [ , ...n ]
TO SERVICE 'broker_service' , { 'broker_instance_specifier' | 'current database' }
[ ; ]
Arguments
event_notification_name
Olay bildiriminin adı. Olay bildirimi adı , tanımlayıcıların kurallarına uymalıdır ve oluşturuldukları kapsam içinde benzersiz olmalıdır: SERVER, DATABASEveya object_name.
SUNUCU
Olay bildiriminin kapsamını geçerli SQL Server örneğine uygular. Belirtilirse, yan tümcesinde belirtilen olay SQL Server örneğinde FOR herhangi bir yerde gerçekleştiğinde bildirim tetikler.
Uyarı
Bu seçenek, kapsanan bir veritabanında kullanılamaz.
DATABASE
Olay bildiriminin kapsamını geçerli veritabanına uygular. Belirtilirse, yan tümcesinde FOR belirtilen olay geçerli veritabanında her gerçekleştiğinde bildirim tetikler.
QUEUE
Bildirimin kapsamını geçerli veritabanındaki belirli bir kuyruğa uygular.
QUEUEyalnızca veya FOR QUEUE_ACTIVATION belirtildiyse FOR BROKER_QUEUE_DISABLED belirtilebilir.
queue_name
Olay bildiriminin uygulandığı kuyruğun adı.
queue_name yalnızca belirtilirse QUEUE belirtilebilir.
ILE FAN_IN
SQL Server'a, tüm olay bildirimleri için belirtilen herhangi bir hizmete olay başına yalnızca bir ileti göndermesini bildirir:
- Aynı olay üzerinde oluşturulur.
- Aynı sorumlu tarafından oluşturulur (aynı SID tarafından tanımlandığında).
- Aynı hizmeti ve broker_instance_specifier belirtin.
-
WITH FAN_INbelirtin.
Örneğin, üç olay bildirimi oluşturulur. Tüm olay bildirimleri , , FOR ALTER_TABLEaynı WITH FAN_IN yan tümcesini belirtir TO SERVICEve aynı SID tarafından oluşturulur. Bir ALTER TABLE deyim çalıştırıldığında, bu üç olay bildirimi tarafından oluşturulan iletiler tek bir olay bildiriminde birleştirilir. Bu nedenle, hedef hizmet olayın yalnızca bir iletisini alır.
event_type
Olay bildiriminin yürütülmesine neden olan bir olay türünün adı.
event_type Transact-SQL DDL olay türü, SQL İzleme olay türü veya Hizmet Aracısı olay türü olabilir. Uygun Transact-SQL DDL olay türlerinin listesi için bkz. DDL Olayları. Hizmet Aracısı olay türleri ve QUEUE_ACTIVATIONşeklindedirBROKER_QUEUE_DISABLED. Daha fazla bilgi için bkz . Olay bildirimleri.
event_group
önceden tanımlanmış Transact-SQL veya SQL İzleme olay türlerinin adı. Bir olay grubuna ait herhangi bir olay yürütüldikten sonra bir olay bildirimi tetiklenebilir. DDL olay gruplarının listesi, kapsadıkları Transact-SQL olayları ve tanımlanabilecekleri kapsam için bkz. DDL Olay Grupları.
event_group , deyimi tamamlandığında, CREATE EVENT NOTIFICATION kapsadığı olay türlerini katalog görünümüne sys.events ekleyerek makro görevi de görür.
'broker_service'
Olay örneği verilerini alan hedef hizmeti belirtir. SQL Server, olay bildirimi için hedef hizmette bir veya daha fazla konuşma açar. Bu hizmet, iletiyi göndermek için kullanılan aynı SQL Server Olayları ileti türüne ve sözleşmesine saygı göstermeli.
Konuşmalar, olay bildirimi bırakılana kadar açık kalır. Bazı hatalar konuşmaların daha önce kapanmasına neden olabilir. Konuşmaların bazılarını veya tümünü açıkça sonlandırmak, hedef hizmetin daha fazla ileti almasını engelleyebilir.
{ 'broker_instance_specifier' | 'geçerli veritabanı' }
broker_service çözümlendiği bir hizmet aracısı örneği belirtir. Belirli bir hizmet aracısı için değer, katalog görünümünün service_broker_guidsys.databases sütunu sorgulanarak elde edilebilir. Geçerli veritabanında hizmet aracısı örneğini belirtmek için kullanın 'current database' .
'current database' büyük/küçük harfe duyarlı olmayan bir dize değişmez değeridir.
Uyarı
Bu seçenek, kapsanan bir veritabanında kullanılamaz.
Açıklamalar
Hizmet Aracısı, özellikle olay bildirimleri için bir ileti türü ve sözleşme içerir. Bu nedenle, hizmet başlatan bir Hizmet Aracısı'nın oluşturulması gerekmez çünkü aşağıdaki sözleşme adını belirten bir hizmet zaten vardır: http://schemas.microsoft.com/SQL/Notifications/PostEventNotification
Olay bildirimleri alan hedef hizmet, bu önceden var olan sözleşmeye uymalıdır.
Önemli
Hizmet Aracısı iletişim kutusu güvenliği, uzak sunucudaki bir hizmet aracısına ileti gönderen olay bildirimleri için yapılandırılmalıdır. İletişim kutusu güvenliği, tam güvenlik modeline göre el ile yapılandırılmalıdır. Daha fazla bilgi için bkz. Olay Bildirimleri için İletişim Kutusu Güvenliğini Yapılandırma.
Bildirimi etkinleştiren bir olay işlemi geri alınırsa, olay bildiriminin gönderilmesi de geri alınır. Olay bildirimleri, işlem işlendiğinde veya tetikleyicinin içine geri alındığında tetikleyicide tanımlanan bir eylem tarafından tetiklenmez. İzleme olayları işlemlere bağlı olmadığından, izleme olaylarını temel alan olay bildirimleri, bunları etkinleştiren işlemin geri alınıp alınmadığına bakılmaksızın gönderilir.
Sunucu ve hedef hizmet arasındaki konuşma bir olay bildirimi tetiklendiğinde bozulursa bir hata bildirilir ve olay bildirimi bırakılır.
Bildirimi ilk başlatan olay işlemi, olay bildiriminin gönderilmesinin başarısı veya başarısızlığından etkilenmez.
Olay bildirimi gönderme hatası günlüğe kaydedilir.
Permissions
Kapsamı veritabanı ()ON DATABASE olan bir olay bildirimi oluşturmak için geçerli veritabanında izin gerekir CREATE DATABASE DDL EVENT NOTIFICATION .
Kapsamı sunucu ()ON SERVER olan bir DDL deyiminde olay bildirimi oluşturmak için sunucuda izin gerekir CREATE DDL EVENT NOTIFICATION .
İzleme olayında olay bildirimi oluşturmak için sunucuda izin gerekir CREATE TRACE EVENT NOTIFICATION .
Kapsamı kuyruk olarak belirlenmiş bir olay bildirimi oluşturmak için kuyrukta izin gerekir ALTER .
Örnekler
Uyarı
Örnek A ve B'de yan tümcesindeki TO SERVICE 'NotifyService' (8140a771-3c4b-4479-8ac0-81008ab17984) GUID, örneğin ayarlandığı bilgisayara özgüdür. Örneğin, AdventureWorks2025 veritabanı için GUID idi.
Bu örnekleri kopyalayıp çalıştırmak için bu GUID'yi bilgisayarınızdan ve SQL Server örneğinden bir guid ile değiştirmeniz gerekir.
Bağımsız Değişkenler bölümünde açıklandığı gibi, katalog görünümünün sütununu sorgulayarak service_broker_guid 'sys.databases' alabilirsiniz.
A. Sunucu kapsamı belirlenmiş bir olay bildirimi oluşturma
Aşağıdaki örnek, Hizmet Aracısı'nı kullanarak bir hedef hizmeti ayarlamak için gerekli nesneleri oluşturur. Hedef hizmet, özellikle olay bildirimleri için başlatan hizmetin ileti türüne ve sözleşmesine başvurur. Ardından bu hedef hizmette, SQL Server örneğinde bir izleme olayı gerçekleştiğinde bildirim gönderen bir Object_Created olay bildirimi oluşturulur.
--Create a queue to receive messages.
CREATE QUEUE NotifyQueue;
GO
--Create a service on the queue that references
--the event notifications contract.
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO
--Create a route on the service to define the address
--to which Service Broker sends messages for the service.
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO
--Create the event notification.
CREATE EVENT NOTIFICATION log_ddl1
ON SERVER
FOR Object_Created
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
B. Veritabanı kapsamlı bir olay bildirimi oluşturma
Aşağıdaki örnek, önceki örnekle aynı hedef hizmette bir olay bildirimi oluşturur. AdventureWorks2025 örnek veritabanında bir ALTER_TABLE olay gerçekleştikten sonra etkinlik bildirimi ateşlenir.
CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
C. Sunucu kapsamı belirlenmiş bir olay bildirimi hakkında bilgi alma
Aşağıdaki örnek, sunucu kapsamıyla oluşturulan olay bildirimi sys.server_event_notifications hakkındaki meta veriler için katalog görünümünü sorgularlog_ddl1.
SELECT *
FROM sys.server_event_notifications
WHERE name = 'log_ddl1';
D. Veritabanı kapsamlı bir olay bildirimi hakkında bilgi alma
Aşağıdaki örnek, veritabanı kapsamıyla oluşturulan olay bildirimi sys.event_notifications hakkındaki meta veriler için katalog görünümünü sorgularNotify_ALTER_T1.
SELECT *
FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1';