Tuesday, January 28, 2014

%F format date strings / Formatação de valores DATE (%F)

This article is written in English and Portuguese (original version here)
Este artigo está escrito em Inglês e Português (versão original aqui)


English version:
This article should be read by customers planning the upgrade to versions 12.10.xC2+ or 11.70.xC8+.
IBM made a change in the default behavior for the %F placeholder used in to_char() and to_date() functions as well as GL_DATETIME and DBTIME environemnt variables.
In previous versions, if we used %F in these scenarios, it would include a dot (.) in the output (when we're converting DATE/DATETIME values to text) or would expect the dot in the input when we're loading/reading text into a DATE or DATETIME variable or field.
It's easy, from my point of view, to accept that this should not work like it did. In other words, the behavior was wrong (why would we get a dot if we don't get a ":" by default to separate hours from minutes or minutes from second?) But, as usual with the defaults, changing it means we can break existing usage. So I'm glad I didn't have to decide on this. If I had to, I'd probably prefer to create a new placeholder that would not produce nor expect the dot. But that was not the decision, and I really think this will impact some customers.
Let's see some examples:


informix@sles9swg:/tmp> onstat -

IBM Informix Dynamic Server Version 11.50.UC9W3 -- On-Line -- Up 7 days 12:13:05 -- 567528 Kbytes

informix@sles9swg:/tmp> cat test.sql
SELECT to_char(CURRENT YEAR TO SECOND, "%Y-%m-%d %H:%M:%S %F") FROM sysdual;
informix@sles9swg:/tmp> dbaccess sysmaster test.sql

Database selected.




(expression)  2014-01-25 03:08:30 .00

1 row(s) retrieved.


Database closed.

informix@sles9swg:/tmp>


As you can see I didn't specify the "." and it appears on the output.
Now, the same test on 11.70.FC8:


mouraria@primary:informix-> onstat -

IBM Informix Dynamic Server Version 11.70.FC8 -- On-Line -- Up 01:07:56 -- 222188 Kbytes

mouraria@primary:informix-> cat test.sql
SELECT to_char(CURRENT YEAR TO SECOND, "%Y-%m-%d %H:%M:%S %F") FROM sysdual;
mouraria@primary:informix-> dbaccess sysmaster test.sql

Database selected.




(expression)  2014-01-24 12:45:18 00

1 row(s) retrieved.


Database closed.

mouraria@primary:informix-> 


No dot. I honestly prefer the second behavior... it's easy to add a dot, but it would very hard to remove it. But if a customer has a scenario where he is already using these functions with the default dot, the change may bring some issues.
Naturally this would be easy to trap in even the simplest application tests every customer should do before upgrading, but I feel this warning may help avoid some problematic situations.


Versão Portuguesa:
Este artigo dirige-se a clientes que estejam a planear upgrades para versões 12.10.cC2+ ou 11.70.xC8+.
A IBM efectuou uma mudança no comportamento para o campo "%F" usado nas funções to_char() e to_date() bem como nas variáveis de ambiente GL_DATETIME e DBTIME.
Em versões anteriores, se usássemos o %F nestes cenários, tal levaria à inclusão de um ponto (.) no resultado (quando estamos a converter um valor DATE/DATETIME para texto) ou esperaria ter um ponto no input quando estamos a ler dados para uma variável ou campo do tipo DATE/DATEIME.
Do meu ponto de vista é fácil concordar que o comportamento antigo estava errado (porque havería-mos de obter um ponto se por exemplo não obtemos ":" como separador automático das horas/minutos/segundos?) Mas como é hábito, quando temos um comportamento numa versão, mudá-lo pode significar quebrar a compatibilidade das aplicações. Por isto, ainda bem que não fui eu que tive de decidir esta situação. Se tivesse de decidir, provavelmente teria preferido introduzir outra nomenclatura (%f por exemplo) que funcionaria de forma semelhante ao %F mas sem incluir o ponto. Penso que tal como foi feito pode causar algum impacto em alguns clientes.
Vejamos alguns exemplos:

informix@sles9swg:/tmp> onstat -

