Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

6/25/2014

Global Transaction Perdida - Informix


Este é um estudo de caso bem interessante depois de muito pesquisar (e ser ajudado pelo suporte) foi encontrado o que estava causando, era uma transação da Global Transaction entre a comunicação do SQL Server com o Informix que estava causando o lock em uma tabela importante do sistema, acredito que o SQL Server ocorreu um problema (um failover no banco, no DTC ou um outro problema) a solicitação se perdeu no SQL Server mais continuava ativa no Informix, sem esta resposta travou a tabela no Informix, primeiro pesquisando a tabela usando um select, realmente não consigo acessar;
echo "select count(*) from  nota_eletronica ; " | dbaccess nota_fiscal ;

Database selected.

      (count(*))

  252: Cannot get system information for table.

  113: ISAM error:  the file is locked.
Error in line 1
Near character position 31

Database closed.
Depois foi checado para ver quem estava predendo esta tabela - não tinha nenhuma tabela em lock - Checar tabela presa - Script para checar tabela presa
-------------------------------------------------------------------------------------------------
06/01/2014                      ***** INFORMIX BASIC SERVICES *****                      09:39:07
-------------------------------------------------------------------------------------------------

               +-----------------------------------------------------------------+
               |                                                                 |
               |                   NAO TEM TABELA PRESA NO BANCO                 |
               |                                                                 |
               +-----------------------------------------------------------------+
onstat -k

Como não encontramos quem estava prendendo pelos scripts a solução foi analisar o comando onstat -k, repare o 12f6bdaf0 com userthread=0 vamos focar nele nos próximos passos, os parêntesis que significa que esta perdida.
[c099:dba]$/export/home/informix> onstat -k | grep "("
48dcd028         1335a52a0        (12f6bdaf0)        0                HDR+X    600281   0           0      
48dcd0a8         133580238        (12f6bdaf0)        48dcd028         HDR+X    6001a3   0           0      
48dcd128         14ccfccf0        (12f6bdaf0)        48dcd0a8         HDR+X    60023b   0           0      
48dcd1a8         12f6a5128        (12f6bdaf0)        48dcd128         HDR+X    600110   0           0      
48dcd228         0                (12f6bdaf0)        48dcd1a8         HDR+IX   800021   0           0      
48dcd2a8         0                (12f6bdaf0)        48dcd228         HDR+X    800021   331ec11     0      
48dcd328         140625060        (12f6bdaf0)        48dcd2a8         HDR+IX   6002c0   0           0      
48dcd3a8         0                (12f6bdaf0)        48dcd328         HDR+X    6002c0   40803       0
onstat -all

Gerando um relatório geral para pesquisar tudo relacionado com 12f6bdaf0
onstat -all > onstat_g_all.log
Depois de um tempo analisando o onstat_g_all.log foi observado uma coisa interessante, tem uma Global Transaction (sem Subordinator/Coordinator) e uma Logical Log usando a 12f6bdaf0
[c099:dba]$/export/home/dba> cat onstat_g_all.log | grep "12f6bdaf0"
12f6bdaf0        -LX-G 0                8      logid 10891       10891:0x630e470   COMMIT  0:04     0      
48dcd028         1335a52a0        (12f6bdaf0)        0                HDR+X    600281   0           0      
48dcd0a8         133580238        (12f6bdaf0)        48dcd028         HDR+X    6001a3   0           0      
48dcd128         14ccfccf0        (12f6bdaf0)        48dcd0a8         HDR+X    60023b   0           0      
48dcd1a8         12f6a5128        (12f6bdaf0)        48dcd128         HDR+X    600110   0           0      
48dcd228         0                (12f6bdaf0)        48dcd1a8         HDR+IX   800021   0           0      
48dcd2a8         0                (12f6bdaf0)        48dcd228         HDR+X    800021   331ec11     0      
48dcd328         140625060        (12f6bdaf0)        48dcd2a8         HDR+IX   6002c0   0           0      
48dcd3a8         0                (12f6bdaf0)        48dcd328         HDR+X    6002c0   40803       0      
12f6bdaf0         -LX-G  COMMIT  0        4478019    16   48   52B64B6269E60F449D158D6B714313D280D5FF84A271
Checando a Transação Distribuída

O flags L indica uma Loosely Coupled TX:
[c099:informix]$/export/home/informix> onstat -G

IBM Informix Dynamic Server Version 11.10.FC1 -- On-Line -- Up 00:42:24 -- 8760064 Kbytes

