{"id":1322,"date":"2012-08-30T22:12:24","date_gmt":"2012-08-30T21:12:24","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=1322"},"modified":"2012-08-30T22:14:34","modified_gmt":"2012-08-30T21:14:34","slug":"sql-server-mirroring-monitorozasa","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2012\/08\/30\/sql-server-mirroring-monitorozasa\/","title":{"rendered":"SQL Server mirroring monitoroz\u00e1sa"},"content":{"rendered":"<p>Ha a mirroringgal gond van, arr\u00f3l fontos azonnal tudni. K\u00e9t esetet szoktunk figyelni. Az egyik a state change, azaz ha valami\u00e9rt \u00e1tv\u00e1ndorol a kiszolg\u00e1l\u00e1s az egyik l\u00e1br\u00f3l a m\u00e1sikra, illetve, ha feltorl\u00f3dnak a tranzakci\u00f3k valamelyik oldalon.<\/p>\n<p>A monitoroz\u00e1sra vannak be\u00e9p\u00edtett dolgok, ezekr\u0151l <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/cc966392.aspx\">itt lehet b\u0151vebben olvasni<\/a>, itt szinte minden inf\u00f3 megvan az alertez\u00e9s fel\u00e9p\u00edt\u00e9s\u00e9hez.<br \/>\nK\u00e9t probl\u00e9m\u00e1s pontba akadtunk bele. Az el\u0151bbi cikkben a WMI esem\u00e9nyek hat\u00e1s\u00e1ra csak sz\u00e1mok j\u00f6ttek vissza st\u00e1tuszk\u00e9nt, ezek nem t\u00fal besz\u00e9desek egy emailben. Ezeket el\u00e9g k\u00f6nny\u0171 visszafejteni stringekk\u00e9:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\ndeclare @msg nvarchar(4000) = &#039;State of $(ESCAPE_SQUOTE(WMI(DatabaseName))) database changed to &#039;&#039;&#039;;\r\ndeclare @state nvarchar(50) = &#039;$(ESCAPE_SQUOTE(WMI(State)))&#039;;\r\ndeclare @newStateString nvarchar(100) =\r\ncase @state\r\nwhen &#039;2&#039; then &#039;Synchronized Principal without Witness&#039;\r\nwhen &#039;7&#039; then &#039;Manual Failover&#039;\r\n...\r\nend;\r\n\r\nset @msg += @newStateString + &#039;&#039;&#039; on $(ESCAPE_SQUOTE(WMI(StartTime)))&#039;;\r\n\r\nEXEC msdb..sp_send_dbmail @profile_name=&#039;SQL Server 2008 Mirroring Notifications&#039;,\r\n@recipients=&#039;foo@bar.com&#039;,\r\n@subject= &#039;DB Mirroring Alert&#039;,\r\n@body=@msg;\r\n<\/pre>\n<p>Lehetne eleg\u00e1nsabban is lookup t\u00e1bl\u00e1val, de a c\u00e9lnak ez megfelelt.<\/p>\n<p>A m\u00e1sik k\u00e9rd\u00e9s macar\u00e1sabb. Egy job percenk\u00e9nt mintav\u00e9telezi a mirror queue-jainak a m\u00e9rt\u00e9t, \u00e9s ezeket be\u00edrja egy rendszert\u00e1bl\u00e1ba. Ha valamelyik t\u00falmegy egy megadott hat\u00e1r\u00e9rt\u00e9ken, akkor ez be\u00edrja az event logba, onnan egy alert ki tudja olvasni, \u00e9s emailt k\u00fcldeni r\u00f3la. Csak \u00e9ppen a l\u00e9nyeg nincs ebben benne, melyik adatb\u00e1zissal van a baj. Ez <a href=\"http:\/\/connect.microsoft.com\/SQLServer\/feedback\/details\/657230\/alerting-on-database-mirroring-events\">bug, ez van<\/a>.<br \/>\nHogy valami k\u00e9p\u00fcnk m\u00e9gis legyen m\u00e1r email alapj\u00e1n mi a gond, az al\u00e1bbi jobot futtatjuk le a threshold alert alapj\u00e1n:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nEXEC msdb..sp_send_dbmail @profile_name=&#039;SQL Server 2008 Mirroring Notifications&#039;,\r\n@recipients=&#039;foo@bar.com&#039;,\r\n@subject= &#039;DB Mirroring Alert&#039;,\r\n@execute_query_database = &#039;msdb&#039;,\r\n@query = &#039;\r\nselect * from (select distinct(database_id) id from dbo.dbm_monitor_data) d\r\ncross apply\r\n(select top 5 cast(DB_NAME(database_id) as nvarchar(20)) db, local_time, redo_queue_size, send_queue_size\r\nfrom dbo.dbm_monitor_data\r\nwhere ((send_queue_size &gt; 0 or redo_queue_size &gt; 0) and local_time &gt; GETDATE() - 3  and database_id = d.id)) t\r\norder by db, local_time desc&#039;\r\n<\/pre>\n<p>Ez az ut\u00f3bbi 3 nap torl\u00f3d\u00e1sait k\u00fcldi el emailben, ebb\u0151l m\u00e1r l\u00e1tszik, melyik db akadt el.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ha a mirroringgal gond van, arr\u00f3l fontos azonnal tudni. K\u00e9t esetet szoktunk figyelni. Az egyik a state change, azaz ha valami\u00e9rt \u00e1tv\u00e1ndorol&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4,30,21,58,77,78],"tags":[],"class_list":["post-1322","post","type-post","status-publish","format-standard","hentry","category-adatbazisok","category-szakmai-elet","category-sql-server","category-sql-server-2005","category-sql-server-2008","category-sql-server-2008-r2","category-sql-server-2012"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=1322"}],"version-history":[{"count":3,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1322\/revisions"}],"predecessor-version":[{"id":1325,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1322\/revisions\/1325"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=1322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=1322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=1322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}