資料庫狀態

Microsoft.SQLServer.Windows.Monitor.Database.DBStatus (UnitMonitor)

此監視器會查看 Microsoft SQL Server 所回報的資料庫狀態。

Knowledge Base article:

摘要

此監視器會檢查 Microsoft SQL Server 所報告的資料庫狀態。其檢查方式是對 SQL 執行個體的 master 資料庫執行查詢,並傳回該資料庫的狀態。如果您接收到此監視的警示,則須採取行動才能使資料庫回復運作狀態。

原因

「狀況不良」狀態表示目前無法使用 SQL Server 資料庫。除了「線上」狀態之外的所有狀態都會導致狀況不良狀態。可能的狀態詳列如下:

SQL 資料庫狀態

描述

健全狀況狀態

線上

資料庫可供存取。雖然可能尚未完成復原的恢復階段,但主要檔案群組目前處於上線中。

狀況良好

離線

資料庫是無法使用的。明確的使用者動作可使資料庫變成離線狀態,並且在採取其他的使用者動作之前都是離線狀態。例如,可以將資料庫設成離線,好讓檔案移到新的磁碟中。在完成移動後,就會將資料庫重新啟動為線上狀態。

重大

RECOVERY PENDING

SQL Server 在復原期間發生與資源相關的錯誤。資料庫並未損毀,但是可能遺失檔案或可能因系統資源限制而造成其無法啟動。資料庫無法使用。使用者須採取其他動作才能解決此錯誤,並完成復原程序。

重大

SUSPECT

至少主要檔案群組有問題,而且有可能已損毀。在啟動 SQL Server 期間無法復原資料庫。無法使用該資料庫。使用者需要執行其他動作,才可解決此問題。

重大

緊急

使用者已變更資料庫並將狀態設為 EMERGENCY。資料庫為單一使用者模式,且可修復或還原。資料庫標示為 READ_ONLY、記錄已停用,並僅限系統管理員固定伺服器角色的成員才可存取。EMERGENCY 主要用於進行疑難排解。例如,標示為有疑問的資料庫就可設為 EMERGENCY 狀態。這可允許系統管理員唯讀存取資料庫。只有系統管理員固定伺服器角色的成員才能將資料庫設為 EMERGENCY 狀態。

重大

RESTORING

正於離線狀態下還原主要檔案群組的一或多個檔案,或還原一或多個次要檔案。資料庫目前無法使用。

重大

RECOVERING

資料庫恢復中。恢復程序是暫時性的狀態;如果恢復成功,資料庫就會自動變成線上狀態。如果恢復失敗,資料庫就會變成有疑問的狀態。資料庫是無法使用的。

警告

若要尋找針對資料庫所報告的確切狀態,請檢查狀態變更或警示的內容。

解決方式

您可以嘗試使資料庫重回線上狀態來解決問題。

外部資源

請參閱 SQL Server 的詳細資訊,位置如下:

https://msdn.microsoft.com/zh-tw/library/microsoft.sqlserver.management.smo.database.status.aspx

可覆寫的參數

名稱

描述

預設值

警示優先順序

定義警示優先順序。

標準

警示嚴重性

定義警示嚴重性。

錯誤

已啟用

啟用或停用該工作流程。

產生警示

定義工作流程是否要產生警示。

間隔 (秒)

每次重複執行工作流程之間的時間間隔 (秒)。

300

同步處理時間

同步處理時間使用 24 小時制。可予省略。

 

逾時 (秒)

指定流程被關閉及標示為失敗之前,允許執行的時間。

200

資料庫連線的逾時 (秒)

若工作流程無法在指定的期限之內存取資料庫,將會失敗並登錄一則事件。

15

Element properties:

TargetMicrosoft.SQLServer.Windows.Database
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Windows.MonitorType.Database.DBStatus
RemotableTrue
AccessibilityPublic
Alert Message
Windows 上的 MSSQL: 資料庫為離線/復原暫止/可疑/緊急的狀態
電腦 {0} 上 SQL Server 執行個體 {1} 中的資料庫 {2} 為離線/復原暫止/可疑/緊急的狀態。
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Windows.Monitor.Database.DBStatus" Accessibility="Public" Enabled="true" Target="SqlDiscW!Microsoft.SQLServer.Windows.Database" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Windows.MonitorType.Database.DBStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Windows.Monitor.Database.DBStatus.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.Database"]/DatabaseName$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Good" MonitorTypeStateID="Good" HealthState="Success"/>
<OperationalState ID="Bad" MonitorTypeStateID="Bad" HealthState="Error"/>
<OperationalState ID="NeitherGoodNorBad" MonitorTypeStateID="NeitherGoodNorBad" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<DatabaseName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.Database"]/DatabaseName$</DatabaseName>
<ConnectionString>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<DisableIfAgOffline>false</DisableIfAgOffline>
<NumSamples>2</NumSamples>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>