Pemberitahuan Peristiwa

Berlaku untuk:SQL Server

Pemberitahuan peristiwa mengirim informasi tentang peristiwa ke layanan Service Broker. Pemberitahuan peristiwa dijalankan sebagai respons terhadap berbagai pernyataan bahasa definisi data Transact-SQL (DDL) dan peristiwa SQL Trace dengan mengirim informasi tentang peristiwa ini ke layanan Service Broker.

Pemberitahuan peristiwa dapat digunakan untuk melakukan hal berikut:

  • Catat dan tinjau perubahan atau aktivitas yang terjadi pada database.

  • Lakukan tindakan sebagai respons terhadap peristiwa secara asinkron alih-alih sinkron.

Pemberitahuan peristiwa dapat menawarkan alternatif pemrograman untuk pemicu DDL dan SQL Trace.

Manfaat Pemberitahuan Peristiwa

Pemberitahuan peristiwa berjalan secara asinkron, di luar cakupan transaksi. Oleh karena itu, tidak seperti pemicu DDL, pemberitahuan peristiwa dapat digunakan di dalam aplikasi database untuk merespons peristiwa tanpa menggunakan sumber daya apa pun yang ditentukan oleh transaksi segera.

Tidak seperti SQL Trace, pemberitahuan peristiwa dapat digunakan untuk melakukan tindakan di dalam instans SQL Server sebagai respons terhadap peristiwa SQL Trace.

Data peristiwa dapat digunakan oleh aplikasi yang berjalan bersama dengan SQL Server untuk melacak kemajuan dan membuat keputusan. Misalnya, pemberitahuan peristiwa berikut mengirimkan pemberitahuan ke layanan tertentu setiap kali ALTER TABLE pernyataan dikeluarkan dalam AdventureWorks2022 database sampel.

USE AdventureWorks2022;  
GO  
CREATE EVENT NOTIFICATION NotifyALTER_T1  
ON DATABASE  
FOR ALTER_TABLE  
TO SERVICE '//Adventure-Works.com/ArchiveService' ,  
    '8140a771-3c4b-4479-8ac0-81008ab17984';  

Konsep Pemberitahuan Peristiwa

Saat pemberitahuan peristiwa dibuat, satu atau beberapa percakapan Service Broker antara instans SQL Server dan layanan target yang Anda tentukan dibuka. Percakapan biasanya tetap terbuka selama pemberitahuan peristiwa ada sebagai objek pada instans server. Dalam beberapa kasus kesalahan, percakapan dapat ditutup sebelum pemberitahuan peristiwa dihilangkan. Percakapan ini tidak pernah dibagikan di antara pemberitahuan peristiwa. Setiap pemberitahuan acara memiliki percakapan eksklusifnya sendiri. Mengakhiri percakapan secara eksplisit mencegah layanan target menerima lebih banyak pesan, dan percakapan tidak akan dibuka kembali lain kali pemberitahuan peristiwa diaktifkan.

Informasi peristiwa dikirimkan ke layanan Service Broker sebagai variabel jenis xml yang menyediakan informasi tentang kapan peristiwa terjadi, tentang objek database yang terpengaruh, pernyataan batch Transact-SQL yang terlibat, dan informasi lainnya. Untuk informasi selengkapnya tentang skema XML yang dihasilkan oleh pemberitahuan peristiwa, lihat EVENTDATA (Transact-SQL).

Pemberitahuan Peristiwa vs. Pemicu

Tabel berikut membandingkan dan membedakan pemicu dan pemberitahuan peristiwa.

Pemicu Pemberitahuan Peristiwa
Pemicu DML merespons peristiwa bahasa manipulasi data (DML). Pemicu DDL merespons peristiwa bahasa definisi data (DDL). Pemberitahuan peristiwa merespons peristiwa DDL dan subset peristiwa pelacakan SQL.
Pemicu dapat menjalankan Transact-SQL atau kode terkelola runtime bahasa umum (CLR). Pemberitahuan peristiwa tidak menjalankan kode. Sebaliknya, mereka mengirim pesan xml ke layanan Service Broker.
Pemicu diproses secara sinkron, dalam cakupan transaksi yang menyebabkannya diaktifkan. Pemberitahuan peristiwa dapat diproses secara asinkron dan tidak berjalan dalam cakupan transaksi yang menyebabkannya diaktifkan.
Konsumen pemicu digabungkan erat dengan peristiwa yang menyebabkannya kebakaran. Konsumen pemberitahuan peristiwa dipisahkan dari peristiwa yang menyebabkannya diaktifkan.
Pemicu harus diproses pada server lokal. Pemberitahuan peristiwa dapat diproses di server jarak jauh.
Pemicu dapat digulung balik. Pemberitahuan peristiwa tidak dapat digulung balik.
Nama pemicu DML dilingkup skema. Nama pemicu DDL dilingkup database atau cakupan server. Nama pemberitahuan peristiwa dilingkup oleh server atau database. Pemberitahuan peristiwa pada peristiwa QUEUE_ACTIVATION dilingkup ke antrean tertentu.
Pemicu DML dimiliki oleh pemilik yang sama dengan tabel tempat pemicu diterapkan. Pemilik pemberitahuan peristiwa pada antrean mungkin memiliki pemilik yang berbeda dari objek tempatnya diterapkan.
Pemicu mendukung klausa EXECUTE AS. Pemberitahuan peristiwa tidak mendukung klausa EXECUTE AS.
Informasi peristiwa pemicu DDL dapat diambil menggunakan fungsi EVENTDATA, yang mengembalikan jenis data xml . Pemberitahuan peristiwa mengirim informasi peristiwa xml ke layanan Service Broker. Informasi diformat ke skema yang sama dengan fungsi EVENTDATA.
Metadata tentang pemicu ditemukan di tampilan katalog sys.triggers dan sys.server_triggers . Metadata tentang pemberitahuan peristiwa ditemukan di tampilan katalog sys.event_notifications dan sys.server_event_notifications .

