quarta-feira, 28 de outubro de 2009

IBM Information on Demand (IOD) - News I


Ontem participei de uma excelente palestra com o Dr. Arvind Krishna, o nome foi "Reduzindo seus custos com gerenciamento de dados com workload otimizado", o objetivo foi apresentar a melhor forma de como otimizar o workload de ambientes produtivos baseados em solucao de hardware e software IBM.

A palestra comecou com DB2 Pure Scale, a recente solucao da IBM para competir com a Oracle, realmente a solucao 'e muito boa, foi baseado em Arquitetura Power utilizando a feature Power HA, a solucao 'e muito consistente , parece ser algo promissor, muito parecido com o Sysplex que existe no mainframe.

No final da apresentacao foi apresentada a solucao da Cisco Corp, inclusive a mesma foi premiada como Partner of the year, e fizeram uma bela apresentacao sobre Informix 11.50.

Tambem participei de diversas sessoes sobre Informix e realmente o release 11.50.xc6 esta repleto com novas funcionalidades, em breve devo postar alguns artigos sobre essas features, para dar um ideia agora 'e possivel configurar listeners online sem ter a necessidade de baixar o banco.

Creio que depois deste evento terei muita informacao para postar ate o final do ano.


sexta-feira, 23 de outubro de 2009

IBM Information on Demand (IOD)


Chegou o dia da viagem, estamos indo ao IBM IOD, evento muito importante dentro da Brand de Software da IBM.

Irei participar de várias palestras e sessões técnicas, claro que estarei nas principais sessões de Informix, mas vou focar em Infosphere, Solidb e soluções para MDM.

Segue abaixo a lista de palestrasr/sessões técnicas de Informix:

1227 Upgrading Hardware and IBM Informix Dynamic Server with Zero Downtime

Network IP recently migrated all of their database servers to IBM hardware and upgraded to IBM Dynamic Server 11.5 at the same time. Learn how they achieved this rolling upgrade with zero downtime.

1231 SOA Enablement on IBM Informix 4GL: Reinvigorating Legacy Business Logic

IBM Informix 4GL (I4GL) has come up with several releases for the SOA enablement of the product. Prior to I4GL-SOA, organizations seeking flexibility and interoperation of their I4GL code with other languages across diverse locations had only one option -- rewrite the code using a modern programming language. I4GL-SOA has not only enabled customers to publish their business logic as Web services, but also enabled consumption of other Web services on the Internet by I4GL. The product renders flexibility to distributed systems by ensuring seamless operation across multiple programming languages and platforms. Customers save precious dollars in time and effort by reusing code published as Web services in other locations worldwide.

1309 Tuning Informix in a Sandbox Environment

At GSN Digital, formerly WorldWinner, the use of Exact Solutions? iCapture and iReplay products to capture and replay 100% of production SQL calls in a dedicated engineering sandbox allows for empirical measurement of these changes before they take place in production. The empirical tests show what gains are achieved with changes to the ONCONFIG parameter values, to table and index fragmentation strategies, and utilization of new IBM Informix Dynamic Server functionality. The ability to automatically and properly handle transactions open when a level 0 begins is one of the valuable features.

1400 Integrating IBM Informix Dynamic Server with the Enterprise: An Overview

In this session, we will look at how IBM Informix Dynamic Server can integrate with the enterprise. We will discuss the use of standard interfaces, homogeneous and heterogeneous replication, Web services, message queues and more.

1404 Virtualization and Cloud Computing with IBM Informix Dynamic Server

This session outlines IBM's strategy for virtualization and cloud computing with IBM Informix. It includes an overview of the latest Informix virtual machine and cloud computing offerings, and how to start using them. The session will also include how to leverage Informix features, such as high availability, to add value to your solutions deployed in cloud computing environments, such as the Amazon Elastic Compute Cloud (EC2).

1409 Introduction to IBM Informix Dynamic Server 11.5

The talk will focus on the new features added in IBM Informix Dynamic Server 11.5, and how they help your business.

1410 Using IBM Informix in Telecommunications

IBM Informix has become the database of choice in the telecommunications market. Come learn more about why Informix is such a good fit.

1430 IBM Informix Warehouse -- Product and Roadmap

This talk will describe the IBM Informix Warehouse product, its architecture, its benefits and its intended users. The Informix Warehouse offering includes data compression and storage optimization. It discusses features that may be attractive to other Informix customers currently running on XPS or Red Brick.

1431 Dimensional Modeling for IBM Informix Warehouse Users

Data warehouses are designed to enable access to the data to facilitate reporting and analysis. The concepts of design have a language and approach all their own. IBM Informix Dynamic Server customers new to data warehousing should learn about the importance of data modeling and practical techniques for designing a data warehouse to serve their business needs.

1438 IBM Informix Embeddability Enhancements

Recent releases of IBM Informix Dynamic Server -- IBM's enterprise class embeddable data server -- have included many new features designed to make it easier to deeply embed a data server in your application. This session shows how to use these new features to reduce overhead and cost of embedding Informix Dynamic Server without user interaction.

1467 Building Data Warehouses with IBM Informix

IBM Informix is a great data warehouse server and is used by many customers as a warehouse database. With the new IBM Informix Warehouse Feature from IBM, it is an even better tool. This session will focus on our experience building warehouses, best practices for warehouse development and the exciting new features added in the Informix Warehouse Feature.

1538 Overview of Security and IBM Informix Dynamic Server

A high-level overview of security issues as they relate to IBM Informix Dynamic Server.

1564 Managing IDS Configuration and Performance with Server Studio and Sentinel

Are you getting top notch performance from your mission-critical IDS databases? Optimizing and tuning your IDS environment means managing ALL the pieces — not just your SQL. This presentation will introduce IDS developers and DBAs to the various new and updated tools in the Release 7 of Server Studio and Sentinel and demonstrate how and when to apply each to efficiently manage IDS configuration and optimize its performance. Learn some of the best practices, and save countless hours of wrestling with the complexity of your IDS infrastructure. Gain hands-on experience with the new wide-ranging functionality provided by latest release of AGS' Server Studio and Sentinel.

