Aracılığıyla paylaş


OLAY BILDIRIMI OLUŞTUR (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure 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_IN belirtin.

Ö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';