Windows SBS-konsollen av Windows Small Business Server 2008 kan krasje, vises "Ikke tilgjengelig" for andre varsler eller krever en lang tid å vise statusene sikkerhet og andre varsler


Symptomer


Windows SBS-konsollen av Windows Small Business Server 2008 kan vise én eller flere av følgende symptomer.

Symptom 1

Status Ikke tilgjengelig vises i Andre varsler under Nettverk Essentials sammendrag av startsiden .

Symptom 2

Et unntak som ligner på følgende, logges i filen Console.log:
[5164] 090620.094247.9164: Exception: --------------------------------------- 
An exception of type 'Type: System.Data.SqlClient.SqlException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' has occurred.
Timestamp: 06/20/2009 09:42:47
Message: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Stack: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
at Microsoft.WindowsServerSolutions.SystemHealth.Monitoring.MonitoringSQLDataStore.GetAlertCountPerType(ComputerType type)

Symptom 3

Etter en lang tid vises statusene for Sikkerhet og Andre varsler under Nettverk Essentials sammendrag -delen av hjemmesiden .

Symptom 4

Etter en lang tid vises verdiene i kolonnen Status for sikkerhet og Andre varsler i kategorien datamaskiner i nettverket -siden.

Symptom 5

Når du prøver å generere en rapport i kategorien rapporter manuelt, vil Windows SBS-konsollen kan krasje Hvis det er merket av for Sikkerhet til å legge til sikkerhetsinnhold i rapporten.

Årsak


Dette problemet oppstår fordi databasen overvåking er svært store. Windows SBS-konsollen kan ikke spørre databasen overvåking raskt.

Oppløsning


Hvis du vil løse dette problemet, kjører du følgende Windows PowerShell-skript. Dette skriptet reduserer historiske data i databasen overvåking ved å redusere den historiske data som er beholdt fra 90 dager til 30 dager. Også oppretter dette skriptet indekser som kan brukes til å kjøre spørringene raskere.

