數(shù)據(jù)庫(kù)日志采集:SQL Server篇
SQL Server會(huì)產(chǎn)生哪些日志
SQL Server 在運(yùn)行過(guò)程中會(huì)生成多種類(lèi)型的日志,以記錄數(shù)據(jù)庫(kù)系統(tǒng)的各種操作、錯(cuò)誤和狀態(tài)信息。這些日志對(duì)于故障排除、性能優(yōu)化和安全審計(jì)都非常重要。以下是 SQL Server 會(huì)生成的一些常見(jiàn)日志類(lèi)型
事務(wù)日志 (Transaction Log)
事務(wù)日志是 SQL Server 中最重要的日志之一。它記錄了數(shù)據(jù)庫(kù)中所有修改操作的詳細(xì)信息,包括 INSERT、UPDATE、DELETE 等操作。事務(wù)日志還記錄了事務(wù)的開(kāi)始和結(jié)束時(shí)間,以及事務(wù)提交或回滾的信息。事務(wù)日志對(duì)于實(shí)現(xiàn) ACID(原子性、一致性、隔離性、持久性)事務(wù)特性至關(guān)重要。
錯(cuò)誤日志 (Error Log)
錯(cuò)誤日志記錄了 SQL Server 實(shí)例中發(fā)生的所有錯(cuò)誤和警告信息。這些信息包括數(shù)據(jù)庫(kù)引擎錯(cuò)誤、服務(wù)啟動(dòng)和停止信息、備份和還原操作的結(jié)果等。錯(cuò)誤日志對(duì)于故障排除和系統(tǒng)健康監(jiān)控非常重要。
SQL Server代理日志 (SQL Server Agent Log)
如果我們使用 SQL Server 代理來(lái)管理作業(yè)、警報(bào)和計(jì)劃任務(wù),那么 SQL Server 代理日志記錄了這些作業(yè)執(zhí)行的結(jié)果、警報(bào)觸發(fā)的信息以及計(jì)劃任務(wù)執(zhí)行的詳細(xì)日志。這對(duì)于管理和監(jiān)控?cái)?shù)據(jù)庫(kù)作業(yè)非常有用。
性能日志 (Performance Log)
SQL Server 會(huì)記錄一些性能相關(guān)的日志,如查詢執(zhí)行計(jì)劃、緩存命中率、等待統(tǒng)計(jì)等。這些日志可以幫助我們?cè)\斷數(shù)據(jù)庫(kù)性能問(wèn)題,并進(jìn)行性能調(diào)優(yōu)。
追蹤日志 (Trace Log)
SQL Server 還支持追蹤日志,它可以用來(lái)記錄數(shù)據(jù)庫(kù)系統(tǒng)的詳細(xì)操作信息,如連接、查詢、鎖定等。追蹤日志對(duì)于診斷復(fù)雜的數(shù)據(jù)庫(kù)問(wèn)題非常有用,但需要謹(jǐn)慎使用,因?yàn)樗赡軙?huì)對(duì)系統(tǒng)性能產(chǎn)生一定的影響。
復(fù)制日志 (Replication Log)
如果我們?cè)?SQL Server 中使用了復(fù)制功能來(lái)復(fù)制數(shù)據(jù)到其他服務(wù)器,那么復(fù)制日志記錄了復(fù)制代理的運(yùn)行狀態(tài)、復(fù)制的命令和傳輸?shù)臄?shù)據(jù)量等信息。以上是 SQL Server 中常見(jiàn)的一些日志類(lèi)型,每種日志都有其特定的用途和重要性。管理和監(jiān)控這些日志對(duì)于保障數(shù)據(jù)庫(kù)系統(tǒng)的穩(wěn)定性、安全性和性能至關(guān)重要。
SQL Server的日志例子
以下是 SQL Server 中幾個(gè)常見(jiàn)的日志示例
錯(cuò)誤日志 (Error Log) 示例
錯(cuò)誤日志記錄了 SQL Server 實(shí)例中發(fā)生的錯(cuò)誤和警告信息,可以通過(guò)查詢錯(cuò)誤日志或查看日志文件來(lái)獲取詳細(xì)信息。例如,錯(cuò)誤日志中可能包含這樣的信息
2022-04-01 103012.123 Server Error
18456, Severity
14, State
8.
2022-04-01 103012.123 Server Login failed for user 'username'. Reason
Password did not match that for the login provided. [CLIENT
<local machine>]
2022-04-01 103012.124 Server Error
18456, Severity
14, State
5.
2022-04-01 103012.124 Server Login failed for user 'username'. Reason
Failed to open the explicitly specified database 'dbname'. [CLIENT
<local machine>]
事務(wù)日志 (Transaction Log) 示例
事務(wù)日志記錄了數(shù)據(jù)庫(kù)中所有修改操作的詳細(xì)信息,如 INSERT、UPDATE、DELETE 等操作。以下是一個(gè)事務(wù)日志的簡(jiǎn)化示例
2022-04-01 103500.000 spid1 Transaction Begin
2022-04-01 103500.001 spid1 INSERT INTO dbo.Table1 (Column1, Column2) VALUES (Value1, Value2)
2022-04-01 103500.002 spid1 Transaction Commit
SQL Server代理日志 (SQL Server Agent Log) 示例
SQL Server 代理日志記錄了 SQL Server 代理作業(yè)執(zhí)行的結(jié)果、警報(bào)觸發(fā)的信息等。以下是一個(gè) SQL Server 代理日志的簡(jiǎn)化示例
2022-04-01 104000.000 Job1
Job succeeded
2022-04-01 110000.000 Alert1
Alert triggered High CPU usage detected
性能日志 (Performance Log) 示例
性能日志記錄了一些性能相關(guān)的信息,如查詢執(zhí)行計(jì)劃、緩存命中率等。以下是一個(gè)性能日志的簡(jiǎn)化示例
2022-04-01 104500.000 Query1
Execution plan Index Scan
2022-04-01 105000.000 Cache1
Cache hit rate 90%
這些是 SQL Server 中常見(jiàn)日志的一些示例,實(shí)際的日志內(nèi)容會(huì)更加詳細(xì),并包含更多的信息以便于故障排除、性能優(yōu)化等工作。
如何配置SQL Server的日志
配置 SQL Server 的日志通常需要修改服務(wù)器的配置參數(shù),以滿足特定的需求。以下是配置 SQL Server 日志的一般步驟
錯(cuò)誤日志 (Error Log)配置
錯(cuò)誤日志的配置是通過(guò) SQL Server 實(shí)例的配置參數(shù)來(lái)控制的。我們可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T-SQL) 來(lái)配置錯(cuò)誤日志的相關(guān)設(shè)置。例如,我們可以設(shè)置錯(cuò)誤日志的最大數(shù)量和文件大小,以及是否啟用輪換功能。
在 SSMS 中,我們可以通過(guò)以下步驟來(lái)配置錯(cuò)誤日志
連接到 SQL Server 實(shí)例。
在對(duì)象資源管理器中,右鍵點(diǎn)擊服務(wù)器名稱,選擇 "屬性"。
在 "屬性" 窗口中選擇 "日志" 選項(xiàng)卡。
在 "錯(cuò)誤日志" 部分,我們可以配置錯(cuò)誤日志文件的數(shù)量和大小限制。
在 Transact-SQL 中,我們可以使用 sp_configure 存儲(chǔ)過(guò)程來(lái)配置錯(cuò)誤日志的相關(guān)參數(shù),如下所示
EXEC sp_configure 'error log file size (MB)', 10;
RECONFIGURE;
事務(wù)日志 (Transaction Log)配置
事務(wù)日志的配置通常涉及到數(shù)據(jù)庫(kù)的設(shè)置,包括數(shù)據(jù)庫(kù)的恢復(fù)模式和事務(wù)日志的大小限制。我們可以通過(guò) ALTER DATABASE 語(yǔ)句來(lái)修改數(shù)據(jù)庫(kù)的恢復(fù)模式和事務(wù)日志的相關(guān)設(shè)置。
例如,將數(shù)據(jù)庫(kù)的恢復(fù)模式設(shè)置為簡(jiǎn)單模式
ALTER DATABASE YourDatabase SET RECOVERY SIMPLE;
設(shè)置事務(wù)日志文件大小
ALTER DATABASE YourDatabase MODIFY FILE (NAME = YourLogFile, SIZE = 100MB);
SQL Server代理日志 (SQL Server Agent Log)配置
SQL Server 代理日志的配置主要涉及 SQL Server 代理作業(yè)和警報(bào)的設(shè)置。我們可以在 SQL Server 代理中配置作業(yè)和警報(bào),以及相應(yīng)的日志記錄選項(xiàng)。
例如,在 SSMS 中,我們可以通過(guò) SQL Server 代理節(jié)點(diǎn)來(lái)配置作業(yè)和警報(bào),并設(shè)置日志記錄級(jí)別和日志文件的位置。
性能日志 (Performance Log)配置
性能日志的配置通常涉及到 SQL Server 的性能監(jiān)視器和性能計(jì)數(shù)器。我們可以使用 SQL Server 的性能監(jiān)視器來(lái)配置和監(jiān)視性能日志,并根據(jù)需要添加或刪除性能計(jì)數(shù)器。
在 SSMS 中,我們可以通過(guò) "性能監(jiān)視器" 節(jié)點(diǎn)來(lái)配置性能日志,選擇我們想要監(jiān)視的性能計(jì)數(shù)器,并設(shè)置日志記錄選項(xiàng)。
以上是配置 SQL Server 日志的一般步驟,具體的配置方法會(huì)根據(jù)具體的需求和環(huán)境而有所不同。在進(jìn)行任何配置之前,請(qǐng)務(wù)必備份數(shù)據(jù)庫(kù),并仔細(xì)閱讀相關(guān)文檔以確保操作的安全性和正確性。
配置轉(zhuǎn)發(fā)到syslog服務(wù)器
要將 SQL Server 的日志轉(zhuǎn)發(fā)到 Syslog 服務(wù)器,我們可以使用 SQL Server 的擴(kuò)展事件 (Extended Events) 功能,通過(guò)配置事件會(huì)話來(lái)捕獲特定事件并將其發(fā)送到 Syslog 服務(wù)器。以下是一般步驟
準(zhǔn)備 Syslog 服務(wù)器
在開(kāi)始之前,請(qǐng)確保已經(jīng)有一個(gè)運(yùn)行著 Syslog 服務(wù)器的系統(tǒng),并且已經(jīng)配置好接收來(lái)自其他設(shè)備的日志消息。
創(chuàng)建擴(kuò)展事件會(huì)話
在 SQL Server 中創(chuàng)建一個(gè)擴(kuò)展事件會(huì)話,以捕獲指定的事件。我們可以選擇性地捕獲不同類(lèi)型的事件,如錯(cuò)誤、警告等。
配置事件捕獲
在事件會(huì)話中配置事件捕獲器,以指定要捕獲的事件類(lèi)型。我們可以使用適當(dāng)?shù)暮Y選器來(lái)選擇性地捕獲特定類(lèi)型的事件。
配置事件輸出
配置事件輸出,以將捕獲的事件發(fā)送到 Syslog 服務(wù)器。在這一步中,我們需要指定 Syslog 服務(wù)器的地址和端口,以及日志消息的格式。
啟動(dòng)事件會(huì)話
啟動(dòng)創(chuàng)建的事件會(huì)話,使其開(kāi)始捕獲指定的事件并將其發(fā)送到 Syslog 服務(wù)器。
以下是一個(gè)示例 T-SQL 腳本,用于創(chuàng)建并配置一個(gè)簡(jiǎn)單的擴(kuò)展事件會(huì)話,并將捕獲的事件發(fā)送到 Syslog 服務(wù)器
-- 創(chuàng)建擴(kuò)展事件會(huì)話
CREATE EVENT SESSION MyEventSession ON SERVER
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file (SET filename=N'C\MyEventSession.xel')
ADD TARGET package0.sys_ext_eventlog
(SET eventlogsource='SQLServer', source='MyApp')
-- 啟用事件會(huì)話
ALTER EVENT SESSION MyEventSession ON SERVER STATE = START;
在上面的示例中,sqlserver.error_reported 事件表示捕獲 SQL Server 中發(fā)生的錯(cuò)誤。package0.sys_ext_eventlog 是用于將事件發(fā)送到 Syslog 服務(wù)器的輸出。我們需要根據(jù)實(shí)際情況配置輸出參數(shù),以確保日志消息正確地發(fā)送到 Syslog 服務(wù)器。