Jun 102008
I’m essentially mirroring this from the original one on my blog, but since I’ve decided to transition to a tech blog and a non-tech blog, it seems like a good idea.
I’ve taken the listing of SQL queries from Kevin Holman‘s original post, cleaned them up a bit, and made it into one file which you can download and load into SQL Studio Manager, instead of copying and pasting individual queries. I’ll also be showing you how to automate a lot of these with PoSh, but right now I’m swamped and haven’t had the time to clean things up proper – so you’ll just have to wait.
Download Useful SCOM 2007 SQL Queries.sql
Read on to see what’s in the actual file
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 |
--====================================================================== -- -- SQL Source File -- Created with SAPIEN Technologies PrimalScript 4.1 -- -- NAME: Useful_SCOM2007_SQL_Queries.sql -- -- AUTHOR: Jeremy D. Pavleck , JPavleck@GMail.com -- DATE : 4/17/2008 -- -- COMMENT: Some useful SQL queries you can use in SCOM2007. -- Taken verbatim from Kevin Holman's OpsMgr Blog, and re-written to be SQL friendly. -- -- URL: http://blogs.technet.com/kevinholman/archive/2007/10/18/useful-operations-manager-2007-sql-queries.aspx -- --====================================================================== -- Find all managed servers that are down and not pingable SELECT bme.DisplayName, s.LastModified FROM state AS s, BaseManagedEntity as bme WHERE s.basemanagedentityid = bme.basemanagedentityid AND s.monitorid IN (SELECT MonitorId FROM Monitor WHERE MonitorName = 'Microsoft.SystemCenter.HealthService.ComputerDown') AND s.Healthstate = '3' ORDER BY s.Lastmodified DESC -- Operational Database Version select DBVersion from __MOMManagementGroupInfo__ -- Find a computer name from it's Health Service ID (guid from agent proxy alerts) select id, path, fullname, displayname from ManagedEntityGenericView where ID = '<GUID>' -- ALERTS SECTION -- -------------------- -- Most common alerts, by alert count SELECT AlertStringName, AlertStringDescription, AlertParams, Name, SUM(1) AS AlertCount, SUM(RepeatCount+1) AS AlertCountWithRepeatCount FROM Alertview WITH (NOLOCK) WHERE ResolutionState = (0|255) GROUP BY AlertStringName, AlertStringDescription, AlertParams, Name ORDER BY AlertCount DESC -- TOP 10 common alerts SELECT Top(10) AlertStringName, AlertStringDescription, AlertParams, Name, SUM(1) AS AlertCount, SUM(RepeatCount+1) AS AlertCountWithRepeatCount FROM Alertview WITH (NOLOCK) WHERE ResolutionState = (0|255) GROUP BY AlertStringName, AlertStringDescription, AlertParams, Name ORDER BY AlertCount DESC -- Most common alerts, by repeat count SELECT AlertStringName, AlertStringDescription, AlertParams, Name, SUM(1) AS AlertCount, SUM(RepeatCount+1) AS AlertCountWithRepeatCount FROM Alertview WITH (NOLOCK) WHERE ResolutionState = (0|255) GROUP BY AlertStringName, AlertStringDescription, AlertParams, Name ORDER BY AlertCountWithRepeatCount DESC -- Number of alerts per day SELECT CONVERT(VARCHAR(20), TimeAdded, 101) AS DayAdded, COUNT(*) AS NumAlertsPerDay FROM Alert WITH (NOLOCK) GROUP BY CONVERT(VARCHAR(20), TimeAdded, 101) ORDER BY DayAdded DESC -- Number of alerts per day by resolution state SELECT CASE WHEN(GROUPING(CONVERT(VARCHAR(20), TimeAdded, 101)) = 1) THEN 'All Days' ELSE CONVERT(VARCHAR(20), TimeAdded, 101) END AS [Date], CASE WHEN(GROUPING(ResolutionState) = 1) THEN 'All Resolution States' ELSE CAST(ResolutionState AS VARCHAR(5)) END AS [ResolutionState], COUNT(*) AS NumAlerts FROM Alert WITH (NOLOCK) GROUP BY CONVERT(VARCHAR(20), TimeAdded, 101), ResolutionState WITH ROLLUP ORDER BY DATE DESC -- EVENTS SECTION -- -------------------- -- Most common events by day by count SELECT CASE WHEN(GROUPING(CONVERT(VARCHAR(20), TimeAdded, 101)) = 1) THEN 'All Days' ELSE CONVERT(VARCHAR(20), TimeAdded, 101) END AS DayAdded, COUNT(*) AS NumEventsPerDay FROM EventAllView GROUP BY CONVERT(VARCHAR(20), TimeAdded, 101) WITH ROLLUP ORDER BY DayAdded DESC -- Most common events by event number SELECT Number, COUNT(*) AS "Number of Events" FROM EventView GROUP BY Number ORDER BY "Number of Events" DESC -- PERFORMANCE SECTION -- ------------------------- -- Performance Insertions per day SELECT CASE WHEN(GROUPING(CONVERT(VARCHAR(20), TimeSampled, 101)) = 1) THEN 'All Days' ELSE CONVERT(VARCHAR(20), TimeSampled, 101) END AS DaySampled, COUNT(*) AS NumPerfPerDay FROM PerformanceDataAllView GROUP BY CONVERT(VARCHAR(20), TimeSampled, 101) WITH ROLLUP ORDER BY DaySampled DESC -- Most common performance insertions by perf object and counter name: select pcv.objectname, pcv.countername, count (pcv.countername) as total from performancedataallview as pdv, performancecounterview as pcv where (pdv.performancesourceinternalid = pcv.performancesourceinternalid) group by pcv.objectname, pcv.countername order by count (pcv.countername) desc -- Most common performance insertions by perf object name: select pcv.objectname, count (pcv.countername) as total from performancedataallview as pdv, performancecounterview as pcv where (pdv.performancesourceinternalid = pcv.performancesourceinternalid) group by pcv.objectname order by count (pcv.countername) desc -- Most common performance insertions by perf counter name: select pcv.countername, count (pcv.countername) as total from performancedataallview as pdv, performancecounterview as pcv where (pdv.performancesourceinternalid = pcv.performancesourceinternalid) group by pcv.countername order by count (pcv.countername) desc -- STATE SECTION -- ------------------- -- State changes per day: SELECT CASE WHEN(GROUPING(CONVERT(VARCHAR(20), TimeGenerated, 101)) = 1) THEN 'All Days' ELSE CONVERT(VARCHAR(20), TimeGenerated, 101) END AS DayGenerated, COUNT(*) AS NumEventsPerDay FROM StateChangeEvent WITH (NOLOCK) GROUP BY CONVERT(VARCHAR(20), TimeGenerated, 101) WITH ROLLUP ORDER BY DayGenerated DESC -- MANAGEMENT PACK INFO -- -------------------------- -- To find all installed Management Packs and their version: SELECT MPName, MPFriendlyName, MPVersion, MPIsSealed FROM ManagementPack WITH(NOLOCK) ORDER BY MPName -- Rules per MP: SELECT mp.MPName, COUNT(*) As RulesPerMP FROM Rules r INNER JOIN ManagementPack mp ON mp.ManagementPackID = r.ManagementPackID GROUP BY mp.MPName ORDER BY RulesPerMP DESC -- Rules per MP by category: SELECT mp.MPName, r.RuleCategory, COUNT(*) As RulesPerMPPerCategory FROM Rules r INNER JOIN ManagementPack mp ON mp.ManagementPackID = r.ManagementPackID GROUP BY mp.MPName, r.RuleCategory ORDER BY RulesPerMPPerCategory DESC -- Monitors Per MP: SELECT mp.MPName, COUNT(*) As MonitorsPerMPPerCategory FROM Monitor m INNER JOIN ManagementPack mp ON mp.ManagementPackID = m.ManagementPackID GROUP BY mp.MPName ORDER BY COUNT(*) Desc -- To find your Monitor by common name: select * from Monitor Inner join LocalizedText LT on LT.ElementName = Monitor.MonitorName where LTValue = 'My Monitor Name' -- To find all Rules per MP that generate an alert: declare @mpid as varchar(50) select @mpid= managementpackid from managementpack where mpName='Microsoft.BizTalk.Server.2006.Monitoring' select rl.rulename,rl.ruleid,md.modulename from rules rl, module md where md.managementpackid = @mpid and rl.ruleid=md.parentid and moduleconfiguration like '%<AlertLevel>50</AlertLevel>%' -- To find all rules per MP with a given alert severity: declare @mpid as varchar(50) select @mpid= managementpackid from managementpack where mpName='Microsoft.BizTalk.Server.2006.Monitoring' select rl.rulename,rl.ruleid,md.modulename from rules rl, module md where md.managementpackid = @mpid and rl.ruleid=md.parentid and moduleconfiguration like '%<Severity>2</Severity>%' -- Number of instances of a type: (Number of disks, computers, databases, etc that OpsMgr has discovered) SELECT mt.ManagedTypeID, mt.TypeName, COUNT(*) AS NumEntitiesByType FROM BaseManagedEntity bme WITH(NOLOCK) LEFT JOIN ManagedType mt WITH(NOLOCK) ON mt.ManagedTypeID = bme.BaseManagedTypeID WHERE bme.IsDeleted = 0 GROUP BY mt.ManagedTypeID, mt.TypeName ORDER BY COUNT(*) DESC -- Number of Views per Management Pack: SELECT mp.MPName, v.ViewVisible, COUNT(*) As ViewsPerMP FROM [Views] v INNER JOIN ManagementPack mp ON mp.ManagementPackID = v.ManagementPackID GROUP BY mp.MPName, v.ViewVisible ORDER BY v.ViewVisible DESC, COUNT(*) Desc -- Grooming: SELECT * FROM PartitionAndGroomingSettings WITH (NOLOCK) -- All managed computers count: SELECT COUNT(*) AS NumManagedComps FROM ( SELECT bme2.BaseManagedEntityID FROM BaseManagedEntity bme WITH (NOLOCK) INNER JOIN BaseManagedEntity bme2 WITH (NOLOCK) ON bme2.BaseManagedEntityID = bme.TopLevelHostEntityID WHERE bme2.IsDeleted = 0 AND bme2.IsDeleted = 0 AND bme2.BaseManagedTypeID = (SELECT TOP 1 ManagedTypeID FROM ManagedType WHERE TypeName = 'microsoft.windows.computer') GROUP BY bme2.BaseManagedEntityID ) AS Comps -- Classes available in the DB: SELECT * FROM ManagedType -- Classes available in the DB for Microsoft Windows type: SELECT * FROM ManagedType WHERE TypeName LIKE 'Microsoft.Windows.%' -- Every property of every class: SELECT * FROM MT_Computer -- All instances of all types once discovered SELECT * FROM BaseManagedEntity -- To get the state of every instance of a particular monitor the following query can be run, (replace <MonitorName> with the name of the monitor): SELECT bme.FullName, bme.DisplayName, s.HealthState FROM state AS s, BaseManagedEntity as bme WHERE s.basemanagedentityid = bme.basemanagedentityid AND s.monitorid IN (SELECT MonitorId FROM Monitor WHERE MonitorName = '<MonitorName>') -- For example, this gets the state of the Microsoft.SQLServer.2005.DBEngine.ServiceMonitor for each instance of the SQL 2005 Database Engine class. SELECT bme.FullName, bme.DisplayName, s.HealthState FROM state AS s, BaseManagedEntity as bme WHERE s.basemanagedentityid = bme.basemanagedentityid AND s.monitorid IN (SELECT MonitorId FROM Monitor WHERE MonitorName = 'Microsoft.SQLServer.2005.DBEngine.ServiceMonitor') -- To find the overall state of any object in OpsMgr the following query should be used to return the state of the System.EntityState monitor: SELECT bme.FullName, bme.DisplayName, s.HealthState FROM state AS s, mt_managedcomputer AS mt, BaseManagedEntity as bme WHERE s.basemanagedentityid = bme.basemanagedentityid AND s.monitorid IN (SELECT MonitorId FROM Monitor WHERE MonitorName = 'System.Health.EntityState') -- Rules are stored in a table named Rules. This table has columns linking rules to classes and Management Packs. -- To find all rules in a Management Pack use the following query and substitute in the required Management Pack name: SELECT * FROM Rules WHERE ManagementPackID = (SELECT ManagementPackID from ManagementPack WHERE MPName = 'Microsoft.Windows.Server.2003') -- To find all rules targeted at a given class use the following query and substitute in the required class name: SELECT * FROM Rules WHERE TargetManagedEntityType = (SELECT ManagedTypeId FROM ManagedType WHERE TypeName = 'Microsoft.Windows.Computer') -- The Alert table contains all alerts currently open in OpsMgr. This includes resolved alerts until they are groomed out of the database. To get all alerts across all instances of a given monitor use the following query and substitute in the required monitor name: SELECT * FROM Alert WHERE ProblemID IN (SELECT MonitorId FROM Monitor WHERE MonitorName = 'Microsoft.SQLServer.2005.DBEngine.ServiceMonitor') -- To retrieve all alerts for all instances of a specific class use the following query and substitute in the required table name, in this example MT_DBEngine is used to look for SQL alerts: SELECT * FROM Alert WHERE BaseManagedEntityID IN (SELECT BaseManagedEntityID from MT_DBEngine) -- To determine which table is currently being written to for event and performance data use the following query: SELECT * FROM PartitionTables WHERE IsCurrent = 1 -- To retrieve events generated by a specific rule use the following query and substitute in the required rule ID: SELECT * FROM Event_00 WHERE RuleId = (SELECT RuleId FROM Rules WHERE RuleName = 'Microsoft.Windows.Server.2003.OperatingSystem.CleanShutdown.Collection ') -- To retrieve all events generated by rules in a specific Management Pack the following query can be used where the Management Pack name is substituted with the required value: SELECT * FROM EventAllView WHERE RuleID IN (SELECT RuleId FROM Rules WHERE ManagementPackId = (SELECT ManagementPackId FROM ManagementPack WHERE MPName = 'Microsoft.Windows.Server.2003')) -- To retrieve all performance data for a given rule in a readable format use the following query: SELECT pc.ObjectName, pc.CounterName, ps.PerfmonInstanceName, pd.SampleValue, pd.TimeSampled FROM PerformanceDataAllView AS pd, PerformanceCounter AS pc, PerformanceSource AS ps WHERE pd.PerformanceSourceInternalId IN (SELECT PerformanceSourceInternalId FROM PerformanceSource WHERE RuleId = (SELECT RuleId FROM Rules WHERE RuleName =' Microsoft.Windows.Server.2003.LogicalDisk.FreeSpace.Collection')) -- Information on existing User Roles: SELECT UserRoleName, IsSystem from userrole -- Grooming in the DataWarehouse: -- Grooming no longer uses SQL agent jobs. Grooming is handled by scheduled stored procedures, that run much more frequently, which provides less impact than in the previous version. -- Default grooming for the DW for each dataset, to examine Data Warehouse grooming settings: SELECT AggregationIntervalDurationMinutes, BuildAggregationStoredProcedureName, GroomStoredProcedureName, MaxDataAgeDays, GroomingIntervalMinutes FROM StandardDatasetAggregation -- The first row is the interval in minutes. -- NULL is raw data, 60 is hourly, and 1440 is daily. -- The second and third row shows what data it is -- MaxDataAgeDays has the retention period in days - this is the field to update if the administrator wants to lower the days of retention. -- RAW alert – 400 days -- RAW event – 100 days -- RAW perf – 10 days (hourly and daily perf = 400 days) -- RAW state – 180 days (hourly and daily state = 400 days) -- AEM Queries (Data Warehouse): -- Default query to return all RAW AEM data: select * from [CM].[vCMAemRaw] Rw inner join dbo.AemComputer Computer on Computer.AemComputerRowID = Rw.AemComputerRowID inner join dbo.AemUser Usr on Usr.AemUserRowId = Rw.AemUserRowId inner join dbo.AemErrorGroup EGrp on Egrp.ErrorGroupRowId = Rw.ErrorGroupRowId Inner join dbo.AemApplication App on App.ApplicationRowId = Egrp.ApplicationRowId -- Count the raw crashes per day: SELECT CONVERT(char(10), DateTime, 101) AS "Crash Date (by Day)", COUNT(*) AS "Number of Crashes" FROM [CM].[vCMAemRaw] GROUP BY CONVERT(char(10), DateTime, 101) ORDER BY "Crash Date (by Day)" DESC -- Count the total number of raw crashes in the DW database: select count(*) from CM.vCMAemRaw -- Default grooming for the DW for the AEM dataset: (Aggregated data kept for 400 days, RAW 30 days by default) SELECT AggregationTypeID, BuildAggregationStoredProcedureName, GroomStoredProcedureName, MaxDataAgeDays, GroomingIntervalMinutes FROM StandardDatasetAggregation WHERE BuildAggregationStoredProcedureName = 'AemAggregate' -- MISCELLANEOUS SECTION -- --------------------------- -- Simple query to display large tables, to determine what is taking up space in the database: SELECT so.name, 8 * Sum(CASE WHEN si.indid IN (0, 1) THEN si.reserved END) AS data_kb, Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0) AS index_kb, Coalesce(8 * Sum(CASE WHEN si.indid IN (255) THEN si.reserved END), 0) AS blob_kb FROM dbo.sysobjects AS so JOIN dbo.sysindexes AS si ON (si.id = so.id) WHERE 'U' = so.type GROUP BY so.name ORDER BY data_kb DESC -- Is SQL broker enabled? SELECT is_broker_enabled FROM sys.databases WHERE name = 'OperationsManager' -- How to identify your version of SQL server: SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition') -- SQL 2005: -- SQL Server 2005 RTM 2005.90.1399 -- SQL Server 2005 SP1 2005.90.2047 -- SQL Server 2005 SP1 plus 918222 2005.90.2153 -- SQL Server 2005 SP2 2005.90.3042 |

Hi.
I want to display all monitors and rulea per server in one report. How can i do that? Any suggestions ? queries ?
Thanks.
Yaniv.
Is there a query to retrieve all rules and monitors running on a computer? I am aware of the effective configuration viewer tool but I want to do this with a sql query.
Is there a query that will list the pending agent installations?
I’m not sure. I have to get a new VM up and running to test some additional queries and add to the list though, so there probably is.
Hi,
i have a problem to make a query which show me all SQL 2000 Databses (only 2000)
With Name, Server, Instance
Can you help me?