IBM Informix Dynamic Server Version 11.50.UC9W3 -- On-Line -- Up 7 days 12:13:05 -- 567528 Kbytes

informix@sles9swg:/tmp> cat test.sql
SELECT to_char(CURRENT YEAR TO SECOND, "%Y-%m-%d %H:%M:%S %F") FROM sysdual;
informix@sles9swg:/tmp> dbaccess sysmaster test.sql

Database selected.




(expression)  2014-01-25 03:08:30 .00

1 row(s) retrieved.


Database closed.

informix@sles9swg:/tmp>


Como pode verificar, não indiquei o "." e o mesmo aparece no output.
Agora, o mesmo teste numa versão 11.70.FC8:


mouraria@primary:informix-> onstat -

IBM Informix Dynamic Server Version 11.70.FC8 -- On-Line -- Up 01:07:56 -- 222188 Kbytes

mouraria@primary:informix-> cat test.sql
SELECT to_char(CURRENT YEAR TO SECOND, "%Y-%m-%d %H:%M:%S %F") FROM sysdual;
mouraria@primary:informix-> dbaccess sysmaster test.sql

Database selected.




(expression)  2014-01-24 12:45:18 00

1 row(s) retrieved.


Database closed.

mouraria@primary:informix-> 

Sem ponto. Honestamente prefiro o segundo comportamento... é fácil se quiser adicionar o ponto, mas seria muito mais difícil retirá-lo. Mas se um cliente tiver um ambiente onde já use estas funções e esteja configurado e preparado para o ponto, a mudança pode causar alguns problemas.
Naturalmente isto seria fácil de detetar mesmo nos testes aplicacionais mais simples que cada cliente deve fazer antes de um upgrade, mas sinto que este aviso pode ajudar a evitar algumas situações mais problemáticas.

Friday, January 24, 2014

Webcast about Informix documentation / Webcast sobre documentação Informix

This article is written in English and Portuguese (original version here)
Este artigo está escrito em Inglês e Português (versão original aqui)


English Version:

If you regularly visit Informix documentation site (Informix Infocenter) you probably have already noticed that it's been suffering some changes. IBM is holding a webcast on january 28 to explain these changes and future direction for Informix documentation.
I cannot stress enough the importance of the documentation. It's useless to have features if users don't know about them or can't find how to use them. Besides that a good documentation is a good way to save support costs (which is good for the software supplier) but it also a good way to save customer time and improve user experience.

The webcast will count with Jerry Keesee, head of Informix development team, but the main speaker will be Jasna Krmpotic. You probably don't know her name, but let me say she's one of the more responsive persons I've "met" lately. I'm beginning to lost count on how may times I bothered her with documentation or web pages issues and the answer has been always impressive and effective.
So, what I'm saying is that this webcast will be worth it for sure and although it's not about technical issues it's still a very important subject

The link for registering is:
https://events.na.collabserv.com/portal/wippages/register.php?id=5b6b83bb3d&l=en-US



Versão Portuguesa:
Se visita regularmente a documentação Informix (Informix Infocenter) provavelmente já se apercebeu que tem sofrido algumas mudanças. A IBM irá apresentar um webcast no dia 28 de Janeiro para explicar estas mudanças e a estratégia futura para a documentação Informix.
Não consigo enfatizar suficientemente a importância da documentação. É inútil ter funcionalidades nos produtos se os utilizadores não as conhecerem ou não conseguirem encontrar como as usar. Para além disso, uma boa documentação é uma boa forma de baixar custos do suporte (o que é bom para o fornecedor de software), mas também é uma boa forma de poupar tempo aos clientes e melhorar a sua experiência com os produtos.
O webcast irá contar com a presença do Jerry Keesee, director de desenvolvimento do Informix, mas o apresentador principal será a Jasna Krmpotic. Provavelmente não conhecerão o nome, mas permitam-me que diga que é das pessoas mais prontas a ajudar que "conheci" nos últimos tempos. Começo a perder a conta das vezes que a incomodei com questões sobre a documentação ou mesmo páginas web relativas a Informix e a resposta deixou-me sempre impressionado pela eficácia e rapidez.
Portanto, o que estou a dizer é que certamente o webcast valerá a pena, e apesar de não ser sobre assuntos técnicos, ainda assim é sobre um tema bastante importante.
O endereço para registo é:
https://events.na.collabserv.com/portal/wippages/register.php?id=5b6b83bb3d&l=en-US


