Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

2/20/2014

Como controlar os recursos utilizados por usuários no banco Informix


Muitas vezes há uma exigência para controlar quando os usuários logaram em um determinado banco de dados, quanto tempo eles acessaram o banco e os recursos que eles usaram. Esta informação pode ser usada para fins de auditoria ou cobrança pelo uso de um banco de dados os recursos consumidos pelo usuário.

O procedimento sysdbopen é executado sempre que os utilizadores emitir com sucesso o DATABASE ou CONNECT declaração para ligar explicitamente a um banco de dados onde os procedimentos são instalados. Você também pode criar o procedimento SPL sysdbclose, que é executado quando o usuário emite o CLOSE DATABASE ou declaração Desconectar para desconectar do banco de dados. O banco de dados sysmaster contém a interface de monitoramento de sistema (SMI) tabelas. As tabelas SMI fornecem informações sobre o estado do servidor de banco de dados. Você pode consultar essas tabelas para identificar gargalos de processamento, determinar o uso de recursos, a sessão de faixa ou atividade do servidor de banco de dados, e assim por diante.

Checando

sysdbopen
[teste:informix]$/export/home/informix> dbschema -d potencial -f sysdbopen

DBSCHEMA Schema Utility       INFORMIX-SQL Version 11.70.FC2

No procedure sysdbopen.
sysdbclose
[teste:informix]$/export/home/informix> dbschema -d potencial -f sysdbclose

DBSCHEMA Schema Utility       INFORMIX-SQL Version 11.70.FC2

No procedure sysdbclose.
Não existe nenhuma configuração nos banco para o public para os dois;

Criando a Tabela

Vamos criar uma tabela para armazenar todos os registros de conexão dos usuários e os recursos que eles consumiram. Esta tabela precisa ser criado no banco de dados que queremos monitorar as conexões de usuários.
CREATE TABLE connect_log
        (
        cl_id           bigserial,
        cl_login        VARCHAR(32) DEFAULT USER,
        cl_sid          BIGINT,
        cl_pid          BIGINT,
        cl_connect      datetime YEAR TO SECOND
                                        DEFAULT CURRENT YEAR TO SECOND,
        cl_disconnect   datetime YEAR TO SECOND
                                        DEFAULT NULL,
        cl_program      varchar(255),
        cl_hostname     varchar(255),
        cl_inserts      BIGINT,
        cl_updates      BIGINT,
        cl_deletes      BIGINT,
        cl_selects      BIGINT,
        cl_commits      BIGINT,
        cl_rollback     BIGINT,
        cl_sorts        BIGINT,
        cl_lgrecs       BIGINT,
        cl_numios       BIGINT,
        cl_iowait       float,
        cl_lockwait     float,
        cl_cputime      float

        ) lock mode row;
Procedure - Grava a Hora de Conexão

Depois vamos criar um procedimento que insere um registro quando o usuário se conecta ao banco e quando o usuário sai é gravado a hora de saida.
DROP PROCEDURE IF EXISTS public.sysdbopen();
CREATE PROCEDURE public.sysdbopen()
   SET ISOLATION TO DIRTY READ;

   INSERT INTO connect_log
      (cl_sid,cl_pid, cl_program,cl_hostname)
      SELECT sid, pid, progname, hostname
         FROM sysmaster:sysscblst
         WHERE sid = DBINFO("sessionid");

END PROCEDURE;
Procedure - Grava a Hora de Desconexão

Por fim, crie o procedimento que será executado após o fechamento / desconexão de um banco de dados. Este procedimento irá atualizar a linha inserida no procedimento sysdbopen com o log out e sessões de estatísticas.
DROP PROCEDURE IF EXISTS public.sysdbclose();
CREATE PROCEDURE public.sysdbclose()

   UPDATE connect_log
      SET ( cl_disconnect, cl_inserts, cl_updates, cl_deletes,
          cl_selects, cl_commits, cl_rollback, cl_sorts, cl_lgrecs,
          cl_numios, cl_iowait, cl_lockwait, cl_cputime
          ) =
    ( ( SELECT CURRENT, upf_iswrite, upf_isrwrite, upf_isdelete,
            upf_isread, upf_iscommit, upf_isrollback , upf_totsorts,
            upf_lgrecs, upf_niowaits, iowaittime, lkwaittime , cpu_time
        FROM sysmaster:sysrstcb R, sysmaster:systcblst T
        WHERE sid = DBINFO("sessionid") AND R.tid = T.tid ) )
      WHERE cl_sid = DBINFO("sessionid")
            AND cl_disconnect IS NULL;

END PROCEDURE;
Checando quem Acessou o Banco

Depois de um tempo quero ver quem acessou este banco;
echo "select * from connect_log where NOT cl_login = 'informix' order by cl_id desc;" | dbaccess nome_do_banco 
Resultado
cl_id          1
cl_login       csa
cl_sid         46
cl_pid         27366
cl_connect     2014-02-19 15:30:45
cl_disconnect  2014-02-19 15:31:05
cl_program    
cl_hostname    teste
cl_inserts     1
cl_updates     0
cl_deletes     0
cl_selects     247
cl_commits     1
cl_rollback    0
cl_sorts       1
cl_lgrecs      6
cl_numios      2
cl_iowait      3.150230604645
cl_lockwait    0.00
cl_cputime     0.00485291622
Deletando

