데이터베이스 엔진 오류 심각도

적용 대상:SQL Server

SQL Server 데이터베이스 엔진에서 오류가 발생하면 오류의 심각도는 SQL Server에서 발생한 문제의 유형을 나타냅니다.

심각도 수준

다음 표에서는 SQL Server 데이터베이스 엔진에서 발생한 오류의 심각도 수준을 나열하고 설명합니다.

보안 수준 설명
0-9 상태 정보를 반환하거나 심각하지 않은 오류를 보고하는 정보 메시지입니다. 데이터베이스 엔진은 심각도가 0~9인 시스템 오류를 발생하지 않습니다.
10 상태 정보를 반환하거나 심각하지 않은 오류를 보고하는 정보 메시지입니다. 호환성을 위해 데이터베이스 엔진은 오류 정보를 호출 애플리케이션에 반환하기 전에 심각도 10을 심각도 0으로 변환합니다.
11-16 사용자가 수정할 수 있는 오류를 나타냅니다.
11 지정된 개체 또는 엔터티가 존재하지 않음을 나타냅니다.
12 특수 쿼리 힌트로 인해 잠금을 사용하지 않는 쿼리의 특수 심각도입니다. 경우에 따라 이러한 문에서 수행하는 읽기 작업으로 인해 일관성을 보장하기 위해 잠금이 수행되지 않으므로 데이터가 일관되지 않을 수 있습니다.
13 트랜잭션 교착 상태 오류를 나타냅니다.
14 거부된 권한 등의 보안 관련 오류를 나타냅니다.
15 Transact-SQL 명령의 구문 오류를 나타냅니다.
16 사용자가 해결할 수 있는 일반 오류를 나타냅니다.
17-19 사용자가 수정할 수 없는 소프트웨어 오류를 나타냅니다. 시스템 관리자에게 문제를 알릴 수 있습니다.
17 이 문으로 인해 SQL Server에 리소스(예: 데이터베이스의 메모리, 잠금 또는 디스크 공간)가 부족하거나 시스템 관리자가 설정한 일부 제한을 초과했음을 나타냅니다.
18 데이터베이스 엔진 소프트웨어의 문제를 나타내지만 문이 실행을 완료하고 데이터베이스 엔진 인스턴스에 대한 연결이 유지됩니다. 심각도 수준이 18인 메시지가 발생할 때마다 시스템 관리자에게 알려야 합니다.
19 구성할 수 없는 데이터베이스 엔진 제한이 초과되었으며 현재 일괄 처리 프로세스가 종료되었음을 나타냅니다. 심각도 수준이 19 이상인 오류 메시지는 현재 일괄 처리의 실행을 중지합니다. 심각도 수준 19 오류는 드물며 시스템 관리자 또는 기본 지원 공급자가 수정해야 합니다. 심각도가 19인 메시지가 발생하면 시스템 관리자에게 문의합니다. 심각도 수준이 19에서 25까지인 오류 메시지는 오류 로그에 기록됩니다.
20-24 시스템 문제를 나타내고 심각한 오류입니다. 즉, 문 또는 일괄 처리를 실행하는 데이터베이스 엔진 태스크가 더 이상 실행되지 않습니다. 태스크는 발생한 내용에 대한 정보를 기록한 다음 종료합니다. 대부분의 경우 데이터베이스 엔진 인스턴스에 대한 애플리케이션 연결도 종료할 수 있습니다. 이 경우 문제에 따라 애플리케이션이 다시 연결되지 않을 수 있습니다.

이 범위의 오류 메시지는 동일한 데이터베이스의 데이터에 액세스하는 모든 프로세스에 영향을 미칠 수 있고 데이터베이스 또는 개체가 손상되었음을 나타내기도 합니다. 심각도 수준이 19에서 24까지인 오류 메시지는 오류 로그에 기록됩니다.
20 문에 문제가 있음을 나타냅니다. 문제가 현재 작업에만 영향을 주므로 데이터베이스 자체가 손상되었을 가능성은 낮습니다.
21 현재 데이터베이스의 모든 작업에 영향을 주는 문제가 발생했지만 데이터베이스 자체가 손상되었을 가능성은 낮다는 것을 나타냅니다.
22 메시지에 지정된 테이블 또는 인덱스가 소프트웨어 또는 하드웨어 문제로 인해 손상되었음을 나타냅니다.

