데이터베이스 상태

Microsoft.SQLServer.2016.Database.DBStatusMonitor (UnitMonitor)

이 모니터는 Microsoft SQL Server가 보고한 데이터베이스의 상태를 확인합니다.

Knowledge Base article:

요약

이 모니터는 Microsoft SQL Server가 보고한 데이터베이스의 상태를 확인합니다. 이 작업은 SQL 인스턴스의 master 데이터베이스에 대해 쿼리를 실행하고 데이터베이스의 상태를 반환하여 수행됩니다. 이 모니터에서 알림이 수신되면 데이터베이스를 작동 상태로 되돌리기 위한 조치가 필요합니다.

원인

비정상 상태는 SQL Server 데이터베이스를 현재 사용할 수 없음을 나타냅니다. 온라인 상태를 제외한 모든 상태는 비정상 상태를 유발합니다. 가능한 상태에 대한 자세한 설명은 다음과 같습니다.

SQL Database 상태

설명

성능 상태

ONLINE

데이터베이스에 액세스할 수 있습니다. 복구의 실행 취소 단계가 완료되지 않은 경우에도 주 파일 그룹은 온라인 상태입니다.

정상

OFFLINE

데이터베이스를 사용할 수 없습니다. 명시적 사용자 동작으로 인해 데이터베이스가 오프라인 상태가 되어 추가 사용자 동작이 수행될 때까지 오프라인 상태로 있습니다. 예를 들어 파일을 새 디스크로 이동하기 위해 데이터베이스를 오프라인으로 설정할 수 있습니다. 이러한 경우 이동이 완료되면 데이터베이스가 온라인 상태로 돌아옵니다.

위험

RECOVERY PENDING

복구 중에 SQL Server에서 리소스 관련 오류가 발생했습니다. 데이터베이스가 손상되지는 않았지만 파일이 누락되었거나 시스템 리소스 제한으로 인해 데이터베이스를 시작할 수 없습니다. 데이터베이스를 사용할 수 없습니다. 오류를 해결하고 복구 프로세스를 완료하기 위한 사용자의 추가적인 동작이 필요합니다.

위험

SUSPECT

주 파일 그룹이 주의 대상이거나 손상되었을 수 있습니다. SQL Server 시작 중에 데이터베이스를 복구할 수 없습니다. 데이터베이스를 사용할 수 없습니다. 문제를 해결하기 위한 사용자의 추가적인 동작이 필요합니다.

위험

EMERGENCY

사용자가 데이터베이스를 변경하고 응급 상태로 설정했습니다. 데이터베이스가 단일 사용자 모드에 있고 복구 또는 복원되었을 수 있습니다. 데이터베이스가 READ_ONLY로 표시되고 로깅이 비활성화되며 sysadmin 고정 서버 역할의 멤버로 액세스가 제한됩니다. 응급 상태는 주로 문제 해결을 위해 사용됩니다. 예를 들어 주의 대상으로 표시된 데이터베이스를 응급 상태로 설정할 수 있습니다. 이렇게 하면 시스템 관리자가 데이터베이스에 읽기 전용으로 액세스할 수 있습니다. sysadmin 고정 서버 역할의 멤버만 데이터베이스를 EMERGENCY 상태로 설정할 수 있습니다.

위험

RESTORING

주 파일 그룹에서 하나 이상의 파일을 복원하고 있거나 하나 이상의 보조 파일이 오프라인 상태에서 복원되고 있습니다. 데이터베이스를 사용할 수 없습니다.

위험

RECOVERING

데이터베이스가 복구되고 있습니다. 복구 중 과정은 일시적 상태입니다. 복구가 성공하면 데이터베이스는 자동으로 온라인 상태가 됩니다. 복구가 실패하면 데이터베이스는 주의 대상 상태가 됩니다. 데이터베이스를 사용할 수 없습니다.

경고

보고된 정확한 데이터베이스 상태를 알려면 상태 변경 또는 경고의 컨텍스트를 확인합니다.

해결 방법

데이터베이스를 다시 온라인 상태로 만들어 이 문제를 해결할 수 있습니다. 데이터베이스를 다시 온라인 상태로 만들려면 다음 태스크를 실행하십시오.:

데이터베이스를 온라인으로 설정

외부 리소스

다음 사이트에서 SQL Server에 대한 자세한 내용을 참조하십시오.

http://go.microsoft.com/fwlink/?LinkId=799305

재정의 가능한 매개 변수

이름

설명

기본값

알림 우선 순위

알림 우선 순위를 정의합니다.

보통

알림 심각도

알림 심각도를 정의합니다.

오류

사용

워크플로를 사용하거나 사용하지 않도록 설정합니다.

알림 생성

워크플로가 알림을 생성하는지를 정의합니다.

간격(초)

워크플로를 실행하는 반복 시간 간격(초)입니다.

3600

동기화 시간

24시간 형식으로 지정된 동기화 시간입니다. 생략될 수 있습니다.

 

제한 시간(초)

워크플로를 닫고 실패로 표시하기 전에 워크플로를 실행할 수 있는 시간을 지정합니다.

300

Element properties:

TargetMicrosoft.SQLServer.2016.Database
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.DBStatus
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2016: 데이터베이스가 오프라인/복구 보류 중/주의 대상/응급 상태입니다.
컴퓨터 {0}에 있는 SQL Server 인스턴스 {1}의 데이터베이스 {2}이(가) 오프라인/복구 보류 중/주의 대상/응급 상태입니다.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.Database.DBStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2016Core!Microsoft.SQLServer.2016.Database" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.DBStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.Database.DBStatusMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.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>
<ConnectionString>$Target/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ConnectionString$</ConnectionString>
<DatabaseName>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.Database"]/DatabaseName$</DatabaseName>
<IntervalSeconds>3600</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>