Se você não quiser mais monitorar é só deletar as procedures "public" que criamos;

public.sysdbopen
[teste:informix]$/export/home/informix/claudemar> echo "drop procedure "public".sysdbopen;" | dbaccess potencial

Database selected.

Routine dropped.

Database closed.
public.sysdbclose
[teste:informix]$/export/home/informix/claudemar> echo "drop procedure "public".sysdbclose;" | dbaccess potencial

Database selected.

Routine dropped.

Database closed.
Retirado - Clique Aqui

2/19/2014

Script para Compactação de Tabelas no Informix


Criei um script em shell para automatizar a compactação das tabelas no Informix, nele tenho diversas funções interessantes referentes a compactação das tabelas. Vou simular a compactação de uma tabela;

Download do Script Completo - Clique Aqui
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:29:24
-------------------------------------------------------------------------------------------------


     Code  Function                                  Code  Function                               
     ----  --------------------------------------    ----  -------------------------------------- 
       1   Processos Rodando                          40   REPACK - Recompactacao                 
       2   Estimativa de Compactacao                  41   SHRINK - Liberando Espaco              
       3   Compactacoes Realizadas                    42   COMPRESS - Comprimir                   
       4   Tamanho da Tabela                          43   COMPRESS, REPACK, SHRINK (3 JUNTOS)    
      ---- --------------------------------------     44   REPACK, SHRINK (2 JUNTOS)              
                                                      45   UNCOMPRESS - Descomprimir              
                                                      46   Manual do Compressao                   
                                                       0   Sair da Aplicacao                      
                                                     ----  -------------------------------------- 

                Digita um Codigo - 
No meu banco tem uma tabela grande - usando a opção 4 vou ver o tamanho dela
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:29:44
-------------------------------------------------------------------------------------------------


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

 Digite o Nome da TABELA ..........: onmode_f_test 
Resultado com o tamanho da tabela;
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:31:13
-------------------------------------------------------------------------------------------------


Nome da TABELA ...............: onmode_f_test
TAMANHO da Tabela ............: 2.8795318603515625   Gb

Pressione qualquer tecla para sair...
A tabeça onmode_f_test do banco aa01055 tem 2.879 Gb - checando a estimativa de compactação desta tabela (opção 2) - ela vai ser compactada 79.1%, ótima para compactar.
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      10:58:51
-------------------------------------------------------------------------------------------------


(expression)  est   curr  change partnum    table
              ----- ----- ------ ---------- -----------------------------------
              79.1%  0.0%  +79.1 0x0050008b aa01055:informix.onmode_f_test
              
              Succeeded: table estimate_compression  aa01055:informix.onmode_f_
              test 


Pressione qualquer tecla para continuar...
Vamos compactar esta tambela chamando a 43 (COMPRESS, REPACK, SHRINK), onde;
COMPRESS - Compacta a tabela reduzindo o tamanho dos dados a serem armazenados, criando assim espaco nao utilizado na particao;

REPACK - Move linhas a partir da extremidade da particao para o espaco vazio pagina presente na extremidade superior da particao.

Shrink - Libera extensoes livres de volta ao dbspace.
Preenchi os campos para compactar a tabela;
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:37:29
-------------------------------------------------------------------------------------------------
                                    Compress, Repack and Shrink


 Digite o Nome do BANCO DE DADOS .: aa01055

 Digite o nome da Tabela .........: onmode_f_test
Vamos esperar, esta rodando;
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:38:01
-------------------------------------------------------------------------------------------------
                                    Compress, Repack and Shrink


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


Database selected.

Abrindo uma outra shell e chamando o script de compactação usando a opcão (01 - Processos Rodando) dá para ver como esta este processo rodando - o nosso processo esta compactando - Rodou 47 segundos e ele esta com previsão de 385 segundos para terminar
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:38:48
-------------------------------------------------------------------------------------------------


 +-----------------+-----------+------------+------------+--------------------------------------
 | Banco           | Operacao  | Duracao    | Previsao   | Nome da Tabela
 +-----------------+-----------+------------+------------+--------------------------------------
 | aa01055         | COMPRESS  | 47         | 385        | onmode_f_test 
 +-----------------+-----------+------------+------------+--------------------------------------

Pressione qualquer tecla para continuar...
Uma observação importante - como estamos compactando o I/O no servidor deve ficar alto;
[s357:informix]$/export/home/informix> sar 1 200
Linux 2.6.18-371.3.1.el5 (s357.ms)      02/17/2014

