Архивы db2 - Заметки Эникейщика https://7d3.ru/wiki/tag/db2 Или Рутинная Работа Системного Администратора Tue, 10 Jul 2018 14:57:18 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.9.7 [JASPER] DB2 execute procedure https://7d3.ru/wiki/841 https://7d3.ru/wiki/841#respond Fri, 01 Jun 2018 10:15:34 +0000 https://7d3.ru/?p=841 выполнение процедуры в jasper для db2 call procedurename(?) запрос: {call MON.P_STATISTIC($P{Parameter1})}  

Сообщение [JASPER] DB2 execute procedure появились сначала на Заметки Эникейщика.

]]>
выполнение процедуры в jasper для db2 call procedurename(?)

запрос:

{call MON.P_STATISTIC($P{Parameter1})}

 

Сообщение [JASPER] DB2 execute procedure появились сначала на Заметки Эникейщика.

]]>
https://7d3.ru/wiki/841/feed 0
[ZABBIX] SQL DB2 cash windows https://7d3.ru/wiki/805 https://7d3.ru/wiki/805#respond Sat, 05 May 2018 01:04:05 +0000 https://7d3.ru/?p=805 дополнение к https://7d3.ru/wiki/776. Теперь у нас имеется db2 + виндовый сервак. Поэтому юзаем powershell + zabbix Создаем VIEW на BD. Zabbix не преобразует пустое значение в 0 (когда вью ничего не вернула). Поэтому, надо написать такую вьюху, которая возвращала бы 0 вместо "нет результатов" Пример: [crayon-6a80f1c246bbf134044613/] Наша вьюха: [crayon-6a80f1c246bcf194866922/] Можно сразу задать application и description […]

Сообщение [ZABBIX] SQL DB2 cash windows появились сначала на Заметки Эникейщика.

]]>
дополнение к https://7d3.ru/wiki/776.