1760 Eat OATs? Open Source Graphical Database Administration with IBM OAT

Understand the capabilities and architecture of OAT -- OpenAdmin Tool for IBM Informix Dynamic Server. This will be an overview of the capabilities of the OpenAdmin Tool, highlighting such things as replication, query tracing, database compression, performance history graphs, auto update statistics, space management and many other capabilities. An overview of the architecture and what open source components are utilized within OpenAdmin Tool conclude this talk.

1763 Achieving the Ultimate in Performance with IBM Informix Dynamic Server

This presentation will focus on how a database administrator can improve the database performance with a concentrated effort on three main areas. First is storage optimization -- how to optimize data and index storage making the disk drives work for you. Second is SQL statements monitoring and turning -- how a database administrator can monitor and improve the performance of queries without modifying the application. Third is new monitoring and administration techniques added to version 11 to make a database administrator's life easier.

1884 Master Informix Enterprise Replication with the OpenAdmin Tool

The enterprise replication plugin is a free extension to the free OpenAdmin Tool for Informix Dynamic Server that allows one to interact with IBM Informix Dynamic Server Enterprise Replication technology through a browser. It makes enterprise replication easier to understand and use. Do you want to set up enterprise replication from scratch? Do you want to modify existing replicate and server settings? Do you want to monitor your enterprise replication domain? See how fast and easy it is with the OpenAdmin Tool.

1910 Understanding the IBM Informix Dynamic Server System Databases

This session is an updated version of last year's session on the same topic. The new syscdcv1 and sysadmin databases, along with the older sysmaster, sysusers and sysutils databases are explained, and examples of how each database might be used are given. These databases provide a way to easily customize administration and monitoring of databases and applications if you understand what is contained in them.

1979 Using the Change Data Capture API with Informix

Today's databases utilize a "logical log" to record the series of changes made via transactions. Various utilities (e.g., backup/restore tools) utilize this log, and beginning with IBM Informix Dynamic Server 11.50.xC3, user applications can too. The new IBM InfoSphere Change Data Capture API allows a C, Java or .NET application to see changes made to a given table. This enables a new type of user program.

1991 Availability Solutions within IBM Informix Dynamic Server

The IBM Informix Dynamic Server provides several availability solutions. This talk will provide an overview of the portfolio.

2331 Maximizing Storage Investment with IBM Informix Dynamic Server Compression

Learn how compression in IBM Informix Dynamic Server can help optimize your database storage and maximize your storage investment.

2351 IBM Cognos Express: BI and Planning for Midsize Organizations

Midsize companies are not unlike large enterprises in their need for business intelligence (BI) and performance management. However, they often have limited budgets, limited IT resources and limited expertise in these areas. This session will demonstrate the new IBM Cognos Express solution that provides the essential BI and planning capabilities midsize companies need. We will explore features and capabilities, including: - Simplified data modeling and creation of dimensions. - Building a self-service environment for reporting and analysis. - "What-if" scenario modeling. - Transforming spreadsheets for planning, budgeting and forecasting. - Creating actionable dashboards. - Benefits of in-memory OLAP. - Administration and management highlights.

2560 Developing and Prototyping Database Applications in the Cloud

Cloud computing has evolved to address the explosive growth of Internet-connected devices, and to complement the increasing presence of technology today. In this session, we will discuss best practices and strategies for prototyping and developing IBM database applications (both IBM DB2 and IBM Informix Dynamic Server) in public and private cloud computing platforms.

2631 Deploying IBM Databases in the Cloud with Amazon EC2

Cloud computing is the new buzzword in the industry, and the hype is getting to be quite intense. Some in the industry have likened it to the impact that microprocessors had on IT in the 1980s. Regardless of the hype, there is real promise. Come to this session to understand what cloud computing really is and how it applies to data and databases, such as IBM DB2 and IBM Informix Dynamic Server. Hear about the experiences of some of the early adopters, and learn the areas where benefits are real and where it is just empty hype.

2683 IBM Informix Dynamic Server Performance and Troubleshooting: Tips & Tricks

This session will cover performance and troubleshooting tips and tricks for the IBM Informix
Dynamic Server. Topics will include configurable page sizes, configuring Btree scanners, finding CPU-intensive processes and trigger-based replication for table reorganization.

2806 .NET Application Development in IBM DB2 and IBM Informix Dynamic Server

IBM DB2 and IBM Informix Dynamic Server are great fits for applications in the .NET environment. In this session, you will get an in-depth look at the .NET provider and Visual Studio add-ins, as well as the latest enhancements to support LINQ. You've heard about the ability to leverage static performance and security with existing Java applications using client optimization. Now you can drive down MIPS and improve security, stability and accountability for your .NET applications as well. Attention DB2 database administrators: You won't want to miss this talk!

2898 Optimizing IDS Physical Database Design Using Partitioning

This session will start with business scenarios (OLTP, warehousing, hybrid) for time cyclic data management and performance requirements, and creates examples of partitioning/fragmentation strategies appropriate for table and indexes. This session will also explain ways to exploit fragment elimination -- one of the crucial ways to improve performance.

3045 Secure & Availabile Public Finances with IBM IDS Continuous Availability

Secretaria de Finanzas (Sefin) in Mexico is the Jalisco's state agency responsible for all the finances and tax collections. They have been an IBM Informix user since 1998, and now they also use IBM Content Manager, IBM Lotus Notes, IBM Tivoli, IBM WebSphere Application Server, IBM Rational Solutions, IBM DB2 and IBM InfoSphere Warehouse. Sefin manages US$6 billion annually, with more than 300 collection offices and more than 3,500 (up to 8,000) concurrent users. They needed to improve their availability of services and operating hours to a 99.9999 level. To do this, they evaluated and selected IBM Informix Dynamic Server Continuous Availability Feature along with perimetral security, DMZ configuration and hardware actualization.

3046 IBM Informix Roadmap

