Các Windows SBS bàn điều khiển của Windows Small Business Server 2008 có thể sập, Hiển thị "Không có" cảnh báo khác hoặc cần nhiều thời gian để hiển thị trạng thái bảo mật và cảnh báo khác

Áp dụng cho: Microsoft Windows Small Business ServerWindows Small Business Server 2008 StandardWindows Small Business Server 2008 Premium

Triệu chứng


Các Windows SBS bàn điều khiển của Windows Small Business Server 2008 có thể hiển thị một hoặc nhiều hiện tượng sau.

Triệu chứng 1

Trạng thái Không có xuất hiện trong Thông báo khác trong phần Mạng bản tóm tắt của trang chủ .

Triệu chứng 2

Ngoại lệ tương tự như sau được ghi vào tệp 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)  

Hiện tượng 3

Sau một thời gian dài, các trạng thái xuất hiện cho bảo mậtCảnh báo khác trong phần Mạng bản tóm tắt của trang chủ .

Hiện tượng 4

Sau một thời gian dài, giá trị xuất hiện trong cột Trạng thái bảo mật và cột Cảnh báo khác trên máy tính tab Trang mạng .

Hiện tượng 5

Khi bạn cố gắng tự tạo báo cáo trên tab báo cáo , Bàn điều khiển SBS Windows có thể sập nếu hộp bảo mật được chọn để thêm nội dung bảo mật để báo cáo.

Nguyên nhân


Sự cố này xảy ra do cơ sở dữ liệu theo dõi rất lớn. Bàn điều khiển SBS Windows không thể truy vấn cơ sở dữ liệu theo dõi nhanh chóng.

Giải pháp


Để khắc phục sự cố này, chạy lệnh Windows PowerShell sau. Tập lệnh này giảm dữ liệu lịch sử trong cơ sở dữ liệu theo dõi bằng cách giảm các dữ liệu lịch sử được giữ 90 ngày 30 ngày. Ngoài ra, tập lệnh này tạo chỉ mục có thể được sử dụng để chạy truy vấn nhanh hơn. Chạy lệnh này, hãy làm theo các bước sau:
  1. Bấm bắt đầu, gõ Notepad trong hộp Tìm kiếm , và bấm Notepad trong kết quả tìm kiếm.
  2. Sao chép và dán đoạn mã sau vào Notepad:
    cls;############################################################################ SQL Scripts#########################################################################$sqlScript = @"USE [SBSMonitoring]BEGIN TRAN T1UPDATE [SBSMonitoring].[dbo].[Settings] SET [Value] = 30 WHERE [Name] = 'CleanupPeriod'COMMIT TRAN T1SELECT N'Set CleanupPeriod to 30 days'EXECUTE [SBSMonitoring].[dbo].[CleanupDatabase]SELECT N'CleanupDatabase job done.'-- Create IndexesIF 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 StatisticsIF 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. Lưu tệp bằng cách sử dụng tên tệp sau:
    KB981939.ps1.
    Chú ý Chúng tôi khuyên bạn lưu tệp vào vị trí mà bạn có thể dễ dàng truy cập. Ví dụ: lưu tệp vào thư mục C:\windows\temp .
  4. Sao lưu tệp cơ sở dữ liệu theo dõi . Để thực hiện việc này, hãy làm theo các bước sau:
    1. Bấm bắt đầu, gõ Services.msc vào hộp Tìm kiếm , bấm chuột phải vào services.msc trong kết quả tìm kiếm, và sau đó nhấp vào chạy như quản trị viên.
      UAC Nếu bạn được nhắc nhập mật khẩu quản trị viên hoặc xác nhận, hãy nhập mật khẩu hoặc cung cấp xác nhận.
    2. Định vị dịch vụ SQL Server (SBSMONITORING) .
    3. Bấm chuột phải vào dịch vụ SQL Server (SBSMONITORING) , và sau đó bấm dừng.
    4. Sao lưu các tệp trong cặp sau:
      C:\Program Files (x86) \Microsot SQL Server\MSSQL.1\MSSQL\Data
    5. Bấm chuột phải vào dịch vụ SQL Server (SBSMONITORING) , và sau đó bấm bắt đầu.
  5. Bấm bắt đầu, gõ PowerShell trong hộp Tìm kiếm , bấm chuột phải vào Windows PowerShell mô-đun trong kết quả tìm kiếm, và sau đó nhấp vào chạy như quản trị viên.
    UAC Nếu bạn được nhắc nhập mật khẩu quản trị viên hoặc xác nhận, hãy nhập mật khẩu hoặc cung cấp xác nhận.
  6. Trong cửa sổ Windows PowerShell mô-đun , thay đổi thư mục hiện tại vị trí mà bạn đã lưu tệp KB981939.ps1.
  7. Gõ lệnh sau đây để chạy tập lệnh Windows PowerShell, và sau đó nhấn ENTER:
    .\kb981939.ps1
    Chú ý Bạn phải cấu hình chính sách thực thi Windows PowerShell cho phép script chạy trước khi bạn chạy lệnh này. Ngoài ra, bạn nhận được thông báo lỗi khi bạn chạy lệnh:
    Không thể nạp tệp C:\KB981939.ps1 vì thực hiện kịch bản bị vô hiệu hoá trên hệ thống này. Vui lòng xem "get-help about_signing" để biết thêm chi tiết.
    Để biết thêm thông tin về cách cấu hình chính sách thực thi Windows PowerShell, hãy ghé thăm website sau của Microsoft TechNet:
  8. Y khi bạn nhận được thông báo sau:
    Trước khi chạy lệnh này, làm theo hướng dẫn trong bài viết cơ sở kiến thức 981939t sao lưu tệp cơ sở dữ liệu của bạn.
    Nếu bạn đã sẵn sàng để chạy tập lệnh, gõ chữ "Y" để xác nhận rằng bạn đã sao lưu cơ sở dữ liệu, và sau đó nhấn 'Enter'.
    Chú ý Nếu cơ sở dữ liệu theo dõi rất lớn, kịch bản có thể chạy 10 phút hoặc lâu hơn. Nếu kịch bản không chạy thành công, bạn phải khôi phục tệp cơ sở dữ liệu theo dõi .