помогите с SQL

Started by inspirit, February 18, 2013, 02:56:13 PM

Previous topic - Next topic

inspirit

Виктор, добрый день. Помогите немножко.

Вобщем, есть много свичей в сети, сейчас на основе данных из Netxms нужно выбрать из базы некоторые параметры.

В частности IP - Наименование - Модель - snmp_description - MAC - VLAN

Сейчас выбирается это следующим скриптом

SELECT n.primary_ip AS `IP`,
o.name AS `наименование`,
n.uname AS `Модель`,
n.snmp_sys_name AS `snmp description`,
n.bridge_base_addr AS `MAC адрес`,
GROUP_CONCAT(REPLACE(i.description, 'VLAN ID', '') ORDER BY i.description) AS `vlan`
FROM nodes AS n
LEFT JOIN object_properties AS o ON n.id = o.object_id
LEFT JOIN interfaces AS i ON n.id = i.node_id AND i.description like '%vlan%'
GROUP BY  n.id
ORDER BY n.primary_ip


И все хорошо.

Также с коммутаторов через темплейты(разные модели - разные темплейты - разные Snmp запросы) и DCI и SNMP собирается параметр "Серийный номер устройства"

Вопрос - Как выбрать: IP - Наименование - Модель - snmp_description - MAC - VLAN - Serial Number

Есть ли такая возможность и как нужно модифицировать запрос? А то не совсем понятна логика табличных взаимосвязей в базе NETXMS.


Victor Kirhenshtein

Сначала надо найти DCI ID по имени и node ID:

SELECT item_id FROM items WHERE node_id=<node id> AND name='<snmp oid>';

теперь можно прочитать последнее собранное значение:

SELECT transformed_value FROM raw_dci_values WHERE item_id=<dci id>;

Для Oracle у меня получился такой запрос:


SELECT n.primary_ip IP,
o.name NAME,
n.uname MODEL,
n.snmp_sys_name SNMP_DESCR,
n.bridge_base_addr MAC_ADDR,
i.description VLAN,
r.transformed_value SERIAL
FROM nodes n
LEFT JOIN object_properties o ON n.id = o.object_id
LEFT JOIN interfaces i ON n.id = i.node_id AND i.description like '%vlan%'
LEFT JOIN items t ON t.node_id=n.id AND T.NAME='.1.3.6.1.2.1.1.1.0'
LEFT JOIN raw_dci_values r ON r.item_id=t.item_id
ORDER BY n.primary_ip;


OID неправильный конечно. Можно вместо items.name использовать items.description.

inspirit

Благодарю. Теперь все отлично.