terça-feira, 1 de outubro de 2013

Armazenando comandos do sistema operacional usando tabelas externas


Apartir do Oracle 11g, é possível utilizar tabelas externas, para armazenar resultados de qualquer comando executado no sistema operacional.

 

Para demonstrar esta possibilidade, abaixo criamos um “script shell” que basicamente, executa o comando do sistema operacional “mpstat”. Em seguida será possível consultar o comando a partir do banco de dados.

Criando o “script shell” mpstat.sh.

$ vi mpstat.sh

 

#Conteudo do script shell.

#

#!/bin/ksh

/usr/bin/mpstat

 

Criando o arquivo "mpstat.txt".

 

$ touch mpstat.txt

 

Criando os diretórios.

 

SQL> CREATE DIRECTORY LOAD_DIR AS '/home/oracle';

 

Directory created.

 

 

SQL> CREATE DIRECTORY EXECDIR AS '/home/oracle';

 

Directory created.

 

 

Criando a tabela CPU_BOTTLENECKS.

 

SQL> CREATE TABLE CPU_BOTTLENECKS

  2  (

  3  HORA         char(15),

  4  CPU          char(10),

  5  USERS        char(10),

  6  NICE         char(10),

  7  SYS          char(10),

  8  IOWAIT       char(10),

  9  IRQ          char(10),

 10  SOFT         char(10),

 11  STEAL        char(10),

 12  IDLE         char(10),

 13  INTRS        char(10)

 14  )

 15  ORGANIZATION EXTERNAL

 16  (

 17      TYPE ORACLE_LOADER

 18      DEFAULT DIRECTORY LOAD_DIR

 19      ACCESS PARAMETERS

 20      (

 21         RECORDS DELIMITED BY NEWLINE

 22         preprocessor execdir:'mpstat.sh'

 23         SKIP 3

 24      LOAD WHEN (HORA != BLANKS)

 25      FIELDS

 26         (

 27        HORA         POSITION (01:12),

 28        CPU          POSITION (13:16),

 29        USERS        POSITION (19:24),

 30        NICE         POSITION (27:32),

 31        SYS          POSITION (36:40),

 32        IOWAIT       POSITION (41:48),

 33        IRQ          POSITION (53:57),

 34        SOFT         POSITION (58:61),

 35        STEAL        POSITION (65:71),

 36        IDLE         POSITION (75:80),

 37        INTRS        POSITION (83:90)

 38         )

 39      )

 40  LOCATION ('mpstat.txt')

 41  )

 42  REJECT LIMIT UNLIMITED

 43  /

 

Table created.

 

 

Note que para a tabela externa executar o “script shell” (mpstat.sh) deve-se colocar a cláusula abaixo:

 
preprocessor execdir:'mpstat.sh'


Esta cláusula executa o “script shell”, no diretório criado (EXEC_DIR) e a  tabela externa acessa o arquivo “mpstat.txt”  que foi especificado no diretório (
LOAD_DIR).

 

Importante lembrar que o arquivo “mpstat.txt” apresenta o resultado do comando executado pelo “script shell”.

 

Portanto, o efeito apresentado é que a tabela externa não o arquivo de entrada especificado “mpstat.txt”, mas sim a saída do script shell “mpstat.sh”.


Ao selecionarmos a tabela externa, veremos o resultado do comando “mpstat”, conforme demonstrado abaixo:

 


SQL> select * from CPU_BOTTLENECKS;


HORA        CPU  USERS  NICE  SYS  IOWAIT  IRQ  SOFT  STEAL  IDLE    INTRS
----------- --- ------ ----- ---- ------- ---- ----- ------ ----- --------
02:22:04 PM all   3.01  0.00 0.78    1.18 0.04     0    0.0 94.53  2001.64


Comando executado via sistema operacional.

SQL> !mpstat

Linux 2.6.18-194.3.1.el5 (servteste)       09/20/2013

02:22:07 PM CPU  %user %nice   %sys  %iowait  %irq   %soft  %steal   %idle    intr/s
02:22:07 PM all   3.01  0.00   0.78     1.18  0.04    0.46    0.00   94.53   2001.64


Portanto agora com um pouco de criatividade é possível retirar várias informações do sistema operacional e armazená-los no banco de dados.

Referência : Oracle® Database Concepts 11gR2 (11.2)
                   Oracle® Database Administrator´s Guide 11gR2 (11.2)




MSc. Rubens Oliveira
DBA Oracle Consultor