Теперь у нас имеется db2 + виндовый сервак. Поэтому юзаем powershell + zabbix

  1. Создаем VIEW на BD. Zabbix не преобразует пустое значение в 0 (когда вью ничего не вернула). Поэтому, надо написать такую вьюху, которая возвращала бы 0 вместо "нет результатов"
    Пример:
    CREATE OR REPLACE VIEW mon.events_distinct_customer_platform AS
    WITH event_distinct_customer_platform_a(platform, "COUNT") AS (
    основной SELECT
    )
    SELECT s.platform,
    COALESCE(( SELECT a."COUNT"
    FROM event_distinct_customer_platform_a a
    WHERE a.platform::text = s.platform), 0) AS "COUNT"
    FROM ( дополнительный SELECT с необходимыми значениями для заббикса) s(platform);

    Наша вьюха:
    CREATE OR REPLACE VIEW mon.events_distinct_customer_platform AS
    WITH event_distinct_customer_platform_a(platform, "COUNT") AS (
    SELECT ep.value,
    count(DISTINCT e.customer_id) AS count
    FROM auth.event e
    JOIN auth.event_param ep ON e.id = ep.event_id
    WHERE ep.param = 'platform' AND e.creation > CURRENT TIMESTAMP - 5 MINUTE WITH ur
    GROUP BY ep.value
    )
    SELECT s.platform,
    COALESCE(( SELECT a."COUNT"
    FROM event_distinct_customer_platform_a a
    WHERE a.platform = s.platform), 0::bigint) AS "COUNT"
    FROM ( VALUES ('WEB'), ('ANDROID'), ('IOS')) s(platform);

    Можно сразу задать application и description для discovery zabbix. Тогда вьюха будет выглядеть так
    CREATE OR REPLACE VIEW mon.events_distinct_customer_platform AS
    WITH event_distinct_customer_platform_a(platform, "COUNT") AS (
    SELECT ep.value,
    count(DISTINCT e.customer_id) AS count
    FROM auth.event e
    JOIN auth.event_param ep ON e.id = ep.event_id
    WHERE ep.param = 'platform' AND e.creation > CURRENT TIMESTAMP - 5 MINUTE WITH ur
    GROUP BY ep.value
    )(
            SELECT
                'Applications_name',
                'WEB',
                COUNT(*),
                'описание для айтема WEB'
            FROM
                event_distinct_customer_platform_a
            WHERE
                platform = 'WEB'
        UNION SELECT
                'Applications_name',
                'ANDROID',
                COUNT(*),
                'описание для айтема ANDROID'
            FROM
                event_distinct_customer_platform_a
            WHERE
                platform = 'ANDROID'
         UNION SELECT
                'Applications_name',
                'IOS',
                COUNT(*),
                'описание для айтема IOS'
            FROM
                event_distinct_customer_platform_a
            WHERE
                platform = 'IOS'
    
        )
  2. на standby сервере DB или ином другом устанавливаем драйвер и каталогизируем базу.
    db2 catalog tcpip node <NODE_NAME> remote <SERVER_NAME> server <PORT> SYSTEM <SERVER_NAME> OSTYPE WIN
    db2 catalog DB <DATABASE_NAME> AS <DATABASE_ALIAS> AT NODE <NODE_NAME>
    db2 catalog system odbc data source <DATABASE_NAME>
    <NODE_NAME> - имя ноды
    <DATABASE_NAME> - имя базы данных
    <SERVER_NAME> - имя сервера, где расположена база
    <PORT> - порт (по умолчанию 50000)
  3. Проверяем подключение и сохраняем пароль в Data Sources (ODBC)
  4. Скрипт исполнения запроса.  D:\scripts\zabbix\get_data.ps1
    get_data.ps1
    #Author: CTAPOMAK
    
    #Params
    #-view mon.events_distinct_customer_platform
    
    param ( $view = "ERROR" )
    
    if ($view -eq "ERROR"){
      echo("view param not found")
      exit
    }
    
    function Get-ODBC-Data{
       param([string]$query=$(throw 'query is required.'))
       $conn = New-Object System.Data.Odbc.OdbcConnection
       $conn.ConnectionString = "DSN=DB_NAME;"
       $conn.open()
       $cmd = New-object System.Data.Odbc.OdbcCommand($query,$conn)
       $ds = New-Object system.Data.DataSet
       (New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($ds) | out-null
       $conn.close()
       $ds.Tables[0]
    }
    
    function Set-ODBC-Data{
       param([string]$query=$(throw 'query is required.'))
      $conn = New-Object System.Data.Odbc.OdbcConnection
      $conn.ConnectionString= "DSN=DB_NAME;"
      $cmd = new-object System.Data.Odbc.OdbcCommand($query,$conn)
      $conn.open()
      $cmd.ExecuteNonQuery()
      $conn.close()
    }
    
    function get_data{
      $query = "SELECT * FROM $view"
      #создаем лок файл
      ([int][double]::Parse((Get-Date -UFormat %s))) > $lockFile
      $result = Get-ODBC-Data -query $query
      $result|  ConvertTo-Csv  -NoType -delimiter "|"| Select-Object -Skip 1 | Foreach-Object {$_ -replace '^"', ''}| Foreach-Object {$_ -replace '"$', ''}| Foreach-Object {$_ -replace '"\|"', '|'} > $extractFile
      #удаляем лок файл
      Remove-Item $lockFile
    }
    
    $extractFile="$view.stat"
    $lockFile="$view.lock"
    
    if((Test-Path $lockFile) -eq "True") {
      $date_now=[int][double]::Parse((Get-Date -UFormat %s))
      $date_stats=Get-Content $lockFile
      if([string]::IsNullOrWhiteSpace($date_stats)){
        $date_stats=0
      }
      $date_rusult=$date_now - $date_stats
      if($date_rusult -gt 1200){
        get_data
      }else{
        echo "work"
        exit
      }
    }else{
      get_data
    }

     
  5. скрипт возвращает возможные значения айтемов. D:\scripts\zabbix\stat_items.ps1
    stat_items.ps1
    #Author: CTAPOMAK
    
    #Params
    #-view mon.events_distinct_customer_platform
    
    param ( $view = "ERROR" )
    
    if ($view -eq "ERROR"){
      echo("view param not found")
      exit
    }
    
    $extractFile="D:\scripts\zabbix\$view.stat"
    
    if((Test-Path $extractFile) -eq "True") {
      echo '{"data":['
      $text=""
      foreach ($item in get-content $extractFile){
        $item = $item.Split("|")
        #echo $item[0];
    	$text=$text+'{"{#APPLICATIONNAME}":"'+$item[0]+'", "{#ITEMNAME}":"'+$item[1]+'", "{#DESCRIPTIONNAME}":"'+$item[3]+'"},'
      }
      echo $text.TrimEnd(",")
      echo "]}"
    }else{
      echo "ERROR: $extractFile not found"
    }
  6. скрипт возвращает значения айтемов. D:\scripts\zabbix\stat_items_data.ps1
    stat_items_data.ps1
    #Author: CTAPOMAK
    
    #Params
    #-view mon.events_distinct_customer_platform -itemname WEB
    
    param ( $view = "ERROR", $itemname = "ERROR" )
    
    if ($view -eq "ERROR"){
      echo("view param not found")
      exit
    }
    if ($itemname -eq "ERROR"){
      echo("itemname param not found")
      exit
    }
    
    get-content D:\scripts\zabbix\$view.stat | Select-String "\|$itemname\|" | %{($_ -split "\|")[2]}
  7. Шедулер
  8. Zabbix. Настройка описана в основной статье. Повторять не имеет смысла. Есть одно лишь отличие - мы добавили во вьюху описание айтема и наименование приложения. Скрипт отдает для них переменные
    {#APPLICATIONNAME} {#ITEMNAME} {#DESCRIPTIONNAME}
    их можно использовать при создании прототипов item. APPLICATIONNAME необходимо добавлять в поле New application prototype

Сообщение [ZABBIX] SQL DB2 cash windows появились сначала на Заметки Эникейщика.

]]>
https://7d3.ru/wiki/805/feed 0
[DB2] linux odbc настройка подключения https://7d3.ru/wiki/803 https://7d3.ru/wiki/803#respond Thu, 03 May 2018 09:44:19 +0000 https://7d3.ru/?p=803 yum install unixODBC.x86_64 cd /etc/ [root@host etc]# odbcinst -j unixODBC 2.3.1 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /root/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 sudo mkdir -p /opt/IBM/db2/db2clnt1 # Создаем каталог для драйвера sudo useradd db2clnt1 # создаем пользователя - владельца дравера sudo chown db2clnt1:db2clnt1 […]

