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