Global Transaction Identifiers
address           flags  isol    timeout  fID        gtl  bql  data
12f6bdaf0         -LX-G  COMMIT  0        4478019    16   48   52B64B6269E60F449D158D6B714313D280D5FF84A271
1 active, 512 total

[c099:informix]$/export/home/informix>
Situação

Algumas observações nesta situação; Tirar e voltar o banco do ar não resolve pois a transação esta parada na logical log número 10891, apenas cancelando a GTX (Global Transaction) resolve o lock dessa tabela, para fazer isso temos dois comandos disponíveis;
onmode -Z 0x12f6bdaf0
ou
onmode -H 0x12f6bdaf0
Ambos só funcionam em transações perdidas em rollback. Como não estamos em rollback, pode não funcionar. Se não funcionar só um suporte Informix conseguira matar esta transação.

Matando a Global Transaction

Tentando matar usando o (onmode -Z) não deu certo;
[c099:informix]$/export/home/informix> onmode -Z 0x12f6bdaf0
onmode: Cannot kill transaction 0x12f6bdaf0.
Only I-STAR subordinates that are PREPARE'd or HEURISTICally ABORT'd
may be heuristically completed.
Tentando matar usando o (onmode -H) também não deu certo
[c099:dba]$/export/home/dba> onmode -H 0x12f6bdaf0
onmode -H may only be used to kill heuristically completed transactions.
O suporte teve que assumir e matar esta transação presa, pelo que reparei eles recompilaram um script que mata esta Global Transaction que esta presa, depois de matar resolveu tudo;

6/21/2014

6/12/2014

Descobrir Todos os Nomes das Tabelas no Informix


Um script para descobrir os nomes de todas as tabelas de um determinado banco no Informix;

Download do Script Shell Completo - Clique Aqui

Vendo Todas as Tabelas do Banco

Quero ver todas as tabelas do banco aa01055;
-------------------------------------------------------------------------------------------------
12/06/2014                      ***** INFORMIX BASIC SERVICES *****                      09:32:02
-------------------------------------------------------------------------------------------------


 Digite o Nome do BANCO DE DADOS .: aa01055

Resultado

Resultado desta pesquisa;
-------------------------------------------------------------------------------------------------
12/06/2014                      ***** INFORMIX BASIC SERVICES *****                      09:32:47
-------------------------------------------------------------------------------------------------


 "dba".almoxarifado_item
 "dba".almoxarifado_equipe_func 
 "dba".almoxarifado_funcionario 
 "dba".almoxarifado_municipio_tmp 
 "dba".almoxarifado_municipio 
 "dba".almoxarifado_ocorrencia_contrib 
 "dba".almoxarifado_transportadora 
 "dba".almoxarifado_usuarios 
 "dba".almoxarifado_atividade_tmp 
 "dba".almoxarifado_especial 
 "dba".almoxarifado_produto 
 "dba".almoxarifado_ultima_notific_tra 
 "dba".almoxarifado_lacre_movimentacao 
 "dba".almoxarifado_ultimo_malote 
 "dba".almoxarifado_pauta_preco_tmp 
 "dba".almoxarifado_item_calculo 
 "dba".almoxarifado_item_calc_comp 
 "dba".almoxarifado_item_nf_avulsa 
--- corte ----

6/10/2014

Permissão nas Tabelas via DBSCHEMA - Informix


Esta semana estava rodando um dbschema e vi que usando ele dá para retirar algumas informações bem interessantes do banco, como por exemplo (*) ver as permissões de um usuário em um banco (*) ver as permissões de um usuário mais com revoke para retirar essas permissões dele (*) ver guais são os usuários que tem acesso a uma tabela do banco, o Informix uma ferramenta disponível chamada dup-auth que faz as mesmas coisas, mais resolvi brincar um pouco o dbschema.

Download do Script Shell Completo - Clique Aqui

Checando os Grants de um Usuário

Vamos ver os acessos que um usuário tem no banco - para fazer isso vamos acessar a opção 1 (enter)
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:00:54
-------------------------------------------------------------------------------------------------
                                            c099 - informix

        Code  Function                                    
        ----  ------------------------------------------- 
         1    Relatorio de Grants de Usuario              
         2    Relatorio de Revoke de Usuario              
         3    Relatorio de Tabela por Usuarios            
         0    Sair da Aplicacao                           
        ----  ------------------------------------------- 

     Digite um Codigo - 1

Vamos digitar o nome do usuário e o nome do banco;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:01:28
-------------------------------------------------------------------------------------------------


Digite o USERNAME do USUARIO ........:  csa

Digite o NOME DO BANDO DE DADOS .....:  aa01055