Informix 11.70.xC8

This article is written in English and Portuguese (original version here)
Este artigo está escrito em Inglês e Português (versão original aqui)

English version:
IBM started 2014 with the launch of another Informix fixpack for version 11.70. This time it's 11.70.xC8 and you can check the list of new features here: http://pic.dhe.ibm.com/infocenter/idshelp/v117/topic/com.ibm.po.doc/new_features.htm
As usual I'll not reprint here the full list, but I'll point out some of the features that I thing are more meaningful:

  • Installation
    • Windows
      • Easier installation of 32-bit programs on Windows 64-bit operating systems
        We used to need to add a component (C:\WINDOWS\SYSWOW64) to the PATH environment variable for installing a 32bit product on a 64 bit OS. Now we just have to install it.
  • Administration
    • Error handling
      • New event alarm for network failures
        Already introduced in 12.10, this will alert you if the listeners cannot start. Be very careful if you see this message because it may indicate you're trying to start an already started instance. And because of the way certain operating systems deal with shared memory, it may really happen... and usually leads to corruption.
    • Back up and restore
      • Optimize backups for data de--duplication
        This version can use an environment variable (IFX_BAR_USE_DEDUP) to change the backup image format so that it better fits the storage manager de-duplication process (when this is supported)
      • Enhanced support for IBM Tivoli Storage Manager features
        Allow the communication between the OnBAR process and the storage manager library to use bigger buffers (they default to 64KB which is very small for today's standards). IBM Tivoli Storage Manager and the new Primary Storage Manager (PSM) support this. If you're working with a different storage manager and you need to turn this off set the IFX_BAR_NO_LONG_BUFFERS variable
      • ON-Bar activity log timestamps
        Better information in the OnBAR log if the process is stalled while calling the external XBSA functions.
    • Configuration
      • Compare onconfig files (UNIX, Linux)
        As previously implemented in 12.10
      • Control the duration and frequency of connection attempts
        This allows us to set INFORMIXCONRETRY and INFORMIXCONTIME as parameters in $ONCONFIG. Usually these would have to be set on (every) client environment.
  • Performance
    • Faster operations
      • In-place alter operations on serial data types
        Some SERIAL (SERIAL, SERIAL8 and BIGSERIAL)  type conversions can now be done using the quick "inplace" algorithm for ALTER TABLE that change one to another
    • Dynamic tuning
      • Dynamic private memory caches for CPU virtual processors
        Another autonomic feature. The engine can change the private virtual CPU caches dynamically to adjust to different work patterns. This can however be prevented by defining the (initial) value followed by ",STATIC" for the VP_MEMORY_CACHE_KB parameter
  • Application development
    • New syntax for queries
      • Joins with lateral references
        Better conformance with the ANSI/SQL standard
    • Foreign-key constraints
      • Temporarily prevent constraint validation during creation
      • Faster creation of foreign-key constraints
    • Basic text searching
      • Enhanced basic text searching
        Some performance and functionality enhancements as usual for BTS datablade
    • New default
      • Defining separators for fractional seconds in datetime values
        The "%F" field for GL_DATETIME and DBTIME environment variables and for the format parameter of to_char() and to_date() no longer includes a dot (.) in the format. This effectively changes the behavior of these functions, but the new default makes more sense
  • High availability
    • Connection Manager
      • Improvements to Connection Manager
        The connection manager now supports two new options for SLA definition. ROUNDROBIN and SECAPPLYBACKLOG for respectively send connections across the defined servers in a round-robin fashion and to avoid sending connections to servers that have backlog in a recent interval
    • Monitoring
      • View log-staging information on RS secondary servers
        This information can now be seen by running:
        onstat -g rss verbose
  • Enterprise Replication 
    • Easier setup
      • Simplified schema changes for replicated tables
        Easier to spread the schema changes across the environment by creating a replicateset of tables that need remastering and then running a single command to remaster that replicateset
    • Configuration
      • Control the replication of large objects
        You can force or avoid the replication of large objects
      • Custom checksum function for consistency checking
        Possibility of creating our own checksum validation functions
  • Security
    • Connectivity
      • Transport Layer Security (TLS) versions 1.0, 1.1 and 1.2 enabled by default
        TLS_VERSION is a new parameter to define the TLS version level for securing connections
So, not a lot of new things, but that's something to expect for a mature fixpack level. The new features will be going mainly to version 12.10. Even so I do like some of these a lot:
  • The foreign key features are a major milestone. Not only because they allow us to speed up data movement processes, but because I think it's the first time Informix R&D allows the user to make mistakes. And I'm not joking.... this is a serious matter. These kind of features is usually requested by customers and feared by technical support. Why? Because a user can make a mistake, cause a formal corruption on theiur database and later complain to technical support.
    So why did they do it? Performance naturally and because this was a real request from a real and important customer. The feature will be great if properly used.
  • I also enjoy seeing the INFORMIXCONTIME and INFORMIXCONRETRY as $ONCONFIG options and it facilitates the DBA's work. The defaults are really high...
  • There is also a goodie not shown in the release notes which I'd like to point out. It's APAR IC91678. It's another improvement on a very well known Informix optimizer issue that we can summarize like this: If you have a table with an "incremental" column of type DATE/DATETIME (like a timestamp of an operation) which is indexed, you'll probably face it. When at time T0 you run statistics, there will be no records with this column > T0. But after some time you'll get (many) records after T0 and the distributions don't reflect this. After some time, the optimizer would tend to choose this index over other ones (like client number, user id, phone number etc.). And most of the times this will be a mistake because at T0 + 1 Month for example there will be a lot of records. The latest 11.70 fixpacks and 12.10 will try to compensate for this errors if the condition on these fields look like "column > N" or "column BETWEEN N - Ta AND N + Tb. This compensation is now refined


Versão Portuguesa:
A IBM iniciou 2014 com o lançamento de mais um fixpack da versão 11.70. Refiro-me ao 11.70.xC8 e pode verificar as novas funcionalidades aqui: http://pic.dhe.ibm.com/infocenter/idshelp/v117/topic/com.ibm.po.doc/new_features.htm
Como habitualmente não irei simplesmente copiar as release notes, mas irei salientar alguns pontos que me parecem mais significativos:
  • Instalação
    • Windows
      • Instalação de versões de 32-bits facilitada em ambientes de 64-bits
        Era necessário em versões anteriores adicionar um componente (C:\WINDOWS\SYSWOW64) à variável de ambiente PATH para instalar uma versão de 32-bits num ambiente de 64-bits em Windows. Este requisito foi removido.
  • Administração
    • Gestão de erros
      • Novo evento/alarme para falhas de rede
        Já tinha sido introduzido na versão 12.10, esta funcionalidade que permite alertá-lo se os listeners não conseguirem arrancar. Recomenda-se muito cuidado caso receba esta mensagem, pois pode indicar que está a tentar levantar uma instância que já se encontra a correr E dada a forma como alguns sistemas operativos lidam com os segmentos de memória partilhada, isto pode realmente acontecer.... e normalmente leva a corrupção
    • Cópias de segurança e restauro
      • Otimização de backups para de-duplicação de dados
        Usando uma nova variável de ambiente (IFX_BAR_USE_DEDUP) o formato dos backups seá alterado para melhor se ajustar aos processos de de-duplicação de daods empregues pelo storage manager (se for suportado)
      • Melhor suporte a funcionalidades do IBM Tivoli Storage Manager
        Permite que a comunicação entre o processo OnBAR e a biblioteca do storage manager utilize buffers maiores (por omissão usam 64KB o que é muito pequeno para os standards de hoje em dia). O IBM Tivoli Storage Manager e o novo Primary Storage Manager (PSM) suportam esta funcionalidade. Se trabalhar com outros storage managers pode definir a variável IFX_BAR_NO_LONG_BUFFERS para desativar isto
      • timestamps nos logs de atividade do OnBAR
        Melhor informação nos logs de atividade do OnBAR quando as chamadas XBSA ao storage manager ficam "presas"
    • Configuração
      • Comparação dos ficheiros ONCONFIG (UNIX, Linux)
        Tal como já implementado na versão 12.10
      • Controlo sobre a duração e repetições das tentativas de conexão
        Os valores para as variáveis de ambiente INFORMIXCONRETRY e INFORMIXCONTIME que até aqui tinham de ser definidas do lado do cleinte podem agora ser especificadas no $ONCONFIG como parâmetros
  • Performance
    • Operações mais rápidas
      • Os tpos de dados "SERIAL" (SERIAL, SERIAL8, BIGSERIAL) permitem que os ALTER TABLE entre eles sejam feitos inplace
    • Auto-otimização
      • Caches privadas dos CPUs VPs alteradas dinamicamente
        Mais uma funcionalidade de ajustamento automático. O motor pode mudar as caches privadas dos CPUs VPs para se adaptar a diferentes padrões de utilização. Caso se queira desativar esta funcionalidade deve configurar-se o valor do parâmetro VP_MEMORY_CACHE_KB com o sufixo ",STATIC"
  • Desenvolvimento aplicacional
    • Nova sintaxe SQL
      • JOINs com referências LATERAL
        Melhorada a conformidade com os standards ANSI/SQL
    • Foreign-key constraints
      • Temporariamente previne a validação de constraints
      • Criação mais rápida das constraints
    • Basic text searching
      • Melhorias no databalade BTS
        Algumas melhorias de performance e funcionalidade no BTS datablade
    • Novo default
      • Definição de separadores para frações de segundo em valores datetime
        O campo "%F" para as variáveis de ambiente GL_DATETIME e DBTIME, e para as funções "to_char()" e "to_date()" deixou de assumir/incluir o ponto (.) na formatação. Isto muda efetivamente o comportamento destas funções, mas o novo default faz mais sentido
  • Alta disponibilidade
    • Connection Manager
      • Melhorias no Connection Manager
        O connection manager passa a suportar duas novas opções para a definição dos SLAs: ROUNDROBIN e SECAPPLYBACKLOG respetivamente para enviar conexões para os diversos servidores num formato round-robin e para evitar enviar conexões para servidores que tenham registado um backlog num intervalo de tempo recente
    • Monitorização
      • Ver informação relativa a log staging nos servidores RSS
        Esta informação passa a estar disponível com o comando:
        onstat -g rss verbose
  • Enterprise Replication
    • Configuração mais fácil
      • Simplificação de modificações de schema em tabelas replicadas
        Fica mais fácil espalhar as modificações de schema no ambiente de replicação através da criação de um replicateset das tabelas que necessitam de remastering e depois executar um único comando para fazer o remastering desse replicateset
    • Configuração
      • Controlo sobre a replicação de large objects
        Pode forçar-se a replicação de large objects mesmo quando estes não são modificados na linha de origem
      • Customização de funções de checksum para validação de consistência
        Podemos agora criar as nossas próprias funções (checksum) para uso durante a validação de consistência entre tabelas replicadas em servidores diferentes
  • Segurança
    • Conectividade
      • Um novo parâmetro (TLS_VERSION) permite definir o nível de TLS (Transport Layer Security) para as ligações. As versões 1.0, 1.1 e 1.2 estão habilitadas por defaulti
Portanto, não há muitas novidades, mas isso seria de esperar de um nível de fixpack já bastante maduro. As novas funcionalidades irão aparecendo maioritariamente na versão 12.10. Apesar disso gostaria de salientar algumas que me agradaram mais:
  • As funcionalidades relativas às foreign keys são um marco importante. Não só porque nos permitem acelerar os processos de migração de dados, mas também porque creio que é a primeira vez que o desenvolvimento do Informix permite ao utilizador cometer erros. E não estou a brincar.... é um assunto sério. Este tipo de funcionalidades é habitualmente requisitado pelos clientes e temido pelo suporte técnico. Porquê? Porque um utilizador pode cometer um erro, causando uma corrupção formal na sua base de dados, e mais tarde queixar-se ao suporte técnico. Sendo assim porque o fizeram? Performance obviamente e porque isto foi um pedido explícito de um cliente, devidamente justificado e explicado. A funcionalidade será ótima se bem usada.
  • Também me agrada a possibilidade de ajustar o INFORMIXCONTIME e INFORMIXCONRETRY no $ONCONFIG, visto que facilita a vida do DBA e que os valores assumidos por default são realmente muito altos
  • Existe também um "bónus", não referido nas release notes mas que eu gostaria de salientar: Trata-se do APAR IC91678. É mais uma melhoria num problema bem conhecido do optimizador fo Informix. Podemos explicar o assunto da seguinte forma: Se tivermos uma tabela com uma coluna "incremental" do tipo DATE/DATETIME (como um timestamp de um evento ou actividade), que esteja indexada, corremos o risco de encontrar este problema. Vamos supor que corremos as estatísticas no momento T0, e tipicamente nessa altura não haverá registos com um valor > T0  nessa coluna. Mas após algum tempo, teremos naturalmente um número crescente de registos nessa condição, e as estatísticas não refletem isto. Após algum tempo, o otimizador tenderá a escolher o índice dessa coluna em vez de outros (como por exemplo número de cliente, número de telefone etc.). E na maioria dos casos isso será um erro, pois apesar de as estatísticas não o dizerem, tenderá a haver um grande número de registos nessas condições. Nos últimos fixpacks da 11.70 e 12.10 já existe uma tentativa de compensar isto se a condição sobre esses campos for do tipo "coluna > N" ou "coluna BETWEEN N -Ta AND N + Tb". Essa tentativa foi agora refinada.

Monday, January 20, 2014

Informix SWAT


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

English version:

Long time, no write (as usual), again due to good reasons (I've been busy). But it's a great pleasure to start 2014 posts with a very good information. A new site was born around one week ago, which purpose is to create a human resource database specialized in Informix. The site is called Informix SWAT (Informix Specialized Worldwide Advanced Technicians) and it can be used for announcing technical expertise (just submit your CV) or to find resources if you need to fill a position or just need some temporary resources for a project. The site address is http://www.informix-swat.com/ and the guy behind it is Eric Vercelletto "father" of the http://levillageinformix.blogspot.com site. Eric himself is a long time Informix expert who have worked in Informix France and Portugal.

The site already has a respectable list of people and you just have to register to access the CV database. So, best wishes for this great initiative and I do believe that this kind of actions may be key to address one of the apparent issues that prevent broader Informix adoption: Possible lack of resources.

Versão Portuguesa:

Muito tempo sem escrever (como vem sendo hábito), mas novamente por bons motivos (tenho andado ocupado). Mas é um grande prazer voltar aqui e iniciar os artigos de 2014 com uma muito boa notícia. Nasceu um novo site, cujo objetivo é criar uma base de dados de recursos humanos especializada em Informix. O site chama-se Informix SWAT (Informix Specialized Worldwide Advanced Technicians) e pode ser usado para anunciar conhecimento técnico (basta submeter o CV) ou para encontrar recursos que necessite para preencher vagas ou apenas para um projeto temporário. O endereço do site é http://www.informix-swat.com e a pessoa por trás disto é o Eric Vercelletto, "pai" do http://levillageinformix.blogspot.com . O Eric é ele próprio um especialista de longa data em Informix, tendo já passado pela Informix França e Portugal.

O site já contém uma lista respeitável lista de pessoas e apenas terá de se registar para aceder aos seus CVs. Portanto, os melhores votos para esta iniciativa e acredito sinceramente que este tipo de ações podem ser chave para endereçar um dos aparentes problemas que podem impedir uma adoção mais generalizada do Informix: A possível falta de recursos especializados na tecnologia.