Jerry Keesee, director of IBM Informix Database Development, will summarize key highlights of Informix Dynamic Server, including the latest release information and upcoming product plans.

3047 Keeping Costs Low and Maximizing Flexibility for Jamaica Using IDS

The Jamaican Government relies on IBM Informix Dynamic Server to keep their IT costs low and provide the flexibility needed to react quickly to constantly changing requirements. With over 50 mission critical applications deployed across 40 locations, they rely on the performance, ease of use and reliability of IBM Informix Dynamic Server. Their complex systems incorporate sophisticated business logic and complex SQL to meet the needs of these government solutions. Learn about the best practices that FSL Jamaica uses to deliver high quality and reliable solutions with IDS.

3205 Integrated Data Management - Yesterday, Today & Tomorrow

Esta agenda consta no link abaixo:

terça-feira, 20 de outubro de 2009

Oracle pode vender Mysql!!


O gato subiu no telhado!! A comissao europeia esta julgando a aquisicao da Sun pela Oracle, e o questionamento forte esta sendo feito em relacao o banco de dados Mysql.

Uma vez que o Oracle é o lider de mercado de bancos de dados comerciais e o mysql é o lider no segmento open-source, existe conflitos de interesse e a Oracle pode ter que vender o Mysql.

Vejam o artigo abaixo:

O próprio Monty (um dos funcadores do Mysql) fez seus comentários em seu blog:

Não costumo postar artigo de Oracle ou Mysql, mas este não pude deixar passar pois durante anos ouvi que o mundo open-source iria acabar com os bancos de dados comerciais.

Bom tá ai a resposta do capitalismo em apenas 2 anos a tecnologia Mysql já passou por duas aquisições!! Viva o mundo open-source!!

E por aqui na terra da Uva e do trabalho o AIX vive muito bem obrigado!


domingo, 20 de setembro de 2009

Criando Indices em grandes volumes de dados


Outro dia conversando com meu amigo de Mato Grosso do Sul me lembrei de algumas histórias, foi durante uma consultoria em Campo Grande que fiz o meu eject de Sao Paulo para Jundiaí, que deixem os paulistas lá com o Kassab.

Aliás Campo Grande lembra muito o Kansas , onde fica um dos laboratorios de desenvolvimento do Informix, lá tem muito gado e o povo é friendly, só falta mesmo o Tererê.

Por isto vou postar algumas informacoes de como criar um indice em uma tabela com tipo uns 256GB de dados, vamos pensar grande mesmo!!!

Bom primeiro passo, temos que usar o Informix 11 e precisamos saber qual a carga de I/O que nosso storage suporta, isto pode ser feito atraves da analise do TOPAS (AIX) ou TOP (Linux), imaginemos que num momento de pico nosso storage executa muito bem a leitura de 2GB/Seg, nao me lembro qual a media no meu ambiente, deve ser algo acima disto.

No lado f'isico do banco de dados iremos alocar um dbspace com tamanho de pagina de 16KB para armazenar dados e outro dbspaces com pagina de 16KB para armazenar o indice.

Lembre-se de criar um buffer pool de 16KB tambem, alias lembre-se de configurar 2 arquivos onconfig, uma que sera usado normalmente e outro que sera usado somente na criacao do indice.

Sobre o arquivo onconfig usado na criacao do indice devemos configurar o seguinte:

- Parametros de pre-fetch: ra_pages/ra_threshold, esses parametros sao validos para a instancia, inclusive o Cesar me alertou sobre isto.
Com um valor alto para pre-fetch os dados serao lidos mais rapidamente para a memoria e assim acelera a criacao do indice.
Na minha opniao este parametro deveria ser definido no escopo de buffer pool, pois assim poderiamos ter um pre-fetch agressivo para situacoes especificas.

- Parametros de LRU: os parametros de LRU_MIN e LRU_MAX tambem foram incluidos no parametro de criacao de buffer pool, a ideia 'e colocar valores altos para que a instancia nao entre em contencao de processos background para fazer flush.

- Parametros de Checkpoint: agora o Informix nao bloqueia a instancia durante o checkpoint, mas seria interessante desligar o parametro de checkpoint automatico.

- Area temporaria: procure criar dbspaces temporarios do mesmo tamanho do indice a ser criado, se a tabela for particionada tambem crie dbspaces temporarios de acordo com a quantidade de partitions que voce criar na sua tabela. Nao use filesystem para fazer sort do indice, por exemplo setando a variavel DBSPACETEMP ou DBTEMP para um diretorio, sempre direcione para um dbspace temporario.

- Parametros de PDQ: Procure setar os parametros de paralelismo (DS_*) , por default os valores estao definidos de forma ilimitada, isto pode causar contencao na criacao do indice.

Para a tabela ser criada com 256GB é necessario que o dbspace seja criado com página de 16KB, com isto será possivel criar a tabela com apenas um fragmento, porém a criaçao do indice vai demorar, entao procure particionar a tabela de acordo com alguma regra/coluna especifica de modo que os fragmentos comportem até 64GB.

É claro que não executei a criação de indice de tabelas com 256GB, no meu cenário atual fiz somente com 64GB e o tempo foi legal.

Se tiver algum problema como configurar o PDQ Priority dê uma olhada no site do Cesar (Se nao tiver nenhuma sessao falando de PDQ pode mandar email pra ele!!)


Agora imaginem que voce nao tenha uma janela de downtime de 6 horas para criar o indice o que voce deve fazer?

Neste caso voce pode clonar seu ambiente para um outro ambiente identico e neste criar o indice, ai com um pouco de bruxaria podemos transportar o indice inteiro para a producao sem ter que fazer rebuild, como ? (onunload/onload)

O onload/onunload permite fazer move de grandes volumes muito parecido com o recurso de transportable tablespace do Oracle, essas ferramentas existem desde a versao 7 e realmente sao muitos boas.

Vou deixar na lista de pendencias um post sobre onload/onunload, como sempre procurei passar o conceito de como criar um indice em um tabela com grande volume de dados, agora o como fazer fica como licao de casa.

Se eu esqueci de algum truque e alguem lembra por favor comentem.


terça-feira, 15 de setembro de 2009

Truncate Table no Informix


Muitas vezes precisamos eliminar todo o conteudo tabela , isto deve ocorrer de forma rápida e sem impactos.

Até a versão 7 do Informix era comum executarmos um drop/create table, pois fazer um delete de todas as linhas da tabela não era algo eficiente.

A partir da versão 9.40 temos o truncate table, o mesmo foi melhorada e na versão 11.50 chegou a um excelente nivel de funcionalidade.

Segue abaixo as sintaxes do comando:

Truncate table your_table;
Truncate table your_table drop storage ;
Truncate table your_table reuse storage;


Este comando irá zerar o conteudo da tabela, a eliminacao de linhas nao ocorre, o Informix apenas elimina as referencias ao extent dentro da partition page, somente o extent inicial permance.


Tem a mesma função padrão do truncate table, ou seja elimina os extents subsequentes e insere esses espaços contiguos na free list do dbspace onde a tabela reside, assim outras tabelas ou indices podem reutilizar este espaco.


Esta clausula é muito util, pois os extents não são removidos da tabela, as paginas de dados e bitmap apenas são marcadas como free , este recurso é muito útil em tabelas usadas por processos batches, onde são truncadas e populadas com frequência.


sexta-feira, 21 de agosto de 2009

Mutex Contention - Parte I


Para quem gosta de estudar sobre software com arquitetura multithread irei falar um pouco sobre como o Informix utiliza a Arquitetura DSA (Dynamic Server Architecture) para implementar o controle de threads.

Basicamente quando um thread tenta acessar algum recurso em modo exclusivo o mesmo precisa que um latch ou mutex seja alocado.

No Informix existem diversas formas de identificarmos os mutexes e seus status, basta usar o onstat:

onstat -g lmx: lista todos os latches que estao bloqueados, ou sejam um thread foi marcado com holder e outros threads estao waiters.

onstat -g amx: similar ao anterior porem lista todos os latches independentes de status.

E muito comum alguns tipos de contencao abaixo:

Este latch indica que o sistema operacional pode estar com o kernel mal-configurado, por exemplo o numero de file descriptors 'e pequeno.

Em toda nova conexao ao banco de dados um file descriptor 'e alocado, em ambiente AIX esse parametro costuma ser definido como ilimitado.

Para checar sua configuracao conecte-se como usuario informix e rode ulimit -a

Existes outro cenario que esta contencao pode ocorrer, nao e um problema muito comum na maioria das vezes recomendo que o Suporte da IBM seja acionado.

Neste link tem uma nota da IBM sobre este tipo de contencao:

A contenção também pode ser um defect:

Este tipo de latch indica contencao na TBLSPACE, para reduzir isto voce deve distribuir suas tabelas em diversos dbspaces.
Esta contencao ocorre em instancias com um alto volume de threads concorrentes e muitas tabelas no catalogo.


- PT_??????
Aqui sao contencoes de tabelas mesmo, PT significa partition, meios de reduzir este tipo de contencao:

Onde consta ????? 'e o partnum em hexa, voce deve converte-lo para decimal e acessar a tabela sysmaster:systabnames e identificar o objeto atraves do partnum.

Caso seja um indice , voce deve checar a quantidade de extents ou niveis do indice.

Caso seja uma tabela, voce deve checar a quantidade de extents, ocorrencias de lock wait etc.

De forma geral voce deve verificar os caches de dicionario, distribuicao e procedure:

onstat -g dic -> ver parametro DD_HASHSIZE / DD_MAXSIZE
onstat -g dsc -> ver parametro DS_HASHSIZE / DS_POOLSIZE
onstat -g prc -> ver parametro PC_POOLSIZE

Lembrete: muitas instalacoes Informix trabalham com estes parametros com valores default.

O Cesar Martins tem um artigo muito interessante sobre o tunning no cache de distrbuicao:


Aguardem no proximo capitulo, irei colocar alguns exemplos de como identificar longspings.



sexta-feira, 7 de agosto de 2009

Detalhes sobre DBINFO


Outro dia expliquei ao meu amigo Lud alguns detalhes sobre o DBINFO, achei interessante expor aqui essa dúvida.

Lá em meados de 1996 quando eu começei a programar em Informix 4gl (bons tempos!) eu fazia uso de uma estrutura chamada SQLCA, a mesma me retornava algumas informações do tipo:

- Numero de linhas processadas no comando SQL
- Ultimo numero inserido em um coluna do tipo serial
- Isam error

Nos dias atuais as linguagens de programação não trabalham ligadas diretamente ao banco de dados, é comum existir o ODBC, OLEDB ou outra camada entre a aplicação e o banco de dados.

No caso da funcao DBINFO a duvida do meu amigo foi "Mas oque realmente faz o DBINFO?"

A explicação é o DBINFO apenas acessa a estrutura ifx_sqlca_t que é estrutura correspondente ao SQLCA que conhecemos no Informix 4gl.

A definição da estrutura ifx_sqlca_t pode ser visualizada em $INFORMIXDIR/incl/esql/sqlca.h



domingo, 2 de agosto de 2009

Usando cláusula Current em Stored Procedure


Hoje irei falar de uma coisa que ocorre no Informix 7, quando executamos uma procedure e dentro dela temos que usar a cláusula CURRENT, temos um problema pois está cláusula não reflete a data e hora corrente quando a procedure tem um longo tempo de duração.

Para este tipo de situação eu criei a procedure abaixo:

create procedure "informix".timestamp()
returning datetime year to second;

define whora datetime year to second;

SELECT DBINFO( 'UTC_TO_DATETIME', sh_curtime ) into whora
FROM sysmaster:sysshmvals;

return whora;

end procedure;

O select abaixo acessa a coluna sh_curtime que representa o relógio interno do banco de dados, a função DBINFO converte a coluna sh_curtime do formato integer para data/hora.