심각도 수준 22 오류는 거의 발생하지 않습니다. 이 경우 실행 DBCC CHECKDB 하여 데이터베이스의 다른 개체도 손상되었는지 확인합니다. 문제는 디스크 자체가 아닌 버퍼 캐시에 있을 수 있습니다. 이 경우 데이터베이스 엔진 인스턴스를 다시 시작하면 문제가 해결됩니다. 작업을 계속하려면 데이터베이스 엔진 인스턴스에 다시 연결해야 합니다. 그렇지 않으면 문제를 복구하는 데 사용합니다 DBCC . 경우에 따라 데이터베이스를 복원해야 할 수 있습니다.

데이터베이스 엔진 인스턴스를 다시 시작해도 문제가 해결되지 않으면 디스크에 문제가 발생합니다. 경우에 따라 오류 메시지에 지정된 개체를 삭제하면 문제가 해결될 수 있습니다. 예를 들어 메시지가 데이터베이스 엔진 인스턴스가 비클러스터형 인덱스의 길이가 0인 행을 찾았다고 보고하는 경우 인덱스는 삭제하고 다시 작성합니다.
23 하드웨어 또는 소프트웨어 문제로 인해 전체 데이터베이스의 무결성이 문제가 되었음을 나타냅니다.

심각도가 23인 오류는 거의 발생하지 않습니다. 이 경우 실행 DBCC CHECKDB 하여 피해 정도를 확인합니다. 문제가 캐시에 한정되고 디스크 자체에는 아무 이상이 없을 수도 있습니다. 이 경우 데이터베이스 엔진 인스턴스를 다시 시작하면 문제가 해결됩니다. 작업을 계속하려면 데이터베이스 엔진 인스턴스에 다시 연결해야 합니다. 그렇지 않으면 DBCC를 사용하여 문제를 복구합니다. 경우에 따라 데이터베이스를 복원해야 할 수 있습니다.
24 미디어 오류를 나타냅니다. 시스템 관리자가 데이터베이스를 복원해야 할 수도 있습니다. 하드웨어 공급업체에 전화해야 할 수도 있습니다.

사용자 정의 오류 메시지 심각도

심각도가 1에서 25까지인 사용자 정의 오류 메시지를 카탈로그 뷰에 sys.messages 추가하는 데 사용할 sp_addmessage 수 있습니다. 이러한 사용자 정의 오류 메시지는 .에서 RAISERROR사용할 수 있습니다. 자세한 내용은 sp_addmessage(Transact-SQL)를 참조 하세요.

RAISERROR 는 심각도가 1에서 25까지인 사용자 정의 오류 메시지를 생성하는 데 사용할 수 있습니다. RAISERROR 는 카탈로그 뷰에 sys.messages 저장된 사용자 정의 오류 메시지를 참조하거나 동적으로 메시지를 작성할 수 있습니다. 오류를 생성하는 동안 사용자 정의 오류 메시지를 sys.messages 사용하는 경우 지정한 RAISERROR 심각도가 지정된 sys.messages심각도를 재정의합니다. 자세한 내용은 RAISERROR(Transact-SQL)를 참조하세요.

오류 심각도 및 TRY... 잡을

A TRY... CATCH 구문은 데이터베이스 연결을 종료하지 않는 심각도가 10보다 큰 모든 실행 오류를 catch합니다.

심각도가 0에서 10까지인 오류는 정보 메시지이며 실행이 TRY의 CATCH 블록에서 점프하지 않습니다... CATCH 구문입니다.

일반적으로 심각도가 20에서 25까지인 데이터베이스 연결을 종료하는 오류는 연결이 종료될 때 실행이 중단되기 때문에 CATCH 블록에서 처리되지 않습니다.

자세한 내용은 TRY...CATCH(Transact-SQL)를 참조하세요.

오류 심각도 검색

ERROR_SEVERITY 시스템 함수를 사용하여 TRY의 CATCH 블록을 발생시킨 오류의 심각도를 검색할 수 있습니다. 실행할 CATCH 구문입니다. ERROR_SEVERITY CATCH 블록의 범위 밖에서 호출되는 경우 NULL을 반환합니다. 자세한 내용은 ERROR_SEVERITY(Transact-SQL)를 참조 하세요.

참고 항목