Feito, tenho as permissões do usuário csa no banco aa01055
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:01:56
-------------------------------------------------------------------------------------------------

grant connect to "csa";
grant select on "dba".cae_grau_resp to "csa" as "dba";
grant select on "dba".cae_grupo_iplan to "csa" as "dba";
grant select on "dba".cae_his to "csa" as "dba";
grant select on "dba".cae_setor to "csa" as "dba";
grant select on "dba".cae_subgrupo to "csa" as "dba";
grant select on "dba".cfop to "csa" as "dba";
grant select on "dba".coordenadoria to "csa" as "dba";
grant select on "dba".gnre_produto to "csa" as "dba";
grant select on "dba".motivo_atualizacao to "csa" as "dba";
grant select on "dba".tipo_movimento to "csa" as "dba";
grant select on "dba".tributos to "csa" as "dba";
grant select on "dba".tributos_grupo to "csa" as "dba";
grant select on "dba".uf to "csa" as "dba";
grant select on "dba".uferms to "csa" as "dba";
grant select on "dba".ufir to "csa" as "dba";
grant select on "dba".ods_parametros to "csa" as "dba";
grant select on "dba".cae to "csa" as "dba";
grant select on "dba".agenfa to "csa" as "dba";
grant select on "dba".ods_situacao_carga to "csa" as "dba";
grant select on "dba".cfop_grupo to "csa" as "dba";
grant select on "dba".cnae to "csa" as "dba";
grant select on "dba".cae_cotepe_grupo to "csa" as "dba";
grant select on "dba".cae_cotepe_subgrupo to "csa" as "dba";
grant select on "dba".cae_iagro_grupo to "csa" as "dba";
grant select on "dba".orgao_arrecadador to "csa" as "dba";
grant select on "dba".pnd_tipo to "csa" as "dba";
grant select on "dba".trb_local_nf to "csa" as "dba";
grant select on "dba".trb_local_nf_detalhe to "csa" as "dba";
grant select on "dba".trb_tabela to "csa" as "dba";
grant select on "dba".pnd_mvto_ppd_simples_nacional to "csa" as "dba";
grant select on "dba".dap_anos_revalidados to "csa" as "dba";
grant select on "dba".dap_anos_revalidados_his to "csa" as "dba";
--- corte ----

Pressione qualquer tecla para continuar...

Checando os Revoke de um Usuário

Para ter os revokes para futuramente rodar e tirar as permissões de um usuário em um banco - para fazer isso uso a opção 2 (enter)
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:02:34
-------------------------------------------------------------------------------------------------
                                            c099 - informix

        Code  Function                                    
        ----  ------------------------------------------- 
         1    Relatorio de Grants de Usuario              
         2    Relatorio de Revoke de Usuario              
         3    Relatorio de Tabela por Usuarios            
         0    Sair da Aplicacao                           
        ----  ------------------------------------------- 

     Digite um Codigo - 2

Vamos digitar o nome do usuário e o nome do banco;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:02:52
-------------------------------------------------------------------------------------------------


Digite o USERNAME do USUARIO ........:  csa

Digite o NOME DO BANDO DE DADOS .....:  aa01055

Feito, relatorio de todas as tabelas do usuário no banco de dados - mais em revoke;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:03:14
-------------------------------------------------------------------------------------------------


revoke connect from "csa";
revoke select on "dba".cae_grau_resp from "csa" as "dba";
revoke select on "dba".cae_grupo_iplan from "csa" as "dba";
revoke select on "dba".cae_his from "csa" as "dba";
revoke select on "dba".cae_setor from "csa" as "dba";
revoke select on "dba".cae_subgrupo from "csa" as "dba";
revoke select on "dba".cfop from "csa" as "dba";
revoke select on "dba".coordenadoria from "csa" as "dba";
revoke select on "dba".gnre_produto from "csa" as "dba";
revoke select on "dba".motivo_atualizacao from "csa" as "dba";
revoke select on "dba".tipo_movimento from "csa" as "dba";
revoke select on "dba".tributos from "csa" as "dba";
revoke select on "dba".tributos_grupo from "csa" as "dba";
revoke select on "dba".uf from "csa" as "dba";
revoke select on "dba".uferms from "csa" as "dba";
revoke select on "dba".ufir from "csa" as "dba";
revoke select on "dba".ods_parametros from "csa" as "dba";
revoke select on "dba".cae from "csa" as "dba";
revoke select on "dba".agenfa from "csa" as "dba";
revoke select on "dba".ods_situacao_carga from "csa" as "dba";
revoke select on "dba".cfop_grupo from "csa" as "dba";
revoke select on "dba".cnae from "csa" as "dba";
revoke select on "dba".cae_cotepe_grupo from "csa" as "dba";
revoke select on "dba".cae_cotepe_subgrupo from "csa" as "dba";
revoke select on "dba".cae_iagro_grupo from "csa" as "dba";
revoke select on "dba".orgao_arrecadador from "csa" as "dba";
revoke select on "dba".pnd_tipo from "csa" as "dba";
revoke select on "dba".trb_local_nf from "csa" as "dba";
revoke select on "dba".trb_local_nf_detalhe from "csa" as "dba";
revoke select on "dba".trb_tabela from "csa" as "dba";
revoke select on "dba".pnd_mvto_ppd_simples_nacional from "csa" as "dba";
revoke select on "dba".dap_anos_revalidados from "csa" as "dba";
--- corte ----

