партнерский раздел
ФорумЭксплуатацияУдаление ошибочных приборов и шлейфов из БД.

Эксплуатация » Удаление ошибочных приборов и шлейфов из БД.

Сразу откажусь от предложения отправить БД в поддержку. потому что нужно принимать множество решений, какой из конфликтующих вариантов выбрать.
Видимо, в результате "удачного" импорта конфигурации из пульта в ОрионПро 1.20 случилась каша в БД.
Проблема №1: в КДЛ некоторые шлейфы стали совместно реле - ни шс с этим адресом, ни реле ни удалить, ни объединить, т.к. они имеют разные индексы.
Проблема №2: В один КДЛ оказались привязаны как в пульт несколько приборов и они на самом деле есть в системе, но подключены в пульт, а не в КДЛ (естесственно :) ) - просто пульт раньше имел адрес этого КДЛ. Приборы видно с крестами в Списке приборов ОЗ, но их нет нигде в структуре. У них иные индексы, чем у реально рабочих приборов.
Я осознаю, что наверное придётся лазать через SQL Studio. Подскажите. как искать нужные индексы, как аккуратно пришибить лишнее, не уложив систему целиком. Понятное дело, удалять КДЛ и рисовать заново все сотню извещателей не охота. 
Приветствуются в т.ч. домыслы и предположения.
PS:При попытке преобразования ШС в реле (реле с таким номером уже есть) выскакивает ошибка, которая подсказывает, что искать надо в dbo.DevItems с индексом lbx_Devitems_DeviceID, значение ключа (7, 626,9). Я не вижу ассоциаций ни одного из этих чисел ни с адресом КДЛ, ни номером ШС ...

3 года 8 месяцев назад

avatar
Попробуйте провести модернизацию БД, при этом автоматом делается реиндексация, может поможет. Если не поможет, то руками, например используя SSMS, но муторно не меньше, чем в АБД переделать.
По поводу переноса из КДЛа приборов, так это не сложно, буквально ссылочный индекс поменять. Но кто гарантирует, что других "завихрений" в БД нет?

Налетов Константин 3 года 8 месяцев назад

Завихрений полно. но я готов менять ссылочные индексы. Где менять, что нужно знать? :)
У меня кроме этой БД в общем не на что облокотиться - проекты сказочные. Где правды больше, в пульте или АБД - ещё вопрос.
Модернизация БД заканчивается "Успехом". Правда, в результате девственная база данных. 

Королёв Евгений Владимирович 3 года 8 месяцев назад

Евгений, в настоящий момент Ориона нет под рукой, смогу подсказать только завтра (время МСК).
В двух словах так: в БД есть таблица приборов, в ней перечисляются все приборы (пульты в том числе), пульты и приборы в протоколе Орион имеют в ссылочном поле значение 0, а те приборы, которые подключены к пульту (протокол ОрионПро), имеют ссылку на индекс этого пульта.

Налетов Константин 3 года 8 месяцев назад

https://drive.google.com/file/d/1TwuufONT-k2JhGZpBmlKwgX7KOxn6MZZ/view?usp=sharing
Поле GType ещё на что-то похоже, но логику не вижу всё равно.

Королёв Евгений Владимирович 3 года 8 месяцев назад

