Monitorando data/hora de último acesso em objetos
Autor: Ask Pontes | Publicado: 2010-04-13T15:22:00-07:00

Olá a todos,A carta traduzida do VP da IBM gerou um volume alto de acessos no meu blog, estou postando outro artigo para dar um quebrada no gelo, não é nada novo no Informix porém surgiu de uma necessidade diária de DBAS.Para uma necessidade especifica elaborei um script para monitorar a data/hora de acesso.Segue abaixo a estrutura da tabela:create table dba_tab_stat (objpartnum integer,  objname    varchar(28),  objcreated date,  objlastacc datetime year to second ) create unique index key001dbatabstat on dba_tab_stat (objpartnum,objname);create index key002dbatabstat on dba_tab_stat (objname);O shell script deve ser construido com o codigo abaixo:vi mon_read.sh------------------------------------------------------------------------------------while truedodbaccess ibs << FIMselect partnum, tabname, today createdfrom sysmaster:systabnames a where not exists (select 1 from dba_tab_stat where objname = a.tabname)into temp x with no log;insert into ibs:dba_tab_stat (objpartnum, objname, objcreated, objlastacc) select *, '' from x  where partnum not in( select dbsnum*1048576 from sysmaster:sysdbspaces                          where is_temp=1);select * from sysmaster:sysptprof into temp prof1 with no log;!sleep 60select * from sysmaster:sysptprof into temp prof2 with no log;create index ix01prof1 on prof1(partnum);update statistics low for table prof1;select partnum, tabname, bufreads from prof2  where not exists (select 1 from prof1 where prof1.partnum=prof2.partnum )into temp t_buffreads with no log;insert into t_buffreadsselect partnum, tabname, bufreads from prof2  where exists     (select 1 from prof1 where prof1.partnum=prof2.partnum and prof2.bufreads!=prof1.bufreads);update ibs:dba_tab_stat set objlastacc=currentwhere exists (select 1 from t_buffreads                where objpartnum=t_buffreads.partnum                  and objname=t_buffreads.tabname)FIMdone------------------------------------------------------------------------------------chmod +x mon_read.sh./mon_read.shO shell ficara executando em loop, para consultar a data/hora de ultimo acesso das tabelas é só executar a query abaixo:select objpartnum, objname, objlastaccfrom dba_tab_statwhere objlastacc is not nullobjpartnum objname                                       objlastacc    1048579 tab_1048579                                  2010-04-13 19:12:02    1048585 tab_1048585                                  2010-04-13 19:11:13    1048597 tab_1048597                                  2010-04-13 19:08:58    7340064 tab_7340064                                  2010-04-13 15:54:35    9437190 tab_9437190                                  2010-04-13 15:57:39   10485762 tab_10485762                                 2010-04-13 19:08:58   11534339 tab_11534339                                 2010-04-13 19:11:13   11534341 tab_11534341                                 2010-04-13 19:11:13   11534347 tab_11534347                                 2010-04-13 17:33:57   11534349 tab_11534349                                 2010-04-13 17:11:13   11534351 tab_11534351                                 2010-04-13 19:11:13   11534353 tab_11534353                                 2010-04-13 19:08:58O Script está porém pode ser melhorado, talvez a data/hora de última gravação no objeto, é possivel usar a mesma logica para ter regsitro de ultimo acesso em procedures.Espero que este tipo de informação faça parte do catálogo do Informix na versão Panther.Frequentemente ouço queixas dos DBAS SQL Server de algumas informações que o Informix não possue, no caso do Informix o produto foi criado para que os dbas criem suas próprias ferramentas.Em uma nova versão do script seria interessante converte para a versão 11 do Informix e usar as funções task() e sensor() mas isto vai dar um trabalho e deixo a cargo do Cesar , meu camarada de Jundiai).Vagner