데이터베이스 엔진 오류 심각도
적용 대상: 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 | 미디어 오류를 나타냅니다. 시스템 관리자가 데이터베이스를 복원해야 할 수도 있습니다. 하드웨어 공급업체에 문의해야 할 수도 있습니다. |
사용자 정의 오류 메시지 심각도
sp_addmessage
를 사용하여 심각도가 1~25인 사용자 정의 오류 메시지를 sys.messages
카탈로그 뷰에 추가할 수 있습니다. 이 사용자 정의 오류 메시지는 RAISERROR
에서 사용될 수 있습니다. 자세한 내용은 sp_addmessage(Transact-SQL)를 참조하세요.
RAISERROR
는 심각도가 1~25인 사용자 정의 오류 메시지를 생성하는 데 사용할 수 있습니다. RAISERROR
는 sys.messages
카탈로그 뷰에 저장된 사용자 정의 메시지를 참조하거나 동적으로 메시지를 작성할 수 있습니다. 오류를 생성하는 동안 sys.messages
에서 사용자 정의 오류 메시지를 사용하는 경우 RAISERROR
에서 지정한 심각도가 sys.messages
에서 지정한 심각도를 재정의합니다. 자세한 내용은 RAISERROR(Transact-SQL)를 참조하세요.
오류 심각도 및 TRY...CATCH
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)를 참조하세요.