Страница 1 из 1

Удаление записей из WWALMDB

СообщениеДобавлено: Чт янв 31, 2013 6:50 pm
NewOrdered
Добрый день!
Существует ли информация о том, как удалить записи о событиях/авариях за опр. период из WWALMDB НЕ средствами Alarm DB Purge/Archive?

tech-note или мануал?

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Чт янв 31, 2013 7:13 pm
Генератор зла
Средствами MSSQL

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Чт янв 31, 2013 7:34 pm
NewOrdered
Генератор зла,
Совершенно верно. Вот здесь мне и требуется более подробная информация, если таковая существует.
Дело в том, что WWALDB имеет достаточно сложную структуру (таблицы, представления, связи, процедуры), и решение, полученное мною методом тыка, может скомпрометировать целостность данных (как минимум).

Ведь запрос, результат которого мы видим, например, в AlarmDBViewCtrl, берет данные как минимум из нескольких таблиц с использованием операторов JOIN, UNION..

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Чт янв 31, 2013 9:00 pm
Генератор зла
Я просто удаляю из вьюера AlarmAndEvents (как то так, надо смотреть, а я дома) обычным Delete Select * Where условие

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Чт янв 31, 2013 9:45 pm
NewOrdered
Генератор зла писал(а):Я просто удаляю из вьюера AlarmAndEvents (как то так, надо смотреть, а я дома) обычным Delete Select * Where условие

Насколько мне известно (только что проверил), все представления в созданной штатными средствами базе данных WWALMDB имеют префикс "v_".
Мне кажется, вы имеете в виду представление AlarmEvents, которое требуется создавать отдельно вручную, что для моего случая подходит с БОЛЬШИМИ оговорками.

И к тому же, как с этим представлением, так и с любыми другими запрос типа

Код: Выделить всё
SET DATEFORMAT dmy
DELETE FROM [AlarmEvents]
WHERE AlarmEventTime < '18/10/2012 12:00:00'


возвращает ошибку

Невозможно обновить представление или функцию "AlarmEvents", так как изменение влияет на несколько базовых таблиц.



===================================================================
Код: Выделить всё
CREATE VIEW AlarmEvents AS
SELECT AlarmDetail.EventStamp AS AlarmEventTime,
        AlarmDetail.TransitionTimeZoneOffset AS AlarmEventTimeZoneOffset,
   Comment.Comment AS Comment,
   AlarmMaster.Tagname  AS Tagname,
   AlarmDetail.ValueString AS ValueString,
   AlarmDetail.OperatorName AS OperatorName,
        AlarmDetail.Priority AS AlarmEventPriority,
   AlarmDetail.AlarmState AS AlarmEventState,
   AlarmDetail.TransitionTime AS OriginStamp,
        AlarmMaster.GroupName AS GroupName
FROM   AlarmMaster INNER JOIN AlarmDetail ON
   AlarmMaster.AlarmId = AlarmDetail.AlarmId
LEFT OUTER JOIN Comment ON AlarmDetail.CommentId = Comment.CommentId
--WHERE AlarmDetail.AlarmTransition <> 'ACK' AND AlarmDetail.ValueString <> 'OFF'
--ORDER BY AlarmDetail.TransitionTime

UNION ALL SELECT
   Events.EventTime as EventStamp,
        Events.EventTimeZoneOffset AS AlarmEventTimeZoneOffset,
   Events.Comment as Comment,
   Events.Tagname as Tagname,
   Events.ValueString  AS ValueString,
   Events.OperatorName AS OperatorName,
   Events.EventPriority AS Priority,
   Events.EventState AS State,
   Events.EventTime AS OriginStamp,
   Events.GroupName AS GroupName
