SafeChildren Banner

Havoc Oracle Solaris Experts

martes, 21 de diciembre de 2010

OpenIndiana, Developer Version b148

Introducción
Ya tenemos una nueva versión de OpenIndiana, la b148. Aunque todavía es una Developer Release, ya podemos actualizar nuestras instalaciones con un simple <pkg image-update>, ... y veremos cómo se comporta.

Como Actualizar OpenIndiana
Ya hemos comentado Cómo actualizar de OpenSolaris a OpenIndiana, para ello, utilizabamos los repositorios de OpenIndiana y, posteriormente lanzamos el <image-update&gt, pues, en esta ocasión haremos lo mismo, :D, pero sólo lanzaremos el <pkg image-update>, por ejemplo,
itily@openzooey:~$ pfexec pkg image-update
Después de la actualización se nos creará un nuevo Boot Enviroment, que activaremos con el reinicio del sistema, para ello, utilizaremos el comando <init 6>
itily@openzooey:~$ pfexec init 6

Comprobar la Versión
Al igual que sucedía con Solaris, para comprobar la versión, simplemente deberemos hacer un <cat /etc/release>
itily@openzooey:~$ cat /etc/release
                      OpenIndiana Development oi_148 X86
        Copyright 2010 Oracle and/or its affiliates. All rights reserved.
                        Use is subject to license terms.
                           Assembled 29 November 2010

Referencias

jueves, 16 de diciembre de 2010

Actualizar la versión del pool ZFS con zpool upgrade

Introducción
Después de ir actualizando nuestros sistemas -OpenIndiana, OpenSolaris y Solaris-, la versión del <pool> de ZFS que nuestro sistema soporta va en aumento, sin embargo, debemos ir actualizando nuestros pools creados.
Esto nos permitirá ir incluyendo las mejoras que, en materia de ZFS, se han ido introduciendo, además de soportar las nuevas propiedades y sobre todo, mejorar el rendimiento.


Comprobar nuestro zpool
Para verificar el estado de nuestro pool <zfs>, simplemente deberemos utilizar la opción <status> del comando <zpool>
root@openzooey:/# zpool status
  pool: rpool1
 state: ONLINE
status: The pool is formatted using an older on-disk       format. The pool can still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the pool will no longer be accessible on older software versions.
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool1      ONLINE       0     0     0
          c2d0s0    ONLINE       0     0     0

errors: No known data errors
El mensaje está claro: <el zpool está formateado usando un formato antiguo>, así que debemos actualizar nuestro <zpool> para que obtenga las últimas mejoras

Comprobar la Versión ZFS de nuestro Sistema y ZPOOLs a Actualizar
Para comprobar qué <zpool> deben ser actualizados, y qué versión es la que actualmente está activa en nuestro sistema, deberemos utilizar la opción <upgrade> del comando <zpool>, por ejemplo:
root@openzooey:/# zpool upgrade
This system is currently running ZFS pool version 28.

The following pools are out of date, and can be upgraded.  After being upgraded, these pools will no longer be accessible by older software versions.

VER  POOL
---  ------------
22   rpool1

Use 'zpool upgrade -v' for a list of available versions and their associated
features.


Solaris nos informa de qué <zpool> son los que debemos actualizar, además de la versión actual de ZFS pool que soportamos. Si queremos ver la lista de mejoras, es decir, el ChangeLog podemos utilizar la opción <-v>, por ejemplo:

root@openzooey:/# zpool upgrade -v
This system is currently running ZFS pool version 28.

The following versions are supported:

VER  DESCRIPTION
---  ----------------------------------------------------
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting
 16  stmf property support
 17  Triple-parity RAID-Z
 18  Snapshot user holds
 19  Log device removal
 20  Compression using zle (zero-length encoding)
 21  Deduplication
 22  Received properties
 23  Slim ZIL
 24  System attributes
 25  Improved scrub stats
 26  Improved snapshot deletion performance
 27  Improved snapshot creation performance
 28  Multiple vdev replacements

For more information on a particular version, including supported releases,
see the ZFS Administration Guide.
Actualización de Versión
ATENCIÓN: Antes de actualizar un <zpool> asegurate que todos tus Boot Enviroment están actualizados, sino, no podrás ejecutarlos desde una versión anterior.

Para actualizar la versión de nuestro zpool, simplemente utilizaremos el comando <zpool upgrade> de la siguiente forma:
zpool upgade {-a | poolname}
Donde podemos utilizar <-a> para actualizar todos los zpool del sistema, o, por el contrario podemos ir actualizando uno a uno. Por ejemplo, para actualizar todos de una vez:
root@openzooey:/# zpool upgrade -a
This system is currently running ZFS pool version 28.