11:41:35 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
11:41:36 AM       all     44.72      0.00      3.52      5.03      0.00     46.73
11:41:37 AM       all     46.46      0.00      1.01      3.03      0.00     49.49
11:41:38 AM       all     43.43      0.00      2.02      4.55      0.00     50.00
11:41:39 AM       all     40.20      0.00      2.01      9.05      0.00     48.74
11:41:40 AM       all     45.96      0.00      1.01      3.03      0.00     50.00
11:41:41 AM       all     41.41      0.00      2.53      6.57      0.00     49.49
Depois de um tempo o processo da compactação acabou
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:44:43
-------------------------------------------------------------------------------------------------


 +-----------------+-----------+------------+------------+--------------------------------------
 | Banco           | Operacao  | Duracao    | Previsao   | Nome da Tabela
 +-----------------+-----------+------------+------------+--------------------------------------
 +-----------------+-----------+------------+------------+--------------------------------------

Pressione qualquer tecla para continuar...
Na tela onde estava rodando a compactação deu essas mensagens - ela aparece na online.log do Informix
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:44:38
-------------------------------------------------------------------------------------------------

10:58:51  SCHAPI Create Dictionary for aa01055:informix.onmode_f_test started
10:58:51  SCHAPI Compress for aa01055:informix.onmode_f_test started
11:38:01  SCHAPI Repack for aa01055:informix.onmode_f_test started
11:44:37  Repacked 2351688 rows in aa01055:informix.onmode_f_test
11:44:37  SCHAPI Shrink for aa01055:informix.onmode_f_test started
11:44:38  SCHAPI table compress repack shrink  aa01055:informix.onmode_f_test succeeded

Pressione qualquer tecla para continuar...
Vamos ver que tamanho ficou esta tabela depois da compactação - opção 4 Tamanho da Tabela
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:46:32
-------------------------------------------------------------------------------------------------
                                         

     Code  Function                                  Code  Function                               
     ----  --------------------------------------    ----  -------------------------------------- 
       1   Processos Rodando                          40   REPACK - Recompactacao                 
       2   Estimativa de Compactacao                  41   SHRINK - Liberando Espaco              
       3   Compactacoes Realizadas                    42   COMPRESS - Comprimir                   
       4   Tamanho da Tabela                          43   COMPRESS, REPACK, SHRINK (3 JUNTOS)    
      ---- --------------------------------------     44   REPACK, SHRINK (2 JUNTOS)              
                                                      45   UNCOMPRESS - Descomprimir              
                                                      46   Manual do Compressao                   
                                                       0   Sair da Aplicacao                      
                                                     ----  -------------------------------------- 

                Digita um Codigo - 4
Colocando o nome do banco e da tabela;
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:47:27
-------------------------------------------------------------------------------------------------


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

 Digite o Nome da TABELA ..........: onmode_f_test
Compactou a tabela, reduziu o tamanho dela;
-------------------------------------------------------------------------------------------------
17/02/2014                      ***** INFORMIX BASIC SERVICES *****                      11:48:01
-------------------------------------------------------------------------------------------------


Nome da TABELA ...............: onmode_f_test
TAMANHO da Tabela ............: 1.5997467041015625   Gb

Pressione qualquer tecla para sair...

Utilitário Oncheck - Informix


O utilitário oncheck exibe informações sobre a configuração e uso de disco do banco de dados, como o número de páginas usadas para uma tabela, o conteúdo das páginas reservadas e o número de extensões em uma tabela. O utilitário oncheck pode detectar inconsistências nas estruturas do disco e pode reparar algumas dessas inconsistências.

Verificando as páginas reservadas

oncheck -cr - Este comando verifica a consistência das páginas reservados. As páginas reservadas são usados ​​para rastrear e controle de informações de configuração para toda a instância. Por exemplo, se os parâmetros utilizados ONCONFIG são armazenadas aqui. A execução deste comando irá geralmente levam muito pouco tempo se o motor estiver online. Se a instância não está sendo executado, o utilitário irá demorar um pouco para responder, uma vez que confirma o estado atual da instância antes de continuar. Este comando vai ter impacto no desempenho pouca ou nenhuma, quando executado em um servidor de produção.

Verificando as páginas reservadas, incluindo os logs lógico e físico

oncheck -cR - Executa as mesmas operações que a oncheck -cr, mas também verifica todas as páginas do logical-log e physical-log para a consistência. A opção oncheck -cr é consideravelmente mais rápido porque ele não verifica as páginas do log-file. Se você tiver alterado o valor de um parâmetro de configuração (seja através do ISA, onparams, onmonitor, onspaces, ou editando o arquivo de configuração), mas você ainda não tiver reinicializado memória compartilhada, o oncheck -cr e o oncheck -cR vão detectar a inconsistência e irão retornar uma mensagem de erro.

Verificando os extents

oncheck -ce - Este comando verifica a consistência das extensões dentro do servidor de banco de dados. Uma extensão é uma área contígua de disco que armazena dados, dados de índice ou dados blob para uma tabela específica. O utilitário oncheck garante que todas as extensões e espaço livre no servidor de banco de dados, correspondem às suas informações de controle associados. Este comando normalmente irá levar alguns minutos para executar. A quantidade exata de tempo é proporcional à quantidade de espaço em disco que é alocada para a instância do banco de dados. Este comando vai ter impacto no desempenho pouco (ou não) quando executado em um sistema de produção.

Verificando os catálogos de banco de dados

oncheck -cc - Este comando verifica a constância das tabelas do catálogo do sistema do qual há um conjunto para cada banco de dados dentro da instância. Essas tabelas armazenam dados essenciais sobre o banco de dados, tais como banco de dados de esquema. Este comando normalmente irá levar alguns minutos para executar; a quantidade precisa de tempo é proporcional ao número de bases de dados na instância. Este comando vai ter impacto no desempenho pouca ou nenhuma, quando executado em um sistema de produção.

Antes de executar oncheck -cc ou oncheck -pc, execute um UPDATE STATISTICS de instrução SQL para assegurar que uma verificação exata ocorra. Para conferir uma tabela, o oncheck compara cada tabela do catálogo do sistema para a sua entrada correspondente na tblspace.

Verificando os índices das tabela

oncheck -ci e o oncheck -cI são comandos para verificar a ordenação de valores-chave e da consistência das ligações horizontais e verticais do nó para todos os índices associados à tabela especificada.

oncheck -cI - Também verifica que o valor da chave ligada a um linha em um índice é o mesmo que o valor de chave na linha. A opção -cI não cruzar os dados em um índice funcional. Se você não especificar um índice, a opção verifica todos os índices. Se você não especificar uma tabela, a opção verifica todas as tabelas no banco de dados. As opções de reparação do mesmo ci estão disponíveis com o -cI. Se oncheck -ci ou oncheck -cI detecta inconsistências, ele solicita confirmação para reparar o índice que esta com problema. Se você especificar a opção (yes) -y, os índices são automaticamente reparados. Se você especificar a opção (não) -n, o problema é relatado, mas não reparados; não ocorre perguntar.

Verificando as linhas dos dados da TBLspace, incluindo bitmaps

oncheck -cd - Lê todas as páginas, exceto para blobpages e sbpages, da tblspace para o banco de dados especificado, a tabela, o fragmento, ou vários fragmentos( fragparts ), e verifica a consistência cada página. Este comando compara as entradas na página de bitmap para as páginas para verificar mapeamento.

Verificando as linhas de dados da TBLspace, incluindo bitmaps, páginas de lembrete e BLOBs

oncheck -cD - Executa as mesmas verificações que o comando oncheck -cd, e também verifica o header (cabeçalho) de cada blobpage para a consistência. O comando oncheck -cD não se compara o início time stamps armazenados na header (cabeçalho) com o fim da time stamps de tempo armazenados no final de um blobpage. Use o comando oncheck -cD -y para limpar grandes objetos simples órfãs nas blobspaces, que podem ocorrer depois de um rollback em vários arquivos de log. Se o banco de dados contém tabelas fragmentadas, mas nenhum fragmento for especificado, o comando verifica oncheck -cd todos os fragmentos da tabela. Se você não especificar uma tabela, o comando verifica todas as tabelas no banco de dados.

Verificando as partições de metadados

oncheck -cs - verifica as sbspaces.
oncheck -ps - Checa as sbspaces e as extensões.
oncheck -cS - Valida e exibe metadados de um sbspace.
oncheck -ps - Checa as sbspaces e extensões. Se você não especificar o nome sbspace, essa opção verifique todas as sbspaces.
oncheck -pS - Valida e exibe os metadados de um sbspace e também lista as extensões e informações de cabeçalho para smart large objects. Se você não especificar o nome da sbspace, todos os sbspaces serão verificada.

Mostrando as páginas reservadas

oncheck -pr - Executa as mesmas verificações que oncheck -cr e exibe as informações reservadas páginas.

Mostrando as páginas reservadas, incluindo os logs lógico e físico

oncheck -pR - Realiza as mesmas verificações que oncheck -cR, exibe as informações das páginas reservadas, e exibe informações detalhadas sobre as páginas de logical-log e o physical-log, marcando o início e o fim das páginas physical-log ativos. Se você tiver alterado o valor de um parâmetro de configuração (seja através do ISA ou editando o arquivo de configuração), mas você ainda não tiver reinicializado a memória compartilhada, oncheck -pr e oncheck -pR detectarão a inconsistência e retornam uma mensagem de erro.

Mostrando o relatório das extents

oncheck -pe - Executa as mesmas verificações do oncheck -ce e também exibe as informações do chunk e tblspace durante a verificação. As opções -ce -PE e também verificam as blobspaces, extensões smart-large-object e de os user-data com informações de metadados dos chunks e sbspace.

Exibindo o relatório do catálogo

oncheck -pc - Executa as mesmas verificações em tabelas de catálogo do sistema e também exibe as informações do catálogo do sistema igual ao oncheck -cc, incluindo o endereço físico, tipo de bloqueio utilizado, tamanho de linha, número de chaves, o uso de extenções, o número de páginas alocadas e usados, tblspace partNum e uso de índice para cada tabela.

Antes de executar oncheck -cc ou oncheck -pc, execute um UPDATE STATISTICS de instrução SQL para assegurar que uma verificação exata ocorra. Para conferir uma tabela, o oncheck compara cada tabela do catálogo do sistema para a sua entrada correspondente na tblspace.

Assim com o oncheck -cc este comando vai ter impacto no desempenho pouca ou nenhuma, quando executado em um sistema de produção.

Exibindo Informações dos Index

oncheck -pk - Executa as mesmas verificações que a oncheck ci e, além disso, apresenta os valores-chave para todos os índices na tabela especificada, pois os verifica.
oncheck -pK - Executa as mesmas cheques como a oncheck -cI e, além disso, apresenta os valores-chave e rowids, pois os verifica.
oncheck -pl - Executa as mesmas cheques como a oncheck -ci e exibe os valores-chave, mas verifica somente as páginas leaf-node index. Ele ignora as páginas root e as branch-node.
oncheck -pL - Executa as mesmas cheques como a oncheck -cI e exibe os valores-chave e rowids, mas verifica somente páginas de leaf-node index. Ele ignora as páginas root e as branch-node.

Exibindo as linhas em um formato hexadecimal - pd

oncheck -pd - Pega um banco de dados, uma tabela, um fragmento, um fragmento de partição (fragpart) e um rowid ou um número de uma tblspace específico da página lógica como entrada. Em todos os casos as informações de cabeçalho de página, o -pd mostra informações da page-header e exibe as linhas especificadas para o objeto de banco de dados (banco de dados, tabela, fragmento, rowid interna ou número da página) que você especificar em hexadecimal e formato ASCII. Nenhuma verificação de consistência é realizadas.

Display das linhas em formato hexadecimal - pD

oncheck -pD - Exibe a mesma informação que o oncheck -pd. Além disso, o oncheck -pD mostra valores armazenados em TEXT E BYTE armazenados nas tblspace ou informações de cabeçalho para OS large objects simples armazenados em um blobpage blobspace.

Exibindo o relatório da TBLspace

oncheck -pt - Mostra um relatório da tblspace para a tabela ou fragmento com o nome e o banco que você especificar, quando você executa o oncheck na linha de comando. O relatório contém informações gerais de alocação incluindo o tamanho máximo da linha, o número de chaves, o número de extensões, seus tamanhos, as páginas alocadas e usado por extensão, o valor de current serial, e a data em que a tabela foi criada. a impressões de saída para pt o tamanho da página do tblspace, o número de páginas (alocados, usados ​​e dados) em termos de páginas lógicas. O resultado desse comando mostra a lista de extensões dos campos e a lista o endereço físico para a entrada tblspace para a tabela e o endereço da primeira página do primeiro grau. A lista de extensão mostra o número de lógicas, bem como páginas físicas em cada ponto. Se você não especificar uma tabela, a opção exibe esta informação para todas as tabelas no banco de dados.

oncheck -pt e o oncheck -pT monstram um relatório da tblspace para uma tabela ou fragmento específico. A única diferença entre essas opções é que o oncheck -pT monstra mais informações do que oncheck -pt.

Exibindo o relatório de utilização de disco do TBLspace

oncheck -pT - Exibe um relatório das tblspace para uma determinada tabela ou fragmento cujo nome e banco de dados que você especificar quando você executar oncheck na linha de comando. O relatório contém informações de alocação geral, incluindo o tamanho máximo de linha, o número de chaves, o número de extensões, seus tamanhos, as páginas alocadas e usado por extensão, o valor atual de série, e a data em que a tabela foi criada. A-pt saída imprime o pagesize da tabela, o número de páginas (alocado, usados ​​e dados) em termos de páginas lógicas. Os campos Extents lista o endereço físico para a entrada tblspace tblspace para a tabela e o endereço da primeira página da primeira extensão. A lista de extensão mostra o número de páginas lógicas, bem como físico em cada ponto. Se você não especificar uma tabela, a opção exibe esta informação para todas as tabelas no banco de dados.

Mostrando o conteúdo de uma página lógica

O oncheck -pp - Oferece as seguintes variações de sintaxe:

Abaixo o comando oncheck -pp mostra o conteúdo de uma página lógica usando um número de tabela e o número de página lógica. Você também pode especificar um parâmetro opcional que especifica o número de páginas a serem visualizados.
oncheck -pp tblspc lpn (pages)
Abaixo o comando oncheck -pp apenas mostra o cabeçalho de uma página lógica usando um número de tabela e o número de página lógica.
oncheck -pp tblspc lpn -h
Abaixo o comando oncheck -pp mostra o conteúdo de uma página lógica utilizando um nome de banco de dados, nome da tabela, e um rowid interno do Informix. Você pode obter este rowid interna com o comando oncheck-PD. Este rowid interno não é o rowid de série que é atribuído em tabelas criadas com o tabname CREATE TABLE COM declaração rowids.
oncheck -pp database:table rowid
Mostrando o conteúdo de uma página lógica para um número de chunk e o número de página especificada

oncheck -pP tem as seguintes variações de sintaxe:

Exibe o conteúdo de uma página lógica usando um número de bloco e um offset. Você também pode especificar um parâmetro opcional que especifica o número de páginas a serem impressas.
oncheck -pP chunk# offset pages
Exibe apenas o cabeçalho de uma página lógica usando um número de bloco e um offset.
oncheck -pP chunk# offset -h

Mostrando a utilização do BLOBspace

oncheck -pB - Exibe estatísticas que descrevem uma media na blobpages blobspace em uma tabela especificada. Estas estatísticas fornecem uma medida de eficiência de armazenamento para large objects simples individuais em um banco de dados ou tabela. Se você não especificar uma tabela ou fragmento, a opção exibe estatísticas para todo o banco.

Ativando o Lock com -x

A opção-x pode ser anexado as opções -ci, -cI, -pk, -pK, -pl, e -pL para colocar um shared lock em tabelas afetadas. Enquanto a tabela está bloqueada, nenhum outro usuário pode executar inserções, atualizações e deleções, enquanto verifica oncheck ou imprime o índice. Sem a opção-x para tabelas com bloqueio de linha, oncheck apenas coloca um IS (intenção compartilhada) de bloqueio na tabela, o que impede ações como derrubar a mesa ou os índices durante a verificação.

Por exemplo, o comando de exemplo a seguir instrui oncheck para bloquear os índices da tabela do cliente enquanto ele valida a ordem dos valores-chave, valida as ligações horizontais, e garante que nenhum nó aparece duas vezes no índice.

Sintaxe dos Comandos

Abaixo estão as sintaxes dos comandos oncheck;
 >>-oncheck------------------------------------------------------>

>--+-+- -ce-+-------------------------------------------------------------------+-->
   | +- -pe-+                                                                   |   
   | +- -cr-+                                                                   |   
   | +- -pr-+                                                                   |   
   | +- -cR-+                                                                   |   
   | '- -pR-'                                                                   |   
   +-+- -ci-+--+-----+--database--+---------------------------------------+-----+   
   | +- -cl-+  '- -x-'            '-:--+--------+--table--+-------------+-'     |   
   | +- -pk-+                          '-owner.-'         '-#index_name-'       |   
   | +- -pK-+                                                                   |   
   | +- -pl-+                                                                   |   
   | '- -pL-'                                                                   |   
   +-+- -cd-+--database--+---------------------------------------+--------------+   
   | '- -cD-'            '-:--+--------+--table--+-------------+-'              |   
   |                          '-owner.-'         +-,frag_dbs---+                |   
   |                                             '-,%frag_part-'                |   
   +-+- -cc-+--+----------+-----------------------------------------------------+   
   | '- -pc-'  '-database-'                                                     |   
   +-+- -pB-+--database--+-------------------------------------+----------------+   
   | +- -pt-+            '-:--+--------+--table--+-----------+-'                |   
   | '- -pT-'                 '-owner.-'         '-,frag_dbs-'                  |   
   +-+- -pd-+--+-database--+------------------------------------------------+-+-+   
   | '- -pD-'  |           '-:--+--------+--table--+-----------+--+-------+-' | |   
   |           |                '-owner.-'         '-,frag_dbs-'  '-rowid-'   | |   
   |           '-tblspacenum--+-----------------+-----------------------------' |   
   |                          '-logical pagenum-'                               |   
   +- -pp--+-database--:--+--------+--table--+-----------+--rowid-+-------------+   
   |       |              '-owner.-'         '-,frag_dbs-'        |             |   
   |       '-tblspacenum--logical pagenum-------------------------'             |   
   +- -pP--chunknum--logical pagenum--------------------------------------------+   
   +-+- -cs-+--+---------+------------------------------------------------------+   
   | '- -cS-'  '-sbspace-'                                                      |   
   +-+- -ps-+--+---------------------------+------------------------------------+   
   | '- -pS-'  '-sbspace--partnum--pagenum-'                                    |   
   +- -u--option--+------------------+------------------------------------------+   
   |              '-(--arg_string--)-'                                          |   
   '-+-----------+--------------------------------------------------------------'   
     +- -V-------+                                                                  
     '- -version-'                                                                  

>--+-----+--+-----+--------------------------------------------><
   +- -n-+  '- -q-'   
   '- -y-'      
Oncheck quando o servidor está off-line

Os comandos de oncheck que podem ser executados quando o servidor está off-line.
oncheck -pr - Exibe as informações de página reservada à medida que verifica as páginas reservadas
oncheck -cr - Verifica cada uma das páginas reservadas de dbspace raiz com relação a várias condições
oncheck -pP - Exibe o conteúdo de uma página, exige um número de chunk e um número de página
oncheck -pp - Exibe o conteúdo de uma página lógica, exige um número TBLspace (número de partição) e um número de página
Por exemplo, o comando $ oncheck -pp 0x200560 3 gera os resultados quando o banco esta off-line;
oncheck -pp 0x200560 3

shared memory not initialized for INFORMIXSERVER 'ids1170uc1shm'
addr             stamp    chksum nslots flag type  frptr frcnt next   prev
2:253535         13554146 f72    12     801  DATA  1563  433   0      0

        slot ptr   len   flg
        1    24    127   0
        2    151   128   0
        3    279   128   0
        4    407   128   0
        5    535   128   0
        6    663   126   0
        7    789   126   0
        8    915   127   0
        9    1042  129   0
        10   1171  129   0
        11   1300  132   0
        12   1432  131   0