SELECT DBINFO( 'UTC_TO_DATETIME', sh_curtime ) into whora
FROM sysmaster:sysshmvals;


quinta-feira, 25 de junho de 2009

Acelerando a abertura de conexões


A partir da versão 11.10 do Informix podemos usar um artificio que permite que o processo de abertura de conexões seja acelerado.

Quando um cliente solicita a abertura de uma nova conexão o VP MSC é oVP responsável pela autenticação da senha no sistema operacional.

A idéia aqui é adicionar mais um VP do MSC é reduzir a contenção na chamada de funções dentro deste VP.

Para adicionar o novo VP MSC:

onmode -p +1 MSC

No online.log aparecerá a mensagem abaixo:

Dynamically Added 1 msc vp

Para veificar a quantidade de VPs alocados:

onstat -g glo


quarta-feira, 27 de maio de 2009

Identificando Transação Aberta


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.



quinta-feira, 21 de maio de 2009

Backup de Logical Log para disco


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 :

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:


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!!


sexta-feira, 15 de maio de 2009

Calculando Limites de Particao


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:


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!!


terça-feira, 21 de abril de 2009

Oracle X Sun, e o Mysql?

De acordo com os anúncios da midia após a IBM desistir de adquirir a Sun, a Oracle anunciou a intenção de aquisição.

O que mais me deixa curioso é o futuro do Mysql, apesar de pouco contato com o produto ele possui uma participação expressiva no mercado de soluções embarcadas , principalmente nos pequenos ISVs.

Vejam alguns numeros sobre o Mysql:

- 70.000 Downloads por Dia!!
- Mais de 12.000.000 de instancias em producao!! (Claro que isto inclui as instalacoes open-source).

Se a IBM tivese comprado a Sun com certeza o Mysql seria continuado, pois este e o perfil da IBM, manter software legado , o Mysql seria integrado a Divisao de IM e iria coexistir com o DB2 e Informix, com este cenário seria possivel que a IBM voltasse para a primeira posição no market share de bancos de dados.

Em relação ao suporte do Mysql, quando a empresa foi adquirida pela Sun muitas pessoas de suporte e desenvolvimento se desligaram da empresa, inclusive um dos fundados (monty) foi atuar em uma empresa startup e agora se dedica ao MariaDb.

Inclusive o próprio monty ja postou algo em seu blog:

Com esta aquisição a Oracle abocanhou 2 tecnologias open-source de uma só vez, que foram o Java e o Mysql, agora a coisa fica menos interessante para a SAP e IBM que pregam o uso de java extensivamente.

Historicamente falando de tecnologia de banco de dados a Oracle ja Adquiriu:

- RDB da Digital , foi o que deu muita base para o OPS (Parallel Server)
- Berkeley DB
- Timesten (In-memory database)
- Mysql

Agora a Oracle se torna uma empresa completa com soluções que vão de Hardware, Software para infra-estrutura a ERP etc.

Sera que agora a Oracle quer ser a Digital Corporation e peitar a IBM?

Vamos aguardar as cenas do próximo capitulo.


segunda-feira, 6 de abril de 2009

Alter In-Place

Alter In-Place é uma daquelas features que ninguém sabe que existe até no dia que é preciso fazer um alter table no Oracle ou Db2.

Veja a tabela abaixo:

