/*************************************************
PULLING DATA FROM THE ERROR LOG
**************************************************/
IF OBJECT_ID('IOErrorLog') IS NULL
CREATE TABLE IOErrorLog (
ServerName nvarchar(256),
LogFileName nvarchar(4000),
Occurances int,
LogDate datetime,
ProcessInfo nvarchar(50),
ErrorText nvarchar(max),
CONSTRAINT
pk_IOErrorLog PRIMARY KEY
(ServerName,
LogDate, LogFileName)
)
----------------------------------------------------------------------
-- This part of the code was found here:
--
https://ask.sqlservercentral.com/questions/99484/number-of-error-log-files.html
DECLARE @FileList AS
TABLE (
subdirectory NVARCHAR(4000) NOT NULL
,DEPTH BIGINT NOT NULL
,[FILE] BIGINT NOT NULL
);
DECLARE @ErrorLog NVARCHAR(4000), @ErrorLogPath
NVARCHAR(4000);
SELECT @ErrorLog =
CAST(SERVERPROPERTY(N'errorlogfilename') AS NVARCHAR(4000));
SELECT @ErrorLogPath = SUBSTRING(@ErrorLog, 1, LEN(@ErrorLog) - CHARINDEX(N'\', REVERSE(@ErrorLog))) + N'\';
INSERT INTO
@FileList
EXEC xp_dirtree @ErrorLogPath, 0, 1;
DECLARE @NumberOfLogfiles INT;
SET @NumberOfLogfiles = (SELECT COUNT(*) FROM @FileList WHERE
[@FileList].subdirectory LIKE N'ERRORLOG%');
-- SELECT @NumberOfLogfiles;
----------------------------------------------------------------------
CREATE TABLE
#temp (
LogDate datetime,
ProcessInfo nvarchar(500),
ErrorText nvarchar(max))
DECLARE @p1 INT
= 0
WHILE @p1 <
@NumberOfLogfiles
BEGIN
-- P1 is the file
number starting at 0
DECLARE
@p2 INT = 1,
-- P2 1 for SQL
logs, 2 for SQL Agent logs
@p3 NVARCHAR(255) = 'occurrence',
-- P3 is a value
to search on
@p4 NVARCHAR(255) = 'i/o'
-- P4 is another
search value
BEGIN TRY
INSERT INTO #temp
EXEC sys.xp_readerrorlog @p1,@p2,@p3,@p4
END TRY
BEGIN CATCH
PRINT 'Error occurred processing file ' + cast(@p1 as varchar(10))
END CATCH
SET @p1 =
@p1 + 1
END
INSERT INTO
IOErrorLog
SELECT DISTINCT @@SERVERNAME,
SUBSTRING(ErrorText,charindex('[',ErrorText)+1,
charindex(']',ErrorText)-charindex('[',ErrorText)-1),
SUBSTRING(ErrorText, 27, patindex('%occurrence%',ErrorText)-28),
LogDate,
ProcessInfo, ErrorText
FROM #temp
WHERE #temp.LogDate NOT IN (
SELECT
LogDate
FROM
IOErrorLog
WHERE
ServerName = @@SERVERNAME)
DROP TABLE
#temp
SELECT * FROM IOErrorLog
No comments:
Post a Comment