事件通知(Event Notification)介紹

來源:互聯網
上載者:User

標籤:notification   broker   事件通知   

事件通知(Event Notification)介紹



瞭解事件通知



事件通知是特殊類型的資料庫物件,用於將有關伺服器和資料庫事件的資訊發送到 Service Broker 服務。

 

執行事件通知可對各種 Transact-SQL 資料定義語言 (Data Definition Language) (DDL) 語句和 SQL 追蹤事件做出響應,採取的回應程式式是將這些事件的相關資訊發送到 Service Broker 服務。

 

事件通知可以用來執行以下操作:

    記錄和檢索發生在資料庫上的更改或活動。

    執行操作以非同步方式而不是同步方式響應事件。

650) this.width=650;" title="clip_image001" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image001" src="http://s3.51cto.com/wyfs02/M02/57/26/wKiom1SSkzXiGezYAANBdoBneQ4494.jpg" border="0" height="725" />

 

可以將事件通知用作替代 DDL 觸發程序和 SQL 追蹤的編程方法。

 

事件通知在事務範圍以外非同步運行。因此,與 DDL 觸發程序不同,事件通知可以用於資料庫應用程式中以響應事件而無需使用中間事務定義的任何資源。

 

與 SQL 追蹤不同,事件通知可用於在 SQL Server 執行個體內部執行操作以響應 SQL 追蹤事件。

 

建立事件通知時,將會在 SQL Server 執行個體和指定的目標服務之間開啟一個或多個 Service Broker 會話。通常會話保持為開啟狀態,只要事件通知作為一個對象存在於伺服器執行個體中。在某些出錯情況下,會話可以在刪除事件通知之前關閉。這些會話從不在事件通知之間共用。每個事件通知都有自己的排他會話。顯式結束會話將阻止目標服務接收更多訊息,下一次事件通知激發時,會話將不會重新開啟。

 

事件資訊作為 xml 類型變數傳遞給 Service Broker,提供了有關事件的發生時間、受影響的資料庫物件、涉及的 Transact-SQL 批處理語句的資訊以及其他資訊。

 

與 SQL Server 一起啟動並執行應用程式可以使用事件數目據來跟蹤進度並做出決策。

 


設計事件通知



若要設計事件通知,必須確定下列內容:

    通知的範圍。

    引發事件通知的 Transact-SQL 陳述式或語句組。

 

定義通知範圍

 

您可以將事件通知指定為響應針對當前資料庫中或 SQL Server 執行個體中的所有對象執行的語句。針對 QUEUE_ACTIVATION 和 BROKER_QUEUE_DISABLED 事件指定的事件通知的範圍限定為單個隊列。並非所有事件都可以在任何範圍層級執行。例如,CREATE_DATABASE 事件僅可在伺服器執行個體級執行。相反,針對 ALTER_TABLE 事件建立的事件通知可以通過編程,針對資料庫中或伺服器執行個體中的所有表執行。

 

指定Transact-SQL語句或語句組

 

可以建立事件通知以響應下面的內容:

    特定 DDL 語句、SQL 追蹤事件或 Service Broker 事件

    預定義的 DDL 語句組或 SQL 追蹤事件組

 

選擇特定的 DDL 語句引發事件通知

 

事件通知可以設計為在運行特定的 Transact-SQL 陳述式或預存程序之後執行。如上面的樣本中所示,事件通知在 ALTER_TABLE 事件之後執行。

 

有關可指定為引發事件通知的各個 Transact-SQL 陳述式以及可執行這些通知的範圍的列表,請參閱 DDL 事件。還可以通過查詢 sys.event_notification_event_types 目錄檢視擷取這些事件。

 

選擇特定的 SQL 追蹤事件引發事件通知

 

事件通知可以設計為在 SQL 追蹤事件發生之後激發。

可以通過查詢 sys.event_notification_event_types 目錄檢視擷取這些事件的列表。SQL 追蹤事件僅可在伺服器執行個體範圍級執行。

 

選擇特定的 Service Broker 事件引發事件通知

 

事件通知可以設計為在 QUEUE_ACTIVATION 或 BROKER_QUEUE_DISABLED Service Broker 事件之後激發。當隊列有訊息要處理時,將發生 QUEUE_ACTIVATION 事件。當隊列狀態設定為 OFF 時,將發生 BROKER_QUEUE_DISABLED 事件。

 

選擇預定義的 DDL 語句組引發事件通知

 

事件通知可以在任何屬於預定義相似事件組的 Transact-SQL 事件運行之後執行。例如,如果要使事件通知在 CREATE TABLE、ALTER TABLE 或 DROP TABLE 語句執行之後執行,則可以在 CREATE EVENT NOTIFICATION 語句中指定 FOR DDL_TABLE_EVENTS。執行 CREATE EVENT NOTIFICATION 後,事件組將添加到 sys.events 目錄檢視中。

 

選擇預定義的 SQL 追蹤事件組引發事件通知


事件通知可以在任何屬於預定義相似跟蹤事件組的 SQL 追蹤事件運行之後執行。例如,如果要使事件通知在任何與鎖定相關的跟蹤事件(包括 LOCK_DEADLOCK、LOCK_DEADLOCK_CHAIN、LOCK_ESCALATION 和 DEADLOCK_GRAPH 事件)之後執行,則可以在 CREATE EVENT NOTIFICATION 語句中指定 FOR TRC_LOCKS。

 


實現事件通知

 

若要實現事件通知,必須先建立目標服務以接收事件通知,然後再建立事件通知。

 

建立目標服務

 

無需建立 Service Broker 啟動服務,因為 Service Broker 包含以下特定的事件通知訊息類型和約定:

http://schemas.microsoft.com/SQL/Notifications/PostEventNotification

 

接收事件通知的目標服務必須使用此預先存在的約定。

 

建立目標服務:

    建立隊列以接收訊息。

    在引用事件通知約定的隊列上建立服務。

    建立服務路由,以定義 Service Broker 將服務訊息發送到的地址。對於指向同一資料庫中的服務的事件通知,請指定 ADDRESS = ‘LOCAL‘。

 

建立事件通知

 

事件通知使用 Transact-SQL CREATE EVENT NOTIFICATION 語句建立,使用 DROP EVENT NOTIFICATION STATEMENT 刪除。若要修改事件通知,必須先刪除事件通知,然後再重新建立。

本文出自 “SQL Server Deep Dives” 部落格,請務必保留此出處http://ultrasql.blog.51cto.com/9591438/1591452

事件通知(Event Notification)介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.