Pemberitahuan Peristiwa vs. Jejak SQL

Tabel berikut membandingkan dan kontras menggunakan pemberitahuan peristiwa dan Jejak SQL untuk memantau peristiwa server.

Jejak SQL Pemberitahuan Peristiwa
SQL Trace tidak menghasilkan overhead performa yang terkait dengan transaksi. Pengemasan data efisien. Ada overhead performa yang terkait dengan pembuatan data peristiwa berformat XML dan mengirim pemberitahuan peristiwa.
SQL Trace dapat memantau kelas peristiwa pelacakan apa pun. Pemberitahuan peristiwa dapat memantau subset kelas peristiwa pelacakan dan juga semua peristiwa bahasa definisi data (DDL).
Anda dapat menyesuaikan kolom data mana yang akan dihasilkan dalam peristiwa pelacakan. Skema data peristiwa berformat XML yang dikembalikan oleh pemberitahuan peristiwa diperbaiki.
Peristiwa pelacakan yang dihasilkan oleh DDL selalu dihasilkan, terlepas dari apakah pernyataan DDL digulung balik. Pemberitahuan peristiwa tidak diaktifkan jika peristiwa dalam pernyataan DDL yang sesuai digulung balik.
Mengelola aliran perantara data peristiwa pelacakan melibatkan pengisian dan pengelolaan file jejak atau tabel pelacakan. Manajemen perantara data pemberitahuan peristiwa dilakukan secara otomatis melalui antrean Service Broker.
Jejak harus dimulai ulang setiap kali server dimulai ulang. Setelah didaftarkan, pemberitahuan peristiwa bertahan di seluruh siklus server dan ditransaksikan.
Setelah dimulai, penembakan jejak tidak dapat dikontrol. Waktu berhenti dan waktu filter dapat digunakan untuk menentukan kapan waktu dimulai. Jejak diakses dengan polling file pelacakan yang sesuai. Pemberitahuan peristiwa dapat dikontrol dengan menggunakan pernyataan WAITFOR terhadap antrean yang menerima pesan yang dihasilkan oleh pemberitahuan peristiwa. Mereka dapat diakses dengan polling antrean.
ALTER TRACE adalah izin paling sedikit yang diperlukan untuk membuat jejak. Izin juga diperlukan untuk membuat file pelacakan pada komputer yang sesuai. Izin paling sedikit tergantung pada jenis pemberitahuan peristiwa yang dibuat. Izin RECEIVE juga diperlukan pada antrean yang sesuai.
Jejak dapat diterima dari jarak jauh. Pemberitahuan peristiwa dapat diterima dari jarak jauh.
Peristiwa pelacakan diimplementasikan dengan menggunakan prosedur tersimpan sistem. Pemberitahuan peristiwa diimplementasikan dengan menggunakan kombinasi pernyataan Mesin Database dan Service Broker Transact-SQL.
Lacak data peristiwa dapat diakses secara terprogram dengan mengkueri tabel jejak yang sesuai, mengurai file pelacakan, atau menggunakan Kelas TraceReader Objek Manajemen SQL Server (SMO). Data peristiwa diakses secara terprogram dengan mengeluarkan XQuery terhadap data peristiwa berformat XML, atau dengan menggunakan kelas Peristiwa SMO.

Tugas Pemberitahuan Peristiwa

Tugas Topik
Menjelaskan cara membuat dan menerapkan pemberitahuan peristiwa. Menerapkan Pemberitahuan Peristiwa
Menjelaskan cara mengonfigurasi keamanan dialog Service Broker untuk pemberitahuan peristiwa yang mengirim pesan ke broker layanan di server jarak jauh. Mengonfigurasi Keamanan Dialog untuk Pemberitahuan Peristiwa
Menjelaskan cara mengembalikan informasi tentang pemberitahuan peristiwa. Mendapatkan Informasi Tentang Pemberitahuan Peristiwa

Lihat Juga

Pemicu DDL
Pemicu DML
Jejak SQL