Ad Widget

Collapse

База Zabbix 1.8.2 на Oracle 11g rel.2 EE

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • alto
    Junior Member
    • Jun 2010
    • 3

    #1

    База Zabbix 1.8.2 на Oracle 11g rel.2 EE

    Не совсем понимаю правила настройки строки соединения с базой для zabbix_server. Колупался с zabbix_server.conf, пока не посмотрел в код /zabbix-1.8.2/src/libs/zbxdb/db.c
    Code:
    if (host && *host) {
       connect = zbx_strdcatf(connect, "//%s", host);
    
       if (port)
          connect = zbx_strdcatf(connect, ":%d", port);
    }
    
    if (dbname && *dbname [U][B]&& connect[/B][/U]) {
       if (connect)
          connect = zbx_strdcat(connect, "/");
       connect = zbx_strdcatf(connect, "%s", dbname);
    }
    т.е. она в любом случае пытается построить строку вида
    Code:
    //host:port/dbname
    Стоит только опустить host и тогда connect будет всегда пустым. Я, к своему сожалению, не знаю такого формата строки соединения. И пытаюсь настроить соединение на описание в TNS, т.е. указывать только dbname, юзера и пароль забикс схемы. И забикс и ораклячий сервант стоят на одном хосте. tns'ы настроены.
    Собственно, к чему я это все. В приведенном выше коде подчеркнутое и выделенное "&& connect" точно не лишнее? Если его убрать, то строка соединения собирается так, как мне нужно.
  • dotneft
    Senior Member
    • Nov 2008
    • 699

    #2
    сделано в последних ревизиях, зачем тоже не понимаю в описани OCILogon2 параметром должен являться dbname, взятый из tnsnames.ora. Причем тут хост? оО

    Comment

    • alto
      Junior Member
      • Jun 2010
      • 3

      #3
      В общем, поколупался и разобрался с этой темой полностью.
      //hostort/dbname - это формат easy connection string
      Описание есть, к примеру, вот тут:

      В принципе понятно, откуда ноги растут. Дает возможность соединяться с клиента без прописанного tnsnames, т.е. для работы будет достаточно только минимального набора клиентских либ. Вот только счастье это есть с десятки и выше, что уже несколько ограничивает. Плюс на самом сервере надо править ${ORACLE_BASE}/network/admin/sqlnet.ora, чтобы включить поддержку этого счастья:
      NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)
      а вот это не каждому смертному дано.
      Ну и оставили бы оба режима, ezc и старый добрый tns. Кому что привычнее. Нет же. В коде соединения на php все еще печальнее, include/db.inc.php:
      Code:
      if (!empty($DB['SERVER'])){
              $connect = '//'.$DB['SERVER'];
      
              if ($DB['PORT'] != '0')
                      $connect .= ':'.$DB['PORT'];
      
              if ($DB['DATABASE'])
                      $connect .= '/'.$DB['DATABASE'];
      }
      Там вообще предусмотрен только ezc. Ну и написали бы:

      Code:
      if (!empty($DB['SERVER'])){
              $connect = '//'.$DB['SERVER'];
      
              if ($DB['PORT'] != '0')
                      $connect .= ':'.$DB['PORT'];
      }
      if (!empty($DB['DATABASE'])){
              if (!empty($connect))
                      $connect .= '/';
      
              $connect .= $DB['DATABASE'];
      }
      и люди бы себе голову не морочили этими детективами.

      Comment

      • alto
        Junior Member
        • Jun 2010
        • 3

        #4
        Господа, а может ли кто-нибудь нормально перевести саппорту описание этого недоразумения на английский?


        Думал, что там русскоязычные разработчики, ан нет. Я конечно и сам могу, но дальше "зе ландон из э кепитал о греат бринт" у меня с разговорным английским еще со школы не срослось.

        Comment

        Working...