Ссылку посмотреть не могу по причине отсутствия аккаунта Google :-((
По переносу приборов из КДЛа: таблица RSLines, для проблеммных приборов в поле PKUID указать ID записи в той же таблице для нужного пульта.

Налетов Константин 3 года 8 месяцев назад

Ссылку поправил. Ох уж этот гугл...
Попробую на объекте, спасибо.

Королёв Евгений Владимирович 3 года 8 месяцев назад

По поводу данных по ссылке - в поле GType указывается тип шлейфа на основе данных таблицы dTypesElement. В Вашем случае скорее всего 1 или 2 для ШС, а для считки оставьте 0.

Налетов Константин 3 года 8 месяцев назад

Докладываю из домашней лаборатории.
PKUID у пульта 0, у нормальных приборов 1, а у кривых 7. Исправил все 7 на 1, а поскольку при этом воникает ошибка, назначаю и запоминаю каждому из кривых приборов новые адреса в строку GLineNo. При этом у кривого БКИ в отличие от правильного был DeviceType 44 и пока я непоменял на верный 10, он в АБД не появлялся. Всё, с лишними приборами вопрос снят! Спасибо!
Остались Реле\ШС.
При преобразовании в БД ШС в реле возникает конфликт - данный GIndex уже занят в какой-то другой ещё таблице, видимо. Я могу прибавиь к индексу, например 10000 и тогда это реле исчезает и вроде бы проблемы не видно, но при попытке сменить тип уже в АБД возникает конфликт. Надо менять тип одновременно в некой связанной таблице кроме DevItems. 
Где-то была красивейшая таблица связей полей и таблиц.
PS: тип 1 - охранный шлейф, 2 - пожарный, 3 - вроде реле, но с ним связано поле ItemType со значением 9
PPS: в инспекторе справа кроме типа шлейфа есть пользвательский номер. Я просто удалил из той же таблицы для пробы пару элементов с более высоким номером (видимо более "молодых"). После этого со шлейфом можно работать и выставлять тип как обычно (не забудьте предварительно убрать со входов типа "Реле" связанные разделы). Есть неуверенность, можно ли так делать, хоть база и не легла, но выглядит оптимистично!

Королёв Евгений Владимирович 3 года 8 месяцев назад

Здравствуйте Королёв Евгений Владимирович!
Вот скрипт, делал для себя, может и вам службу верную сослужит-- === таблица шлефов всех КДЛ ==
SELECT
RSLines.GLineNo AS "Адрес"
, dTypes.Name
, RSLines.Name AS "Название прибора"
, DevItems.Address-DevItems.Address/256*256 AS "Шлейф" -- номер ШС реле считывателя
, DevItems.Name AS "Название шлейфа" -- название
, DevItems.Gtype as "Тип шлейфа"-- тип элемента
, DevItems.Config as "Накапливать статистику"-- накапливать статистику 1 - да 0 -нет 2 - централизованное управление
, pObjects.GIndex as "Раздел"
FROM DevItems
JOIN RSLines ON (DevItems.DeviceID = RSLines.ID)
JOIN dTypes ON (RSLines.DeviceType = dTypes.ID)
JOIN pObjCont ON (DevItems.ID = pObjCont.ShleifID)
JOIN pObjects ON (pObjCont.ObjectID = pObjects.ID)
WHERE
--DevItems.Address BETWEEN (256*XXX+YYY) AND (256*XXX+YYY) -- где XXX - адрес прибора YYY - адрес шлейфа
DevItems.Address BETWEEN (256*1+1) AND (256*1+14)
OR DevItems.Address BETWEEN (256*1+16) AND (256*1+25)
ORDER BY "Адрес", "Шлейф"
 -- == журнал за промежуток ==
SELECT
pLogData.TimeVal,
pLogData.DeviceTime,
pLogData.Par3 AS "адрес", -- адрес прибора
pLogData.Par4 AS "шлейф",
pLogData.Event, -- ID события
Events.Contents AS "Событие",
pLogData.Remark AS "Описание",
pLogData.RazdIndex AS "Раздел",-- номер раздела
pObjects.Name AS "Название Раздела"
FROM
pLogData, Events, pObjects
WHERE
pLogData.Event=Events.Event
AND pObjects.GIndex=pLogData.RazdIndex
AND pLogData.TimeVal BETWEEN "17.09.2019 00:00:00" AND "17.09.2019 23:59:59"
ORDER BY pLogData.TimeVal DESC -- сортировка в обратном порядке
--- обновление программы управления и типа шлефа СП 2
UPDATE
DevItems
SET
Gtype = 11 -- адресный релейный
, Config = 0
, State = 0
, Command = 39 -- Включить при пуске
, Flags = 0
, ItemType = 9 -- адресный релейный модуль
, TimeOutConfig = 0
, TimeOutControl = 65536
WHERE
-- РЕЛЕ СП2 --
Address = (256*1+9)
OR Address = (256*1+14)
GO

Осьмаков Андрей 3 года 8 месяцев назад

О, полезные штуки, спасибо. Можно даже сообразить, как с БД работать благодаря комментариям!

Королёв Евгений Владимирович 3 года 8 месяцев назад

В 2014 SQL Management Studio, к сожалению, не сработали запросы. Первый ничего не выдал. Второй ругается на дату\время. Не разобрался.

Королёв Евгений Владимирович 3 года 5 месяцев назад

Формат даты зависит от настроек вашей операционной системы, а во втором запросе проверьте какие адреса КДЛ вы указали. Внимательно изучите комментарии в скриптах

Осьмаков Андрей 3 года 5 месяцев назад

Ааа, ну комментарии же :) Да, пожалуй тупо копировать не вдумываясь - плохая практика.

Королёв Евгений Владимирович 3 года 5 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

1 ответ

Сегодня всё в той же изувеченной БД обнаружил тактики и централизованное управление на некоторых реле, которые когда-то были ШС и реле одновременно. И если с "гибридных"  шлейфов можно всё в АБД убрать, то есть ещё несколько странных реле 3 и реле 4 в составе С2000-4, которые невозможно править, т.к. у них пустой второй параметр реле и выставить его не выходит - нечего выбрать из пустого списка. Не особо вдумчиво ковырялся и не получилось ничего лучше, чем просто оставить идентификаторы 0 9 на реле и заполнить остальные поля NULL - тактики и "Централизованное" слетели.
Вообще хотелось бы разобраться в устройстве БД хотя бы в районе приборов-извещателей-реле.
А то в таблице типов приборов обнаружил 2 описания с2000-2: одно с двумя реле, другое с четырьмя - и всё одного типа №5 :0
А, ещё обратил внимания, что АйДишники этих 3-го и 4-го реле не сквозные, а будто бы не влезли и добавились в конец.

2 года 1 месяц назад

avatar
А то в таблице типов приборов обнаружил 2 описания с2000-2: одно с двумя реле, другое с четырьмя - и всё одного типа №5

а точно с реле, может таки с ШС? с2000-2 до 2.20 - в АБД идут с 2 ШС, с2000-2 после 2.20 - с 4 ШС.

вот не зря структуру БД закрыли, чтобы у народа нервных срывов не случалось от того, что там может твориться))

