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
quarta-feira, 27 de maio de 2009
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
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
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
Assinar:
Postagens (Atom)