データベースの状態

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

このモニターは、Microsoft SQL Server から報告されたデータベースの状態を確認します。

Knowledge Base article:

概要

このモニターは、Microsoft SQL Server で報告されるデータベースの状態を確認します。確認は、SQL インスタンスの master データベースに対してクエリを実行し、データベースの状態を返すことで行われます。このモニターから通知を受け取った場合は、データベースを稼働状態に戻す操作を行う必要があります。

原因

異常な状態は、SQL Server データベースが現在使用できないことを示します。オンライン状態以外の状態はすべて、異常な状態になります。発生する可能性がある状態について、次に詳しく説明します。

SQL Database の状態

説明

ヘルス状態

オンライン

データベースにアクセスできます。復旧時に行われる元に戻すフェーズが完了していなくても、プライマリ ファイル グループはオンラインです。

正常

オフライン

データベースは使用できません。ユーザーの明示的な操作によってデータベースがオフラインになり、ユーザーが新たな操作を行うまでオフラインのままになります。たとえば、ファイルを新しいディスクに移動するために、データベースをオフラインにできます。移動の完了後に、データベースをオンラインに戻します。

重大

復旧待ち

SQL Server で、復旧中にリソースに関連するエラーが発生しました。データベースは破損していませんが、ファイルが見つからないか、システム リソースの制限によりデータベースを起動できない可能性があります。データベースは使用できません。エラーを解決して復旧処理を完了するには、ユーザーによる追加の操作が必要です。

重大

未確認

少なくともプライマリ ファイル グループに疑いがあり、破損している可能性があります。SQL Server の起動処理中はデータベースを復旧できません。データベースは使用できません。問題を解決するには、ユーザーによる操作がさらに必要です。

重大

緊急

ユーザーがデータベースを変更し、状態を EMERGENCY に設定しました。データベースはシングル ユーザー モードになり、修復または復元できます。データベースは READ_ONLY に設定され、ログ記録が無効になり、アクセスが sysadmin 固定サーバー ロールのメンバーに制限されます。EMERGENCY は、主にトラブルシューティングの目的に使用されます。たとえば、suspect に設定されたデータベースを、EMERGENCY 状態に設定できます。これにより、システム管理者にデータベースへの読み取り専用のアクセスを許可できます。sysadmin 固定サーバー ロールのメンバーのみが、データベースを EMERGENCY 状態に設定できます。

重大

復元中

プライマリ ファイル グループの 1 つ以上のファイルが復元中か、1 つ以上のセカンダリ ファイルがオフラインで復元中です。データベースは使用できません。

重大

復旧中

データベースが復旧中です。復旧処理は一時的な状態です。復旧が成功すると、データベースは自動的に online 状態になります。復旧が失敗すると、データベースは suspect 状態になります。データベースは使用できません。

警告

報告されたデータベースについて正確な状態を把握するには、状態の変更またはアラートのコンテキストを調べます。

解決方法

問題を解決するため、データベースをオンラインに戻すことができます。

外部

SQL Server の詳細については、次をご覧ください。

https://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.database.status.aspx

上書き可能なパラメーター

名前

説明

既定値

アラートの優先順位

アラートの優先度を定義します。

標準

アラートの重大度

アラートの重要度を定義します。

エラー

有効

ワークフローを有効または無効にします。

はい

アラートを生成する

ワークフローがアラートを生成するかどうかを定義します。

はい

間隔 (秒)

ワークフローを実行する定期的な実行間隔 (秒)。

300

同期時刻

24 時間形式で指定した同期時刻。省略可能です。

 

タイムアウト (秒)

ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。

200

データベース接続のタイムアウト (秒)

指定された期間中にデータベースにアクセスできない場合、ワークフローは失敗し、イベントが登録されます。

15

Element properties:

TargetMicrosoft.SQLServer.Linux.Database
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Linux.MonitorType.Database.DBStatus
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL on Linux: データベースがオフライン/復旧中/問題あり/緊急状態です
コンピューター {0} 上の SQL Server インスタンス {1} のデータベース {2} がオフライン/復旧中/問題あり/緊急状態です。
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Linux.Monitor.Database.DBStatus" Accessibility="Public" Enabled="true" Target="SqlDiscL!Microsoft.SQLServer.Linux.Database" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Linux.MonitorType.Database.DBStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Linux.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>
<NumSamples>2</NumSamples>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>