Сообщение [DB2] linux odbc настройка подключения появились сначала на Заметки Эникейщика.

]]>
yum install unixODBC.x86_64

cd /etc/
[root@host etc]# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

sudo mkdir -p /opt/IBM/db2/db2clnt1 # Создаем каталог для драйвера
sudo useradd db2clnt1 # создаем пользователя - владельца дравера
sudo chown db2clnt1:db2clnt1 /opt/IBM/db2/db2clnt1 # выдаем права
Качаем нужную нам версию db2_odbc

v10.5fp8_linuxx64_odbc_cli.tar.gz
Выкладываем ее в папку /tmp

sudo -u db2clnt1 -i
cp /tmp/v10.5fp8_linuxx64_odbc_cli.tar.gz /opt/IBM/db2/db2clnt1/
cd /opt/IBM/db2/db2clnt1
tar -zxvf v10.5fp8_linuxx64_odbc_cli.tar.gz
rm v10.5fp8_linuxx64_odbc_cli.tar.gz

sudo vim /etc/odbcinst.ini
[DB2]
Description=ODBC for IBM DB2 10.5-FP8
Driver=/opt/IBM/db2/db2clnt1/odbc_cli/clidriver/lib/libdb2.so
Driver64=/opt/IBM/db2/db2clnt1/odbc_cli/clidriver/lib/libdb2o.so
FileUsage=1
DontDLClose=1

sudo vim /etc/odbc.ini
[DATABASE]
Driver=DB2

sudo -u db2clnt1 vim /opt/IBM/db2/db2clnt1/odbc_cli/clidriver/cfg/db2cli.ini
[DATABASE]
Database=DATABASE
Protocol=TCPIP
Hostname=hostname
ServiceName=50000
uid=User_Name
pwd=XXXXXXXXXXXX
# SCHEMALIST = " 'ZABBIX'"
DeferredPrepare = 1
ConnectTimeout = 25
ReceiveTimeout = 30
LOCKTIMEOUT = 20
AppendForFetchOnly = 1
AutoCommit = 1
ConnectType = 1
CursorHold = 0
TxnIsolation = 1

sudo chmod 640 /opt/IBM/db2/db2clnt1/odbc_cli/clidriver/cfg/db2cli.ini
sudo usermod -a -G db2clnt1 zabbix #Добавляем пользователя zabbix в группу db2clnt1 что бы он мог читать конфиг

isql DATABASE_name
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+

Сообщение [DB2] linux odbc настройка подключения появились сначала на Заметки Эникейщика.

]]>
https://7d3.ru/wiki/803/feed 0