SQL Server Error Log
오류 로그는 서비스가 시작할 때부터 서비스가 중지될 때까지 계속 메시지를 기록한다. 로그는 심각도 수준이 19 ~ 25의 값을 가진 모든 오류를 기록하고, 모니터링 시 오류 로그에서 심각도 수준 19 ~ 25 사이의 값을 가진 오류는 반드시 체크해야 한다. 해당 심각도 수준의 오류는 트랜잭션을 실패하고, 응용 프로그램이 운영에 문제가 된다. 심각도 수준이 20 ~ 25 오류는 치명적이며, 클라이언트 연결은 오류 메시지를 받고 종료된다.
SQL Server Error Log 포함된 사항
No |
Contents |
1 |
SQL Server 버전 |
2 |
운영체제 버전 |
3 |
서비스 시작 시간 |
4 |
서버 프로세스 ID |
5 |
Error Log 파일 경로 |
6 |
서버 실행 모드 (Tread/Fiber) |
7 |
수신 프로토콜 및 포트 |
8 |
시스템 및 사용자 데이터 베이스의 인스턴스 복구 프로세스 정보 |
9 |
서버 옵션 변경 정보 |
10 |
SQL Server에서 발생한 오류 |
SQL Server Error Log 읽기
sp_readerrorlog 실행
Parameters |
Type |
에러 로그 파일 번호 |
0 = Current(현재), 1 =Archive #1, 2 = Archive #2, ... |
로그 파일 종류 |
1 또는 null = Error Log, 2 = SQL Agent Log |
검색인자 1 |
AND 연산자 |
검색인자 2 |
AND 연산자 |
검색 시작 시간 |
Date |
검색 끝 시간 |
Date |
결과 정렬 |
ascending(N'asc') , decending (N'desc') |
--실행 예시 EXEC sp_readerrorlog 0, 1, '2017', 'backup', '2017-08-16', '2017-08-17', N'asc' |
SQL Server Error Log 관리하기
테이블로 관리하기
A. SQL Server Error Log 및 Agent Log 관리용 테이블 생성
--SQL Server Error Log Table IF NOT EXISTS (SELECT * FROM sys.objects From object_id = OBJECT_ID(N'[dbo].[SQLERRORLOG]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[SQLERRORLOG] ( [mRegDate] [datetime] NULL, [mProcessInfo] [varchar](10) NULL, [mText] [varchar](max) NULL ) ON [PRIMARY] END GO --Agent Log Table IF NOT EXISTS (SELECT * FROM sys.objects From object_id = OBJECT_ID(N'[dbo].[SQLAGENTLOG]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[SQLAGENTLOG] ( [mRegDate] [datetime] NULL, [mProcessInfo] [varchar](10) NULL, [mText] [varchar](max) NULL ) ON [PRIMARY] END GO |
B. 데이터 저장하기
--현재 시점까지 Error Log 저장 INSERT INTO [dbo].[SQLERRORLOG] EXEC ('sp_readerrorlog') GO EXEC msdb.dbo.sp_cycle_errorlog GO --현재 시점까지 Agent Log 저장 (Agent Service가 반드시 작동 중이어야 한다.) INSERT INTO [dbo].[SQLAGENTLOG] EXEC ('sp_readerrorlog -1, 2') GO EXEC msdb.dbo.sp_cycle_agent_errorlog GO |
C. 데이터 확인
테이블 생성 후 주기적으로 테이블에 데이터를 저장하여 관리하면, 로그를 빠르게 볼 수 있으며 오류 로그 크기가 커져서 디스크 공간을 크게 차지
하는 것을 예방 할 수 있다.
SELECT * FROM dbo.SQLERRORLOG WHERE mRegDate >= '2017-08-17' |
참고: https://blogs.msdn.microsoft.com/repltalk/2011/01/05/how-to-archive-your-sql-errorlogs-into-a-table/
※데이터베이스 엔진 오류 심각도
Level of Severity |
DESC |
0~9 | 상태 정보를 반환하거나, 심각하지 않은 오류를
보고 데이터 베이스엔진에서 심각도 0~9인 경우 시스템 오류 발생시키지 않음 |
10 | 상태 정보를 반환하거나, 심각하지 않은 오류를
보고 호환성을 위해 오류 정보를 호출 응용 프로그램으로 반환하기 전에 심각도 10을 0으로 변환 |
11 ~ 16 | 사용자가 해결할 수 있는 오류 |
11 | 지정한 개체 또는 엔터티가 없음 |
12 | 특수한 쿼리 힌트로 인해 잠금을 사용하지 않는 쿼리에 대한
특수 심각도 일관성을 유지하는 기능인 잠금을 사용하지 않는 문으로 읽기 작업 수행 시 데이터 일관성 손상 가능 |
13 | 트랜잭션 교착 상태 오류 (DeadLock) |
14 | 거부된 권한 등의 보안 관련 오류 |
15 | T-SQL 명령의 구문 오류 |
16 | 사용자가 해결할 수 있는 일반 오류 |
17 ~ 19 | 사용자가 해결 할 수 없는 소프트웨어 오류. 시스템 관리자에게 알림 |
17 | Statement가 실행되어 SQL Server에서 데이터베이스에 사용되는 디스크 공간, 메모리 또는 잠금등의 리소스 부족이거나, 시스템 관리자가 설정한 일정한 한계를 초과한 오류 |
18 | 데이터베이스 엔진 소프트웨어에 문제가 있지만, 문이 원료되고 데이터베이스 엔진 인스턴스에 대한 연결이 유지됨. 심각도가 18이면 시스템 관리자에게 알려야함 |
19 | 구성할 수 없는 데이터베이스 엔진 한계를 초과하여 현재
일괄처리가 종료 됨 심각도가 19 이산인 오류 메시지는 현재 일괄처리 실행이 중지된다. 거의 발생하지 않지만, 시스템 관리자 또는 주 지원 공급자를 통해 해결 |
19 ~ 25 | 오류 메시지를 오류 로그에 기록 |
20 ~ 24 | 시스템 문제 및 심각한 오류를 의미. 일괄 처리를 실행하는
데이터베이스 엔진 테스크가 더 이상 수행하지 않음. 태스크는 발생한 문제 정보를 기록하고 종료된다. 대부분의 경우 데이터베이스 엔진
인스턴스와 응용 프로그램과의 연결도 끊어지며, 다시 연결하지 못함 데이터 베이스 또는 개체 손상을 의미한다. |
20 | 일괄처리에 문제가 발생함. 현재 테스크에만 영향을 주므로 데이터베이스 자체 손상은 되지 않는다. |
21 | 현재 데이터베이스의 모든 태스크에 영향을 미치는 문제 발생. 데이터 베이스 자체 손상은 아니다. |
22 | 메시지에서 지정된 테이블 또는 인덱스가 소프트웨어 또는 하드웨어 문제로 인해 손상됨 거의 발생하지 않으나, 오류 발생 시 DBCC CHECKDB 실행으로 데이터베이스 내 다른 개체 손상도 확인해야한다. 문제가 버퍼 캐시에 한정되고 디스크 자체에는 아무 이상이 없을 수도 있고 이 경우 데이터베이스 엔진 인스턴스 다시 시작하면 문제가 해결한다. 다시 시작해도 문제가 발생한다면 디스크 문제이다. 가끔 오류 메시지에 지정된 개체를 제거하여 문제를 해결 할 수 있다. |
23 | 하드웨어 또는 소프트웨어 문제로 인해 전체 데이터베이스의
무결성이 의심됨 거의 발생하지 않으나. 문제가 캐시에 한정되고 디스크 자체 아무 이상 없을 수도 있다. 경우에 따라서는 데이터베이스 복원이 될 수도 있다. |
24 | 미디어 오류. 시스템 관리자가 데이터베이스 복원 또는 하드웨어 공급업체에 문의해야 하는 경우 |
'일하면서 정리하기 > MSSQL' 카테고리의 다른 글
[11/29] SQL Server 운영 - 소개 및 설치 (0) | 2017.12.03 |
---|---|
SQL Server 서비스 팩 설치 시 유의 사항 (0) | 2017.09.13 |
SQL Server Version List (1) | 2017.08.14 |
SQL Server 2016 설치(2) - 기능 설명 (0) | 2017.08.14 |
SQL Server 2016 설치(1) (1) | 2017.07.11 |