Checando quem tem acesso em uma tabela

Vamos ver quem tem acesso em uma tabela - para fazer isso vamos acessar a opção 3 (enter)
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:03:53
-------------------------------------------------------------------------------------------------
                                            c099 - informix

        Code  Function                                    
        ----  ------------------------------------------- 
         1    Relatorio de Grants de Usuario              
         2    Relatorio de Revoke de Usuario              
         3    Relatorio de Tabela por Usuarios            
         0    Sair da Aplicacao                           
        ----  ------------------------------------------- 

     Digite um Codigo - 3

Vamos digitar o nome da tabela e o nome do banco;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:04:28
-------------------------------------------------------------------------------------------------


Digite o nome da TABELA .............:  cae_grau_resp 

Digite o NOME DO BANDO DE DADOS .....:  aa01055

Feito, temos as permissões dos usuários em uma tabela;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      17:04:54
-------------------------------------------------------------------------------------------------

grant select on "dba".cae_grau_resp to "csa" as "dba";
grant select on "dba".cae_grau_resp to "ods" as "dba";
grant select on "dba".cae_grau_resp to "odsleitura" as "dba";
grant select on "dba".cae_grau_resp to "pbeolchi" as "dba";
grant select on "dba".cae_grau_resp to "pbonifacio" as "dba";
grant select on "dba".cae_grau_resp to "pdiniz" as "dba";
grant select on "dba".cae_grau_resp to "public" as "dba";
grant update on "dba".cae_grau_resp to "ugig" as "dba";
grant insert on "dba".cae_grau_resp to "ugig" as "dba";
grant delete on "dba".cae_grau_resp to "ugig" as "dba";
grant index on "dba".cae_grau_resp to "ugig" as "dba";
grant select on "dba".cae_grau_resp to "vloinaz" as "dba";

Pressione qualquer tecla para continuar...

Broadcast Message - Linux


Um dia por causa de um problema de energia no data center tivemos que tirar as instâncias Informix do ar o mais rápido possível pois o gerador não acionou e estava só na bateria, para agilizar o envio das mensagens aos usuários do Informix (Linux) foi desenvolvido uma shell script para fazer isso.

Criando uma Mensagem para Enviar

Antes de enviar a mensagem temos criar uma, vamos usar a opção 1 (Carregar Mensagem);
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      16:00:05
-------------------------------------------------------------------------------------------------
                                         c099 - informix

         Code  Basic Services              
         ----  --------------------------------------   
          1    Carregar Mensagem                        
          2    Checar Mensagem Carregada                
          3    Enviar Mensagem Carragada                
          4    Deletar Mensagem Carregada               
          0    Voltar ao Menu Inicial                   
         ----  --------------------------------------   

                Digita um Codigo - 1
Dá para criar uma nova mensagem ou utilizar um novo modelo, neste exemplo vamos pegar a mensagem número 2 (Sairemos do ar daqui a 5 minutos)
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      16:00:32
-------------------------------------------------------------------------------------------------
                                         c099 - informix

         Code  Basic Services              
         ----  ------------------------------------------------ 
          1    Criar  - Nova Mensagem                           
          2    Modelo - Sairemos do ar daqui a 5 minutos        
          3    Modelo - Estamos saindo agora do ar              
          4    Modelo - Estamos saindo do ar - Horario de Verao 
          5    Modelo - Estamos saindo do ar - Manutencao       
          0    Voltar ao Menu Inicial                           
         ----  ------------------------------------------------ 

                Digita um Codigo - 2
Enter para continuar;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      16:00:42
-------------------------------------------------------------------------------------------------
                                         c099 - informix

                        +------------------------------------------------+
                        |                                                |
                        |              Use comandos de VI                |
                        |                                                |
                        +------------------------------------------------+

