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 lê 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