翻譯|使用教程|編輯:莫成敏|2020-01-19 16:21:07.643|閱讀 661 次
概述:您需要確保沒有人篡改您的生產(chǎn)數(shù)據(jù)庫,或者開發(fā)之外的任何數(shù)據(jù)庫。就算您不是一個神經(jīng)質(zhì)的人,也會想要知道數(shù)據(jù)庫是被停止了還是被刪除了。本文介紹了使用擴展事件和SQL Monitor檢查數(shù)據(jù)庫事件的內(nèi)容。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Monitor是一個SQL Server監(jiān)控工具。它可以監(jiān)控SQL Servers的健康狀況和活動,并通過電子郵件為您發(fā)送監(jiān)測結(jié)果和建議。使用SQL Monitor時,只要一出現(xiàn)問題,你將會通過郵件和用戶界面接收到警告,SQL Monitor會快速地做全局檢查,檢查單機,集群,服務(wù)區(qū)和數(shù)據(jù)庫的健康狀況和性能。使用SSRS或者用戶界面生成報告,得到全部的歷史數(shù)據(jù),會讓你非常回溯到過去,快速地檢查到問題的原因。
您需要確保沒有人篡改您的生產(chǎn)數(shù)據(jù)庫,或者開發(fā)之外的任何數(shù)據(jù)庫。就算您不是一個神經(jīng)質(zhì)的人,也會想要知道數(shù)據(jù)庫是被停止了還是被刪除了。本文介紹了使用擴展事件和SQL Monitor檢查數(shù)據(jù)庫事件的內(nèi)容。
您傾向于認為數(shù)據(jù)庫不可能突然“消失”,直到它發(fā)生。我仍然對開發(fā)團隊中有人意外刪除生產(chǎn)數(shù)據(jù)庫感到退縮。他在兩個單獨的SSMS查詢窗口中同時打開了登臺和生產(chǎn),并感到困惑。之后,我對網(wǎng)絡(luò)路由器進行了設(shè)計,以確保需要訪問登臺服務(wù)器或生產(chǎn)服務(wù)器的任何人都必須在隔離的房間中使用熱臺工作站。它可以防止注意力不集中。
如何確保關(guān)鍵數(shù)據(jù)庫不會發(fā)生類似的事情?如果數(shù)據(jù)庫脫機或進入非聯(lián)機狀態(tài),則很容易收到警報,而SQL Monitor的內(nèi)置“數(shù)據(jù)庫不可用”警報將做到這一點。但是,我想要更多。我想知道是否創(chuàng)建、附加或啟動了新數(shù)據(jù)庫,或者現(xiàn)有數(shù)據(jù)庫是否已停止、分離或刪除。首先,我想在發(fā)生此類更改時收到警報,然后獲取所有這些數(shù)據(jù)庫事件的列表,這些事件是由誰執(zhí)行的,發(fā)生了什么類型的更改,對哪個數(shù)據(jù)庫進行了更改,何時發(fā)生以及它們來自哪個客戶端應(yīng)用程序。
聽起來很簡單,實際也很簡單:我們可以使用“擴展事件”事件會話輕松地進行設(shè)置,該會話檢測我們的數(shù)據(jù)庫級事件,然后使用SQL Monitor客戶指標(biāo)來按計劃查詢事件數(shù)據(jù)。如果在過去半小時內(nèi)發(fā)生的事件的數(shù)量或性質(zhì)可能引起DBA焦慮,我們可以發(fā)出警報。
為什么要使用擴展事件和SQL Monitor?
有一整套數(shù)據(jù)庫級擴展事件,可跟蹤每個數(shù)據(jù)庫檢查點、頁面損壞、鏡像狀態(tài)、備份或恢復(fù)操作、批量復(fù)制、文件大小更改以及數(shù)據(jù)庫的創(chuàng)建、停止、啟動、刪除或更新,以用于服務(wù)器上的任何數(shù)據(jù)庫。
我們可以建立擴展的事件會話來收集所需的數(shù)據(jù),它將為我們完成大部分工作。將SQL Monitor添加到組合中的一個好處是,通過事件會話,我們可以創(chuàng)建一個自定義監(jiān)視器,該監(jiān)視器將按時間表查詢收集到的事件數(shù)據(jù),以查看是否在指定時間內(nèi)引發(fā)了任何事件。我們可以為其設(shè)置警報,以及在圖形上繪制其值。
SQL Monitor還擅長關(guān)聯(lián)事件。例如,如果我們要檢查不屬于計劃流程的BCP活動,則可以創(chuàng)建一個事件會話以批量復(fù)制活動并為其編寫自定義指標(biāo)。我們可以在時間線圖上顯示其輸出,并查找與其他指標(biāo)的相關(guān)性,例如“可疑錯誤”、“權(quán)限更改”或“未經(jīng)授權(quán)的配置更改”指標(biāo)。
SQL Monitor或任何類似的外部監(jiān)視過程(而不使用SQL Server自己的代理)的另一個重要優(yōu)點是,外部系統(tǒng)不在數(shù)據(jù)庫用戶的范圍之內(nèi)。除了關(guān)閉某些擴展事件之外,任何人都很難對其進行篡改。順便說一句,解決此問題的一種簡單方法是使用SQL Monitor跟蹤活動的擴展事件會話的數(shù)量,并在數(shù)量下降時發(fā)出警報。
如何使用擴展事件監(jiān)視數(shù)據(jù)庫事件
在SQL Server Management Studio(SSMS)中,您可以在會話屬性屏幕或會話向?qū)е胁榭催@些擴展事件。
我只選擇了數(shù)據(jù)庫類別,然后我想要監(jiān)視6個事件,database_attached、database_created、database_detached、database_dropped、database_started和database_stopped。
從安全角度來看,我也很想知道是否有人通過databases_bulk_copy_rows事件使用BCP復(fù)制數(shù)據(jù),但是作為單獨的警報可能會更好。警報中還可以監(jiān)視數(shù)據(jù)庫大小的變化(databases_data_file_size_changed),但最好還是單獨處理,您還想知道新的大小和增長量。
對于所有這些擴展事件,除了每個事件列的默認“有效負載”之外,我們還需要確定需要執(zhí)行哪些其他操作。我們通過單擊“配置”選項卡來完成此操作。
我已經(jīng)決定加入client_app_name、database_name、sql_text和username。我發(fā)現(xiàn)SQL文本是最有用的,但是擁有數(shù)據(jù)庫名稱非常方便。不是每個事件都發(fā)送數(shù)據(jù)庫名稱,而SQL Text操作可以可靠地提供詳細信息。
有了這些,我們將知道發(fā)生事件的數(shù)據(jù)庫的名稱、執(zhí)行的DDL的文本、發(fā)出該事件的客戶端應(yīng)用程序的名稱以及關(guān)聯(lián)的數(shù)據(jù)庫主體。換句話說,我們將確切地知道誰對哪些數(shù)據(jù)庫做了什么。
我們還需要確定是否將事件存儲在環(huán)形緩沖區(qū)或文件中。對于這種類型的事件,我希望使用環(huán)形緩沖區(qū),因為事件將很少。我建議您保留大量有用的事件以進行法證工作。作為示例,我在以下腳本中指定了每種類型的六十個,但是您可以對其進行調(diào)整。如果我們要確保事件數(shù)據(jù)的持久性,那么很容易將XML文檔切成關(guān)系格式并將相關(guān)行存儲在表中。
創(chuàng)建事件會話
您可以如上所述從會話屬性窗口或“新建會話”向?qū)е泻唵蔚貏?chuàng)建事件會話,但是我發(fā)現(xiàn)提取SQL腳本很有用,您可以從任何頁面的頂部獲取該腳本。
清單1:DatabaseEvents事件會話
對于使用擴展事件的任何監(jiān)視,我們必須先創(chuàng)建并啟動會話,然后才能使用結(jié)果。這必須獨立于SQL Monitor中的自定義指標(biāo)來完成,因此您必須記住在SQL Monitor工作之前必須同時執(zhí)行這兩項。會話停止后,您將失去結(jié)果。
-- we start or stop the session in code or via SSMS ALTER EVENT SESSION DatabaseEvents ON SERVER STATE = START;
測試事件會話
這是一系列測試會話的批次。我添加了保護子句,以便在不按順序運行測試時可以避免錯誤。
清單2:測試DatabaseEvents事件會話
我們可以使用SSMS中的“觀看實時數(shù)據(jù)”直接查看數(shù)據(jù):
通過右鍵單擊網(wǎng)格,它也很容易顯示其他事件列。
檢查結(jié)果:誰篡改了該數(shù)據(jù)庫?
我更喜歡使用SQL提取事件數(shù)據(jù),因此我可以完全根據(jù)需要配置查詢。
清單3:查詢DatabaseEvents事件數(shù)據(jù)
如您所見,它向我們顯示了數(shù)據(jù)庫更改的時間、受影響的數(shù)據(jù)庫、進行更改的SQL Server主體以及進行更改的代碼。
這可能沒有看起來有用,因為要知道涉及哪個數(shù)據(jù)庫并不總是那么容易。有時,一個DatabaseId將不會與任何數(shù)據(jù)庫或其他數(shù)據(jù)庫相關(guān),因為已從sys.databases表中刪除了已刪除的數(shù)據(jù)庫,并且ID很快被回收,因此,如果您嘗試從ID中查找數(shù)據(jù)庫的名稱,則很容易出錯或不存在,因為查找完成時,它可能與完全錯誤的數(shù)據(jù)庫有關(guān)。在這種情況下,TSQL是對受影響的數(shù)據(jù)庫的一個很好的指南,但是您可以獲得整個批處理,并且如果該批處理具有許多影響數(shù)據(jù)庫的不同操作,那么事情就會變得晦暗。
本教程內(nèi)容較多,分為上下兩篇文章,想要了解本教程后續(xù)發(fā)展,請繼續(xù)關(guān)注我們網(wǎng)站,了解更多產(chǎn)品資訊~感興趣的朋友可以下載SQL Monitor試用版免費體驗~
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: