quarta-feira, 27 de maio de 2009

Identificando Transação Aberta

Olá,

Muitos desenvolvedores 4gl necessitam saber se na sessão corrente existe uma transação aberta (begin work).

O primeiro passo é identificar o ID da sessão corrente através do comando dbinfo.

select dbinfo('sessionid') into wsid
from sysdual

Depois faça um acesso em sysmaster:sysrstcb (Rsam Thread Control Block) e identifique o endereço físico da sessão em memória:

select address into waddress from sysrstcb
where sid=wsid

Com este endereço procure algumas transação aberta onde o owner seja igual a waddress:

select bitval(flags,2) from systxptab where owner= waddress

Se a query retornar valor 1 quer dizer que na sessão especificada foi executado o comando BEGIN WORK.

Abrazos

Vagner

quinta-feira, 21 de maio de 2009

Backup de Logical Log para disco

Olá,

Muita gente se pergunta porque o Informix não faz backup de logical log para disco em pequenos arquivos, como é feito no Oracle.

Bom a explicação é que na versão 7 é possivel fazer isto, mas é preciso de efetuar algumas alterações no alarmprogram.sh, é um configuração trabalhosa, mas o recurso existe.

Na versão 11 esta necessidade foi implementada de forma muito fácil.

Segue abaixo os passos necessários para habilitar esta funcionalidade:

No arquivo onconfig define o parâmetro LTAPEDEV para um diretório valido:

LTAPEDEV /myinformixlogs

Agora é preciso configurar o informix para fazer o backup automático do logs:

Editar o arquivo $INFORMIXDIR/etc/alarmprogram.sh e alterar o parâmetros conforme abaixo :

BACKUPLOGS=Y
BACKUP_CMD="ontape -a -d"

A partir desta todo log será gravada e um arquivo distinto no diretório informado, o formato padrão do nome dos arquivos é:

hostname_servernum_Ln = serv1_11_307

Esta nomenclatura pode ser alterada através da variavel de ambiente:

IFX_ONTAPE_FILE_PREFIX

Este recurso é muito útil em pequenas instalações informix, onde os logs são direcionados para disco e serão armazenados posteriormente pois uma solução de backup de file-system.

Para quem trabalha com HDR/RSS é muito interessante implementar esta feature, pois é possivel enviar os logs do servidor primário para o servidor secundário logo após a sua gravação em disco.

Apenas lembre-se que o file-system que contém os logs precisa ter redundância configurada pelo Administrador de Sistema!!

Vagner

sexta-feira, 15 de maio de 2009

Calculando Limites de Particao

Ola,

Estou envolvido em um estudo de sizing para determinado ambiente, e me deparei com algo interessante que os Dbas Informix devem estar atentos, que e o limite de alocacao de paginas por particao.

Para explicar o problema, a referencia logica de um registro e feita atraves do rowid, no caso do Informix o rowid tem o seguinte format:

0xPPPPPPSS

P=Indica a Pagina logica dentro do extent
S=Indica o slot onde a linha se encontra dentro na pagina

O rowid 257 quando transformamos para hexadecimal temos 0x101, isto indica pagina logica 1 e slot 01, dentro do slot temos duas informacoes:

Offset=E o endereco do byte onde a linha se encontra na pagina
len=indica a quantidade de bytes que a linha possui

Portanto o Informix para acessar o registros se posiciona na pagina logica, vai ate o slot e le o byte onde inicia a linha e faz a leituras de N (Len) bytes a partir desta posicao.

E onde esta o problema citado no inicio do post?

Bom, neste formato enderecamos uma quantidade limitada de paginas , por exemplo:

0xFFFFFF = 16777215

Digamos que o tamanho da pagina logica do dbspace 'e de 2K, teremos 2*16777215 = 33.554.430 de paginas ou seja 32GB, se quisermos expandir o limite para 128GB temos que criar um dbspace com tamanho de pagina de 8K.

Após esta alteração caso o limite seja atingido ai a solução e particionar a tabela mesmo.

Lembre-se de nunca fazer isto:

select max(rowid) from tabela

Isto nao ira retornar o ultimo registros inserido!!

Saludos