Cualquier DBA que se precie necesitó en algún momento crear un índice (antes del advenimiento del ‘online’) o cambiar una tabla en un sistema productivo.
Y en general, sistema productivo suele traducirse en NO HAY TIEMPO PARA DOWNTIME!
Una práctica poco conocida en informix es poner un lock exclusivo en la tabla a modificar, intentar el alter table y cruzar los dedos.
Pero hay alternativas en sistemas OLTP (donde las conexiones entran y salen todo el tiempo): decirle a informix que no acepte nuevas lecturas sobre esa tabla (dirty reads), hasta que pueda aplicar el cambio.
Rápidamente, se hace así:
IFX_DIRTY_WAIT=300 export IFX_DIRTY_WAIT dbaccess blah << SET LOCK MODE TO WAIT; BEGIN WORK; LOCK TABLE IN EXCLUSIVE MODE; ALTER TABLE ...; COMMIT WORK; EOF
O sea, le pido que durante 300 segundos mantenga (gracias al lock) afuera a los nuevos dirty readers (haciéndolos esperar hasta 300 segundos antes de dar error), esperando que las sesiones actuales finalicen (o dándome tiempo a matarlas!) para poder aplicar el cambio.
Si quieren una explicación profunda y detallada, lean esto:
http://informix-technology.blogspot.com.ar/2006/10/when-exclusive-is-not-really-exclusive.html de Fernando Nunes, que no solo lo cuenta mejor, sino con ejemplos y demases.