Hvis du vil kjøre dette skriptet, gjør du følgende:
  1. Klikk Start, Skriv Notisblokk i søkeboksen , og klikk deretter Notisblokk i søkeresultatet.
  2. Kopier og Lim inn følgende skript i Notisblokk:
    cls;#########################################################################
    ### SQL Scripts
    #########################################################################
    $sqlScript = @"
    USE [SBSMonitoring]
    BEGIN TRAN T1
    UPDATE [SBSMonitoring].[dbo].[Settings] SET [Value] = 30 WHERE [Name] = 'CleanupPeriod'
    COMMIT TRAN T1
    SELECT N'Set CleanupPeriod to 30 days'
    EXECUTE [SBSMonitoring].[dbo].[CleanupDatabase]
    SELECT N'CleanupDatabase job done.'

    -- Create Indexes
    IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_index_WMICollectedData_5_K4_K1_K5_2')
    DROP INDEX [_SBS_BLOG_index_WMICollectedData_5_K4_K1_K5_2] ON [dbo].[WMICollectedData] WITH ( ONLINE = OFF )
    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]
    SELECT N'Succeeded to create index _SBS_BLOG_index_WMICollectedData_5_K4_K1_K5_2'

    IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[Reports]') AND name = N'_SBS_BLOG_index_Reports_5_K2_K3_1_4')
    DROP INDEX [_SBS_BLOG_index_Reports_5_K2_K3_1_4] ON [dbo].[Reports] WITH ( ONLINE = OFF )
    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]
    SELECT N'Succeeded to create index _SBS_BLOG_index_Reports_5_K2_K3_1_4'

    IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_index_WMICollectedData_5_K2D_K4_K5')
    DROP INDEX [_SBS_BLOG_index_WMICollectedData_5_K2D_K4_K5] ON [dbo].[WMICollectedData] WITH ( ONLINE = OFF )
    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]
    SELECT N'Succeeded to create index _SBS_BLOG_index_WMICollectedData_5_K2D_K4_K5'

    IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[Alerts]') AND name = N'_SBS_BLOG_index_Alerts_8_7_')
    DROP INDEX [_SBS_BLOG_index_Alerts_8_7_] ON [dbo].[Alerts] WITH ( ONLINE = OFF )
    CREATE INDEX [_SBS_BLOG_index_Alerts_8_7_] ON [SBSMonitoring].[dbo].[Alerts] ([DefinitionID], [ComputerID]) INCLUDE ([DateOccured])
    SELECT N'Succeeded to create index _SBS_BLOG_index_Alerts_8_7_'

    -- Create Statistics
    IF EXISTS (SELECT * FROM sys.stats WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_stat_WMICollectedData_5_1_4')
    DROP STATISTICS [dbo].[WMICollectedData].[_SBS_BLOG_stat_WMICollectedData_5_1_4]
    CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_5_1_4] ON [dbo].[WMICollectedData]([WMIInstanceID], [ID], [WMIPropertyID])
    SELECT N'Succeeded to create statistics _SBS_BLOG_stat_WMICollectedData_5_1_4'

    IF EXISTS (SELECT * FROM sys.stats WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_dta_stat_WMICollectedData_4_1_5_2_3')
    DROP STATISTICS [dbo].[WMICollectedData].[_SBS_BLOG_dta_stat_WMICollectedData_4_1_5_2_3]
    CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_4_1_5_2_3] ON [dbo].[WMICollectedData]([WMIPropertyID], [ID], [WMIInstanceID], [DateCollected], [StatusID])
    SELECT N'Succeeded to create statistics _SBS_BLOG_dta_stat_WMICollectedData_4_1_5_2_3'

    IF EXISTS (SELECT * FROM sys.stats WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_dta_stat_WMICollectedData_5_1_3_4')
    DROP STATISTICS [dbo].[WMICollectedData].[_SBS_BLOG_dta_stat_WMICollectedData_5_1_3_4]
    CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_5_1_3_4] ON [dbo].[WMICollectedData]([WMIInstanceID], [ID], [StatusID], [WMIPropertyID])
    SELECT N'Succeeded to create statistics _SBS_BLOG_dta_stat_WMICollectedData_5_1_3_4'

    IF EXISTS (SELECT * FROM sys.stats WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_dta_stat_WMICollectedData_5_4_2')
    DROP STATISTICS [dbo].[WMICollectedData].[_SBS_BLOG_dta_stat_WMICollectedData_5_4_2]
    CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_5_4_2] ON [dbo].[WMICollectedData]([WMIInstanceID], [WMIPropertyID], [DateCollected])
    SELECT N'Succeeded to create statistics _SBS_BLOG_dta_stat_WMICollectedData_5_4_2'

    IF EXISTS (SELECT * FROM sys.stats WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_stat_WMICollectedData_2_1_5')
    DROP STATISTICS [dbo].[WMICollectedData].[_SBS_BLOG_stat_WMICollectedData_2_1_5]
    CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_2_1_5] ON [dbo].[WMICollectedData]([DateCollected], [ID], [WMIInstanceID])
    SELECT N'Succeeded to create statistics _SBS_BLOG_stat_WMICollectedData_2_1_5'

    IF EXISTS (SELECT * FROM sys.stats WHERE object_id = OBJECT_ID(N'[dbo].[WMICollectedData]') AND name = N'_SBS_BLOG_stat_WMICollectedData_1_3_5_2')
    DROP STATISTICS [dbo].[WMICollectedData].[_SBS_BLOG_stat_WMICollectedData_1_3_5_2]
    CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_1_3_5_2] ON [dbo].[WMICollectedData]([ID], [StatusID], [WMIInstanceID], [DateCollected])
    SELECT N'Succeeded to create statistics _SBS_BLOG_stat_WMICollectedData_1_3_5_2'
    "@;

    $userInput = Read-Host -Prompt @"
    Before running this script, follow the instructions in the Knowledge Base article 981939 to back up your database files.
    If you are ready to run the script, type the letter 'Y' to confirm that you have backed up the database, and then press 'Enter'.
    "@;

    if([System.String]::Compare($userInput, "Y", $true) -ne 0)
    {
    exit;
    }

    ###############################################################################
    ### Save the sql file to temp folder
    ###############################################################################
    $sqlFile = [System.IO.Path]::Combine($Env:TEMP, "UpdateSBSMonitoring.sql");
    $sqlScript | Out-File -FilePath "$sqlFile" -Force;

    ###############################################################################
    ### Get SBS2008 log folder
    ###############################################################################
    $regKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WSSG";
    $regVal = "ProductLogDir";
    $sqlLogPath =[System.Environment]::ExpandEnvironmentVariables([Microsoft.Win32.Registry]::GetValue($regKey, $regVal, $null));
    if([System.String]::IsNullOrEmpty($sqlLogPath))
    {
    $sqlLogPath = $Env:TEMP;
    }
    $dateTime = Get-Date;
    $sqlLogFile = "UpdateSBSMonitoring_{1}_{0:HH}{0:mm}{0:ss}.log" -f $dateTime, $dateTime.ToShortDateString().Replace('/', '_');
    $sqlLogFile = [System.IO.Path]::Combine($sqlLogPath, $sqlLogFile);

    ###############################################################################
    ### Call " SqlCmd " to execute the sql script
    ###############################################################################
    $cmdPara = " -S $Env:COMPUTERNAME\SBSMonitoring -E -i `"$sqlFile`"";
    Write-Host ("Sqlcmd" + $cmdPara);

    $processStartInfo = New-Object System.Diagnostics.ProcessStartInfo("Sqlcmd", $cmdPara);
    $processStartInfo.UseShellExecute = $false;
    $processStartInfo.ErrorDialog = $true;
    $processStartInfo.CreateNoWindow = $true;
    $processStartInfo.RedirectStandardOutput = $true;
    $processStartInfo.RedirectStandardError = $true;
    $process = [System.Diagnostics.Process]::Start($processStartInfo);

    $startTime = [System.DateTime]::Now;
    $process.WaitForExit();
    $finishTime = [System.DateTime]::Now;
    $stdOutput = $process.StandardOutput.ReadToEnd();
    $errOutput = $process.StandardError.ReadToEnd();
    if($process.ExitCode -eq 0 -and $errOutput.Length -eq 0)
    {
    Write-Host $stdOutput;
    Write-Host "The script ran successfully."
    }
    else
    {
    Write-Host $stdOutput;
    Write-Host $errOutput;
    Write-Host "An error occurred while running the script. For details about this error, see the log file at $sqlLogFile.";
    }
    [System.String]::Join([System.Environment]::NewLine, `
    (("Sqlcmd" + $cmdPara), `
    ("Started at: " + $startTime), `
    ("Finished at:" + $finishTime), `
    "Standard Output: ", $stdOutput, `
    "Error Output: ", $errOutput))| Out-File $sqlLogFile -Force;

  3. Lagre filen ved hjelp av følgende filnavn:
    KB981939.ps1.

    Obs! Vi anbefaler at du lagrer filen på en plassering som du kan enkelt få tilgang til. Hvis du for eksempel lagre filen til mappen C:\windows\temp .
  4. Ta sikkerhetskopi av databasefilene for overvåking . Følg disse trinnene:
    1. Klikk Start, Skriv inn Services.msc i Søk -boksen Høyreklikk services.msc i søkeresultatet, og deretter klikker du Kjør som administrator.
      UAC Hvis du blir bedt om et administratorpassord eller en bekreftelse, skriver du inn passordet eller gir en bekreftelse.
    2. Finn tjenesten SQL Server (SBSMONITORING) .
    3. Høyreklikk tjenesten SQL Server (SBSMONITORING) , og deretter klikker du Stopp.
    4. Ta sikkerhetskopi av filene i følgende mappe:
      C:\Programfiler\Microsoft filer (x86) \Microsot SQL Server\MSSQL.1\MSSQL\Data
    5. Høyreklikk tjenesten SQL Server (SBSMONITORING) , og klikk deretter Start.
  5. Klikk Start, Skriv inn PowerShell i søkeboksen, Høyreklikk Windows PowerShell moduler i søkeresultatet, og deretter Kjør som administrator.
    UAC
    Hvis du blir bedt om et administratorpassord eller en bekreftelse, skriver du inn passordet eller gir en bekreftelse.
  6. I vinduet Windows PowerShell-moduler , endre gjeldende mappe til plasseringen der du lagret KB981939.ps1-filen.
  7. Skriv inn følgende kommando for å kjøre Windows PowerShell-skriptet, og trykk deretter ENTER:
    .\kb981939.ps1
    Obs! Du må konfigurere Windows PowerShell-policyen for kjøring av skript skal kjøres før du kjører denne kommandoen. Hvis ikke, får du følgende feilmelding når du kjører kommandoen:
    Filen C:\KB981939.ps1 kan ikke lastes inn fordi kjøring av skript er deaktivert på dette systemet. Se "get-help about_signing" for flere detaljer.

    Hvis du vil ha mer informasjon om hvordan du konfigurerer Windows PowerShell-policyen for kjøring, kan du gå til følgende Microsoft TechNet-webområde:
  8. Skriv inn Y når du får følgende melding:
    Før du kjører dette skriptet, kan du følge instruksjonene i Knowledge Base-artikkel 981939-t for å ta sikkerhetskopi av databasefiler.
    Hvis du er klar til å kjøre skriptet, skriver du inn bokstaven Y for å bekrefte at du har tatt sikkerhetskopi av databasen, og trykk "Enter".

    Obs! Hvis databasen overvåking er svært stort, kan skriptet kjøres i 10 minutter eller lenger.

    Hvis skriptet ikke kjøres riktig, må du gjenopprette en sikkerhetskopi av databasefilene for overvåking .

Referanser


Hvis du vil ha mer informasjon om dette problemet, kan du gå til følgende TechNet-webområde: