Сценарий определения времени работы
и остановки SQL Server.
set nocount on.
— создание временной таблицы для списка журналов create table #EnumErrorLogs (
Number tinyint, — номер журнала
LastEvent datetime, — дата и время последнего события
LogSize integer — размер журнала в байтах
)
— заполнение списка журналов
insert #EnumErrorLogs exec sp_enumerrorlogs
— подсчет количества журналов
declare @CountLog tinyint
select @CountLog=count(*) from #EnumErrorLogs
— создание временной таблицы для считывания содержимого журнала
create table #ReadErrorLog (
id integer identity,
TextStr varchar(255), — текст сообщения
ContinuationRow tinyint-признак продолжения сообщения
)
declare @i smallint,@s varchar(250)
declare @start datetime,@finish datetime,@duration datetime
print ?Работа SQL Server ?+@@SERVERNAME
print ?:===:=====================:=====================:?+
?================================:=====================================?
print ?: N : Старт : Финиш :?+
? Продолжительность : Текст последнего сообщения в журнале :?
print ?:===:=====================:=====================:?+
?================================:=====================================?
— перебор журналов, начиная с самых старых
set @i=@CountLog-1
while @i >= 0 begin
— считывание i-журнала во временную таблицу
exec(?insert #ReadErrorLog exec sp_readerrorlog ?+@i)
— получение даты и времени запуска SQL Server
select top 1 @start=cast(left(TextStr,19) as datetime) from #ReadErrorLog order by id
— получение даты и времени остановки SQL Server
select top 1
else cast(left(TextStr,19) as datetime)
end,
from #ReadErrorLog where ContinuationRow 1 order by id desc
— получение продолжительности работы
set @duration=@finish-@start
— вывод результатов
print ? ?+cast(@i as char(2))+? ?+
convert(char(20),@start,113)+? ?+convert(char(20),@finish,113)+? ?+
?лет-?+cast(Datepart(yy,@duration)-1900 as char(1))+? ?+
?дней-?+cast(Datepart(dy,@duration)-1 as char(3))+? ?+
?часов-?+cast(Datepart(hh,@duration) as char(2))+? ?+
?минут-?+cast(Datepart(mi,@duration) as char(2))+? ?+@s
set @i=@i-1
truncate table #ReadErrorLog
end
drop table #EnumErrorLogs
drop table #ReadErrorLog