Get pending In Place ALTERs / Obter as tabelas com InPlace ALTERs pendentes

This article is written in English and Portuguese
Este artigo est� escrito em Ingl�s e Portugu�s


English version:


Introduction

The topic of in place ALTERed tables has always been present in Informix. We say a table was ALTERed in place when an ALTER TABLE instruction resulted in a new table schema, but the table was not physically changed. This is very helpful on large and busy tables. It means you can do the ALTER TABLE quickly (instantaneously) and with minimum immediate impact on system resources. Internally Informix does a very simple thing from the user point of view, but that can be complex from the engine point of view: A new version of the table definition is created, and from there on, any instruction (DML) affecting the data will use the new version. The table's existing pages are left on the older version but each time we SELECT them, the engine converts the row(s) to the new format. Additionally if we update a row, the page where it is stored will be written in the new format.

For example, if we have a table with lots of data pages, and we add a column, this will do an in place ALTER. Certain types of ALTERs don't allow in place ALTERs. For example, if we change a CHAR(5) column to a SMALLINT, this will be a slow ALTER. This usually happens when the system cannot immediately guarantee that the existing data can be stored in the new representation.

When the engine decides that it can do an in place ALTER, we don't have the option to inhibit it. Meaning the ALTER table will be done as an in place ALTER, and if we want to force the physical changes, we must do what we usually call a dummy UPDATE: UPDATE tabname SET column = column;

Impacts of in place ALTERs

There are several impacts on having tables with in place ALTERs. The immediate one is that your updates will be slightly slower, since the whole page will be converted and written. Note that this does not necessarily means higher I/O load, since the page is the smallest unit written by the engine. In other words, even if your table does not have more than one version of it's definition, when we change a single row of data, a whole page (at least) will be written. But the other rows of the page don't need to be changed. And changing an older version can mean your data will not fit on one page after conversion. So there can be more I/O.
Another potential issue is that like with any other part of the engine, the mechanism of in place ALTER can have issues. This is an overrated aspect, but it's true we've seen problems that only affect tables with in place ALTERs.

But the real issue with in place ALTERs refers to upgrades and downgrades. Through versions there have been great controversy regarding the real impact of doing in-place upgrades (conversions) with tables with pending in-place ALTERs. I've searched through the migration guides for several versions (7.3, 9.2, 9.4, 10, 11.1, 11.5 and 11.7) and they're almost completely consistent: You can upgrade with pending in-place ALTERed tables, but you cannot revert. The only exception I've found was the manual for 9.4 which states that you must remove the pending in-place ALTERs to run the conversion (upgrade) successfully.

The reason for allowing upgrades but not downgrades is pretty simple and acceptable: Informix guarantees that version N+1 can handle all previous situations of in-place ALTERs done in version N or older. But, since each version may have added new situations where in-place ALTERs can be done, we can't risk porting a pending ALTER to an older version that may not be able to handle it. Let me remind you that an in-place ALTER requires the ability to convert from one row version to a newer one (which can have more columns, or different data types etc.)

At the time of this writing I could not verify if the exception in the migration guide of version 9.4 was justified or simply a documentation problem. But the fact is that most people assume they must complete the ALTER tables that were done in-place before converting. By this I mean that they must eliminate all the pages in older versions. A valid reason to do that is that in case you need to revert you don't have to waste time running the dummy updates. Typically, if you have any issue in the new version and need to revert, you'll want to do it as soon as possible. As such, eliminating the pending inplace ALTERs before you upgrade can save you precious time if you really need to revert. In any case, the migration guide for version 11.7 clearly states that you only need to remove the pending inplace ALTERs, if they were caused after the conversion to 11.7. Any previous one (which already exists in the old version) would not need to be eliminated.
As a side note, let me state that the only time I've done reversions was during a customer and partner workshop where we were demoing this functionality... I never had to do it on a real customer situation. In any case the other limitations for reversion can be real challenges, so the pending in-place ALTERs wouldn't be your biggest concern.

Finding in-place alters

