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

Вопросы, не попадающие в другие разделы.

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

Сообщение NewOrdered » Чт янв 31, 2013 6:50 pm

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

tech-note или мануал?
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

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

Сообщение Генератор зла » Чт янв 31, 2013 7:13 pm

Средствами MSSQL
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

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

Сообщение NewOrdered » Чт янв 31, 2013 7:34 pm

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

Ведь запрос, результат которого мы видим, например, в AlarmDBViewCtrl, берет данные как минимум из нескольких таблиц с использованием операторов JOIN, UNION..
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

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

Сообщение Генератор зла » Чт янв 31, 2013 9:00 pm

Я просто удаляю из вьюера AlarmAndEvents (как то так, надо смотреть, а я дома) обычным Delete Select * Where условие
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

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

Сообщение NewOrdered » Чт янв 31, 2013 9:45 pm

Генератор зла писал(а):Я просто удаляю из вьюера 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
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

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

Сообщение Генератор зла » Пт фев 01, 2013 2:32 am

Завтра срисую скрипт.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

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

Сообщение Генератор зла » Ср фев 06, 2013 12:27 am

Delete From dbo.AlarmConsolidated
Where AlarmTime <= DateAdd (dd, -30, GetDate())
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

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

Сообщение NewOrdered » Ср фев 06, 2013 12:59 pm

Генератор зла писал(а):Delete From dbo.AlarmConsolidated
Where AlarmTime <= DateAdd (dd, -30, GetDate())


Спасибо.
А что делать, если WWALMDB уже создана в Detailed Logging Mode?
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

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

Сообщение skom » Ср фев 06, 2013 2:34 pm

Я нашёл только скрипт удаления повторяющегося аларма:

Код: Выделить всё
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


Можно попробовать его переделать под твою задачу.
skom
 
Сообщения: 173
Зарегистрирован: Вт окт 02, 2007 5:25 pm

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

Сообщение skom » Ср фев 06, 2013 2:36 pm

И кстати схема БД доступна только TS Engineers, её на WDN нет, увы.
skom
 
Сообщения: 173
Зарегистрирован: Вт окт 02, 2007 5:25 pm

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

Сообщение Генератор зла » Ср фев 06, 2013 10:51 pm

NewOrdered писал(а):А что делать, если WWALMDB уже создана в Detailed Logging Mode?

Поискать таблицу dbo.AlarmDetailed ?
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

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

Сообщение NewOrdered » Чт фев 07, 2013 1:05 pm

Генератор зла писал(а):Поискать таблицу dbo.AlarmDetailed ?

Как я понимаю, для удаления ненужных мне (старых) алармов достаточно удалить записи только из таблицы dbo.AlarmDetail?
И то же самое для событий - из таблицы dbo.Events?
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

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

Сообщение NewOrdered » Чт фев 07, 2013 1:06 pm

skom писал(а):Я нашёл только скрипт удаления повторяющегося аларма:
Можно попробовать его переделать под твою задачу.


Спасибо
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

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

Сообщение NewOrdered » Пн мар 11, 2013 6:40 pm

NewOrdered писал(а):
Генератор зла писал(а):Delete From dbo.AlarmConsolidated
Where AlarmTime <= DateAdd (dd, -30, GetDate())


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



Оказывается, на этот случай есть утилита Alter WWALMDB Database (AlterWWALMDB.exe). Как я понял, она изменяет режимы Logging Mode:
Detailed <> Consolidated
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad


Вернуться в Другое

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

cron