Successfully upgraded 'rpool1'

Y comprobamos su estado volviendo a llamar a <zpool status>
root@openzooey:/# zpool status
  pool: rpool1
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool1      ONLINE       0     0     0
          c2d0s0    ONLINE       0     0     0

errors: No known data errors

Conclusiones
En esta ocasión hemos visto cómo actualizar el pool de ZFS es realmente sencillo, aunque como siempre unas cosas a tener en cuenta antes de empezar:
  • Haz copias de seguridad
  • Verifica tus copias de seguridad
  • Procede a actualizar tu sistema
No será la primera -ni la última- que alguien me suplica que recupere algún sistema donde no hay copias de seguridad ... y no siempre es posible.

Referencias

lunes, 6 de diciembre de 2010

Utilizar yesterday y today en PostgreSQL como Constantes

Introducción
Hace algunos días hablábamos de las opciones de Manejo de Fechas e Intervalos en PostgreSQL, y cómo se incluían unas <palabras reservadas> para obtener el día de ayer <yesterday> o de hoy <today>, por ejemplo:
search=> select 'today'::date;
    date  
------------
 2010-12-06
(1 row)

search=> select 'yesterday'::date;
    date  
------------
 2010-12-05
(1 row)
Partiendo de ello, vamos a ver algunas implicaciones de utilizar estas sustituciones dentro de Vistas, y cómo podemos solucionarlo.
Tabla de Ejemplo
Lo primero que vamos a hacer es crear una tabla llamada <havoc_test> donde pondremos un nombre y una fecha:
search=> create table havoc_test(nombre character varying, fecha date);
CREATE TABLE
Ahora, añadimos unos registros con los valores de fecha de <yesterday>, <today> y <now()>
search=> insert into havoc_test(nombre, fecha) values ('yesterday', 'yesterday'::date);
INSERT 0 1
search=> insert into havoc_test(nombre, fecha) values ('today', 'today'::date);
INSERT 0 1
search=> insert into havoc_test(nombre, fecha) values ('now', 'now()'::date);
INSERT 0 1
search=> select * from havoc_test;
  nombre   |   fecha    
-----------+------------
 yesterday | 2010-12-05
 today     | 2010-12-06
 now       | 2010-12-06
(3 rows)
Ahora, nos creamos una vista para obtener todos los registros de ayer, por ello, utilizaremos <fecha='yesterday'::date> como condición del where
search=> create or replace view yesterday_v as            select * from havoc_test where fecha = 'yesterday'::date;
CREATE VIEW
search=> select * from yesterday_v;
  nombre   |   fecha    
-----------+------------
 yesterday | 2010-12-05
(1 row)
El resultado es correcto, o mejor dicho, a simple vista es correcto, sin embargo, PostgreSQL nos sustituirá los valores de <yesterday> o <today> por los valores constantes, es decir, <2010-12-05> en nuestro caso. 

Si nos fijamos en cómo PostgreSQL ha creado la vista, veremos que ha sustituido el valor de <yesterday> por el día de ayer:


search=> \d yesterday_v;
       View "public.yesterday_v"
 Column |       Type        | Modifiers 
--------+-------------------+-----------
 nombre | character varying | 
 fecha  | date              | 
View definition:
 SELECT havoc_test.nombre, havoc_test.fecha
   FROM havoc_test
  WHERE havoc_test.fecha = '2010-12-05'::date;

Cuando nosotros lo que queríamos era que, en función del día actual, nos mostrase "ayer", pero no de forma constante.

Para solucionar este problema, simplemente pondremos <yesterday> como constante de texto, es decir, construiremos la cadena "al vuelo" y así PostgreSQL no realizará la sustitución hasta su ejecución. Veamos un ejemplo:
search=> create or replace view yesterday_v as
select * from havoc_test where fecha = cast('' || 'yesterday' || '' as date);
CREATE VIEW
search=> \d yesterday_v; 
View "public.yesterday_v"
 Column |       Type        | Modifiers
--------+-------------------+-----------
 nombre | character varying |
 fecha  | date              |
View definition:
 SELECT havoc_test.nombre, havoc_test.fecha
   FROM havoc_test
  WHERE havoc_test.fecha = (((''::text || 'yesterday'::text) || ''::text)::date);

search=> select * from yesterday_v; 
  nombre   |   fecha  
-----------+------------
 yesterday | 2010-12-05
(1 row)

Conclusiones
Como podemos comprobar, ahora hemos conseguido lo que inicialmente queríamos, tratar los valores de <yesterday> como constante.