Monitoramento Oracle Database Windows

Escrito por HIT


Monitoramento Oracle Database no Windows


Procedimento para instalação do ODBC no Linux (Proxy)


Importante: Realizar os procedimentos abaixo na máquina do proxy, somente no primeiro monitoramento Oracle.


1. Instalação do Driver ODBC no Linux do Proxy

# yum install unixODBC unixODBC-devel


2. Instalação do Oracle Instant Client


Caso o Zabbix Proxy não esteja instalado diretamente em um servidor de Oracle Database, é necessário instalar o Oracle InstantClient. Nesse caso, siga as seguintes instruções:


Centos 7:

Baixar os arquivos RPM´s do Oracle InstantClient, para Sistemas Operacionais 64bits:

# wget https://app.hit.com.vc/downloads/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --no-check-certificate
# wget https://app.hit.com.vc/downloads/oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm --no-check-certificate

Ou então, caso o Sistema Operacional seja 32bits, baixar os seguintes arquivos RPM´s do Oracle InstantClient:

# wget http://nimbus.visualsystems.com.br/setupFiles/oracle-instantclient11.2-basic-11.2.0.4.0-1.i386.rpm
# wget http://nimbus.visualsystems.com.br/setupFiles/oracle-instantclient11.2-odbc-11.2.0.4.0-1.i386.rpm


Prosseguir com o comando de instalação dos pacotes:


Centos 7:

rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm

Instalar o Oracle InstantClient na seguinte ordem (32bits): 

# rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.i386.rpm
# rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.i386.rpm


Centos 8:

wget https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-odbc-19.5.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm

Instalar o Oracle InstantClient na seguinte ordem (64bits): 

# rpm -ivh oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient19.5-odbc-19.5.0.0.0-1.x86_64.rpm


3. Configuração do Oracle ODBC Driver


Criar o diretório /etc/oracle onde ficarão os arquivos de configuração utilizados pelo Oracle ODBC Driver:


# mkdir /etc/oracle


4. Configurar as variáveis de ambiente


Criar/editar o arquivo /etc/sysconfig/zabbix-proxy para configurar as variáveis de ambiente necessárias para o funcionamento do Oracle ODBC Driver:


Centos 7

cat << 'EOF' > /etc/sysconfig/zabbix-proxy
ORACLE_HOME=/usr/lib/oracle/11.2/client64
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:/usr/lib64
TNS_ADMIN=/etc/oracle
NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1"
export ORACLE_HOME
export LD_LIBRARY_PATH
export TNS_ADMIN
export NLS_LANG
EOF

Centos 8

cat << 'EOF' > /etc/sysconfig/zabbix-proxy
ORACLE_HOME=/usr/lib/oracle/19.5/client64
LD_LIBRARY_PATH=/usr/lib/oracle/19.5/client64/lib:/usr/lib64
TNS_ADMIN=/etc/oracle
NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1"
export ORACLE_HOME
export LD_LIBRARY_PATH
export TNS_ADMIN
export NLS_LANG
EOF


5. Criar oracleenv.sh


Centos 7

cat << 'EOF' > /etc/oracle/oracleenv.sh
#!/bin/sh
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64
export TNS_ADMIN=/etc/oracle
export NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1"
EOF

Centos 8

cat << 'EOF' > /etc/oracle/oracleenv.sh
#!/bin/sh
export ORACLE_HOME=/usr/lib/oracle/19.5/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64
export TNS_ADMIN=/etc/oracle
export NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1"
EOF


Caso não tenha sido instalado o Oracle InstantClient, esteja se utilizado da própria instalação do Oracle Database, mudar a variável ORACLE_HOME para o local da instalação dos binários do banco de dados.


6. Validar se o arquivo de driver existe e está no caminho informado, executando o seguinte comando:


Centos 7

# find / -name libsqora.so.11.1 

Centos 8

# find / -name libsqora.so.19.1


7. Configurar o arquivo do pacote unixODBC para ele carregar a biblioteca ODBC do Oracle InstantClient:


Acesse o arquivos:

# vi /etc/odbcinst.ini


Adicione as entradas no arquivo que foi criado:


Centos 7

[OracleODBC]
Description = Oracle ODBC driver for Oracle
Driver =/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
FileUsage = 1 

Centos 8

[OracleODBC]
Description = Oracle ODBC driver for Oracle
Driver =/usr/lib/oracle/19.5/client64/lib/libsqora.so.19.1
FileUsage = 1


Realizar os procedimentos abaixo no servidor do banco:


1. Criar usuário de monitoramento


No Prompt de Comando (CMD), navegue até o diretório onde o Oracle XE está instalado