Pressione qualquer tecla para continuar... 
Agora estamos no vi - estando tudo ok de o comando :wq
+------------------------------------------------------------------------+
|          **** O sistema vai sair fora do ar por 5 minutos ****         |
+------------------------------------------------------------------------+
|                                                                        |
| Agora sao 16:00:54 as 16:05:54 o sistema vai sair do ar;               |
|                                                                        |
| DAQUI A POUCO O SISTEMA VOLTA A FICAR NO AR.                           |
|                                                                        |
| DBA/Informix                                                           |
|                                                                        |
+------------------------------------------------------------------------+

:wq 
Vamos enviar esta mensagem que criamos - vamos sair deste menu (0) enter
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      16:01:11
-------------------------------------------------------------------------------------------------
                                         c099 - informix

         Code  Basic Services              
         ----  ------------------------------------------------ 
          1    Criar  - Nova Mensagem                           
          2    Modelo - Sairemos do ar daqui a 5 minutos        
          3    Modelo - Estamos saindo agora do ar              
          4    Modelo - Estamos saindo do ar - Horario de Verao 
          5    Modelo - Estamos saindo do ar - Manutencao       
          0    Voltar ao Menu Inicial                           
         ----  ------------------------------------------------ 

                Digita um Codigo - 0 
Para enviar digite 3 enter;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      16:05:46
-------------------------------------------------------------------------------------------------
                                         c099 - informix

         Code  Basic Services              
         ----  --------------------------------------     
          1    Carregar Mensagem                          
          2    Checar Mensagem Carregada                  
          3    Enviar Mensagem Carragada                  
          4    Deletar Mensagem Carregada                 
          0    Voltar ao Menu Inicial                     
         ----  --------------------------------------     

                Digita um Codigo - 3
Na minha conexão ssh recebi a mensagem;
-------------------------------------------------------------------------------------------------
10/06/2014                      ***** INFORMIX BASIC SERVICES *****                      16:06:02
-------------------------------------------------------------------------------------------------
                                         c099 - informix


Broadcast message from informix (Tue Jun 10 16:06:02 2014):

+------------------------------------------------------------------------+
|          **** O sistema vai sair fora do ar por 5 minutos ****         |
+------------------------------------------------------------------------+
|                                                                        |
| Agora sao 16:05:36 as 16:10:36 o sistema vai sair do ar;               |
|                                                                        |
| DAQUI A POUCO O SISTEMA VOLTA A FICAR NO AR.                           |
|                                                                        |
| DBA/INFORMIX                                                           |
|                                                                        |
+------------------------------------------------------------------------+

Pressione qualquer tecla para continuar... 
Em outra conexão ssh também apareceu;
[c099:informix]$/export/home/informix> [c099:informix]$/export/home/informix> 
[c099:informix]$/export/home/informix> 
[c099:informix]$/export/home/informix> 
[c099:informix]$/export/home/informix> 
[c099:informix]$/export/home/informix> 
[c099:informix]$/export/home/informix> 
[c099:informix]$/export/home/informix> 
Broadcast message from informix (Tue Jun 10 16:06:02 2014):

+------------------------------------------------------------------------+
|          **** O sistema vai sair fora do ar por 5 minutos ****         |
+------------------------------------------------------------------------+
|                                                                        |
| Agora sao 16:05:36 as 16:10:36 o sistema vai sair do ar;               |
|                                                                        |
| DAQUI A POUCO O SISTEMA VOLTA A FICAR NO AR.                           |
|                                                                        |
| DBA/Informix                                                           |
|                                                                        |
+------------------------------------------------------------------------+ 
Script Completo

Esta abaixo o script completo.
# -----------------------------------------------------------------------------------------------#
# Funcao : Enviar mensagens aos usuarios no servidor linux.                                      #  
# Autor  : Claudemar Martins de Sa                                                               #
# Data   : 10/06/2014                                                                            #
# Fonte  : http://www.vivaolinux.com.br/script/Menu-tarefas-com-SSH                              #
# -----------------------------------------------------------------------------------------------#
 
