piektdiena, 2012. gada 21. septembris

SQL Server parametrs: "default trace enabled"

SQL Server 2012 šis parametrs kļūst par novecojušu funkcionalitāti (SQL Server novecojusī funkcionalitāte), bet pat SQL Server 2012 pēc noklusējuma šī parametra vērtība ir "1". Tas nozīmē, ka tiek reģistrēti atsevišķi notikumi trace failā. Šajā rakstā par to, kādu informāciju tur var atrast un kā apskatīt noklusēto SQL Server trace failu.

Tāpat kā citus SQL Server parametrus, šo var apskatīt/mainīt izmantojot sp_configure procedūru. Labā prakse ir nemainīt SQL Server konfigurācijas parametrus bez pietiekami nozīmīga iemesla. Šajā gadījumā neesmu uzdūries nevienam nopietnam iemeslam, kāpēc šo parametra vērtību vajadzētu vai būtu vēlams mainīt.

Un šajā failā ir daudz vērtīgas informācijas. Piemēram:
  • Kas un kad mainīja datu bāzes objektus? (detalizētāku inofrmāciju var iegūt izmantojot, piemēram, DDL Trigeris notikumu reģistrēšanai)
  • Kad notika neveiksmīgs pieslēgums datu bāzei? 
  • Kuros brīžos mainījies SQL Server izmantotās atmiņas apjoms?
  • Kā mainās datu bāzes log fala izmērs laika gaitā dēļ Auto Grow/Auto Shrink parametriem?
  • ... un citi vērtīga informācija
Pēc noklusējuma, tiek reģistrēta šāda informācija (detalizētāki informācija par šīm klasēm msdn, savukārt šis saraksts ir iegūts izmantojot SQL vaicājumu, kas atrodams zemāk): 
Grupa eventid Nosaukums
Security Audit 109 Audit Add DB User Event
Security Audit 108 Audit Add Login to Server Role Event
Security Audit 110 Audit Add Member to DB Role Event
Security Audit 111 Audit Add Role Event
Security Audit 104 Audit Addlogin Event
Security Audit 115 Audit Backup/Restore Event
Security Audit 117 Audit Change Audit Event
Security Audit 152 Audit Change Database Owner
Security Audit 102 Audit Database Scope GDR Event
Security Audit 116 Audit DBCC Event
Security Audit 106 Audit Login Change Property Event
Security Audit 20 Audit Login Failed
Security Audit 105 Audit Login GDR Event
Security Audit 103 Audit Schema Object GDR Event
Security Audit 153 Audit Schema Object Take Ownership Event
Security Audit 175 Audit Server Alter Trace Event
Security Audit 18 Audit Server Starts And Stops
Database 92 Data File Auto Grow
Database 94 Data File Auto Shrink
Database 167 Database Mirroring State Change
Database 93 Log File Auto Grow
Database 95 Log File Auto Shrink
Full text 157 FT:Crawl Aborted
Full text 155 FT:Crawl Started
Full text 156 FT:Crawl Stopped
Objects 164 Object:Altered
Objects 46 Object:Created
Objects 47 Object:Deleted
Performance * 218 Plan Guide Unsuccessful
Server 81 Server Memory Change
Errors and Warnings 22 ErrorLog
Errors and Warnings 55 Hash Warning
Errors and Warnings 79 Missing Column Statistics
Errors and Warnings 80 Missing Join Predicate
Errors and Warnings 69 Sort Warnings
* Performance, "Plan Guide Unsuccessful" ir sākot ar SQL Server 2008

Faila apskatīšanai izveidoju skriptu, ar paskaidrojošiem komentāriem (Jābūt Alter Trace tiesībām SQL Server).
Declare @trace_faila_nosaukums nvarchar(500);
Declare @traceid int;
Declare @tracefileNr int;
-- traceid pēc noklusējuma 1, lai arī specifiskos gadījumos var būt savādāk
set @traceid = 1;
-- cik vecus datus skatīties (0 ir jaunākais, jo lielāks, jo senāki dati)
Set @tracefileNr = 0;

-- vaicājums, lai iegūtu trace faila nosaukumu
Select @trace_faila_nosaukums = cast(value as nvarchar(500))
From sys.fn_trace_getinfo(Null)
Where traceid =
@traceid and property = 2;

-- vaicājums, lai iegūtu trace faila kolonnu filtrus
-- noklusētajam trace failam šādu filtru nav!
-- atkomentē, ja vēlies pārliecināties
-- Select * From sys.fn_trace_getfilterinfo(@traceid)

-- Te var iegūt arī kolonnas, kurās būs vērtības, bet tas nav aktuāli.
Select tc.type, tc.name, te.trace_event_id, te.name --, tcol.name
From sys.fn_trace_geteventinfo(@traceid) ti
    Inner Join sys.trace_events te On te.trace_event_id = ti.eventid
    Inner Join sys.trace_categories tc On te.category_id = tc.category_id
    --Inner Join sys.trace_columns tcol On ti.columnid = tcol.trace_column_id
Group By tc.type, tc.name, te.trace_event_id, te.name
Order By tc.type, te.name, te.trace_event_id

-- tāds kā universāls, atlasa visus datus, kas ir trace failā.
--Select * From sys.fn_trace_gettable(@trace_faila_nosaukums, @tracefileNr)

-- atlasa objektu izveides, mianīšanas un dzēšans notikumus
Select t.StartTime, te.name,
    DatabaseName, ObjectName, SessionLoginName, HostName, ApplicationName
From sys.fn_trace_gettable(@trace_faila_nosaukums, @tracefileNr) t
    Inner join sys.trace_events te on t.EventClass = te.trace_event_id
Where EventClass in (164, 46, 47);

-- Apskatos visus neveiksmīgos pieslēgšanās mēģinājumus
Select  t.StartTime, te.name,
    DatabaseName, ApplicationName, SessionLoginName, HostName, TextData
From sys.fn_trace_gettable(@trace_faila_nosaukums, @tracefileNr) t
    Inner join sys.trace_events te on t.EventClass = te.trace_event_id
Where EventClass in (20);

2 komentāri:

  1. Sveiks. Paldies par noderīgajiem rakstiem pie tam latviešu nevis angļu valodā :D
    Esmu datubāzes administrātors un strādāju ar SQL Server 2008R2 xxx uzņēmumā :D
    Ceru nākotnē sagaidīt vēl vairāk noderīgus rakstus un varbūt arī pac varētu piedalīties to tapšanā ;)

    AtbildētDzēst