Windows SBS konzola sistema Windows Small Business Server 2008 može da padne, prikaže poruku "Nije dostupno" za druga upozorenja ili joj bude potrebno dosta vremena za prikaz statusa bezbednosti i drugih upozorenja

Primenjuje se na
Windows Small Business Server Windows Small Business Server 2008 Standard Windows Small Business Server 2008 Premium

Simptomi

Windows SBS konzola sistema Windows Small Business Server 2008 može da pokazuje neke od sledećih simptoma.

Simptom 1

Status "Nije dostupno " pojavljuje se u okviru odeljka "Druga obaveštenja " u odeljku " Rezime osnovne mreže " na matičnoj stranici.

Simptom 2

Izuzetak koji podseća na sledeći evidentira se u Console.log datoteci:

Napomena

[5164] 090620.094247.9164: Izuzetak:

Došlo je do izuzetka tipa "Type: System.Data.SqlClient.SqlException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
Vremenska oznaka: 20.06.2009. 09:42:47
Poruka: Istekao je vremensko ograničenje. Period isteka vremena koji je protekao pre završetka operacije ili server ne reaguje.
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()
                   u System.Data.SqlClient.SqlDataReader.get_MetaData()
                   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, 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, metod niske, rezultat DbAsyncResult)
                   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior, cmdBehavior, RunBehavior, Bulov povratakTok, metod niske)
                   at System.Data.SqlClient.SqlCommand.ExecuteScalar()
                   na lokaciji Microsoft.WindowsServerSolutions.SystemHealth.Monitoring.MonitoringSQLDataStore.GetAlertCountPerType(TypeType ComputerType)

Simptom 3

Nakon dužeg vremena statusi se za bezbednosna i druga upozorenja pojavljuju u odeljku " Rezime osnove mreže " na matičnoj stranici.

Simptom 4

Nakon dužeg vremena, vrednosti se pojavljuju u koloni " Bezbednosni status " i u koloni "Druga upozorenja " na kartici "Računari " na stranici " Mreža ".

Simptom 5

Kada pokušate ručno da generišete izveštaj na kartici "Izveštaji ", Windows SBS konzola može prestati sa radom ako je potvrđen izbor u polju za potvrdu " Bezbednost " da bi se bezbednosni sadržaj dodao u izveštaj.

Uzrok

Do ovog problema dolazi zato što je baza podataka nadgledanja veoma velika. Windows SBS konzola ne može brzo da izvrši upit nad bazom podataka nadgledanja.

Rešenje

Da biste rešili ovaj problem, pokrenite sledeću Windows PowerShell skriptu. Ova skripta smanjuje istorijske podatke u bazi podataka nadgledanja tako što smanjuje istorijske podatke koji se čuvaju sa 90 dana na 30 dana. Pored toga, ova skripta kreira indekse koji se mogu koristiti za brže pokretanje upita.

Da biste pokrenuli skriptu, sledite ove korake:

  1. Kliknite na dugme "Start", u polju za pretragu otkucajte "Beležnica", a zatim kliknite na stavku "Beležnica " u rezultatima pretrage.

  2. Kopirajte i nalepite sledeću skriptu u program Beležnica:

    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. Sačuvajte datoteku koristeći sledeće ime datoteke:

    KB981939.ps1.
    Napomena: Preporučujemo da sačuvate datoteku na lokaciji kojoj možete lako da pristupite. Na primer, sačuvajte datoteku u fascikli C:\windows\temp.

  4. Napravite rezervnu kopiju datoteka nadgledanja baze podataka. Pratite ove korake da biste to uradili:

    1. Kliknite na dugme "Start", otkucajte Services.msc u polju za pretragu , kliknite desnim tasterom miša na services.msc u rezultatu pretrage, a zatim kliknite na dugme "Pokreni kao administrator".
      UAC sajt Ako budete upitani za administratorsku lozinku ili za potvrdu, otkucajte lozinku ili obezbedite potvrdu.

    2. Pronađite uslugu SQL Server (SBSMONITORING).

    3. Kliknite desnim tasterom miša na uslugu SQL Server (SBSMONITORING), a zatim kliknite na dugme "Zaustavi".

    4. Napravite rezervne kopije datoteka u sledećoj fascikli:

      C:\Program Files (x86)\Microsot SQL Server\MSSQL.1\MSSQL\Data

    5. Kliknite desnim tasterom miša na uslugu SQL Server (SBSMONITORING), a zatim kliknite na dugme "Start".

  5. Kliknite na dugme "Start", otkucajte PowerShell u polju za pretragu, kliknite desnim tasterom miša na stavku Windows PowerShell moduli u rezultatu pretrage, a zatim kliknite na dugme "Pokreni kao administrator".
    UAC sajt
      Ako budete upitani za administratorsku lozinku ili za potvrdu, otkucajte lozinku ili obezbedite potvrdu.

  6. U prozoru Windows PowerShell Moduli promenite trenutni direktorijum u lokaciju na kojoj ste sačuvali KB981939.ps1 datoteku.

  7. Unesite sledeću komandu da biste pokrenuli Windows PowerShell skriptu, a zatim pritisnite taster ENTER:
    .\kb981939.ps1Note Morate da konfigurišete smernice za izvršavanje programa Windows PowerShell da biste dozvolili pokretanje skripti pre nego što pokrenete ovu komandu. U suprotnom, dobijate sledeću poruku o grešci kada pokrenete komandu:

    Napomena

    Nije moguće učitati C:\KB981939.ps1 datoteka jer je izvršavanje skripti onemogućeno na ovom sistemu. Više detalja potražite u odeljku "Get-help about_signing".

    Za više informacija o tome kako da konfigurišete Windows PowerShell smernice za izvršavanje posetite sledeći Microsoft TechNet veb sajt:
    Kako da konfigurišete smernice za izvršavanje programa Windows PowerShell

  8. Otkucajte Y kada primite sledeću poruku:
    Pre nego što pokrenete ovu skriptu, pratite uputstva u članku baze znanja 981939 da biste napravili rezervnu kopiju datoteka baze podataka.
    Ako ste spremni da pokrenete skriptu, otkucajte slovo "Y" da biste potvrdili da ste napravili rezervnu kopiju baze podataka, a zatim pritisnite taster "Enter".

    Napomena: Ako je baza podataka nadgledanja veoma velika, skripta može trajati 10 minuta ili duže.

    Ako se skripta ne pokrene uspešno, morate da vratite u prethodno stanje rezervnu kopiju datoteka nadgledanja baze podataka.

Reference

Više informacija o ovom problemu potražite na sledećem veb sajtu TechNet:

SBS 2008 konzoli možda treba previše vremena da prikaže upozorenja i bezbednosne statuse, da prikaže nedostupnost ili padne