MENSAGEM_OPCOES () {

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "         Code  Basic Services              "
echo "         ----  --------------------------------------     "
echo "          1    Carregar Mensagem                          "
echo "          2    Checar Mensagem Carregada                  "
echo "          3    Enviar Mensagem Carragada                  "
echo "          4    Deletar Mensagem Carregada                 "
echo "          0    Voltar ao Menu Inicial                     "
echo "         ----  --------------------------------------     "
echo
echo -n "                Digita um Codigo - "
read OPCAO
case $OPCAO in  
      1) MENSAGEM_PREPARAR ;;
      2) MENSAGEM_CHECAR ;;
      3) MENSAGEM_ENVIAR ;;
      4) MENSAGEM_DELETAR ;;
      0) clear ; exit ;;
      *) clear ; MENSAGEM_OPCOES ;;
   esac
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_PREPARAR () {
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "         Code  Basic Services              "
echo "         ----  ------------------------------------------------ "
echo "          1    Criar  - Nova Mensagem                           "
echo "          2    Modelo - Sairemos do ar daqui a 5 minutos        "
echo "          3    Modelo - Estamos saindo agora do ar              "
echo "          4    Modelo - Estamos saindo do ar - Horario de Verao " 
echo "          5    Modelo - Estamos saindo do ar - Manutencao       " 
echo "          0    Voltar ao Menu Inicial                           "
echo "         ----  ------------------------------------------------ "
echo
echo -n "                Digita um Codigo - "
read OPCAO
case $OPCAO in  
      1) MENSAGEM_PREPARAR_CRIAR_1 ;;
      2) MENSAGEM_PREPARAR_CRIAR_2 ;;
      3) MENSAGEM_PREPARAR_CRIAR_3 ;;
      4) MENSAGEM_PREPARAR_CRIAR_4 ;;
      5) MENSAGEM_PREPARAR_CRIAR_5 ;;
      0) clear ; MENSAGEM_OPCOES ;;
      *) clear ; MENSAGEM_PREPARAR ;;
   esac
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_PREPARAR_CRIAR_1 () 
{
clear
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"

echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "                        +------------------------------------------------+"
echo "                        |                                                |"
echo "                        |              Use comandos de VI                |"
echo "                        |                                                |"
echo "                        +------------------------------------------------+"
echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG

echo "+------------------------------------------------------------------------+" > $LOG1
echo "|                       **** ATENCAO USUARIOS ****                       |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DBA/Informix                                                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1
clear

vi $LOG1

MENSAGEM_PREPARAR
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_PREPARAR_CRIAR_2 () 
{
clear
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"

echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "                        +------------------------------------------------+"
echo "                        |                                                |"
echo "                        |              Use comandos de VI                |"
echo "                        |                                                |"
echo "                        +------------------------------------------------+"
echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG

echo "+------------------------------------------------------------------------+" > $LOG1
echo "|          **** O sistema vai sair fora do ar por 5 minutos ****         |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| Agora sao $(date '+%T') as $(date --date='300 seconds' '+%T' ) o sistema vai sair do ar;               |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DAQUI A POUCO O SISTEMA VOLTA A FICAR NO AR.                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DBA/Informix                                                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1

vi $LOG1

MENSAGEM_PREPARAR
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_PREPARAR_CRIAR_3 () 
{
clear
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"

echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "                        +------------------------------------------------+"
echo "                        |                                                |"
echo "                        |              Use comandos de VI                |"
echo "                        |                                                |"
echo "                        +------------------------------------------------+"
echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG

echo "+------------------------------------------------------------------------+" > $LOG1
echo "|                       **** ATENCAO USUARIOS ****                       |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| ESTAMOS TIRANDO O SISTEMA DO AR PARA MANUTENCAO;                       |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DAQUI A POUCO O SISTEMA VOLTA A FICAR NO AR.                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DBA/Informix                                                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1

vi $LOG1

MENSAGEM_PREPARAR
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_PREPARAR_CRIAR_4 () 
{
clear
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"

echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "                        +------------------------------------------------+"
echo "                        |                                                |"
echo "                        |              Use comandos de VI                |"
echo "                        |                                                |"
echo "                        +------------------------------------------------+"
echo
echo -n "Pressione qualquer tecla para continuar..."
read MSGOA

echo "+------------------------------------------------------------------------+" > $LOG1
echo "|                       **** ATENCAO USUARIOS ****                       |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| O sistema vai sair fora do ar a meia noite para sincronizar com        |" >> $LOG1
echo "| com o novo horario de verao.                                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| Daqui a 5 minutos o banco volta a ficar online;                        |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DBA/Informix                                                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1

vi $LOG1

MENSAGEM_PREPARAR
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_PREPARAR_CRIAR_5 () 
{
clear
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"

echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "                        +------------------------------------------------+"
echo "                        |                                                |"
echo "                        |              Use comandos de VI                |"
echo "                        |                                                |"
echo "                        +------------------------------------------------+"
echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG


echo "+------------------------------------------------------------------------+" > $LOG1
echo "|                       **** ATENCAO USUARIOS ****                       |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| O SISTEMA VAI FICAR FORA DO AR PARA MANUTENCAO.                        |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DAQUI A POUCO O SISTEMA VOLTA A FICAR NO AR.                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "| DBA/Informix                                                           |" >> $LOG1
echo "|                                                                        |" >> $LOG1
echo "+------------------------------------------------------------------------+" >> $LOG1

vi $LOG1

MENSAGEM_PREPARAR
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_CHECAR () 
{
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"
clear

if [ -e "$LOG1" ] ; then

cat $LOG1;

else

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo

echo "                                +--------------------------------+"
echo "                                |       Arquivo nao existe       |"
echo "                                +--------------------------------+"
fi


echo 
echo -n "Pressione qualquer tecla para continuar..."
read MSG
clear
MENSAGEM_OPCOES
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_DELETAR () 
{
clear
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"

if [ -e "$LOG1" ] ; then

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "                                +--------------------------------+"
echo "                                |        Arquivo Deletada        |"
echo "                                +--------------------------------+"
rm $LOG1
else
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo
echo "                                +--------------------------------+"
echo "                                |       Arquivo nao existe       |"
echo "                                +--------------------------------+"
fi

echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG
clear
MENSAGEM_OPCOES
}

# ======================================================================================================
# ======================================================================================================

MENSAGEM_ENVIAR () 
{
LOG1="proc_menu_wall_mensagem.txt"
LOG2="proc_menu_wall_enviando_mensagem.txt"
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo


if [ -e "$LOG1" ] ; then

echo "#!/bin/bash"                                                      > $LOG2
echo "wall <> $LOG2
cat $LOG1                                                               >> $LOG2
echo "ENDOFWALL"                                                        >> $LOG2

chmod 755 $LOG2
./$LOG2

rm $LOG1;
rm $LOG2;

else

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                         $(hostname) - $(whoami)"
echo

echo "                                +--------------------------------+"
echo "                                |       Arquivo nao existe       |"
echo "                                +--------------------------------+"
echo 
fi

echo 
echo -n "Pressione qualquer tecla para continuar..."
read MSG
clear
MENSAGEM_OPCOES
}

# ======================================================================================================
# Nao remover a linha abaixo
# ======================================================================================================

MENSAGEM_OPCOES 

6/09/2014

Usuários com acesso no banco Informix mais sem Cadastro no S.O


Depois de anos cadastrando/retirando acesso dos usuários no banco informix a equipe Informix resolveu fazer uma faxina geral das permissões nos bancos Informix, foi criado um script que faz a comparação entre o banco Informix e o Sistema Operacional, primeiro no banco Informix gera um arquivo das permissões dos usuários com CONNECT (dbschema) e compara com os usuários cadastrados no sistema operacional, no final temos dois relatórios que mostra as permissões (grants) e os (revokes) dos usuários com acesso no banco mais que não estão cadastrados no sistema operacional.

Download do Script Completo - Clique Aqui

Rodando o Script

Primeiro vamos rodar um script que checa no banco aa01055 os usuários com a permissão de CONNECT e que não tem estão cadastrados no Sistema Operacional;
[c099:informix]$/export/home/informix> ./remover_acesso_do_banco.sql 
Informando um Banco

Digito o nome do banco de dados;
-------------------------------------------------------------------------------------------------
09/06/2014                      ***** INFORMIX BASIC SERVICES *****                      14:12:33
-------------------------------------------------------------------------------------------------


Digite o NOME DO BANCO DE DADOS ..........:  aa01055 

Vamos aguardar alguns segundos;
-------------------------------------------------------------------------------------------------
09/06/2014                      ***** INFORMIX BASIC SERVICES *****                      14:14:01
-------------------------------------------------------------------------------------------------


                    +---------------------------------------------------------+
                    |                                                         |
                    |                 aguarde alguns segundos ...             |
                    |                                                         |
                    +---------------------------------------------------------+

Rodou com Sucesso

Feito, gerou os dois arquivos com os GRANTS e os REVOKES
-------------------------------------------------------------------------------------------------
09/06/2014                      ***** INFORMIX BASIC SERVICES *****                      14:15:19
-------------------------------------------------------------------------------------------------
                                       Database aa01055


     +---------------------------------------------------------------------------------------+
     |                                                                                       |
     |   Usuarios com acesso no banco mais sem usuario cadatrado no Sistema Operacional.     |
     |                                                                                       |
     +---------------------------------------------------------------------------------------+

                    +---------------------------------------------------------+
                    |                                                         |
                    | Arquivo do GRANTS  - GRANTS_09_06_2014_14:12:33.sql     |
                    |                                                         |
                    | Arquivo do REVOKES - REVOKE_09_06_2014_14:12:33.sql     |
                    |                                                         |
                    +---------------------------------------------------------+


[c099:informix]$/export/home/informix> 
Arquivo das Permissões - Grants

Verificando o arquivo dos grants dos usuários que não estão cadastrados no sistema operacional (e que tem permissão de connect no banco);
[c099:informix]$/export/home/informix> cat GRANTS_09_06_2014_14:23:30.sql
grant connect to "sehac";
grant connect to "semed";
grant update on "dba".guia_almoxarifado_cancelada_tmp to "sehac" as "dba";
grant insert on "dba".guia_almoxarifado_cancelada_tmp to "sehac" as "dba";
grant delete on "dba".guia_almoxarifado_cancelada_tmp to "sehac" as "dba";
grant update on "dba".guia_almoxarifado_cancelada to "sehac" as "dba";
grant insert on "dba".guia_almoxarifado_cancelada to "sehac" as "dba";
---- corte ---- 
Arquivo das Permissões - Revokes

O arquivo com os comandos revoke, este vou rodar no dbaccess para retirar os acessos;
[c099:informix]$/export/home/informix> cat REVOKE_09_06_2014_14:23:30.sql
revoke connect from "sehac";
revoke connect from "semed";
revoke update on "dba".guia_almoxarifado_cancelada_tmp from "sehac" as "dba";
revoke insert on "dba".guia_almoxarifado_cancelada_tmp from "sehac" as "dba";
revoke delete on "dba".guia_almoxarifado_cancelada_tmp from "sehac" as "dba";
revoke update on "dba".guia_almoxarifado_cancelada from "sehac" as "dba";
revoke insert on "dba".guia_almoxarifado_cancelada from "sehac" as "dba";
---- corte ---- 
Checando os Usuários

Só confirmando, esses dois usuários não estão cadastrados no sistema operacional do servidor;
[c099:informix]$/export/home/informix> finger sehac
finger: sehac: no such user.
[c099:informix]$/export/home/informix> finger semed
finger: semed: no such user.   
Rodando o Revoke

Vamos acessar o dbaccess do banco aa01055 e rodar o arquivo de REVOKE que vai remover as permissões dos usuários;
 [c099:informix]$/export/home/informix> dbaccess aa01055 
Acesso as opçoes > Query-language > Choose > seleciono o REVOKE_09_06_2014_14:12:33.sql
 CHOOSE >>
Choose a command file with the Arrow Keys, or enter a name, then press Return.

----------------------- aa01055@teste --------- Press CTRL-W for Help --------

 GRANTS_09_06_2014+  revoke

 REVOKE_09_06_2014+  tbl_sel

 
Enter em Run para rodar;
SQL:   New  Run  Modify  Use-editor  Output  Choose  Save  Info  Drop  Exit
Run the current SQL statements.

-- 1 to 52 of 3519 ---- aa01055@teste --------- Press CTRL-W for Help --------

revoke connect from "sehac";
revoke connect from "semed";
revoke update on "dba".guia_almoxarifado_cancelada_tmp from "sehac" as "dba";
revoke insert on "dba".guia_almoxarifado_cancelada_tmp from "sehac" as "dba";
revoke delete on "dba".guia_almoxarifado_cancelada_tmp from "sehac" as "dba";
revoke update on "dba".guia_almoxarifado_cancelada from "sehac" as "dba";
revoke insert on "dba".guia_almoxarifado_cancelada from "sehac" as "dba";
---- corte ---- 
Feito, retirado os acessos dos usuários; Observação

1 - Se no arquivo de revoke aparecer esta mensagem:
 [c099:informix]$/export/home/informix> cat REVOKE_09_06_2014_14:55:28.sql
    -p      permissions granted from user name
    -r      create and grant of the role  
Deve ter um connect em branco ou com um simbolo não valido - no meu caso foi um grant em branco que deu esta mensagem;
 grant connect to "";
2 - Neste servidor não usamos o PAM, que é um mecanismo para integrar múltiplos esquemas de autenticação de baixo nível no Informix (um bom exemplo de autenticação de PAM é habilitar a autenticação dos usuários via AD (da Microsoft), neste teste os usuários tem que estar cadastrado no sistema operacional para poder acessar o banco Informix;