Волков Андрей 2 года 1 месяц назад

А может ... А может эти 2 ШС реле и сожрали ... Не подумал, проверю потом.
И потому их там 2 отдельных прибора и есть, но с разновидностями ...

Вообще накатил дома чистый Орион 1.20.3, попробую зафиксировать дефолтное сосотояние базы и смотреть, что меняется с добавлением приборов.
Не знаю, насколько меня в этом хобби хватит :) Тем более у Андрея, смотрю, наработки есть...

Королёв Евгений Владимирович 2 года 1 месяц назад

Здравствуйте Евгений!
Завидую вашему интузиазму!
Структура базы данных полностью представлена в файле dbchema.xml имеющим классическую структуру xml, а в папке SQLScript находятся все скрипты (в частности в файле AllBaseScript.sql создаётся вся база).
На своём примере: для понимания структуры и зависимости полей одних таблиц с другими я делал в нем коментарии, запросы конечно удобнее писать и анализировать через Microsoft SQL Server Managment Studio, но для моих задач хватало и встроенного в Орион Менеджера центрального сервера.
Вы какие цели ставите перед собой для понимания структуры базы данных? Для чего это вам? У меня был чисто практическая задача поиска и выявления событий в базе размером 2ГБ, поэтому через запросы было быстро и понятно плюс тренировал свои навыки пока изучал sql. 

Осьмаков Андрей 2 года 1 месяц назад

Меня угнетает непонимание, откуда растут всякие ошибки.
В частности сегодня добавляю на план новый раздел, а там какая-то ошибка ссылок в структуре БД, совершенно ничего не говорящее мне описание. При этом вроде бы цель достигнута, но мой внутренний перфекционист рыдает.
Я именно через SSMS лазаю.
PS: файлик нашёл.

Королёв Евгений Владимирович 2 года 1 месяц назад

Доброго дня Евгений!
Меня угнетает непонимание, откуда растут всякие ошибки.Lj

Я уверен, что ошибки растут из-за плохой организации процесса разработки ПО (структура, описание, документирование, покрытие тестами каждого релиза до вывода в продакшн).
Вы исправите у себя, но при выходе нового релиза получите новые ошибки. Итак это длится уже более 20 лет!!!
Тут необходимо Компании решать вопрос глобально.
Тема перешла в явный флуд - домыслы, а не конструктив.
Предлагаю на этом закончить и обслуждать лишь по сути!

Осьмаков Андрей 2 года 1 месяц назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

3911 раз

ЗАДАН

3 года 8 месяцев назад

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.