slot   1:
    0:  9 73 79 73 74 61 62 6c 65 73 69 6e 66 6f 72 6d   .systablesinform
   16: 69 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20   ix
   32: 20 20 20 20 20 20 20 20 20 20  0 20  5 60  0  0             . .`..
   48:  0  1  1 f4  0 1a  0  2  0  0  0  0  0 40 50 40   ...t.........@P@
.......

Utilitario DBSCHEMA - Informix


O utilitário dbschema exibe informações sobre os objetos de banco de dados em um banco de dados (o esquema) em linguagem SQL. Ele também gera comandos para reprodução de espaços de armazenamento, chunks, logs lógicos e logs físicos. É possível usar o utilitário dbschema para as seguintes finalidades:

- Exibir a distribuição criada pela instrução UPDATE STATISTICS.
- Exibir o esquema para a criação de objetos como bancos de dados, tabelas, visualizações, sequências, sinônimos, procedimentos, funções e privilégios.
- Exibir os comandos para criação de espaços de armazenamento, chunks e logs.
- Exibir informações sobre tipos de dados definidos por usuário e tipos de linha.

Você tem que especificar o banco de dados com opção –d.

Opções;
dbschema { [-q] [-t tabname] [-s user] [-p user] [-r rolename] [-f procname]
         [-hd tabname] -d dbname [-w passwd] [-seq sequence] [-l [num]]
         [-u [ia] udtname [all]] [-it [Type]] [-ss [-si]] [filename]
         [-sl length] [-nw] }
         { [-q] -c [-ns] [filename] }
Opções Adicionais:
+-----+-------------------------------------------------------------------------------------------------------------------------+
| -t  | Só a tabela ou view serão incluidas. Especifique all em lugar de tabname para todas as tabelas.                         |
| -s  | Comandos CREATE SYNONYM do usuário (synname) especificado. Especifique all no lugar do synname para todos os sinonimos. | 
| -p  | Imprime só os comandos GRANT para o usuario listado. Especifique all no lugar do pname para todos os usuarios.          |
| -f  | Exibe informações de distribuição. Especifique all no lugar do stproc para todas as store procedures.                   |
| -hd | Exibe informações de distribuição. Especifique all no lugar do tabname para todas as tabelas.                           |
| -ss | Gera informação server-specific para a tabela informada, incluindo o modo de lock, tamanho de extent e nome de dbspace. | 
| -r  | Gera CREATE e GRANT do role especificado ou entre com all para todos os roles.                                          |
+-----+-------------------------------------------------------------------------------------------------------------------------+
Display Campos da Tabelas
[teste:informix]$/export/home/informix> dbschema -d aa01055 -t audit_db

{ TABLE "dba".audit_db row size = 1023 number of columns = 7 index size = 15 }
create table "dba".audit_db 
  (
    audit_system char(4) not null ,
    audit_dt_ocorrido datetime year to fraction(3),
    audit_origem char(50) not null ,
    audit_pd char(9) not null ,
    audit_instancia char(20) not null ,
    audit_user_id char(30) not null ,
    audit_detail char(900) not null 
  );

revoke all on "dba".audit_db from "public" as "dba";

create index "dba".indice_audit_db_data on "dba".audit_db (audit_dt_ocorrido) using btree ;
Mostra Permissão de um Usuário
dbschema -d aa01055 -p haranha

grant connect to "haranha";

grant select on "dba".vdw_pi_2008 to "haranha" as "dba";
grant select on "dba".vdw_pi_2009 to "haranha" as "dba";
grant select on "dba".vdw_pi_2010 to "haranha" as "dba";
grant select on "dba".vdw_pi_2011 to "haranha" as "dba";
grant select on "dba".vdw_pi_2012 to "haranha" as "dba";
grant select on "dba".vdw_pi_2013 to "haranha" as "dba";
grant select on "dba".vdw_pi_2014 to "haranha" as "dba"; 
Exibição dos comandos para criação de espaços de armazenamento
dbschema -d h1 -c

--  Dbspace 1 -- Chunk 1
--  EXECUTE FUNCTION TASK
 ('create dbspace', 'rootdbs', '/dbspaces/rootdbs', '200000', '0', '2', '500', '400');

--  Dbspace 2 -- Chunk 2
EXECUTE FUNCTION TASK
 ('create dbspace', 'dbs1', '/dbspaces/c1', '200000', '0', '2', '100', '100');

--  Physical Log
EXECUTE FUNCTION TASK
 ('alter plog', 'dbs1', '50000');
Exibição dos comandos para criação de espaços de armazenamento
dbschema -d h1 -c

--  Dbspace 1 -- Chunk 1
--  EXECUTE FUNCTION TASK
 ('create dbspace', 'rootdbs', '/dbspaces/rootdbs', '200000', '0', '2', '500', '400');

--  Dbspace 2 -- Chunk 2
EXECUTE FUNCTION TASK
 ('create dbspace', 'dbs1', '/dbspaces/c1', '200000', '0', '2', '100', '100');

--  Physical Log
EXECUTE FUNCTION TASK
 ('alter plog', 'dbs1', '50000');
Verificar se o Update Statistic foi rodado em uma tabela
dbschema -d banco -hd all -t tabela | grep Constructed

Constructed on 2014-02-18 18:27:08.26371
Constructed on 2014-02-18 18:27:08.26286
Constructed on 2014-02-18 18:26:19.30547
Constructed on 2014-02-18 18:26:19.30501
Constructed on 2014-02-18 18:26:19.29862
Constructed on 2014-02-18 18:27:08.26872
Constructed on 2014-02-18 18:26:19.29814
Constructed on 2014-02-18 18:27:08.26811
Constructed on 2014-02-18 18:26:19.30452
Constructed on 2014-02-18 18:26:19.30407
Constructed on 2014-02-18 18:26:19.30358
Constructed on 2014-02-18 18:27:08.27460
Constructed on 2014-02-18 18:27:08.26742
Constructed on 2014-02-18 18:26:19.30287
Constructed on 2014-02-18 18:27:08.27398
Constructed on 2014-02-18 18:26:19.30236
Constructed on 2014-02-18 18:26:19.29347
Constructed on 2014-02-18 18:27:08.27342
Constructed on 2014-02-18 18:26:19.29281
Constructed on 2014-02-18 18:26:19.29630
Constructed on 2014-02-18 18:26:19.29237
Constructed on 2014-02-18 18:26:19.29187
Constructed on 2014-02-18 18:26:19.29769
Exibição da distribuição criada pela instrução UPDATE STATISTICS HIGH
dbschema -hd customer -d stores7

Distribution for informix.customer.fname
Constructed on 2011-10-14 08:29:25.00000
High Mode, 0.500000 Resolution
--- DISTRIBUTION ---
     (          Alfred          )
  1: (  1,   1, Alfred          )
  2: (  1,   1, Anthony         )
  3: (  1,   1, Arnold          )
  4: (  1,   1, Bob             )
  5: (  1,   1, Carole          )
Exibição de informações específicas ao servidor
dbschema -d h1 -ss

create table "informix".tab1
  (
    c1 integer,
    c2 char(20)
  )
  fragment by round robin in dbs1 , dbs2 , dbs3
  extent size 16 next size 16 lock mode page;
Verificar o esquema de uma function/procedure
dbschema -d desenv -f callback
Listando detalhes de uma function
dbschema -d desenv -f callback

create function "informix".callback(arg1 char, arg2 char, arg3 int)
returns integer
external name
'/opt/informix64/demo/esqlc/pamdemo.so'
language C;
Salvando o esquema do banco em um arquivo
dbschema -d nome do banco_de_dados > nome_do_arquivo
Listando o esquema do banco desenv em um arquivo com o nome esquema_db_desenv
dbschema -d desenv > esquema_db_desenv

2/14/2014

Movendo o banco sysadmin para um novo dbspace - Informix


O banco de dados sysadmin é criado no dbspace padrão, a rootdbs. Se o dbspace rootdbs não tem espaço suficiente para armazenar as propriedades das tasks e os logs de históricos dos comandos você pode mover o banco sysadmin para uma nova ou diferente dbspace, para fazer isso vamos usar um comando API "reset sysadmin". Este comando tira o banco sysadmin da dbspace rootdbs e recria ele na dbspace especificada que você indicou neste comando.

Para separar a sysadmin do rootdbs é uma tarefa muito , mas muito simples, basta executar o roteiro abaixo:

1 - Certifique-se que a seguinte mensagem apareceu no registro de mensagens on-line após a inicialização do servidor:
SCHAPI: Started 2 dbWorker threads.  
2 - Se necessário, crie uma nova dbspace exclusiva para o banco sysadmin, por exemplo new_dbspace.
3 - Com o informix usuário, execute os seguintes comandos:
dbaccess sysadmin - execute function task("reset sysadmin", "nova_dbspace");
Vou usar para mudar o meu banco sysadmin para a dbspace data_dbs
dbaccess sysadmin - execute function task("reset sysadmin", "data_dbs");
Onde nova_dbspace é o nome do dbspace onde vai ser o banco sysadmin.
O comando retorna a seguinte mensagem:
SCHAPI: 'sysadmin' database will be moved to 'new_dbspace'.
See online message log.
Checando pelo onmonitor o banco sysadmin esta usando a dbspace data_dbs onde defini para ficar
  Database Name         Owner       In Dbspace            Created     Status

  sysmaster             informix    rootdbs              02/13/2014     U
  sysutils              informix    rootdbs              02/13/2014     U
  sysuser               informix    rootdbs              02/13/2014     U
  aa01055               informix    data_dbs             02/13/2014     N
  sysadmin              informix    data_dbs             22:54:56       U
A internal thread, bld_sysadmin, espera até cinco minutos para obter acesso exclusivo ao banco sysadmin. O progresso do segmento bld_sysadmin é registrado na online.log.

Se esta operação for concluída com sucesso, o banco de dados sysadmin é descartado e recriado na nova dbspace. O Scheduler e a dbWorker threads são iniciados automaticamente.