create table tabela1
( codigo integer,
campo1 char(30)

Aqui neste ponto insermos 10GB de dados na Tabela!!!

Agora por uma mudança na área de negócio a tabela irá receber mais uma coluna, porém ela será criada antes da coluna campo1.

alter table tabela1
add (novo_campo integer) before campo1;

Quanto tempo o Informix demorou para adicionar uma coluna na tabela? 1 Segundo!!!

Como isto é possivel magia negra? Não, pra quem é safo sabe que o Informix apenas fez o versionamento da estrutura da tabela, os dados antigos estão com a mesma estrutura, os novos inserts farão com que os dados sejam inseridos no novo lay-out.

Se é tão fácil assim porque no Oracle/Db2 tenho que recriar a tabela para fazer este tipo de alteração?

É simples, nos outros RDBMS a estrutura da tabela é armazenada fisicamente no mesmo bloco com os dados, isto é bom se olharmos no caso de um crash onde a partition page seja destruida, os dados continuam no disco e é possivel extrair com as ferramentas de suporte avançado.

Então a estrutura do Informix é pior?

Claro que não, o produto foi projetado para operar com esforço reduzido de administração, com este tipo de feature é possivel criar appliances (soluções) onde não é necessário intervenção manual.

Resumindo um bom Arquiteto de Soluções ou um bom Desenvolvedor pode criar soluções embutidas e espalhar sua solução por ai sem ter que se preocupar com o banco de dados.

Se eu escrevo solução embarcada porque não usar Mysql ou Postgress?

Bom o Mysql acabou de ser adquirido pela Sun, o Postgress é questão de tempo até alguem adquirir, o sonho do open-source acabou, só é bom para o fornecedor que economizou milhões em pesquisa e desenvolvimento que foi feito pela comunidade open-source.

Voltando ao comando alter table do Informix, existem três tipos de alter in-place:

Slow Alter

Neste caso o Informix efetua o reorg da tabela inteira, caso a tabela seja muito grande pode-se correr o risco de long-transaction, um exemplo pode ser um alter table que altera o tipo de dados de uma coluna de varchar(20) para char(40).

In-Place Alter

Quando ocorre alteracao na estrutura da tabela e o Informix efetua o versionamento do layout, assim nao executando reorg da tabela.

Fast Alter

O fast alter ocorre quando:

- ocorre alteracao do next extent size
- uma constraint é criada ou dropada
- o lock mode da tabela é alterado
- um atributo da tabela é alterado para único.

Como sempre quem quiser mais informações sobre alter in-place acesse:

O objetivo deste post foi por em cena uma feature bacana que muitas vezes ninguém nem sabe que existe.

sexta-feira, 27 de março de 2009

Shared Memory not Initialized

Algumas vezes me deparei com ambientes de produção onde o Informix não executava nenhuma comando administrativo no UNIX, ao rodar algum comando administrativo recebia a mensagem abaixo:

shared memory not initialized for INFORMIXSERVER 'demo_on'

A primeira coisa que alguem diria é que a variavel INFORMIXSERVER não está setada corretamente, isto também é verdade, porém após checar minha variável de ambiente constatei que o ambiente estava ok.

Nestes casos algumas vezes o DBA preferiu efetuar um bounce na instância e o ambiente voltou ao normal, porém foi necessário entender o porque isto ocorreu, nenhum gestor gosta de ter este tipo de resolução de problema.

Vamos a explicação do problema:

Após o Informix inicializar a shared memory o mesmo cria um arquivo de configuraçao em $INFORMIXDIR/etc chamado infos.dbservername , onde dbservername é o nome da sua instância.

Esse arquivo contém informações básicas para que alguns comandos administrativos (onstat, onmode, oncheck) possam fazr um attach na shared memory, sem esse arquivo não é possivel identificar a SHMKEY que foi gerada na inicialização.

Como vizualizar o arquivo de configuração?

ls -las $INFORMIXDIR/etc/.infos*

Para visualizar o conteudo:

onstat -g pos

Agora vem o conhecimento perdido, e para recriar o arquivo sem ter que reinicializar a instancia?

onmode -R

Quando este arquivo é removido?

Ahhhh , buena pregunta!! Quando tem alguém alterando configuração de servicos (/etc/services) ou fazer limpeza no file-system para recuperar espaço livre.

Caso você queira saber se realmente o problema é arquivo de configuração execute um trace no onstat:

strace onstat -

open("/opt/IBM/informix/etc/.infos.demo_on", O_RDONLYO_LARGEFILE) = -1 ENOENT (No such file or directory)access("/opt/IBM/informix/msg/en_us/0333/olutil.iem", R_OK) = 0close(3) = 0

No linux usamos o strace, em Aix costumo usar o truss, lembre-se de um post anterior que eu falei sobre alocação da shared memory, o IDS na inicialização faz o calculo da SHMKEY através dò cálculo (SERVERNUM * 65536) + shmkey , se o arquivo está lá é bom se a shared memory ainda está alocada , pode ser através do comando ipcs.

Este post me faz lembrar dos anos de Telesp Celular, velhos e bons tempos, mais pra frente irei postar algo sobre conexões IPC Stream Pipe (rodando em Tru64 dava pra fazer magia negra).

Hasta Luego!

quinta-feira, 26 de março de 2009

InfoSphere Change Data Capture

Essa é a mais nova viagem para o DBA, essa feature veio após a aquisição da DataMirror , para integra-la ao Informix foi necessário aplicar uma nova feature chamada CDC (change data capture).

Através do CDC é possivel capturar os eventos registrados no log buffer e com isto definir alguma ações, do tipo replicar , transformar etc.

Lembram-se de SolidbDB?

Então com o CDC podemos replicar informações do Informix para uma base SolidDb, isto permite que o DBA distribua a informação em uma instância do tipo In-Memory e redirecione para este aplicações que requerem um response time muito rápido mesmo.

Para saber mais sobre InfoSphere Change Data Capture leia este artigo direto no developer works :


sexta-feira, 13 de março de 2009

IBM Data Server Common Client

Bom o que é o IBM Data Server Common Client?

Resumindo é um client para se conectar a qualquer banco de dados IBM, como assim a IBM só tem o DB2!!

Isto não é verdade, no decorrer dos anos a IBM desenvolveu e adquiriu diversas tecnologias de banco de dados, tais como: System R, IMS, DB2 Z/os, Db2 LUW, Informix Dynamic Server, Informix Extended Parallel Server, Universe , Unidata, Redbrick e outros mais.

Para quem trabalha com DB2 é bom dar uma olhada neste artigo do Paulz:


Este client é mais conhecido como CCT ( Commom Client Technology), e realmente é muito produtivo para o desenvolvedor.

Explico o porque: muitos desenvolvedores de ferramentas open-source precisam fazer acessos em banco de dados da IBM, sejam eles informix ou db2.

Para trabalhar com as linguages PHP, Perl, Phyton era necessário configurar o cliente fazendo algumas compilações de biblioteca, era algo extremamente dificil, e não era suportado pela IBM.

Agora com o CCT após a instalação do client já temos instalado as bibliotecas para linguagens open-source, e a melhor parte é que caso você tenha qualquer problema com o client você pode abrir um chamado.

Estava de esquecendo do Informix, recentemente foi lancado o Informix Client SDK 3.50, com versão 64 bits, o produto está estável e o suporte para Windows 64 bits está Ok.

Trabalhando com Informix 11.X + CCT podemos usar o client do Db2 (db2clp) para acessar a base e até mesmo usar o .Net Provider do Db2 para acessar o Informix.

Quais o benefícios deste client?

- Portabilidade
- Suporte da IBM
- Recursos adicionais

Bata utilizar o CCT no Informix 11.X é necessário ativar um listener DRDA no Informix, desta forma o Informix estará ouvindo no formato DRDA.

O que é DRDA?

Significa Distibuted Relation Database Architecture, foi definido pelo Open Group como um padrão de interoperabilidade para banco de dados.

Mais sobre o open group:


Em 1992 o opengroup definiu o padrão CLI (Call Level Interface) para as linguagens C e Cobol, porteriormente o padrão CLI foi utilizado como base para a criação do padrão ODBC.

As informações que postei aqui são simples, porém são essencias para um desenvolvedor.

Creio que pouca gente imagina que antes do CCT era necessário compilar um driver para que seu programa conect-se a um banco de dados.

Essa dúvida sobre client surgiu numa conversa com meus amigos de Jundiai (terra da uva, do trabalho e da tecnologia), espero que tenha sido útil.

Dúvidas? Somos nozes!! E só perguntar.

quinta-feira, 5 de março de 2009

INFORMIX: Otimizando Queries com Diretivas

Para quem não está acostumado com o termo "diretiva do otimizador" irei dar um breve descrição:

- Um componente que faz a diferença em um RDBMS é otimizador de plano acesso de queries, este utiliza-se de cálculos baseados em custo ou regra.

No caso do Informix desde a versão 7.X (1994?) o otimizador é baseada em custo, no Informix Online (1990?) lembro-me que não tinha histograma mas creio que já era baseado em custo, porque estou contando esta histórinha?

Bom o Oracle passou a utilizar otimizador baseado em custo a partir da versão 10.X (2004?) , na versão 9.i o otimizador era hibrido o DBA escolhia: custo ou regra. (É mole!!?)

Voltando a nossas diretivas, temos os seguintes tipos:

Diretivas de Métodos de Acesso

São diretivas que influenciam no caminho usado no plano de acesso, tais como acesso full, indexado etc.

Segue abaixo lista de diretivas:

FULL - Força um acesso sequencial na tabela

AVOID_FULL - Evita que seja executado um acesso sequencial na tabela

INDEX - Força a pesquisa no indice informado

AVOID_INDEX - Desconsidera o indice informado

INDEX_SJ - Força a auto-junção pelo indice informado

AVOID_INDEX_SJ - Evita a auto-junção através do índice informado.

Diretivas de Métodos de Join

São diretivas que influenciam a forma como a junção entre as tabelas será feita, por exemplo ler tabela a e buscar ocorrência na tabela B (Nested Loop)

Segue abaixo lista de diretivas:




USE_HASH (tabname)

USE_HASH (tabname/BUILD)


Diretivas de Ordem

Existe somente uma, indica que a ordem de acesso das tabelas na junção será de acordo com a ordem das tabelas na cláusula from do SQL.


Diretivas de Metas

Estas definem o comportamento do otimizador em relação ao retorno do resultado da query.

FIRST_ROWS - O retorno da query ocorre logo após a leitura das primeiras linhas, com isto é mais fácil interromper uma query quando vemos que a mesma não está rápida.

ALL_ROWS - O retorno das primeiras linhas da query ocorre após a leitura de todas as linhas envolvidas na consulta.

Diretivas de Explain

No exemplo abaixo usamo uma diretiva para que o otimizador exiba ao output do plano de acesso no arquivo de explain.

FROM Tabela1 a, Tabela2 b
WHERE b.customer_num = a.customer_num

No exemplo abaixo usamo uma diretiva para que o otimizador exiba ao output do plano de acesso no arquivo de explain, porém a query não será executada, somente será criado o plano fe acesso.


Definindo Diretivas Externas

Uma diretiva externa é aquela que pode ser armazenada dentro do banco de dados, imagine um ERP onde você não tenha acesso ao código fonte, e foi detectada uma query onde o plano de acesso não esta legal.

Bom neste caso é possível armazenar esta query juntamente com as diretivas dentro de uma tabela de catálogo do Informix, sempre que este comando sql for parseado o engine irá aplicar as diretivas.

Veja exemplo abaixo:

save external directives {+ ORDERED USE_NL(u)} active for SELECT * FROM Tabela1 a, Tabela2 b WHERE b.cod_emp = a.cod_emp

Para consultar as diretivas externas em catálogo:

select * from sysmaster:sysdirectives

Para desativar uma diretiva externa:

UPDATE sysdirectives set active = 0 where id = ?

Para excluir uma diretiva externa:

DELETE from sysdirectives where id = 2

Normalmente quando falamos do otimizador temos que falar de várias tópicos, pois o cálculo do custo está relacionado ao custo de I/O, Network, CPU e seletividade.

Não quero entrar em update statistics mas vale lembrar que além de atualizar as estatisticas do catálogo e gerar os bins do histograma o mesmo tem mais funções, dentre elas varrer as páginas de índices que foram marcadas como excluídas e reenviar para a fila do B-Tree cleaner para que as mesmas sejam removidas.

Eu já tinha ouvido algumas discussões sobre o assunto: Update Statistics reorganiza os índices? Não é bem assim, ele apenas remove entradas marcadas como excluídas dos índices.

Por isto não esqueça de atualizar a estatisticas de suas tabelas e procedures, se você ainda não usa a versão 11.50 começa a pensar em usá-la, pois nesta versão a atualização de estatisticas é automática.

Dúvidas? Pregutas? Questions? Askpuentes!!

terça-feira, 3 de março de 2009

Suportando Informix/DB2

Muitos vezes atuando em suporte/consultoria podemos encontrar 2 tipos de problemas:

- Performance
- Down System

Vamos descrever mais sobre esses assuntos, mas lembrem-se vou dar o caminho das pedras, o how-to depende de cada um aplicar o conhecimento..

No caso de performance a coisa pode estar tão ruim que não conseguimos executar nem um comando no prompt , muito menos uma query para acessar o catálogo.

Nestes casos podemos utilizar o comando onstat (Informix) ou db2pd (db2), estes trabalham de uma forma diferente das outras ferramentas, através da funçao shmat se atacham a shared memory e executam leituras direta nas estruturas em memória.

Imaginem um ambiente com multiplas instâncias, a qual segmento de memoria o comando irá atachar-se?

Durante o startup da instancia o engine define uma chave (SHMKEY) para o segmento e atrav'es desta chave o onstat/db2pd podem fazer o attach na shared memory.

Alias para saber qual o SHMKEY de cada segmento 'e so executar o comando IPCS (no caso em ambiente UNIX), e possivel relacionar o SHMID com a saida do comando onstat -g seg.


No informix temos um comando para identificar a quantidade de comandos DML que foram submetidos em uma tabela:

onstat -g ppf --> (e necessario setar o parametro TBLSTATS 1)

No db2 temos um comando com a mesma funcionalidade.

db2pd -db dbname -tcbstats


Agora sabemos que e possivel acessar a shared memory diretamente atrav'es dos comandos onstat/db2pd, mas em caso de Down-System como faremos diagnostico se o engine nao passa pelo startup?

Neste caso 'e necessario utilizar ferramentas com acesso direto ao disco, tais como oncheck (Informix) ou db2dart (Db2).

Para executar o dump de uma pagina no Informix:
oncheck -pP

Para visualizar o conteudo de pagina reservada:
oncheck -pr

Para executar o dump de uma pagina no Db2:

db2dart dbname /ddel

Para DBAS Informix que queiram treinar db2dart este link vai dar uma ajuda:

Lembre-se que para usar db2dart com DB2_KEYDATACHECK em uma tabela com compressão é necessário aplicar o APAR IY87739

Alias o que e DB2_KEYDATACHECK?? Lembram-se do CCFLAGS no Informix, bom isto e assunto pra outro post.

Maiores informações sobre o db2pd estão no Information Center:http://publib.boulder.ibm.com/infocenter/db2luw/v9//index.jsp

domingo, 1 de março de 2009


Bom muitos ja sabem como fazer trace dos pacotes de rede do Informix, é só ativar a variável SQLIDEBUG conforme abaixo:

export SQLIDEBUG=2:/tmp/sqli_files

Caso voce defina este parâmetro antes de iniciar a instância todos os acessos ao banco irão gerar os arquivos de trace em /tmp com o nom dos arquivos iniciando com sqi_filesXXXX.

Mas e ai? Gerei o trace como faço para interpretá-lo?

Veja a nota oficial no site da IBM:


Para interpretar o trace é necessário utilizar um utilitário chamado SQLIPRINT, até há alguns anos este era somente de uso do suporte avançado , porém o mesmo está sendo distribuido com o Client SDK 2.90 a partir do release 2.90.XC4.

Após a instalação do Informix 11.50+Client SDK você pode verificar se o SQLIPRINT está instalado.

find . -name SQLIPRINT

Afinal de contas, para que necessito de fazer trace do protocolo de comunicaçao do Informix?

Bom, por vários razões, auto-estudo, troubleshooting ou questões de performance, neste caso você quer ajustar os parâmetros FET_BUF_SIZE, OPTMSG, OPTOFC, ou até mesmo ajustar os parâmetros de TCP/IP do sistema operacional.

Onde conseguir mais informações sobre SQLIDEBUG?

Existem algumas apresentações da Informix Conference 2008 postadas no IIUG (http://www.iiug.org/), na área de usuários registrados é possivel baixá-las.

Lembre-se, o SQLIDEBUG é valido somente para conexoes Informix (SQLI), caso você esteja usando um listener DRDA com o IBM Data Server Client (DRDA) ai você deve usar as features do próprio client, mas isto vai ficar pendente para um post dedicado para DRDA.

terça-feira, 24 de fevereiro de 2009

ORACLE: Patch de Blocos

Algums amigos ja me perguntaram porque no Informix existe ferramenta para fazer correcoes manuais diretamente no disco enquanto o engine esta off-line. Primeiramente esta tecnica se chama patch, o uso nao é comum, e algo muito reservado.

Bom quer dizer que no Informix temos que corrigir as coisas manualmente? No Oracle e no Db2 isto nao existe?

Nao e comum termos corrupcao no Informix!! No Oracle ou DB2 essa técnica também existe!!

Por isto vou citar uma ferramenta que encontrei postada e disponível no site da Oracle. A ferramenta se chama BBED (Block Browse Editor)

No link abaixo voce pode encontrar o PDF com o How-to, por isto nao irei colocar o passo a passo aqui no blog.

Quais os cenários onde este recurso é necessario?

Óbvio que ocorre quando sua empresa comeca a perder muito dinheiro, e a pressão sobe no suporte do fabricante.

Imagine um banco de dados de DW com mais de 10TB, e o cliente passou o mes inteiro com problemas na solucao de backup, tiveram um crash de hardware apos aplicar um upgrade no software da SAN, não da pra restaurar o banco pois nao tem backup recente, mesmo se tivessem o impacto na área usuária seria muito grande.

Possiveis cenários da corrupção?

1o caso : Corrupcao de bitmap, as paginas bitmaps do extent definem o quando os blocos estao utilizados, em geral isto é igual em qualquer banco de dados, imaginem uma corrupcao em uma pagina bitmap em uma tabela com 4 tb , neste caso sera necessario varrer os blocos e verificar o percentual de espaco livre para recriar a pagina bitmap, uma alternativa seria recriar a pagina bitmap com os bits marcados como full e novos inserts irao ocorrer somente em novos blocos, e assim a vida continua.

20 caso: Checksum inválido, em alguns bancos é gerado uma chave para consistência do bloco, esta é gravada no início e no final o bloco, caso essas chaves não possuam o mesmo valor o bloco é considerado inválido, o erro pode ter ocorrido no hardware e você queria continuar com o bloco do jeito que está e posteriormente você fará o reorg da tabela, neste caso apenas sincronize o checksum e a vida volta ao normal.

Lembrem-se esse post é apenas informativo, para nerds incuráveis que gostam de saber como as coisas funcionam. Nunca faça laboratório em seu ambiente de produçao.

domingo, 22 de fevereiro de 2009


Voce ja ouviu falar sobre Elastic Computing ?

Este e nome do servico de virtualizacao oferecido pela Amazon, sim ela mesma aquela empresa de vendas pela internet, agora estao vendendo a infra-estrutura deles, e possivel alugar servidores virtuais dentro desta infra.

Veja no wikipedia mais informacoes sobre o Amazon EC2:

Agora veja aqui alguns produtos compativeis com esta arquitetura:

Gostou? Em breve irei postar algumas coisas sobre o Informix Mach 11 e Enterprise Replication.


Em pleno feriado, coloquei as criancas pra dormir, e estou bolando um blog para falar sobre banco de dados Informix/Oracle.

Durante muito tempo meus amigos dbas me perguntam sobre informacoes e ajuda sobre os mais diversos assuntos, mas nunca temos tempo entao vamos tentar expor essas informacoes por aqui.