Olay bildirimi (Transact-SQL) oluştur
hizmet broker hizmetbir veritabanı veya sunucu olay hakkında bilgi gönderen bir nesne oluşturur.Olay bildirimleri yalnızca kullanarak oluşturulur Transact-SQL ifadeleri.
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' }
[ ; ]
Bağımsız değişkenler
event_notification_name
olaybildirimadıdır. olaybildirim adı için olan kurallara uymak zorunda tanımlayıcıları ve oluşturulma kapsam içinde benzersiz olmalıdır: Sunucu, veritabanı veya object_name.SUNUCU
Geçerli örnek olaybildirim kapsam uygulanır SQL Server. yan tümce için belirtilen olay herhangi bir yerde örnek yapıldığında bildirim belirttiyseniz, harekete SQL Server.VERİTABANI
olaybildirim kapsam geçerli veritabanına uygulanır. Her yan tümce için belirtilen olay gerçekleştiğinde geçerli veritabanında belirtilen, bildirim tetikler.SIRA
Geçerli veritabanında belirli bir sıra bildirim kapsam uygulanır.SIRANIN yalnızca, QUEUE_ACTIVATION veya BROKER_QUEUE_DISABLED de belirtilen için belirtilebilir.queue_name
olaybildirim uygulandığı sıra addır. queue_nameyalnızca SIRA belirtilmezse belirtilebilir.İLE FAN_IN
Söyler SQL Server olay başına yalnızca bir ileti göndermek için hizmet tüm olay bildirimlerini herhangi belirtilen,:Aynı olayoluşturulur.
(Aynı SIDtarafından tanımlandığı gibi) aynı patron tarafından oluşturulur.
Aynı hizmet belirtin ve broker_instance_specifier.
FAN_IN ile belirtin.
Örneğin, üç olay bildirimleri oluşturulur.Tüm olay bildirimleri belirtmek için alter_table, FAN_IN ile aynı hizmet için yan tümceve aynı SIDtarafından oluşturulur.alter table deyim çalıştırıldığında, bu üç olay bildirimleri tarafından oluşturulan iletileri birisine birleştirilir.Bu nedenle, hedef hizmet olayyalnızca bir ileti alır.
event_type
olaybildirim yürütmekneden olan bir olay türünün adıdır. event_typeolabilir bir Transact-SQL DDL olay türü, bir SQL izleme olay türü veya bir Service Broker olay türü.Niteleme listesi için Transact-SQLBkz:DDLolay türleri, ddl olayları.SQL izleme olay türleri nitelemek listesi için bkz: Olay bildirimleri ile kullanılmak üzere olayları izleme.Service Broker olay türleri şunlardır: QUEUE_ACTIVATION ve BROKER_QUEUE_DISABLED.Daha fazla bilgi için, bkz. Olay bildirimleri tasarlama.event_group
Önceden tanımlanmış bir grup adı Transact-SQL veya SQL izleme olay türleri.olaybildirim daha sonra herhangi bir olay olay grubuna ait yürütülmesini tetikleyebilir. DDLolay grupları listesi için Transact-SQL olaylar bunlar kapak, ve kapsam kesiştiği bunlar tanımlanabilir, bakın ddl olay grupları. İzleme olay grupları ve bunlar kapak izleme olayları listesi için bkz: Olay bildirimleri ile kullanmak için olay grupları izleme.event_groupOlay Bildirim oluşturma deyim sona erdiğinde, aynı zamanda makro olarak görev yapar, olay türleri ekleyerek onu için kapsar sys.events Katalog görünümü.
'broker_service'
olayörnek verileri alır hedefhizmet belirtir. SQL Serverolaybildirimiçin hedefhizmet bir veya daha fazla görüşme açılır. Bu hizmet aynı düzenleyeni gerekir SQL Server olaylar ileti türü ve anlaşma için Gönder ileti.Daha fazla bilgi için, bkz. Hizmet Aracısı Hizmetleri oluşturma.Konuşmalar, olay bildirim bırakılan kadar açık kalır.Belirli hataları daha önce kapatmak görüşmeleri neden olabilir.Açıkça bazı veya tüm görüşmeleri sonlandırma, hedef hizmet daha fazla ileti almasını engelleyebilir.
{ 'broker_instance_specifier' | 'geçerli veritabanı' }
Değerlendireceğiniz bir hizmet broker örnek belirtir broker_service çözülmüş.hizmet broker değeri sorgulayarak edinilebilir service_broker_guidsütun sys.databases Katalog görünümü.Use 'geçerli veritabanı' geçerli veritabanındaki hizmet broker örnek belirtmek için.'geçerli veritabanı' durum-duyarlı dize .
Açıklamalar
Service Brokerileti türü ve anlaşma özellikle olay bildirimlerini içerir.Bu nedenle, biri zaten varolduğundan oluşturulacak başlatan hizmet yok bir Hizmet Aracısı aşağıdaki anlaşma adı belirtir: https://schemas.microsoft.com/SQL/Notifications/PostEventNotification
olay bildirimlerini alır hedefhizmet yeniyse bu anlaşmadüzenleyeni gerekir. Oluşturma hakkında daha fazla bilgi için Service Broker hedef Hizmetleri Bkz: Programlama ile Hizmet Aracısı yararları.
Önemli |
---|
Service Brokeriletişim güvenliği, bir uzak sunucuda hizmet broker iletileri göndermek olay bildirimleri için yapılandırılmalıdır.İletişim güvenliği, tam güvenlik modeline göre el ile yapılandırılması gerekir.Daha fazla bilgi için, bkz. Olay bildirimleri için iletişim güvenliği. |
bildirim etkinleştiren bir olay hareketi, olaygönderen döndürülüyor debildirim geri alınır. Olay bildirimleri, hareketin tamamlanma veya tetikleyici içinde geri zaman bir tetikleyici içinde tanımlanmış bir eylem başlatılmaz.Hareketleri izleme olayları bağımlı olmadığından, olay bildirimlerini izleme olayları temel alan olup bunları etkinleştiren işlem geri alınır bağımsız olarak gönderilir.
hedefhizmet ile sunucu arasındaki konuşma bile olaybildirim harekete, bir hata ve olaybildirim bırakılan sonra.
İlk bildirim başlatıldı olay hareket başarılı veya başarısız olaybildirimgönderme tarafından etkilenmez.
olaybildirim göndermek için herhangi bir hata günlüğe kaydedilir.
İzinler
Veritabanına (on database) kapsamlı bir olay bildirim oluşturmak için geçerli veritabanında create database DDL olay BİLDİRİMİNİ izni gerektirir.
Server (on server), kapsamlı DDLdeyim bir olaybildirim oluşturmak için Server DDL olay bildirim oluşturma izni gerektirir.
İzleme olayhakkında bir olaybildirim oluşturmak için Server izleme olay bildirim oluşturma izni gerektirir.
Bir sıra için kapsamlı bir olay bildirim oluşturmak için sıraya alter izni gerektirir.
Örnekler
Not
a ve b GUID aşağıdaki örneklerde TO SERVICE 'NotifyService' yan tümce ('8140a771-3c4b-4479-8ac0-81008ab17984') üzerinde örnek olduğu küme up bilgisayarda belirli.Bu örnekiçin fark edildi için GUID AdventureWorks2008R2 veritabanı.
Kopyalayın ve bu örnekleri çalıştırmak için bir bilgisayardan bu GUID değiştirmeniz gerekir ve SQL Server örnek.Yukarıdaki değişkenleri bölümünde açıklandığı gibi elde edebilir 'broker_instance_specifier' sorgulamak service_broker_guid sütun sys.databases Katalog görünümü.
A.olaybildirim oluşturma kapsamı sunucusudur
Aşağıdaki örnek, hedefhizmet kullanarak küme için gerekli olan nesneleri oluşturur Service Broker. hedefhizmet ileti türü ve olay bildirimleri için özellikle başlatan hizmet anlaşma başvuruyor. olaybildirim , bir bildirim gönderir, hedefhizmet oluşturulur her bir Object_Created İzleme olay gerçekleştiğinde örnek üzerinde SQL Server.
--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
([https://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.olaybildirim oluşturma kapsamı veritabanıdır
Aşağıdaki örnek, önceki örnek olarak aynı hedefhizmet olaybildirim oluşturur. olaybildirim harekete sonra bir ALTER_TABLEolay oluşur AdventureWorks2008R2 örnek veritabanı.
CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService',
'8140a771-3c4b-4479-8ac0-81008ab17984';
C.Bir olay bildirim hakkında bilgi alma kapsamı sunucusudur
Aşağıdaki örnek sorgular sys.server_event_notifications için olaybildirimhakkında meta veriler Katalog görünümü log_ddl1 server kapsamoluşturuldu.
SELECT * FROM sys.server_event_notifications
WHERE name = 'log_ddl1'
D.Bir olay bildirim hakkında bilgi alma kapsamı veritabanıdır
Aşağıdaki örnek sorgular sys.event_notifications için olaybildirimhakkında meta veriler Katalog görünümü Notify_ALTER_T1 veritabanı kapsamoluşturuldu.
SELECT * FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1'