cd C:\oraclexe\app\oracle\product\11.2.0\server\bin


Ou caso seja outra versão:

cd C:\oraclexe\app\oracle\product\18.0.0\dbhomeXE\bin


Depois, usar o comando:

# sqlplus / as sysdba


Assim que logar no banco de dados criar o usuário com os seguintes comandos:

CREATE PROFILE "MONITORHIT"
LIMIT
COMPOSITE_LIMIT DEFAULT
SESSIONS_PER_USER DEFAULT
CPU_PER_SESSION DEFAULT
CPU_PER_CALL DEFAULT
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT
IDLE_TIME DEFAULT
CONNECT_TIME DEFAULT
PRIVATE_SGA DEFAULT
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_TIME DEFAULT
PASSWORD_REUSE_MAX DEFAULT
PASSWORD_VERIFY_FUNCTION NULL
PASSWORD_LOCK_TIME DEFAULT
PASSWORD_GRACE_TIME DEFAULT;
 
CREATE USER MONITORHIT IDENTIFIED BY m0nit0rvS PROFILE MONITORHIT;
 
GRANT CREATE SESSION TO MONITORHIT;
GRANT CREATE PROCEDURE TO MONITORHIT;
GRANT SELECT_CATALOG_ROLE TO MONITORHIT;
GRANT SELECT ON GV_$SORT_SEGMENT TO MONITORHIT;
GRANT SELECT ON SYS.TS$ TO MONITORHIT;
GRANT SELECT ANY DICTIONARY TO MONITORHIT;
GRANT SELECT ON SYSTEM.CTL_STB TO MONITORHIT;
GRANT ALTER TABLESPACE TO "MONITORHIT";
GRANT ALTER DATABASE TO "MONITORHIT";


Observação: caso ocorra alguma falha em alguma das GRANT's desconsiderar, pois pode não existir a tabela no banco.


2.Criação da pasta Oracle:


Crie uma pasta com o nome "oracle" dentro da pasta do Zabbix Agent.


Caso o Agent tenha sido instalado via script para Windows da HIT, estará instalado no seguinte caminho: C:\Zabbix


3.Criação do script do oratest:


Na pasta de instalação do agente do Zabbix, faça a criação de um arquivo .bat com o seguinte script:


@echo off
@set ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server
@set TNS_ADMIN=C:\Zabbix\oracle
@echo EXIT SUCCESS; | %ORACLE_HOME%\bin\sqlplus -S -L %1/%2@%3 > null && echo 1 || echo 0

ALTERAR AS VÁRIAVEIS:

@set ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server (Incluir o caminho onde o banco de dados está instalado)

@set TNS_ADMIN=C:\Zabbix\oracle  (Incluir caminho da pasta Oracle na pasta do Agente do Zabbix)


4.Inserir UserParameter:


Acesse o arquivo zabbix_agentd.conf e adicione a seguinte entrada:

UserParameter=oratest[*],"C:\Zabbix\oratest.bat" $1 $2 $3

Alterar para o caminho em que o arquivo oratest.bat foi criado.


Salve e reinicie o serviço do Zabbix Agent.


5.tnsnames.ora


Para Localizar o Arquivo tnsnames.ora:

  1. Navegue até o diretório onde o Oracle está instalado, geralmente em C:\Oracle\product\.
  2. Siga o caminho até dbhomeXE\network\admin\.
  3. O arquivo tnsnames.ora deve estar dentro deste diretório.


Realize uma CÓPIA deste arquivo e adicione a pasta oracle dentro da pasta do Zabbix Agent.


Realizar os procedimentos abaixo na máquina do Proxy:


Editar o arquivo /etc/odbc.ini para incluir uma entrada para cada base de dados monitorada. Veja o exemplo abaixo contendo duas entradas de conexões:

# vi /etc/odbc.ini


Adicione as entradas no arquivo que foi criado:

[banco]
Description = myoracledb database
Driver = OracleODBC
ServerName = BANCO


Definição de cada conexão do arquivo /etc/odbc.ini:

  • Entrada é o valor que deve ser informado na macro {$ORA_DSN} em cada host, como será detalhado mais à frente.
  • O parâmetro ServerName de cada conexão é o valor da string de conexão configurada no arquivo /etc/oracle/tnsnames.ora 


Editar o arquivo tnsnames.ora para ter uma entrada para cada banco de dados monitorado. No caso de cluster, criar um entrada para o cluster e uma para cada nó.

# vi /etc/oracle/tnsnames.ora


Adicione as entradas no arquivo, conforme o exemplo:


NOME_DO_BANCO =

 (DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = IP_DO_BANCO)(PORT = 1521))

  (CONNECT_DATA =

   (SERVER = DEDICATED)

   (SERVICE_NAME = NOME_DO_SERVICO_BANCO)

  )

 )