FROM Events
--where Events.ValueString<>'OFF'
--order by Events.EventTime

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Пт фев 01, 2013 2:32 am
Генератор зла
Завтра срисую скрипт.

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Ср фев 06, 2013 12:27 am
Генератор зла
Delete From dbo.AlarmConsolidated
Where AlarmTime <= DateAdd (dd, -30, GetDate())

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Ср фев 06, 2013 12:59 pm
NewOrdered
Генератор зла писал(а):Delete From dbo.AlarmConsolidated
Where AlarmTime <= DateAdd (dd, -30, GetDate())


Спасибо.
А что делать, если WWALMDB уже создана в Detailed Logging Mode?

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Ср фев 06, 2013 2:34 pm
skom
Я нашёл только скрипт удаления повторяющегося аларма:

Код: Выделить всё
USE [WWALMDB]
GO
--DELETE DUPLICATE DETAIL by Iodice Pierluigi
--low resurce need

if EXISTS (select * from sys.objects where name = 'TempAlarm')
drop table TempAlarm
GO
CREATE TABLE TempAlarm
 (
 ValidId int NOT NULL
 )  ON [PRIMARY]
GO
ALTER TABLE TempAlarm ADD CONSTRAINT
 PK_TempAlarm PRIMARY KEY CLUSTERED
 (
 ValidId
 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

Insert INTO TempAlarm
Select MIN(alarmid) ValidId
from alarmmaster
group by  TagName, OriginationTime
GO
declare @Seed int
declare @MinID int
declare @Step int
declare @MaxStep int
set @Seed = 1000
set @MinID = 0
set @Step =0
set @MaxStep = (select (MAX(validId) % @Seed)+1 from TempAlarm)
while (@Step <= @MaxStep)
BEGIN

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AlarmConsolidated]') AND type in (N'U'))
delete from AlarmConsolidated
where AlarmId between @MinID and (@MinID+@Seed) and  AlarmId not in(select ValidId from TempAlarm)
;
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AlarmDetail]') AND type in (N'U'))
delete from AlarmDetail
where AlarmId between @MinID and (@MinID+@Seed) and AlarmId not in(select ValidId from TempAlarm)
;
DELETE FROM AlarmMaster
WHERE AlarmId between @MinID and (@MinID+@Seed) and AlarmID not in (select ValidId from TempAlarm)
;
set @MinID = @MinID + @Seed
set @Step = @Step +1
END
if EXISTS (select * from sys.objects where name = 'TempAlarm')
drop table TempAlarm
GO


Можно попробовать его переделать под твою задачу.

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Ср фев 06, 2013 2:36 pm
skom
И кстати схема БД доступна только TS Engineers, её на WDN нет, увы.

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Ср фев 06, 2013 10:51 pm
Генератор зла
NewOrdered писал(а):А что делать, если WWALMDB уже создана в Detailed Logging Mode?

Поискать таблицу dbo.AlarmDetailed ?

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Чт фев 07, 2013 1:05 pm
NewOrdered
Генератор зла писал(а):Поискать таблицу dbo.AlarmDetailed ?

Как я понимаю, для удаления ненужных мне (старых) алармов достаточно удалить записи только из таблицы dbo.AlarmDetail?
И то же самое для событий - из таблицы dbo.Events?

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Чт фев 07, 2013 1:06 pm
NewOrdered
skom писал(а):Я нашёл только скрипт удаления повторяющегося аларма:
Можно попробовать его переделать под твою задачу.


Спасибо

Re: Удаление записей из WWALMDB

СообщениеДобавлено: Пн мар 11, 2013 6:40 pm
NewOrdered
NewOrdered писал(а):
Генератор зла писал(а):Delete From dbo.AlarmConsolidated
Where AlarmTime <= DateAdd (dd, -30, GetDate())


Спасибо.
А что делать, если WWALMDB уже создана в Detailed Logging Mode?



Оказывается, на этот случай есть утилита Alter WWALMDB Database (AlterWWALMDB.exe). Как я понял, она изменяет режимы Logging Mode:
Detailed <> Consolidated