-
mssql 로그오류 확인컴퓨터&모바일/MSSQL 2015. 4. 1. 15:52
create proc sys.sp_readerrorlog(
@p1 int = 0,
@p2 int = NULL,
@p3 varchar(255) = NULL,
@p4 varchar(255) = NULL)
as
begin
if (not is_srvrolemember(N'securityadmin') = 1)
begin
raiserror(15003,-1,-1, N'securityadmin')
return (1)
end
if (@p2 is NULL)
exec sys.xp_readerrorlog @p1
else
exec sys.xp_readerrorlog @p1,@p2,@p3,@p4
end
총 4개의 파라메타가 있는데 각 파라메타의 의미는 다음과 같습니다.
@p1 : 0 = 현재 로그, 1 = 보관된 첫번째 로그, 2 = 보관된 두번째 로그...
@p2 : 1 or Null = Error Log, 2 = SQL Agent Log
@p3 and @p4 : Search 키워드, @p3과 @p4가 and 조건
입니다.
예를 들어보면
sp_readerrorlog 0, 1, 'login', 'failed'
이렇게 호출하면 현재 Error Log에서 'login' & 'failed'를 만족하는 로그를 검색해줍니다.
하지만 Error Log는 하나가 아니고 여러개입니다.
그래서 전체 Error를 검색하려면 @p1 파라메타에 숫자를 바꿔가면서 여러번 쿼리해야 합니다.
그래서 전체 Error Log를 검색하기는 불편합니다.
전체 Error Log의 갯수는 xp_enumerrorlogs 프로시져를 통해 알 수 있습니다.
다음 쿼리는 전체 Error Log를 대상으로 검색하는 쿼리입니다.
SET NOCOUNT ON
DECLARE @Type CHAR(1), @Keyword1 VARCHAR(1000), @Keyword2 VARCHAR(1000)
DECLARE @NumErrorLogs INT,
@LogCnt INT
DECLARE @ErrorLogs TABLE (NO INT, DATE DATETIME, SIZE INT)
DECLARE @Errors TABLE (LogDate DATETIME, ProcessInfo VARCHAR(1000), Text VARCHAR(MAX))
INSERT @ErrorLogs EXEC xp_enumerrorlogs
SET @NumErrorLogs = (SELECT MAX(NO) FROM @ErrorLogs)
SET @LogCnt = 0
WHILE @NumErrorLogs > @LogCnt
BEGIN
INSERT @Errors EXEC sp_readerrorlog @LogCnt, @Type, @Keyword1, @Keyword2
SET @LogCnt = @LogCnt + 1
End
SELECT LogDate, ProcessInfo, Text = REPLACE(TEXT, '. ', '.' + CHAR(10))
FROM @Errors
ORDER BY LogDate DESC
sp_readerrorlog에서 @p2가 빠진 형태입니다.
Log File 번호를 지정하는 대신 xp_enumerrorlogs 를 사용하여 Log File의 갯수를 확인후
전체 파일에 대하여 sp_readerrorlog를 실행합니다.'컴퓨터&모바일 > MSSQL' 카테고리의 다른 글
MSSQL CPU 사용률 높은 쿼리 찾아내는 쿼리 (0) 2019.08.01 SQL 18456 오류 (0) 2015.04.01 index 생성 조회 삭제 (0) 2014.12.21