Utilizar o comando abaixo para setar o script:

# . /etc/oracle/oracleenv.sh


Utilizar o comando para testar a conexão:

isql banco MONITORHIT m0nit0rvS -v


Caso conecte, o retorno será conforme o quadro abaixo:

+---------------------------------------+
| Connected!              |
|                        |
| sql-statement             |
| help [tablename]                |
| quit                     |
|                        |
+---------------------------------------+
SQL>

Utilizar o comando "quit" para fechar a conexão.


Caso exista algum outro erro, verificar se as libs dos drivers estão corretas conforme os procedimentos (Realizar no Proxy)


Caso aconteça o erro abaixo:

# isql -v banco
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' : file not found
[ISQL]ERROR: Could not SQLConnect

E o arquivo do driver ODBC Oracle se encontra corretamente no caminho, é porque existe alguma dependência desse arquivo que não existe. Execute o comando abaixo para encontrar a dependência que está gerando essa falha:

# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1

Retorno:

ldd: warning: you do not have execution permission for `/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1'
       linux-vdso.so.1 => (0x00007fff947ff000)
       libdl.so.2 => /lib64/libdl.so.2 (0x00007f654d53c000)
       libm.so.6 => /lib64/libm.so.6 (0x00007f654d2b7000)
       libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f654d09a000)
       libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f654ce81000) = se estiver not found instalar rpm
       libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f654a511000)
       libodbcinst.so.1 => not found
       libc.so.6 => /lib64/libc.so.6 (0x00007f6549f6c000)
       /lib64/ld-linux-x86-64.so.2 (0x0000003661c00000)
       libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f6549b9e000)
       libaio.so.1 => /lib64/libaio.so.1 (0x00007f654999d000)
       libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f6549794000)

Normalmente o retorno do comando vai apontar a falta do arquivo libodbcinst.so.1, caso isso ocorra, basta criar um link apontando para a biblioteca existente.


Veja os procedimentos abaixo:

# cd /usr/lib64


# ls -lahs *odbcins*
 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so -> libodbcinst.so.2.0.0
 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so.2 -> libodbcinst.so.2.0.0
72K -rwxr-xr-x. 1 root root 70K Aug 16 2014 libodbcinst.so.2.0.0 


# ln -s libodbcinst.so.2.0.0 libodbcinst.so.1


# ls -lahs *odbcins*
 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so -> libodbcinst.so.2.0.0
 0 lrwxrwxrwx. 1 root root 20 Jun 26 16:54 libodbcinst.so.1 -> libodbcinst.so.2.0.0
 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so.2 -> libodbcinst.so.2.0.0
72K -rwxr-xr-x. 1 root root 70K Aug 16 2014 libodbcinst.so.2.0.0


# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1

ldd: warning: you do not have execution permission for `/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1'
       linux-vdso.so.1 => (0x00007fff947ff000)
       libdl.so.2 => /lib64/libdl.so.2 (0x00007f654d53c000)
       libm.so.6 => /lib64/libm.so.6 (0x00007f654d2b7000)
       libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f654d09a000)
       libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f654ce81000)
       libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f654a511000)
       libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007f654a300000)
       libc.so.6 => /lib64/libc.so.6 (0x00007f6549f6c000)
       /lib64/ld-linux-x86-64.so.2 (0x0000003661c00000)
       libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f6549b9e000)
       libaio.so.1 => /lib64/libaio.so.1 (0x00007f654999d000)
       libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f6549794000)


Aplicar o Template no Host.


Criar os templates para o cliente, seguindo o procedimento já estabelecido. Criar os seguintes templates para os clientes, de acordo com a necessidade:

  • Databases standalone, instâncias single, sem ser em cluster:
  • Template_Oracle_Standalone_<Cliente>: associado ao Template_Oracle_ Standalone_Padrao
  • Databases em cluster, RAC ? Real Application Cluster:
  • Template_Oracle_RAC_<Cliente> associado ao Template_Oracle_RAC_Padrao
  • Databases que fazem parte de um cluster:
  • Template_Oracle_No_RAC_<Cliente> associado ao Template_Oracle_No_RAC_Padrao


Depois de criados os templates, criar as seguintes macros em cada host (que correspondem a instâncias de banco de dados) que será monitorado:


{$ORA_DSN} = <DSN criado no arquivo /etc/odbc.ini>

{$ORA_USERNAME} = <usuário de monitoramento, normalmente MONITORHIT>

{$ORA_PASSWORD} = <senha do usuário de monitoramento, normalmente m0nit0rvS>