Проблема с data collection

Started by DmitryKiss, June 02, 2011, 05:50:56 PM

Previous topic - Next topic

DmitryKiss

Имеется сервер, назовем его megaserver
Для этого сервера создано следующее data collection:
Net.RemoteShareStatus(\\megaserver\price,MEGASERVER,price,BlaBlaBla)
Все работает отлично, но проходит чуть больше недели(точный интервал не скажу) и
вышеприведенное data collection приводится автоматически к следующему виду 
Net.RemoteShareStatus(\megaserverprice,MEGASERVER,price,BlaBlaBla)
Меняю обратно на (\\megaserver\price,MEGASERVER,price,BlaBlaBla), поначалу полет нормальный, но
потом снова где-то через неделю data collection меняется на (\megaserverprice,MEGASERVER,price,BlaBlaBla).

Пробовал заключать в двойные кавычки ("\\megaserver\price",MEGASERVER,price,BlaBlaBla) - не помогает.

netxms 1.0.11
nxagent 1.0.11
База данных (PostgreSQL 8.3) и сам netxms работают вместе на одном сервере (Win 2003 R2 Rus)
Кодировка в netxmsd.conf установлена в CP1251, кодировка БД WIN1251, т.е. кодировки совпадает.

P.S. ситуация, когда кто-то посторонний вручную через консоль или напрямую через БД меняет data collection, исключается.

Victor Kirhenshtein

A v promezutke sluchajno ne proishodit restart servera monitoringa? I mozete posmotret', kak eto vigljadit v baze:

SELECT name FROM items WHERE item_id=<id problemnogo dci>

?


DmitryKiss

#2
Спасибо за наводящий вопрос!
Действительно, в самой БД была запись вида Net.RemoteShareStatus(\megaserverprice,MEGASERVER,price,BlaBlaBla)

Что интересно, в моем случае при создании любого data collection через NetXMS Console, где в записи будет содержатся \\, в БД заносится только \.
И правится это только вручную через БД.

Victor Kirhenshtein

Очень странная ситуация. Выглядит так, что сервер перед записью в базу не заменяет \ на \\. Проверил на своей системе - все работает как надо, правда у меня postgreSQL 8.4.4. А вы могли бы запустить сервер с уровнем дебага 9, поменять какой-нибудь DCI с символами \, остановить сервер, и найти в логе соответствующий INSERT или UPDATE? Еще можно попробовать сделать UPDATE вручную, предварительно выставив

SET standard_conforming_strings TO off;
SET escape_string_warning TO off;

для текущей сессии.

DmitryKiss

Огромное спасибо за помощь!
Проблема была в настройках PostgreSQL.
Помогла следующая запись в конфиге PostgreSQL - standard_conforming_strings = on (off - было по умолчанию).
В случае если этот параметр выставлен в on , строки будут обрабатываться в соответствии со стандартом SQL, т.е. символ "\" не будет иметь какого-либо специального значения.