Dienstag, 10. September 2013

SBS 2008 Monitoring Datenbank verkleinern

Nach langer Laufzeit kann sich auf einem SBS 2008 die Monitoring Datenbank auf eine beträchtliche Größe aufblähen. Dies führt u.a. zu langen Ladezeiten oder Fehlern der SBS Konsole.

Spätestens wenn die Datenbank ("SBSMonitoring.mdf" und "SBSMonitoring_log.LDF") eine Größe von 4 GB erreicht hat (SQL Express Maximum), sollte man handeln, da das Monitoring seinen Dienst einstellt.


zur Lösung des Problem kann ein Wartungsskript ausgeführt werden.
Dies entfernt (unnötige) Datensätze, die älter als 90 Tage sind, aus der Datenbank.

Download (Microsoft):
http://cid-d5fe25afb6c3615f.skydrive.live.com/self.aspx/.Public/updateSBSMonitoring.sql

Ausführung des Skripts:
sqlcmd -S %computername%\SBSMonitoring -E -i c:\path\to\updateSBSMonitoring.sql

Dieser Vorgang kann bei einer großen Datenbank mehrere Minuten bis Stunden dauern.

Schließlich sollte im Erfolgsfall erscheinen:
Changed database context to 'SBSMonitoring'
(1 rows affected)

Nun kann die Datenbank verkleinert werden:
- SQL Management Studio starten
- Mit der Instanz ".\SBSMONITORING" über "Windows Authentifizierung" verbinden
- Die Datenbank "SBSMonitoring" auswählen
- rechte Maustaste - Aufgaben - Verkleinern - Datenbank

Dies sollte nochmal mehrere Minuten benötigen.
Danach sollte sich die Größe der Datenbank deutlich (in den MB Bereich) reduziert haben.

8 Kommentare:

  1. Super. Hat bestens Funktioniert. Danke für den Tipp.

    AntwortenLöschen
  2. Wir haben das Wartungsskript an einem SBS 2011 ausprobiert, hier hatte die sbsmonitoring.mdf schon die 10240 MB Größe erreicht, leider läuft das Skript nicht durch, es kommt die selbe Fehlermeldung mit Ereignis ID 1105, wie in der Ereignisanzeige sonst auch. Gibt es sonst noch eine Möglichkeit die Datenbank zu verkleinern?

    AntwortenLöschen
  3. Ich habe die Erfahrung gemacht, dass man bei extrem großer DB bzw. stark ausgelasteten Servern die Schritte mehrmals wiederholen muss, da es zu Timeouts kommen kann.
    Also nach Skript-Lauf, DB verkleinern, Größe checken, nochmal Skript laufen lassen, nochmal verkleinern, usw...

    AntwortenLöschen
  4. Bei mir wird die SBSMonitoring_log so groß, dass die Festplatte voll läuft.
    Kann ich das irgendwie umgehen?

    AntwortenLöschen
    Antworten
    1. Das Transaktionsprotokoll kann wie hier beschrieben verkleinert werden:
      http://www.faq-o-matic.net/2014/08/27/sql-server-transaktionsprotokoll-verkleinern/

      Löschen
  5. der download link ist nicht mehr vorhanden. bitte aktualisieren oder hier rein posten. danke!

    AntwortenLöschen
    Antworten
    1. Bei mir funktioniert der Link nach wie vor.

      Trotzdem für alle Fälle hier das Skript:

      USE SBSMonitoring
      UPDATE [SBSMonitoring].[dbo].[Settings] SET [Value] = 30 WHERE [Name] = 'CleanupPeriod'
      EXECUTE [SBSMonitoring].[dbo].[CleanupDatabase]
      CREATE NONCLUSTERED INDEX [_SBS_BLOG_index_WMICollectedData_5_K4_K1_K5_2] ON [dbo].[WMICollectedData] ([WMIPropertyID] ASC,[ID] ASC, [WMIInstanceID] ASC) INCLUDE ( [DateCollected]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
      CREATE NONCLUSTERED INDEX [_SBS_BLOG_index_Reports_5_K2_K3_1_4] ON [dbo].[Reports] ([ConfigurationID] ASC, [DateGenerated] ASC) INCLUDE ([ID], [Data]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
      CREATE NONCLUSTERED INDEX [_SBS_BLOG_index_WMICollectedData_5_K2D_K4_K5] ON [dbo].[WMICollectedData] ([DateCollected] DESC, [WMIPropertyID] ASC, [WMIInstanceID] ASC) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
      CREATE INDEX [_SBS_BLOG_index_Alerts_8_7_] ON [SBSMonitoring].[dbo].[Alerts] ([DefinitionID], [ComputerID]) INCLUDE ([DateOccured])
      CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_5_1_4] ON [dbo].[WMICollectedData]([WMIInstanceID], [ID], [WMIPropertyID])
      CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_4_1_5_2_3] ON [dbo].[WMICollectedData]([WMIPropertyID], [ID], [WMIInstanceID], [DateCollected], [StatusID])
      CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_5_1_3_4] ON [dbo].[WMICollectedData]([WMIInstanceID], [ID], [StatusID], [WMIPropertyID])
      CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_5_4_2] ON [dbo].[WMICollectedData]([WMIInstanceID], [WMIPropertyID], [DateCollected])
      CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_2_1_5] ON [dbo].[WMICollectedData]([DateCollected], [ID], [WMIInstanceID])
      CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_1_3_5_2] ON [dbo].[WMICollectedData]([ID], [StatusID], [WMIInstanceID], [DateCollected])

      Löschen
  6. Hallo,
    wie groß kann die LOG-Datei werden, wenn das Script durchläuft? Meine DB ist auch 10GB groß und ich habe noch 60GB frei.
    Gruß
    Michael

    AntwortenLöschen