Now that we've seen in which situations we should remove pending inplace ALTERs (tables with pages in older versions), we come to another issue that is frequently asked, and to which there are several answers. Most of them are controversial or badly explained which again raises a lot of confusion. The issue is: How do we find tables with pending inplace ALTERs?
There was a discussion in the IIUG forum near the end of 2010 that focused on this issue. As usual, there were three answers to this:
  1. A quick way (based on SQL and SMI that tells us which tables suffered an inplace ALTER, but doesn't show which tables have pending inplace ALTERs. This means that unless you completely rebuild the table, just running dummy UPDATEs will not prevent the table from always appearing in the list generated by this method
  2. A slow way that's based in the oncheck -pT output (this effectively tells you the number of pages in each existing version This method will give you just the tables with pending inplace ALTERs
  3. A technical support tool that searches the tables metadata and can provide the answer pretty quickly. Only problem is that it's not generally available

And this was my motivation to do some research on this issue. After some information exchange with Andreas Legner from IBM technical support in Germany, I was able to create an SQL script that can find the tables with pending inplace alters. The script can give us the details about the number of pages in each version, it returns the database and table name, the version and number of pages it contains.

The great thing about this script is that it's fast (from a few seconds to a few minutes for very large databases) and it really shows you the current status. Contrary to what the option 1) above does, if you do the dummy updates on one table, that table will not show up if you run it again. One warning: If you test this, after the dummy update you need to force a checkpoint. The script goes through the partition headers (because the required info is stored there), and after the dummy updates the partition headers are written to disk only at checkpoint time.

The script comes in the form of a stored procedure and is based only on the sysmaster views. The script was tested with all the versions I could find (7.31, 9.3, 9.4, 10, 11.1, 11.5 and 11.70) and it worked without issues in all of them. So if you're upgrading an old system and want to make sure you clear any pending inplace altered tables this can be a great help.

The SQL containing the script is at the bottom of this article and I will not dig into it with great detail. The challenges I got in developing it were mainly to understand how the needed data was already present in sysmaster views and also on interpreting this data (the representation is different depending on the "endianess" of your platform. Again, for the first one the help from Andreas Legner was precious and for the second one a special thank you goes to Art Kagel. Both of them helped me to review the script and to fix some nasty bugs I had in my first attempts.

Usage

In order to use this procedure, you'll need to copy the script code below, paste it into dbaccess and run it against any of your instance databases. It will create a function called get_pending_ipa() that will return the following fields:
  • Database
  • Table name
  • Partition name
  • Object type (can be table, partition or partition main)
  • Partition number
  • Partition lockid (the partnum of the main partition for fragmented tables)
  • Table structure version
  • Number of pages remaining in this version
If you need to create this against a version 7 (pre-V9) you should change the header and footer as commented in the script.
To execute just run

execute function get_pending_ipa();
or
execute procedure get_pending_ipa();

Disclaimer

Although the script was tested as much as I could, please understand that is comes with no guarantee. Use at your one risk. Neither me nor my employer can be considered liable for any harm done by it (difficult to happen since it only SELECTs), or more important for bad decisions taken based on it's output. This is just the usual disclaimer. Naturally I've done my best to make sure it works. If you find any error in the script or if you have any suggestion, feel free to contact me.



Vers�o Portuguesa:

Introdu��o

O assunto das tabelas com inplace ALTERs (optei por n�o traduzir o termo) tem estado sempre presente no Informix. Dizemos que uma tabela tem um inplace ALTER quando uma instru��o ALTER TABLE deu origem a uma nova defini��o (schema) de tabela, mas a mesma n�o foi fisicamente alterada. Isto � muito �til em tabelas grandes e/ou com muitos acessos. Permite que se fa�a um ALTER TABLE muito r�pido (instant�neo) e com um impacto reduzido no consumo de recursos do sistema. Internamente o Informix faz algo muito simples do ponto de vista do utilizador mas que pode ser bastante complexo se visto pelo �ngulo do motor: � criada uma nova defini��o da estrutura da tabela, e a partir desse momento qualquer instru��o (DML) que afecte os dados usar� essa nova vers�o. As p�ginas j� existentes da tabela mant�m-se na vers�o antiga, mas sempre que fa�amos um SELECT o motor converte a linha(s) para o novo formato. Adicionalmente, se fizermos um UPDATE a p�gina onde estiver guardado o registo(s) ser� convertida pelo motor para o novo formato.

Por exemplo, se tivermos uma tabela com muitas p�ginas de dados, e adicionar-mos uma coluna, isto ser� feito com um inplace ALTER. Mas alguns tipos de ALTER TABLE n�o permitem um inplace ALTER. Caso mudemos uma coluna de CHAR(5) para SMALLINT, isto ser� um slow ALTER. Habitualmente isto acontece se o sistema n�o puder garantir imediatamente que os dados existentes t�m representa��o ou podem ser guardados no novo tipo de dados (no caso anterior o CHAR(5) pode ter caracteres n�o num�ricos). Se o motor decide que pode fazer um inplace ALTER n�o temos forma de o inibir. Ou seja, a altera��o ser� for�osamente feita com inplace ALTER e se desejarmos for�ar a mudan�a f�sica temos de fazer o que normalmente se designa de dummy UPDATE: UPDATE tabela SET coluna = coluna;

Impactos dos in place ALTERs

Existem v�rios impactos em ter tabelas com inplace ALTERs. O mais imediato � que os UPDATEs ser�o ligeiramente mais lentos, pois toda a p�gina tem de ser convertida e escrita. Note-se que isto n�o implica maior carga de I/O, pois a p�gina � a unidade de escrita mais pequena do motor. Por outras palavras, mesmo que a sua tabela n�o tenha mais que uma vers�o da sua defini��o, quando mudamos uma linha contida numa p�gina, toda a p�gina (pelo menos) ser� escrita. Mas as outras linhas da mesma p�gina n�o s�o alteradas. E mudar de uma vers�o anterior da defini��o para a atual pode implicar que nem todas as linhas caibam na p�gina depois de convertidas. Isso sim, pode implicar mais I/O.
Outro potencial problema � que como em qualquer outra �rea de c�digo do motor, o mecanismo de inplace ALTER pode ter problemas ou erros. Este aspeto � muitas vezes sobrevalorizado, mas � um facto que j� tivemos problemas que s� aconteciam em tabelas com inplace ALTERs.

Mas o verdadeiro problema habitualmente associado com os inplace ALTERs diz respeito aos upgrades e downgrades. Atrav�s das vers�es tem existido grande controv�rsia relativamente �s verdadeiras implica��es de se efetuarem convers�es (ou upgrades inplace) de vers�o existindo tabelas com inplace ALTERs pendentes (por pendentes quer-se dizer que t�m efetivamente p�ginas com mais que uma vers�o de defini��o ou schema da tabela). Procurei pelos guias de migra��o de v�rias vers�es (7.3, 9.2, 9.4, 10, 11.1, 11.5 e 11.7) e s�o quase absolutamente consistentes: Pode fazer-se o upgrade com inplace ALTERs pendentes mas n�o se pode fazer o inverso (regress�o). A �nica exce��o a esta regra est� no manual da vers�o 9.4 que refere que os mesmos t�m de ser removidos antes de se efectuar a convers�o.

A raz�o para permitir convers�es, mas n�o regredir � bastante simples e compreens�vel: O Informix garante que a vers�o N+1 consegue lidar com toas as possibilidades de inplace ALTERs da vers�o N ou anteriores. Mas dado que em cada vers�o podem ser adicionadas novas situa��es onde o motor consegue fazer um inplace ALTER, n�o podemos correr o risco de portar um inplace ALTER pendente para uma vers�o anterior que n�o sabe como lidar com ele. Deixe-me lembrar que um inplace ALTER obriga a que o motor consiga mapear os dados de um formato para outro (com mais colunas, ou tipos de dados diferentes etc.)

No momento da escrita deste artigo n�o consegui verificar se a exce��o no guia de migra��o da vers�o 9.4 se pode justificar com um erro de documenta��o ou se tem outro fundamento. Mas o facto � que a maioria dos utilizadores assumem que t�m de completar (ou eliminar) os inplace ALTERs pendentes antes das convers�es (upgrades). Uma raz�o v�lida para este racioc�nio � que caso seja necess�rio regredir para a vers�o original n�o se querer� perder tempo a executar os dummy updates. Ou seja, eliminar os inplace ALTERs pendentes, antes da convers�o, pode poupar tempo precioso caso se verifique a necessidade de regredir. O manual da vers�o 11.7 vai um pouco mais longe e refere que s� � necess�rio remover os inplace ALTERs pendentes, se os mesmos foram gerados j� na vers�o 11.7

Qualquer um anterior (que j� existisse na vers�o original) n�o necessitar� de ser eliminado.
Como um aparte, permita-me que diga que a �nica vez que fiz regress�es foi num workshop para parceiros e clientes com o objetivo de demonstrar a funcionalidade. Nunca tive a necessidade de efectuar isto numa situa��o real em clientes. Em qualquer caso existem v�rias limita��es �s regress�es que podem constituir verdadeiros desafios, pelo que os inplace ALTERs n�o deveriam ser a maior preocupa��o.

Identificar inplace ALTERs pendentes

Agora que vimos em que situa��es devemos remover os inplace ALTERs pendentes, chegamos a outro t�pico que � alvo frequente de perguntas e discuss�es. A quest�o �: Como identificamos as tabelas que possuem p�ginas de dados com v�rias vers�es da sua defini��o? H� v�rias respostas e regra geral s�o controv�rsias ou mal explicadas o que levanta enormes confus�es. Decorreu uma discuss�o sobre este tema mais uma vez em finais de 2010. Como � h�bito foram dadas tr�s respostas para o problema:
  1. Uma forma r�pida (baseada em SQL e tabelas SMI) que nos diz as tabelas que sofreram inplace ALTERs mas n�o permite saber se ainda est�o pendentes (existem ainda p�ginas de dados com formato antigo). Isto significa que a menos que se refa�a completamente a tabela, a mera execu��o dos dummy UPDATEs n�o impedir� a tabela de voltar a aparecer na lista gerada por este m�todo.
  2. Uma forma lenta, baseada no resultado do oncheck -pT. Isto efetivamente diz-nos quantas p�ginas de dados existem para cada formato da tabela. Este m�todo permite realmente identificar os inplace ALTERs pendentes.
  3. Uma ferramenta do suporte t�cnico que procura na metadata das tabelas e pode fornecer a resposta de forma r�pida. O �nico problema � que n�o est� dispon�vel para os utilizadores em geral

E isto foi a minha motiva��o para efetuar alguma pesquisa sobre este tema. Ap�s alguma troca de informa��o com o Andreas Legner do suporte t�cnico da IBM na Alemanha, consegui criar um script SQL que pode reportar as tabelas com inplace ALTERs pendentes. Este script consegue fornecer o n�mero de p�ginas existentes em cada vers�o da defini��o da tabela. Retorna a base de dados, a tabela, a vers�o(�es) e quantas p�ginas cont�m.

O bom deste script � que � r�pido (de uns segundos a poucos minutos para bases de dados muito grandes), e mostra a situa��o actual. Contrariamente � op��o 1) acima, depois de fazermos os dummy UPDATEs numa tabela, essa mesma tabela n�o volta a aparecer no output do script. Apenas um aviso relativamente a isto: O script percorre o que chamamos de partition headers e estes s� s�o escritos em disco durante um checkpoint. Assim, depois de correr os dummy UPDATEs devem for�ar-se um checkpoint (ou esperar que ocorra um) antes de correr novamente o script.

O script traduz-se num procedimento SPL e baseia-se em informa��o dispon�vel nas views da base de dados sysmaster. O script foi testeado em todas as vers�es que consegui encontrar (7.31, 9.3, 9.4, 10, 11.1, 11.5 e 11.7) e correru em todas sem problemas. Assim, se estiver a fazer uma convers�o de um sistema antigo e quiser limpar todos os inplace ALTERs pendentes nessa inst�ncia, isto pode ser uma grande ajuda.

O script SQL contendo o procedimento est� dispon�vel no final deste artigo e n�o vou fazer uma explica��o exaustiva do mesmo. Os desafios que enfrentei durante o desenvolvimento do procedimento foram principalmente entender se os os dados necess�rios estavam representados na base de dados sysmaster e tamb�m na interpreta��o desses dados (a representa��o dos dados � diferente conforme o "endianess" da plataforma). Mais uma vez, na primeira quest�o a ajuda do Andreas Legner foi preciosa e para a segunda quest�o tive a ajuda do Art Kagel a quem enviou um sincero agradecimento. Ambos me ajudaram a rever o procedimento e identificaram alguns bugs feios que tinha nas primeiras tentativas.

Utiliza��o


Para usar esta fun��o ter� de copiar o c�digo do script que se encontra no final do artigo, col�-lo num dbaccess (ou outra ferramenta) e execut�-lo numa das bases de dados da sua inst�ncia. O script ir� criar uma fun��o chamada get_pending_ipa() que ir� retornar os seguintes valores:

  • Nome da base de dados
  • Nome da tabela
  • Nome da parti��o
  • Tipo de objecto (pode ser table, partition ou partition main)
  • N�mero da parti��o
  • lockid da parti��o (o n�mero da parti��o principal para tabelas fragmentadas)
  • Vers�o da estrutura da tabela
  • N�mero de p�ginas ainda existentes nesta vers�o
Se necessitar de criar a fun��o numa vers�o 7 (pre-V9) deve alterar o cabe�alho e o final da fun��o de acordo com o recomendado/comentado no c�digo
Para executar basta dar a instru��o:

execute function get_pending_ipa();
ou

execute procedure get_pending_ipa();

Exclus�o de garantia

Apesar de o script ter sido testado tanto quanto pude, por favor assuma que o mesmo n�o � fornecido com qualquer tipo de garantia. Utilize-o por sua conta e risco. Nem eu nem o meu empregador poder�o ser considerados respons�veis por qualquer mal ou preju�zo derivado do seu uso (dif�cil dado que apenas faz SELECTs), ou mais importante, por m�s decis�es baseadas no seu output. Isto � apenas o normal termo de des-responsabiliza��o. Naturalmente fiz o meu melhor para assegurar que o procedimento funciona bem e retorna resultados corretos. Qualquer problema que identifique no script ou sugest�o de melhoria por favor contacte-me.





SQL script:



CREATE FUNCTION get_pending_ipa() RETURNING
        VARCHAR(128) as database, VARCHAR(128) as table, VARCHAR(128) as partition, VARCHAR(9) as obj_type,
        INTEGER as partnum, INTEGER as lockid, SMALLINT as version, INTEGER as npages
-- For version 7.x use this header instead:
--CREATE PROCEDURE get_pending_ipa() RETURNING VARCHAR(128), VARCHAR(128), VARCHAR(128), VARCHAR(9), INTEGER, INTEGER, SMALLINT, INTEGER;
-- Name: $RCSfile: get_pending_ipa.sql,v $
-- CVS file: $Source: /usr/local/cvs/stable/informix/queries/get_pending_ipa.sql,v $
-- CVS id: $Header: /usr/local/cvs/stable/informix/queries/get_pending_ipa.sql,v 1.5 2011/09/09 20:57:31 fnunes Exp $
-- Revision: $Revision: 1.5 $
-- Revised on: $Date: 2011/09/09 20:57:31 $
-- Revised by: $Author: fnunes $
-- Support: Fernando Nunes - domusonline@gmail.com
-- Licence: This script is licensed as GPL ( http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html )
-- Variables holding the database,tabnames and partnum
DEFINE v_dbsname, v_old_dbsname LIKE sysmaster:systabnames.dbsname;
DEFINE v_tabname, v_partname, v_old_tabname LIKE sysmaster:systabnames.tabname;
DEFINE v_partnum, v_old_partnum LIKE sysmaster:syspaghdr.pg_partnum;
DEFINE v_lockid, v_old_lockid LIKE sysmaster:sysptnhdr.lockid;
DEFINE v_pg_next INTEGER;
DEFINE v_pg_partnum INTEGER;
DEFINE v_obj_type VARCHAR(9);
-- Variables holding the various table versions and respective number of pages pending to migrate
DEFINE v_version SMALLINT;
DEFINE v_pages INTEGER;
-- Hexadecimal representation of version and pending number of pages
DEFINE v_char_version CHAR(6);
DEFINE v_char_pages CHAR(10);
DEFINE v_aux_char CHAR(8);
-- Hexadecimal representation of the slot 6 data. Each 16 bytes will appear as a record that needs to be concatenated
DEFINE v_hexdata VARCHAR(128);
-- Variable to hold the sysmaster:syssltdat hexadecimal representation of each 16 bytes of the slot data
DEFINE v_slot_hexdata CHAR(40);
DEFINE v_aux VARCHAR(128);
DEFINE v_endian CHAR(6);
DEFINE v_offset SMALLINT;
DEFINE v_slotoff SMALLINT;
DEFINE v_dummy INTEGER;
-- In case we need to trace the function... Uncomment the following two lines
--SET DEBUG FILE TO "/tmp/get_pending_ipa.dbg";
--TRACE ON;
-- Now lets find out the Endianess ( http://en.wikipedia.org/wiki/Endianness ) of this platform
-- The data in sysmaster:syssltdat will be different because of possible byte swap
-- Read the first slot of the rootdbs TBLSpace tblspace (0x00100001)
-- The first 4 bytes hold the partition number (0x00100001)
SELECT
        s.hexdata[1,8]
INTO
        v_hexdata
FROM
        sysmaster:syssltdat s
WHERE
        s.partnum = '0x100001' AND
        s.pagenum = 1 AND
        s.slotnum = 1 AND
        s.slotoff = 0;
IF v_hexdata = '01001000'
THEN
        -- Byte swap order, so we're little Endian (Intel, Tru64....)
        LET v_endian = 'LITTLE';
ELSE
        IF v_hexdata = '00100001'
        THEN
                -- Just as we write it (no byte swap), so we're big Endian (Sparc, Power, Itanium...)
                LET v_endian = 'BIG';
        ELSE
                -- Just in case something weird (like a bug(!) or physical modification) happened
                RAISE EXCEPTION -746, 0, 'Invalid Endianess calculation... Check procedure code!!!';
        END IF
END IF
-- Flags to mark the beginning
LET v_hexdata = "-";
LET v_old_dbsname = "-";
LET v_old_tabname = "-";
-- The information we want for each version description will occupy this number of characters
-- in the sysmaster:syssltdat.hexdata notation (after removing spaces). The size depends on the engine version.
LET v_offset=DBINFO('version','major');
IF v_offset >= 10
THEN
        LET v_offset = 48;
ELSE
        LET v_offset = 40;
END IF
LET v_old_lockid = -1;
FOREACH
        -- This query will browse through all the instance partitions, excluding sysmaster database, and will look for
        -- any extended partition header (where partition header "next" field is not 0)
        -- the ABS(...) is just a trick to make partnums that are equal to lock id appear at the end
        SELECT
                t.dbsname, t.tabname, t1.tabname, t.partnum, p.pg_partnum, p.pg_next, h.lockid, ABS(h.lockid - h.partnum)
        INTO
                v_dbsname, v_partname ,v_tabname, v_partnum, v_pg_partnum, v_pg_next, v_lockid, v_dummy
        FROM
                sysmaster:systabnames t,
                sysmaster:syspaghdr p,
                sysmaster:sysptnhdr h,
                sysmaster:systabnames t1
        WHERE
                p.pg_partnum = sysmaster:partaddr(sysmaster:partdbsnum(t.partnum),1) AND
                p.pg_pagenum = sysmaster:partpagenum(t.partnum) AND
                t.dbsname NOT IN ('sysmaster') AND
                h.partnum = t.partnum AND
                t1.partnum = h.lockid AND
                p.pg_next != 0
        ORDER BY
                t.dbsname, t.tabname, 8 DESC, t.partnum
        IF v_lockid = v_partnum
        THEN
                IF v_lockid = v_old_lockid
                THEN
                        LET v_obj_type = "Part Main";
                ELSE
                        LET v_obj_type = "Table";
                END IF
        ELSE
                LET v_obj_type = "Part";
        END IF
      
        LET v_old_lockid = v_lockid;
        WHILE v_pg_next != 0
                -- Find if we're dealing with a fragmented table or not...
                -- While this extended partition page points to another one...
                -- Get all the slot 6 data (where the version metadata is stored - version, number of pages, descriptor page etc.
                FOREACH
                SELECT
                        REPLACE(s.hexdata, ' '), s.slotoff, p.pg_next
                INTO
                        v_slot_hexdata, v_slotoff, v_pg_next
                FROM
                        sysmaster:syspaghdr p,
                        sysmaster:syssltdat s
                WHERE
                        s.partnum = p.pg_partnum AND
                        s.pagenum = p.pg_pagenum AND
                        s.slotnum = 6 AND
                        p.pg_partnum = v_pg_partnum AND
                        p.pg_pagenum = v_pg_next
                IF ( v_dbsname != v_old_dbsname OR v_tabname != v_old_tabname OR v_partnum != v_old_partnum)
                THEN
                        LET v_old_dbsname = v_dbsname;
                        LET v_old_tabname = v_tabname;
                        LET v_old_partnum = v_partnum;
                        -- First iteraction for each table
                        LET v_hexdata = v_slot_hexdata;
                ELSE
                        -- Next iteractions for each table
                        LET v_hexdata = TRIM(v_hexdata) || v_slot_hexdata;
                        IF LENGTH(v_hexdata) >= v_offset
                        THEN
                                -- We already have enough data for a version within a table
                                -- Note that we probably have part of the next version description in v_hexdata
                                -- So we need to copy part of it, and keep the rest for next iteractions
                                LET v_aux=v_hexdata;
                                LET v_hexdata=SUBSTR(v_aux,v_offset+1,LENGTH(v_aux)-v_offset);
                      
                                -- Split the version and number of pending pages part...
                                LET v_char_version = v_aux[1,4];
                                LET v_char_pages = v_aux[9,16];
                                -- Create a usable hex number. Prefix it with '0x' and convert due to little endian if that's the case
                                IF v_endian = "BIG"
                                THEN
                                        LET v_char_version = '0x'||v_char_version;
                                        LET v_char_pages = '0x'||v_char_pages;
                                ELSE
                                        LET v_aux_char = v_char_version;
                                        LET v_char_version[5]=v_aux_char[1];
                                        LET v_char_version[6]=v_aux_char[2];
                                        LET v_char_version[4]=v_aux_char[4];
                                        LET v_char_version[3]=v_aux_char[3];
                                        LET v_char_version[2]='x';
                                        LET v_char_version[1]='0';
                                        LET v_aux_char = v_char_pages;
                                        LET v_char_pages[9]=v_aux_char[1];
                                        LET v_char_pages[10]=v_aux_char[2];
                                        LET v_char_pages[7]=v_aux_char[3];
                                        LET v_char_pages[8]=v_aux_char[4];
                                        LET v_char_pages[6]=v_aux_char[6];
                                        LET v_char_pages[5]=v_aux_char[5];
                                        LET v_char_pages[3]=v_aux_char[7];
                                        LET v_char_pages[4]=v_aux_char[8];
                                        LET v_char_pages[2]='x';
                                        LET v_char_pages[1]='0';
                                END IF
                                -- HEX into DEC (integer)
                                LET v_version = TRUNC(v_char_version + 0);
                                LET v_pages = TRUNC(v_char_pages + 0);
                                IF v_pages > 0
                                THEN
                                        -- This version has pending pages so show it...
                                        RETURN TRIM(v_dbsname), TRIM(v_tabname), TRIM(v_partname), TRIM(v_obj_type), v_partnum, v_lockid, v_version, v_pages WITH RESUME;
                                END IF
                        END IF
                END IF
                END FOREACH
                IF LENGTH(v_hexdata) >= v_offset
                THEN
                        -- If we still have data to process...
                        LET v_aux=v_hexdata;
      
                        LET v_char_version = v_aux[1,4];
                        LET v_char_pages = v_aux[9,16];
                        IF v_endian = "BIG"
                        THEN
                                LET v_char_version = '0x'||v_char_version;
                                LET v_char_pages = '0x'||v_char_pages;
                        ELSE
                                LET v_aux_char = v_char_version;
                                LET v_char_version[5]=v_aux_char[1];
                                LET v_char_version[6]=v_aux_char[2];
                                LET v_char_version[4]=v_aux_char[4];
                                LET v_char_version[3]=v_aux_char[3];
                                LET v_char_version[2]='x';
                                LET v_char_version[1]='0';
                                LET v_aux_char = v_char_pages;
                                LET v_char_pages[9]=v_aux_char[1];
                                LET v_char_pages[10]=v_aux_char[2];
                                LET v_char_pages[7]=v_aux_char[3];
                                LET v_char_pages[8]=v_aux_char[4];
                                LET v_char_pages[6]=v_aux_char[6];
                                LET v_char_pages[5]=v_aux_char[5];
                                LET v_char_pages[3]=v_aux_char[7];
                                LET v_char_pages[4]=v_aux_char[8];
                                LET v_char_pages[2]='x';
                                LET v_char_pages[1]='0';
                        END IF
                        -- HEX into DEC (integer)
                        LET v_version = TRUNC(v_char_version + 0);
                        LET v_pages = TRUNC(v_char_pages + 0);
                        IF v_pages > 0
                        THEN
                                -- This version has pending pages so show it...
                                RETURN TRIM(v_dbsname), TRIM(v_tabname), TRIM(v_partname), TRIM(v_obj_type), v_partnum, v_lockid, v_version, v_pages WITH RESUME;
                        END IF
                END IF
        END WHILE
END FOREACH;
END FUNCTION;
-- For version 7.x use this close statement instead:
--END PROCEDURE;


10 years of IBM / 10 anos de IBM

This article is written in English and Portuguese


Este artigo est� escrito em Ingl�s e Portugu�s



English version



On July 2, 2001, IBM announced the completion of Informix acquisition. So, 10 years have passed since the deal that changed many people lives. A lot was written at the time and since then about the deal, about Informix future, about competitors reactions etc. This historical milestone made me take a look back and think about what's been going on. There are several perspectives about this: The professional, personal, the technical and the marketing ones (and probably more that don't come to mind at this moment). Personally, the acquisition happened three years after I joined Informix Portugal. At the time I was already deeply involved with a Portuguese customer (large Telco) and I believe I gained precious experience since then. Being at IBM I had the opportunity to have some experience with other products (from areas that touch the database area), although the focus was and still is Informix. Informix allowed me to interact with many large (from a small country perspective) companies. So, it was a very positive transition. Of course not everything is perfect. Needless to say that the environment in a small company branch (around 20 people at the time) is by no means similar to the environment of a larger corporation like IBM. The processes inside big corporations are more complex. This is a fact and there's nothing we can do against it.



From a technical perspective, the Informix evolution was incredible. For those of you who know Informix, just think about the releases that came out inside IBM: 9.3 (little to no influence from IBM because it was launched in 2001), 9.4 (2003), 10 (2005), 11.10 (2007), 11.50 (2008) and 11.7 (2010). By the way, from these, only 9.3 has no support at all and 9.4 and 10 are on limited support. There's value for money here, and investment protection. You can compare this to our main competitor for example. They launched 9i R1, 9i R2, 10g R1, 10 R2, 11g R1 and 11g R2. To the best of my knowledge only latest two are fully supported, so more or less the same number of releases and more supported versions for us. Not bad for a database which had no future ten years ago, I'd say.


If I try to recall all the new features I'll end up with another very large article. But some of them must be mentioned:

  • 9.3

    ER in the ORDBMS product line (9.x)

  • 9.4

    Larger chunks


    ER and HDR at the same time

    PAM authentication

    B-Tree scanners (as opposed to older B-Tree cleaner)

  • 10

    Multiple page sizes

    Online index build

    Column encryption


    External directives

    Table level restore

  • 11.10

    MACH 11 (multiple secondary nodes)

    Non blocking checkpoints

    Open Admin Tool

    SQL admin API


    Database scheduler

    Last Committed Read

  • 11.50

    Updatable secondaries

    Compression

    Connection Manager

    Start of XPS to IDS feature porting


  • 11.70

    Storage provisioning

    Non OS users (mapped users)

    No limit for the number of extents

    On line table reorg

    Several XPS features (multi-index path, star join...)

    Informix warehous accelerator






And then we get to the marketing perspective... This is the fun part. It's a never ending discussion, and I thought it would be interesting to make some comparisons, like for example quotes versus reality. Announcements versus reality. Declarations of intentions versus reality. I browsed the Internet trying to find what people said and thought at the time and since then.



Let's start a few years before:



"I think Informix is doing a great job of marketing. They now get the Sybase marketing award. It's something we have never done a very good job of. Talk to somebody at Sybase or Microsoft and ask them what they think of DataBlades. Everyone thinks it's crazy. It's not that it's a bad idea -- it's madness. And they did not -- they did not -- integrate those two products. They did not, they cannot, they will not, it's impossible.", Larry Ellison, at InfoWorld interview, February 1997




Actually, we now "activate" ("register" in Informix jargon) datablades automatically if the user calls a function that belong to one of them. And we ship several of them for free. One of them (TimeSeries) is used to beat competition on "smart metering". Other (BTS) is used to incorporate open source text indexing technology into Informix.

On the same article, Larry Ellison mentions that Informix had 4 products. Although he apparently only names 3 (and 2 seem to be the same), this was in part true. There was the "OLTP" engine, the "DW" (XPS) and the Universal Server (IUS). These days are gone. XPS does still exists, although some of it's functionality is in IDS. There is no distinction between OLTP and "object" or universal servers.



By the time of the acquisition:



"We've found in the past is that when you're acquiring other products, the integration problem is greater than the value you gain from acquiring the product. This will be an integration nightmare.", Paul Marriott, business development manager for 9I at Oracle, in ARNnet site, on April 2001




Was this opinion taken into account when Oracle bought JD Edwards, Peoplesoft, Siebel, Hyperion, Innobase, BEA, Sun....? I believe not. Maybe they just don't learn from their "mistakes", or this quote was just another FUD statement...



"Surely Oracle is going to pick up a few customers from you though -especially the Informix customers?

JK; I don't think you can make that general a statement. Oracle is trying to give the impression that we are going to tell the Informix customers that they've now got to move to DB2. But obviously we aren't doing that. We acquired the Informix assets because we value them. We aren't going to force a migration on customers and partners that isn't right for them - that makes no business sense at all. We've spoken to the Informix customers and partners and have told them that Informix will be supported and developed for the foreseeable future - and the Informix customers are very happy with this. They appear to like the whole proposition so we certainly don't anticipate losing them to Oracle." , Jim Kelly, IBM's Vice President, Marketing Data Management Solutions Division, in an interview to an analyst from Bloor Research, on July 2001


AFAIK, no customer was forced to move to DB2. Some customers were forced to move, because their application suppliers (SAP for example) discontinued Informix in their latest versions. These customers had the chance to choose the new database platform. Some choose DB2, others Oracle, others SQL Server (or other databases like SAPdb)... Similar statements were produced by different IBM executives at the time of the acquisition and later.



And just for fun:



"But quite frankly if Informix is still being marketed as an

independent product five years from now I'll be shocked.", Daniel Morgan, an Oracle ACE in comp.databases.oracle.server on June 2001




Hopefully, five or six years after the predicted date, he has already recovered from the shock.





Let's leave the quotes... I'd also like to give you an example of "declarations of intentions vs reality". While working on a project with another IBM product, I felt the need to test something with a competitor (Oracle) database which is used at the customer site. For my purposes the "free edition" was perfectly enough and it allowed me to work on my own environment. I did the download, but after some days I stopped to think about one detail: The current available version of the "free edition" was 10g (launched 4 or 5 years ago). Now... this version is not fully supported anymore (at least without further costs). So I decided to look for a more recent version. Guess what? It' not available. Some more investigation showed me that a new version was made available in April this year, but only for "beta". Now... What on earth is a "beta" version of a free edition?! After all the product should be the same. Only with certain restrictions.

If you want to compare this with the IBM policy for Informix, you'll noticed that the "free edition" is up to date with the latest available fixpack. Do you notice a different behavior here? I do. And I don't think that's because I work for IBM...






On a more personal perspective, from local market, we see that we haven't been loosing customers. More important our customer are very happy with Informix for the well known reasons (reliability, simplicity, robustness, ease of management). This is not marketing. It's a bit hard to point out a true "pure" Informix DBA and I know the biggest installations in my country. We have Informix in some of the biggest retail chains, in the Telcos, in logistics/transportation, in Finance, in central and local administration and in industrial environments. And all of these barely notice that they run Informix. This is a great achievement, but at the same time I feel it's also a downside. Although this is a paradox, I truly believe that a software that has problems may have better chances of success. Why? Because it makes the people who work with it more "visible" when they solve problems.

As an example, in 2010 I was extensively congatulated when I got involved in a critical situation (caused by a sequence of human errors). The issue was escalated to an high level, and after it was solved the appreciation messages and the echos spread across the hierarchical chain. Now... In a normal situation, no problem should have ocurred, and I would still be completely anonymous from a hierachical point of view.

People who manage Informix tend to do other stuff as well and many times they're a bit "invisible". This is not fair since it also means they're doing their job right, but I've seen this happen several times. You probably know the saying... It's better to have "bad publicitly" than no publicity at all...



Now, let's take a look at what changed in Informix (not the new features) since the acquisition:

  • It gained presence in the IBM events like Information on Demand
  • We have monthly webcasts (chat with the labs)
  • We have PIDs (Post Interim Drops) which are cumulative patch updates This means that I rarely ask for a specific patch since most of the time there's a PID with the fix already available
  • We've been seeing major version releases each 1-2 years (2001,2003,2005,2007,2008,2010). And we've been having new fixpacks each 3 or 4 months which include new features
  • We have InfoCenter with the most up to date documentation in an easily searchable interface
  • We still have the PDF documentation for the people who know their ways around the manuals
  • We have better integration with the IBM product porfolio
  • Informix is used as a repository for some of these products (Cognos express, Optim as an option...)
  • Some new features came directly from other products (DB2 for example). Meaning we get improvements with little engineering effort
  • We have a wider range of editions, including a free one
  • We are still innovators, as the recent TimeSeries success stories show. There are new requirements and we're able to fulfill them
  • Informix is a brand inside the IBM Information Management pillar. Remember that at first we were integrated in the "DB2" pillar. Informix is currently on par with DB2, Cognos, Guardium etc.



... And what didn't change:



  • Informix is still light, easy to install and manage
  • Informix is still robust
  • Informix still scales pretty well
  • Informix support is still good (I'm biased, but I talk a lot with customers that have to deal with other vendors support)
  • Customers still like Informix
  • People still complain about the marketing of the product
  • We don't see Informix in the news
  • IIUG is still a great asset for the Informix community



I believe most people reading this who are aware of Informix history may consider I looked only at the bright side, and there is a dark side. Things that were not accomplished or things that become worst since the acquisition. But keep in mind that it's not totally fair to compare what happened inside IBM with what happened before IBM (specially during the "golden years"). A fair comparison would have to be done between what would have happened if IBM had not buy Informix, and that's impossible to tell. Naturally every Informix supporter can think that it should have more visibility inside IBM (this is a general idea we pick from the forums and independent blogs and sites), or that we're lacking better marketing etc.

From my point of view the balance is positive. And I'm looking forward to the 20th anniversary after IBM acquisition. Let's see what happens in the next ten years. Ten years ago I think many people would not expect the evolution we had.







Vers�o Portuguesa



No dia 2 de Julho de 2001 a IBM anunciou a conclus�o da aquisi��o da Informix. Portanto, passaram 10 anos desde o neg�cio que mudou a vida de muitas pessoas. Muito foi escrito na altura e desde ent�o sobre o neg�cio, sobre o futuro do Informix, sobre as reac��es da concorr�ncia etc. Este marco hist�rico fez-me olhar para tr�s e pensar sobre o que se tem passado. H� v�rias perspectivas sobre isto: A pessoal, a profissional, a t�cnica e a de marketing (bem como outras que n�o me ocorrem de momento).


Pessoalmente, a aquisi��o aconteceu tr�s anos depois de ter ingressado na Informix Portugal. Na altura j� estava bastante envolvido com um cliente Portugu�s (grande empresa de telecomunica��es) e penso que ganhei uma experi�ncia preciosa desde ent�o. Pertencer � IBM deu-me oportunidade de me envolver com outros produtos (de outras �reas, mas que tocam o mundo das bases de dados), embora o foco fosse e ainda o seja, o Informix. O Informix permitiu-me interagir com v�rias grandes (da perpectiva de um pa�s pequeno) empresas. Portanto foi uma transi��o muito positiva. Naturalmente nem tudo � perfeito. Escusado ser� dizer que o ambiente de uma filial (cerca de 20 pessoas na altura) de uma pequena companhia mundial, n�o � de todo semelhante ao ambiente de uma grande companhia como � o caso da IBM. Os processos dentro de grandes empresas t�m necessariamente de ser mais complexos. Isto � um facto e ningu�m poder� fazer nada contra isso.



Do ponto de vista t�cnico, a evolu��o do Informix foi incr�vel. Para os que conhecem Informix, basta que recordem as vers�es que sairam j� dentro da IBM: 9.3 (pequena ou nenhum influ�ncia da IBM dado que foi lan�ada em 2001), 9.4 (2003), 10 (2005), 11.10 (2007), 11.50 (2008) e 11.7 (2010). J� agora, destas apenas a 9.3 n�o tem qualquer tipo de suporte e a 9.4 e 10 est�o num esquema de suporte limitado (mas sem custos adicionais). H� aqui valor e protec��o de investimento. Pode comparar isto com o nosso maior concorrente: Lan�aram o 9i R1, 9i R2, 10g R1, 10 R2, 11g R1 and 11g R2. Tanto quanto julgo saber, s� os �ltimos dois s�o suportados sem mais custos adicionais, por isso, mais ou menos o mesmo n�mero de releases e maior n�mero delas suportadas por n�s. Nada mal para uma base de dados que como muitos diziam n�o tinha futuro h� dez anos atr�s.



Se enumerasse as novas funcionalidades acabaria com mais um artigo muito grande. Mas pelo menos algumas devem ser referidas:

  • 9.3


    ER na linha de produto ORDBMS (9.x)

  • 9.4

    Chunks maiores que 2GB

    ER e HDR ao mesmo tempo

    Autentica��o PAM

    B-Tree scanners (em oposi��o � anterior B-Tree cleaner)


  • 10

    Diferentes tamanhos de p�gina

    Cria��o de ind�ces Online

    Encripta��o de colunas

    Directivas externas


    Restore de uma tabela a partir de um arquivo

  • 11.10

    MACH 11 (multiplos n�s secund�rios)

    Checkpoints sem bloqueio

    Open Admin Tool


    SQL admin API

    Database scheduler

    Last Committed Read


  • 11.50

    Secund�rios com possibilidade de altera��es (DML)

    Compress�o

    Connection Manager

    In�cio da transposi��o de funcionalidades do XPS para o IDS


  • 11.70

    Storage provisioning

    Utilizadores n�o reconhecidos pelo SO (mapped users)


    Elimina��o do limite de extents para uma parti��o

    Reorganiza��o de tabelas Online

    V�rias funcionalidades do XPS (multi-index path, star join...)

    Informix Warehouse Accelerator






E agora temos a perspective de marketing.... Este � o aspecto mais divertido. Trata-se de uma discuss�o sem fim e lembrei-me que seria interessante fazer algumas compara��es, como por exemplo cita��es versus realidade, an�ncios versus realidade e declara��es de inten��es versus realidade. Efectuei umas pesquisas sobre o que as pessoas disseram na altura e desde ent�o.




Comecemos uns anos antes (tradu��o pessoal. Pode consultar o original nos links):



"Eu penso que a Informix est� a fazer grande trabalho de marketing. Eles agora obt�m o pr�mio de marketing Sybase. � algo em que n�s nunca fizemos um bom trabalho. Fale com algu�m na Sybase ou Microsoft e pergunte-lhes o que pensam dos Datablades. Toda a gente lhe dir� que � uma loucura. N�o � que seja uma m� ideia -- � loucura. E eles n�o -- eles n�o -- integraram esses dois produtos. Eles n�o o fizeram, n�o o podem fazer, n�o o ir�o fazer, � imposs�vel.", Larry Ellison, numa entrevista � InfoWorld, em Fevereiro de 1997




Na verdade, n�s actualmente "activamos" ("registamos" em linguagem Informix) datablades automaticamente sempre que um utilizador chama uma fun��o que pertence a um deles. E fornecemos v�rios gratuitamente. Um deles (TimeSeries) � usado para bater a concorr�ncia em "smart metering". Outro (BTS) � usado para incorporar tecnologia de c�digo fonte aberto de indexa��o de texto, no Informix.

No mesmo artigo, Larry Ellison menciona que o Informix tinha 4 produtos diferentes. Embora aparentemente s� refira 3 (e dois parecem ser o mesmo), isto era em parte verdade. Existia o motor "OLTP", o de "DW" (XPS) e o servidor universal (IUS). Esses dias j� terminaram. O XPS ainda existe, embora muitas das funcionalidades j� estejam no IDS. N�o h� distin��o entre o produto para OLTP e o que na altura era chamado de servidor universal.



Na altura da aquisi��o:



"Descobrimos no passado que quando adquirimos outros produtos, o problema da integra��o � maior que o valor ganho pela aquisi��o do produto. Isto ser� um pesadelo de integra��o", Paul Marriott, gestor de desenvolvimento de neg�cio para o 9I na Oracle, no site ARNnet, em Abril de 2001




Esta opini�o foi tida em conta quando a Oracle comprou a JDEdwards, Peoplesoft, Siebel, Hyperion, Innobase, BEA, Sun....? Calculo que n�o. Talvez n�o aprendam com os erros ou esta cita��o tenha sido apenas mais uma a contribuir para o FUD (fear, uncertainty and doubt)...



"Certamente a Oracle ir� conseguir obter algums clientes vossos - especialmente clientes Informix?

JK; N�o me parece que se possa generalizar essa afirma��o. A Oracle est� a tentar dar a impress�o que n�s iremos dizer aos clientes Informix que agora t�m de migrar para DB2. Mas obviamente n�o faremos isso. Adquirimos os bens da Informix porque os valorizamos. N�o iremos for�ar uma migra��o em clientes e parceiros que n�o seja indicada para eles - Isso n�o faz qualquer sentido em termos de neg�cio. Temos falado com clientes e parceiros Informix e temos dito que o Informix ser� suportado e desenvolvido no futuro previs�vel - e os clientes Informix est�o muito contentes com isto. Parecem gostar de toda a proposi��o de valor e portanto n�o antecipamos perd�-los para a Oracle", Jim Kelly, IBM's Vice President, Marketing Data Management Solutions Division, numa entrevista a um analista da Bloor Research, em Julho de 2001


Tanto quanto sei, nenhum cliente foi for�ado a migrar para DB2. Alguns clientes foram for�ados a migrar porque os seus fornecedores aplicacionais (SAP por exemplo) descontinuaram o suporte para Informix nas suas vers�es mais recentes. Estes clientes tiveram a possibilidade de escolher a nova plataforma para base de dados. Alguns escolheram DB2, outros Oracle e outros SQL Server (ou outras BDs como SAPdb)...

Afirma��es semelhantes foram proferidas por outros executivos da IBM na altura da aquisi��o e ap�s a mesma.



E apenas por brincadeira:



"Mas muito sinceramente, se o Informix ainda for comercializado como um produto independente, daqui a cinco anos ficarei chocado.", Daniel Morgan, um Oracle ACE no comp.databases.oracle.server em Junho de 2001




Com um pouco de sorte, ap�s cinco ou seis anos depois da data prevista, ele j� ter� recuperado do choque.



Deixemos as cita��es... Tamb�m gostaria de deixar um exemplo de "declara��es de intens�es versus realidade". Durante um projecto com outro produto IBM, senti a necessidade de testar algo com uma base de dados da concorr�ncia (Oracle), que � usada no cliente onde decorre o projecto. Para as minhas necessidades, a edi��o gratuita era perfeitamente suficiente e permitia-me trabalhar mais confortavelmente no meu pr�prio ambiente. Efectuei o download, mas ap�s alguns dias parei para pensar sobre um detalhe: A vers�o actualmente dispon�vel da edi��o gratuita era a 10g (lan�ada h� 4 ou 5 anos). Repare-se... esta vers�o j� nem � totalmente suportada (sem custos adicionais). Por isso decidi procurar a vers�o mais recente. Adivinhe...? N�o est� dispon�vel. Alguma investiga��o mostrou-me que a nova vers�o foi disponibilizada em Abril deste ano, mas apenas em "beta". Agora... O que diabo � uma vers�o "beta" de uma edi��o livre?! Ao fim ao cabo o produto dever� ser o mesmo. Apenas com algumas restri��es.


Se compararmos isto com a politica da IBM para o Informix, reparamos que a edi��o gratuita, est� a par com os �ltimo fixpack disponibilizado. Nota aqui uma diferen�a de comportamento? Eu noto e julgo que n�o � por trabalhar na IBM...



Numa perspectiva mais subjectiva, sobre o mercado local, vemos que n�o temos perdido clientes. Mais importante, os clientes continuam contentes com o Informix pelas raz�es bem conhecidas (fiabilidade, simplicidade, robustez e facilidade de gest�o). Isto n�o � marketing. �-me um pouco dif�cil indicar um verdadeiro e "puro" DBA Informix, e conhe�o as maiores e mais criticas instala��es de Informix no meu Pa�s. Temos Informix em grandes cadeias de lojas, nas telecomunica��es, em log�stica e transportes, na �rea financeira, na administra��o central e local e na �rea industrial. E em todos estes sitios mal se apercebem que correm Informix. Isto � um grande feito, mas ao mesmo tempo � um grande problema. Apesar de isto ser um paradoxo, acredito verdadeiramente que um software que cause ou esteja envolvido em problemas tem mais facilidade em ter sucesso. Porqu�? Porque faz com que as pessoas que trabalhem com ele se tornem mais "vis�veis" quando resolvem problemas. A t�tulo de exemplo, em 2010 fui extraordinariamente elogiado pelo envolvimento numa situa��o complicada (originada por uma sequ�ncia de erros humanos). O assunto foi escalado ao mais alto n�vel e ap�s resolvido surgiram os elogios e os ecos percorreram a cadeia hierarquica. Ora numa situa��o normal, nada de errado teria acontecido e eu continuaria an�nimo para a hierarquia.

Quem gere Informix tende a efectuar uma s�rie de outras tarefas. E tendem a ser "invis�veis". Isto n�o � justo, pois naturalmente significa que est�o a fazer o seu trabalho correctamente, mas j� o tenho presenciado in�meras vezes. Como diz o ditado: "que falem mal, mas que falem"...



Vejamos agora o que mudou (n�o as novas funcionalidades) desde a aquisi��o:

  • O Informix ganhou presen�a nos eventos globais da IBM (como o Information on Demand)
  • Temos webcasts mensais (chat with the labs)
  • Temos PIDs (Post Interim Drops) que s�o patches cumulativos. Isto significa que raramente pe�o um patch espec�fico pois na maioria dos casos j� existe um PID com a correc��o necess�ria j� dispon�vel
  • Temos tido novas vers�es (major releases) cada 1-2 anos (2001,2003,2005,2007,2008,2010). E temos tido fixpacks cada 3-4 meses, que incl�em novas funcionalidades e n�o apenas correc��es
  • Temos o InfoCenter com a documenta��o mais actualizada e uma interface que permite a procura f�cil de termos
  • Continuamos a ter a documenta��o em PDF para quem j� conhece a sua estrutura e prefere t�-la dispon�vel no computador (ou dispositivo m�vel)
  • Temos melhor integra��o com o portfolio de produtos IBM
  • O Informix � usado como reposit�rio em alguns dos outros produtos IBM (Cognos Express e Optim como op��o, ...)
  • Algumas novas funcionalidades vieram directamente de outros produtos (DB2 por exemplo). Isto traduz-se em novas melhorias com pouco esfor�o de engenharia
  • Temos um leque maior de edi��es, incluindo uma gratuita
  • Continuamos inovadores, como as recentes hist�rias de sucesso com o TimeSeries mostram. Existem novos requisitos e somos capazes de os preencher
  • Informix � uma marca dentro do pilar de Information Management da IBM. Recorde-se que de in�cio foi inclu�do no pilar chamado "DB2". O Informix est� actualmente a par do DB2, Cognos, Guardium etc.



... E o que n�o mudou:



  • Informix ainda � leve, f�cil de instalar e gerir
  • Informix ainda � robusto
  • Informix ainda � escal�vel
  • O suporte Informix ainda � bom (sou suspeito, mas falo muito com clientes que t�m de lidar com o suporte de outros vendedores...)
  • Os clientes ainda gostam do Informix
  • As pessoas ainda se queixam do marketing em torno do Informix
  • Continuamos sem ver o Informix nas not�cias com frequ�ncia
  • O IIUG continua a sem um bem precioso para a comunidade Informix



Acredito que muitas pessoas ao lerem isto, e conhecendo a hist�ria do Informix possam considerar que apenas foquei o lado positivo e que existe um lado negro. Pontos que n�o foram alcan�ados ou coisas que correm pior desde a aquisi��o. Mas conv�m n�o esquecer que n�o � totalmente justo comparar o p�s aquisi��o com o pr�-aquisi��o (especialmente durante os "anos dourados"). Uma compara��o para ser justa teria de ser feita entre o que se tem passado dentro da IBM com o que se passaria fora da IBM se n�o tivesse havido a aquisi��o. Mas isto � pura especula��o. Naturalmente todos os apoiantes do Informix pensam que deveria ter mais visibilidade dentro da IBM (ideia recorrente que se percebe nos forums e em blogs e sites externos � IBM), ou que precisamos de mais/melhor marketing. Mas na minha perspectiva o balan�o tem sido positivo. E fico expectante pelo 20� anivers�rio da aquisi��o. Vamos ver o que acontece nos pr�ximos 10 anos. H� 10 anos atr�s penso que muita gente n�o acreditaria na evolu��o que o Informix sofreu.



11.70.xC3 is available / 11.70.xC3 est� dispon�vel

This article is written in English and Portuguese
Este artigo est� escrito em Ingl�s e Portugu�s


English version:

My articles backlog keeps increasing, but there are things I can't miss. One of them is the availability of another fixpack of Informix.
The latest one is 11.70.xC3. I spot it on FixCentral a couple of days ago and PDF documentation is already available. InfoCenter is also updated.

As usual there are big news and smaller ones. It really depends on your needs and cares. The follwoing is a straight copy/paste from its release notes:
  • Administration
    • Automatic read-ahead operations
    • Configuring the server response to low memory
    • Reserving memory for critical activities
    • Connection Manager enhancements
    • Enhancements to the OpenAdmin Tool
  • Embeddability
    • Managing message logs in embedded and enterprise environments
  • Developing
    • Built-in SQL compatibility functions for string manipulation and trigonometric support
  • High availability clusters and Enterprise Replication
    • Automatically connecting to a grid
    • Code set conversion for Enterprise Replication
    • Enhancements to the Informix Replication plug-in for OAT
  • Security
    • Non-root installations support shared-memory and stream-pipe connections
    • Retaining numbers for audit log files
    • Restrict operating system properties for mapped users
  • Time Series data
    • Simplified handling of time series data
    • Informix TimeSeries plug-in for OAT
A few remarks:

The possibility of configuring read ahead automatically is great. Let's be honest: How many of us ever really mastered the traditional configuration? Personally I can tell you that a few years ago I tried it in a very controlled environment and I gave up. I could not spot any difference in my tests and over the years I've seen contradictory statements on how it should be setup. So it's a great pleasure to see it can be automatic now.

Server response in a low memory situation is also a great new feature. In cases where I have more than one instance on the same server I insist on setting up SHMTOTAL so that I can isolate any issue caused by excessive memory consumption. This prevents the situation from affecting other instances.
But even so it was usual to see undesirable behaviors on the instance consuming too much memory. And this is easy to understand, because to fix something (rollback, monitor etc.) you still need memory. If you've run out of it, your ability to solve it is constrained.
What IBM did now is give you the ability to reserve some memory, to deal with lack of memory. Seems pretty obvious right? But IBM did more. When you hit the pre-configured thresholds the engine can automatically run some tasks that will allow it to free some memory. So, again, more automation, easier to use in embedded scenarios and more robustness

Connection manager suffered some big changes. Sincerely I need more time to figure them out, but the idea is that a unique connection manager can be used to deal with different needs (high availability, grid, server sets and ER. The configuration file has changed.
As usual, OAT has been changed to accommodate the server side improvements. Several new options are available to deal with log file rotation, low memory conditions setup, lock monitoring (inspired on a plugin initially created by me which is available on the IIUG software repository) and a new plugin to handle TimeSeries.

Several new SQL functions were introduced. This is something that could be solved (most of them could be easily created), but that hurt the new users experience and portability efforts. I would like to see much more in this area...
One interesting new feature is the possibility to configure ER between servers with different codesets. This opens some interesting possibilities for example if you need to convert the codeset of a large database.

Timeseries was also improved, revealing it's one very important aspect of the latests releases.
Finally several security related changes, like improvements for servers in "non-root" installations and for instances configured with mapped users.

I usually concentrate only on the server side improvements, but this time I want to mention a trivial, but long desired change in Client SDK: It now includes dbaccess, the simple but very handy tool. Of course people would like to see a fancy GUI tool on Windows (or even other environments using Java), but that would be much harder, and would certainly increase the footprint.
This is a quick solution for a long lasting problem: the client did not include any query tool. I would vote for the inclusion of other traditional "server side" tools like dbschema and dbload.


Vers�o Portuguesa

O meu atraso na escrita de artigos continua a aumentar, mas h� algumas coisas que n�o posso deixar passar. Uma delas � a disponibilidade de outro fixpack Informix.
O �ltimo � o 11.70.xC3. Encontrei-o h� dois dias no site FixCentral e a documenta��o em PDF j� est� dispon�vel. O InfoCenter tamb�m j� est� actualizado

Como de costume h� grandes novidades e pequenas novidades. Tudo depende das necessidades e preocupa��es de cada um. O seguinte � a tradu��o t�o fiel quanto poss�vel das novidades especificadas nas notas deste fixpack:

  • Administra��o
    • Opera��es autom�ticas de read-ahead
    • Configura��o da reac��o do servidor a situa��es de escassez de mem�ria
    • Reservar mem�ria para actividades criticas
    • Melhorias no Connection Manager
    • Melhorias no OpenAdmin Tool
  • Funcionalidades de inclus�o da base de dados em ambientes fechados
    • Gest�o de logs de mensagens em ambientes embebidos e empresariais
  • Desenvolvimento
    • Fun��es SQL de compatibilidade e manipula��o de strings e suporte trigonom�trico
  • Clusters de alta disponibilidade e Enterprise Replication
    • Conex�o autom�tica a uma grid
    • Convers�o de mapas de caracteres para Enterprise Replication
    • Melhorias no plugin de replica��o Informix para o OAT
  • Seguran�a
    • Instala��es Non-root suportam conex�es shared-memory e stream-pipe
    • Reten��o de n�meros para os logs de audit
    • Restri��o de propriedades de sistema operativo para utilzadores mapeados
  • Dados Time Series
    • Gest�o simplificada de dados Time Series
    • Plugin do OAT para Informix TimeSeries


Alguns coment�rios:

A possibilidade de configurar o read ahead automaticamente parece-me �ptima! Sejamos honestos: Quantos de n�s conseguiram realmente dominar a configura��o tradicional? Pessoalmente posso dizer que h� alguns anos atr�s tentei num ambiente bastante controlado e desisti. N�o consegui identificar diferen�as sens�veis nos meus testes, e ao longo dos anos vi indica��es contradit�rias sobre como isto deveria ser configurado. Por isso � com muita satisfa��o que vejo que agora pode ser automatizado.

Poder configurar a reac��o do servidor em situa��es de escassez de mem�ria � outra excelente melhoria. Em ambientes onde tenha mais que uma inst�ncia por servidor, eu insisto em definir o SHMTOTAL, para que possa isolar qualquer problema causado por excesso de consumo de mem�ria. Isto previne que a situa��o afecte as outras inst�ncias (ou no limite a pr�pria m�quina). Mas mesmo assim era habitual vermos comportamentos n�o desejados numa inst�ncia que consumisse muita mem�ria. E isto � f�cil de entender, porque para corrigir alguma coisa (efectuar um rollback, monitorizar etc.) � necess�ria mem�ria. Se j� a esgot�mos, a capacidade de resolver o problema � afectada.
O que a IBM fez agora foi dar-nos a capacidade de reservar alguma mem�ria para lidar com a falta de mem�ria. Parece bastante �bvio, certo? Mas a IBM fez mais. Quando atingimos os limites pr�-configurados, o motor pode automaticamente executar algumas tarefas que lhe permitir�o libertar mem�ria. Portanto, mais uma vez, mais automatiza��o o que torna mais f�cil usar o Informix em ambientes embebidos e aumenta a robustez.

O Connection Manager sofreu grandes altera��es. Sinceramente necessito de mais tempo para as analisar, mas a ideia � que um �nico connection manager pode ser usado para lidar com diferentes necessidades (alta disponibilidade, grid, server sets, e Enterprise Replication). O formato do ficheiro de configura��o foi alterado.

Como vem sendo habitual, o Open Admin Tool (OAT) foi alterado para acomodar as melhorias introduzidas no servidor. Novas op��es est�o dispon�veis para lidar com rota��o de ficheiros de log, configura��o de condi��es de escassez de mem�ria, monitoriza��o de locks (inspirado num plugin inicialmente criado por mim e dispon�vel no reposit�rio do IIUG) e um novo plugin para lidar com TimeSeries.

V�rias novas fun��es SQL foram introduzidas. Isto � algo que poderia ser resolvido pelo utilizador (a maioria destas podia ser facilmente criada), mas isso dificultava a vida a novos utilizadores e tinha impacto na portabilidade de aplica��es. Gostaria de ver muito mais evolu��o neste aspecto...

Uma funcionalidade interessante � a possibilidade de configurar Enterprise Replication (ER) entre bases de dados que utilizem diferentes mapas de caracteres.
Isto abre possibilidades interessanes se por exemplo necessitar-mos de converter um mapa de caracteres de uma base de dados grande.

O TimeSeries tamb�m foi melhorado, revelando que � um dos aspectos mais importantes das �ltimas vers�es.
Finalmente, algumas mudan�as na �rea de seguran�a, como melhorias em servidores instalados como "non-root" e para inst�ncias configuradas com utilizadores mapeados.

Habitualmente concentro-me apenas nas melhorias do lado do servidor, mas desta vez tenho de mencionar um mudan�a trivial, mas h� muito desejada no Client SDK: Passou a incluir o dbaccess, a ferramenta simples, mas muito �til de interroga��o da base de dados. Claro que todos gostar�amos de ver uma ferramenta gr�fica nos ambientes Windows (ou mesmo em todos os ambientes, baseado em Java por exemplo), mas a verdade � que isso necessitaria de um esfor�o muito maior e iria aumentar significativamente a dimens�o do cliente.
Isto � uma solu��o r�pida para um problema que existia h� muito tempo: o cliente n�o inclu�a nenhuma ferramenta de interroga��o da base de dados. Eu votaria a favor da inclus�o de outras ferramentas "tradicionais" do servidor como o dbschema e dbload.

HP-UX: What now? / E agora?

This article is written in English and Portuguese
Este artigo est� escrito em Ingl�s e Portugu�s

English version:

You know I usually stick to Informix related topics, but a few weeks ago something was announced that has to make us think... As we all know by now, Oracle announced that future versions of their software products will not support HP-UX running on Intel Itanium chips.
Why do we have to think about it? Well, from my personal perspective because it raises a lot of serious doubts/questions. Let's see:

  1. First you read in the announcement that Intel is not truly committed to Itanium. The exact words are "Intel management made it clear that their strategic focus is on their x86 microprocessor and that Itanium was nearing the end of its life". Intel denied this in the following days. Who do we believe? The company that owns the chip in question or another (now also) hardware supplier? Is it normal that a company discontinues it's products on a platform that has not announced it's end of life plans?

  2. The announcement was made just before an important HP shareholders meeting... We could of course believe this was just a coincidence

  3. In the last months a lot of news came up referring to personal wars between Oracle's and HP's executives (ex HP CEO is now a very important Oracle executive). Meanwhile ex SAP CEO has been appointed as HP CEO, and Oracle and SAP had an ongoing court trial started at the time he was SAP's CEO. All these an point 2) may lead us to the feeling that while personalities clash, customers suffer. There's nothing wrong with having strong personalities as leaders of large companies, on the contrary. But we would expect their egos not to cause harm to their customers (of course "harm" translates into costs, uncertainty, fear and doubts - typically FUD that competitors like to spread, but in this case competitors don't have to bother...)

  4. Oracle mentions that others (Microsoft and Red Hat) have previously discontinued support for Itanium. This is true, but there is a big difference: The market share that these two companies had in the Itanium market was considered irrelevant. Now, for Oracle, the situation is completely different. They have a large share of Itanium customers (accordingly to this blog, there are around 140.000 Oracle/Itanium customers)

  5. Some people argue that supporting a platform has it's costs. Of course this is true, but the costs are certainly well covered if the above number holds true. That's part of the business. In order to provide a product, you incur in certain costs. And also note that Oracle always said, wrote an publicized that their code base was the same independently of the platform. So using this as an argument is hardly acceptable...

  6. Many people think this is just a commercial move from Oracle. They're trying to weak a competitor position while at the same time they hope to raise their own hardware sales. We can accept that this is normal, but we should keep in mind a few things. First, just a while ago Oracle choose HP as an hardware partner (remember Exadata?). Secondly Oracle CEO has said that it would like to see Oracle becoming the IBM of the sixties (integrated stack where the margins would be bigger), but that it would keep its software running on competitor platforms. Well something has changed :)

  7. Will this be the only case, or will Oracle do the same in the future with other OS? The fact is that the number of OS and Hardware vendors for enterprise computing is shrinking. You currently have Microsof Windows on Intel x86, IBM AIX on System p, HP-UX on Itanium, Solaris Sparc, Linux on Intel x86, and Solaris on Intel (I'm explicitley forgeting other platforms like IBM System Z and HP NonStop). Oracle is doing it's best to eliminate HP-UX/Itanium. Will it stop there? Or will it proceed it's path to become "the IBM of the 1960s" (meaning the closed system that locked customers in)? Note that IBM still suffers with the image it created at the time.

The above are just a list of some important points. I may be missing a few. The announcement must had a significant impact on HP Itanium customers running Oracle software. Imagine that you wake up one morning and find out that the software vendor you choose gave up supporting your platform. Of course you'll have support for your existing products, but you'd really appreciate a roadmap... By the way, wasn't that the same company that 10 years ago accused IBM of not having a roadmap for Informix? It's funny when we put things into perspective...
So, assuming you're one of those customers what will you do? You have a few options:
  1. You jump on the Oracle train and buy a one way ticket... I mean you choose Sparc for your upcoming hardware renovation... You don't know where the train will take you... You don't even know how much it will cost you... Specially because you just bought a one way ticket... Once you're "there" you'll figure what what price the next ride will cost... One thing you know: You'll be traveling with the same company since no other operates in the same region...

  2. You choose another hardware platform, and you really hope the same trick will not be played again

  3. You change your software supplier
I'd say none of the options above looks particularly attractive. But in case you need another database (and you're able to get your application running against it), you should really consider Informix. Here's why:
  1. It's robust, easy to use, reliable, works well in virtualized environments etc., but you should already know that

  2. It has a roadmap and has just completed a decade of improvements after the IBM acquisition

  3. It belongs to a company that will try to sell you it's hardware, because it believes it's good, and not because it tends to be the only option to run it's software

  4. It's already very well integrated with many of the other IBM software portfolio, and this is assumed to be a continuous effort

  5. It has a long history of working well with HP-UX (traditionally on PA-RISC and now with Itanium). A search for "informix" in the HP site will show you several HP documents about integration between Informix and HP-UX
To wrap up this article, I'd like to put here a few links that relate to this topic. I hope they'll allow you to see what's being written about this Oracle announcement, and to form your own opinion about it.




Vers�o Portuguesa:

Normalmente restrinjo-me a assuntos exclusivamente relacionados com Informix, mas h� algumas semanas atr�s foi anunciado algo que nos tem de fazer pensar.... Como j� todos deveremos saber nesta altura, a Oracle anunciou que futuras vers�es do seu software n�o ir�o suportar HP-UX a correr em chips Itanium.
Porque � que devemos reflectir sobre isto? Bom, na minha opini�o pessoal porque isto levanta uma s�rie de d�vidas e quest�es importantes. Vejamos:

  1. Come�amos por ler no an�ncio que a Intel n�o est� verdadeiramente empenhada no Itanium. As palavras exactas (tradu��o pessoal) foram: "... a gest�o da Intel deixou claro que o foco da sua estrat�gia � a linha de processadores x86 e que o Itanium se est� a aproximar do fim de vida..." . A Intel negou isto nos dias seguintes. Em quem acreditamos? Na empresa que det�m o processador em quest�o ou noutra empresa (agora tamb�m) fornecedora de hardware? Ser� normal que uma empresa anuncie o fim de desenvolvimento dos seus produtos numa plataforma cujo fim de vida n�o foi sequer anunciado?

  2. O an�ncio foi feito imediatamente antes de um encontro de accionistas da HP.... Podemos claro acreditar que isto foi apenas uma coincid�ncia

  3. Nos �ltimos meses vieram a p�blico uma s�rie de not�cias referentes a guerras pessoais entre executivos da HP e Oracle (o ex CEO da HP � agora um quadro importante na Oracle - o n�mero dois na verdade, logo abaixo do Larry Ellison). Entretanto o ex CEO da SAP foi nomeado CEO da HP, e a Oracle e HP tinham um processo em tribunal que remonta ao tempo em que o mesmo era CEO da SAP. Tudo isto e o ponto 2) podem levar-nos a pensar que enquanto as personalidades se chocam os clientes sofrem. N�o h� nada de errado em que grandes empresas tenham personalidades fortes na sua lideran�a, bem pelo contr�rio. Mas seria de esperar que os egos n�o prejudiquem os respectivos clientes. O "preju�zo" traduz-se em custos, incerteza, medos e d�vidas - o que em Ingl�s se chama "FUD - fear, uncertainty and doubt -", que normalmente � espalhado pela concorr�ncia, mas que neste caso nem requer esfor�o da concorr�ncia pois � feiro pelos pr�prios.

  4. A Oracle referiu que outros (Microsoft e Red Hat) j� tinham previamente descontinuado o suporte para Itanium. Isto � verdade, mas h� uma enorme diferen�a: A quota de mercado que estas duas empresas tinham em Itanium n�o � compar�vel � da Oracle. Esta tem uma grande percentagem dos clientes Itanium a usarem os seus produtos (de acordo com este blog, existem cerca de 140.000 clientes Oracle/Itanium)

  5. Algumas pessoas defendem que suportar uma plataforma tem os seus custos. Isto � uma verdade �bvia., mas esses custos s�o largamente cobertos se os n�meros acima forem correctos. Isso faz parte do neg�cio. Para fornecer um produto as empresas (de qualquer tipo) incorrem em custos. Note-se ainda que a Oracle sempre disse, escreveu e publicitou que o seu c�digo era o mesmo independente da plataforma. Por tudo isto, o argumento do custo de suportar uma plataforma n�o me parece acei�vel...

  6. Muitas pessoas acreditam que isto � apenas uma manobra comercial da Oracle. Est�o a tentar enfraquecer um concorrente ao mesmo tempo que tentam aumentar as suas p�roprias vendas de hardware. Podemos encarar isto como algo relativamente normal, mas devemos manter em mente uma s�rie de factos. Primeiro, apenas h� algum tempo atr�s, a Oracle escolheu a HP como o seu parceiro de hardware (lembram-se do Exadata?). Segundo, o CEO da oracle disse que gostava de ver (tradu��o pessoal) A Oracle tornar-se a IBM dos anos sessenta (solu��es integradas onde as margens s�o maiores), mas que manteria o seu software a correr nas plataformas da concorr�ncia. Parece que algo mudou entretanto... :)

  7. Ser� este um caso �nico, ou ir� a Oracle fazer os mesmo com outras plataformas? A verdade � que as plataformas (SO e hardware) para computa��o empresarial est�o a diminuir. Actualmente temos Microsof Windows em Intel x86, IBM AIX em System p, HP-UX em Itanium, Solaris Sparc, Linux em Intel x86, e Solaris em Intel (estou a omitir outras plataformas como IBM System Z e HP NonStop) . A Oracle est� a fazer o seu melhor para eliminar HP-UX em Itanium. Ir� parar por a�? Ou ir� prosseguir os seu caminho para se tornar a "IBM dos anos sessenta" (neste caso um sistema fechado que prende os clientes)? Note-se que a IBM ainda sofre com a imagem criada nessa altura.

Acima est� uma lista de alguns pontos importantes. Posso ter esquecido alguns. O an�ncio deve ter tido um impacto significativo nos clientes HP Itanium que utilizam software Oracle. Imagine que acorda uma manh� e descobre que o fornecedor de software que seleccionou, deixou de suportar a sua plataforma. Claro que ter� suporte para os produtos que j� existem, mas certamente apreciaria a exist�ncia de um roadmap... Ali�s, n�o foi esta a mesma empresa que h� 10 anos atr�s acusou a IBM de n�o ter um roadmap para Informix? � engra�ado quando se colocam as coisas em perspectiva...
Assim, assumindo que � um desses clientes, o que ir� fazer? A meu ver tem algumas op��es:
  1. Apanha o compboio da Oracle e compra um bilhete de ida... Ou seja, escolhe SPARC para a sua pr�xima renova��o de hardware... N�o sabe para onde o comboio o leva... Nem sequer sabe quanto lhe vai custar... Especialmente porque comprar� apenas um bilhete de ida... Depois de "l�" chegar logo ver� qual o pre�o da pr�xima "viagem"... Uma coisa ser� certa: Ir� viajar com a mesma empresa, pois mais ningu�m opera na mesma "regi�o"...

  2. Escolhe outra plataforma de hardware e espera ardentemente que o mesmo truque n�o seja empregue novamente

  3. Muda de fornecedore de softtware
Diria que nenhuma das op��es acima parece particularmente atractiva. Mas caso necessite de uma nova base de dados (e possa colocar a sua aplica��o a correr nela), deveria considerar o Informix. Eis porqu�:
  1. � robusto, confi�vel, corre bem em ambientes virtualizadoes etc.., mas isto j� dever� saber

  2. Tem um roadmap e acabou de completar 10 anos de inova��o ap�s a aquisi��o pela IBMI

  3. Pertence a uma empresa que tentar� vender-lhe o seu hardware porque acredita que � bom, e n�o apenas porque tende a ser a �nica plataforma onde pode correr o seu hardware

  4. J� est� bastante bem integrado com muito do software IBM, e isto � assumidamente um esfor�o cont�nuo

  5. Tem uma longa hist�ria de bom desempenho em HP-UX (tradicionalmente em PA-RISC e actualmente em Itanium). Uma pesquisa por "informix" no site da HP ir� mostrar-lhe v�rios documentos da HP sobre a integra��o entre Informix e HP-UX
Para fechar este artigo, gostaria de deixar alguns links relacionados com este assunto. Espero que lhe permitam ver o que tem sido escrito sobre este an�ncio da Oracle, e que possa formar a sua p�ropria opini�o sobre o tema.