SafeChildren Banner

Havoc Oracle Solaris Experts

sábado, 29 de agosto de 2009

Cómo saber cuanta memoria hay instalada en Solaris

Para saber la memoria que tenemos instalada en nuestra máquina, simplemente llamaremos a prtconf buscando Memory
# /usr/sbin/prtconf |grep Mem
Memory size: 4096 Megabytes

viernes, 28 de agosto de 2009

Cómo saber si Solaris soporta binarios de 64 bits

Para comprobar si nuestra instalación de Solaris soporta binarios de 64bits utilizaremos el siguiente comando:
# /usr/bin/isainfo -v
64-bit amd64 applications
sse3 sse2 sse fxsr mmx cmov amd_sysc cx8 tsc fpu
32-bit i386 applications
ahf sse3 sse2 sse fxsr mmx cmov sep cx8 tsc fpu
Y si fuese SPARC
$ /usr/bin/isainfo -v
64-bit sparcv9 applications
vis2 vis
32-bit sparc applications
vis2 vis v8plus div32 mul32

jueves, 27 de agosto de 2009

Cómo saber cuál es el project actual

Para saber cuál es el project que tenemos asignado en nuestro proceso, utilizaremos el comando /usr/bin/id con la opción -p
$ id -p
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)

miércoles, 26 de agosto de 2009

Cómo cambiar el planificador a un proceso en Solaris

Para cambiar el tipo de planificador que tiene asignado un proceso en Solaris deberemos utilizar /usr/sbin/priocntl. Por ejemplo, si quisieramos poner el LogWriter de Oracle en FX ejecutamos
# ps -cafe|grep ora_lgwr
0002011 13870 1 FSS 56 14:12:12 ? 0:01 ora_lgwr_VOLDEMORT
# priocntl -s -c FX -i pid 13870
# ps -cafe|grep ora_lgwr
0002011 13870 1 FX 0 14:12:12 ? 0:01 ora_lgwr_VOLDEMORT
Nota: Si estamos ejecutando Oracle en una zona, deberemos ejecutar el comando desde la zona global, para saber su pid utilizaremos ps -efZ para que nos muestre todos los procesos

martes, 25 de agosto de 2009

Cómo cambiar el project de un proceso en Solaris

Introducción
Puede que necesitemos cambiar el project asignado a un proceso en Solaris, para ello, utilizaremos el comando /usr/bin/newtask -p project-name -c pid

Por ejemplo, vamos a cambiar el daemon sshd del project system a user.root

# ps -ef -o user,group,pid,args,project|grep sshd
root root 16839 /usr/lib/ssh/sshd system
# newtask -p user.root -c 16839
# ps -ef -o user,group,pid,args,project|grep sshd
root root 16839 /usr/lib/ssh/sshd user.root

sábado, 22 de agosto de 2009

Cómo activar los interfaces de red sin saber cómo se llaman en Solaris

Podemos encontrarnos con una instalación de Solaris que necesitemos activar un interface de Red que, o bien previamente hemos desactivado o no lo activamos por defecto, sin embargo, no sabemos cómo se llama. Puede ser eri, em, ce, ... para ello, podemos utilizar el siguiente comando para que active todos los interfaces que reconoce el sistema.
# ifconfig -a plumb

viernes, 21 de agosto de 2009

Cómo ejecutar un proceso con un project diferente en Solaris

Puede que nos interese ejecutar algún comando con un project diferente, para ello, utilizaremos el comando /usr/bin/newtask con las opciones -p project comando.
$ id -p
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
$ newtask -p oracle.hestia ps -o project,args
PROJECT COMMAND
oracle.hestia ps -o project,args
Y si queremos, podemos utilizar esta forma si vamos a lanzar varios procesos
$ id -p
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
$ newtask -p oracle.hestia
$ id -p
uid=2011(oracle) gid=2010(dba) projid=102(oracle.hestia)
$ ps -o project,args
PROJECT COMMAND
oracle.hermes bash
oracle.hestia ps -o project,args
group.dba -bash
$ exit
exit
$ id -p
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
Debemos tener en cuenta que el usuario debe pertenecer al projecto, sino nos mostrará el siguiente error.
$ newtask -p system ps
newtask: user "oracle" is not a member of project "system"

miércoles, 19 de agosto de 2009

Cómo desactivar/activar una CPU en Solaris

Puede que nos interese poner en offline una cpu bien porque está fallando, o porque queremos experimentar el comportamiento con una cpu menos, para ello utilizaremos el comando /usr/sbin/psradm como se muestra a continuación
# psrinfo
0 en línea desde 08/03/2009 14:17:57
1 en línea desde 08/04/2009 11:59:19
# psradm -f 1
# psrinfo
0 en línea desde 08/03/2009 14:17:57
1 fuera de línea desde 08/07/2009 14:08:06
Y para activar la cpu haremos la llamada con el argumento -n y el número de cpu que queremos activar
# psradm -n 1
# psrinfo
0 en línea desde 08/03/2009 14:17:57
1 en línea desde 08/07/2009 14:11:17
Nota Importante:
No desactivéis una cpu con Oracle SE en una Zona con Solaris 10, existe un bug que nos permite añadir cpus pero no eliminar cpus, esto hará que Oracle se caiga.

Referencias
  • Metalink Note 460127.1

Cómo saber si Solaris está paginando

Introducción
Solaris tiene una gestión de la swap realmente avanzada, tanto, que hay veces que es muy dificil saber cuándo un proceso está swapeando y cuando no. Vamos a utilizar los comandos /usr/bin/vmstat y /usr/bin/iostat los cuales nos aportan información sobre el uso de la swap y discos.

Uso del comando vmstat
Este comando nos proporciona las estadísticas de uso de la memoria virtual de Solaris, en él, nos fijaremos en las columnas SwapIn - SwapOut (si,so) y PageIn - PageOut (pi,po). El problema es, a veces, no saber qué buscar, bien, vamos a ver si podemos aclararlo.

Si los valores de si o so no son 0, realmente tenemos un servidor muy cargado y swapeando (tal como entendemos todos, es decir, escribiendo en disco porque no le queda RAM), sin embargo, si estos valores son "0" (con en el ejemplo) lo siguiente que debemos mirar es el estado de pi y po. Estos valore indican las páginas que se han cargado (PageIn) y las que se han eliminado (PageOut), pero debemos tener en cuenta que est no significa que se utice espacio swap de disco para ello.

Vamos a verlo con el siguiente ejemplo, utilizaremos la opción -S para que vmstat nos muestre los valores de swap en un intervalo de 6 seg. (No hay que utilizar un valor menor de 5 ya que sino el propio comando interferirá en los resultados)
# vmstat -S 6
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr rm s6 sd sd in sy cs us sy id
0 0 0 6475424 838488 0 0 847 27 28 0 8 -0 -0 -0 -0 1441 1487 580 22 4 74
0 0 0 5541664 494480 0 0 536 0 0 0 0 0 0 0 0 2057 2599 1017 62 10 28
2 0 0 5534672 489152 0 0 389 1 1 0 0 0 0 0 0 1439 3772 876 67 9 25
0 0 0 5534248 489024 0 0 1047 0 0 0 0 0 0 0 0 1960 1945 1078 50 5 45
0 0 0 5534424 488872 0 0 342 0 0 0 0 0 0 0 0 2361 1742 1154 54 5 40
0 0 0 5538232 491632 0 0 361 0 0 0 0 0 0 0 0 1921 2148 1015 65 5 30
1 0 0 5545752 498264 0 0 351 0 0 0 0 0 0 0 0 3855 27594 1553 73 11 16
0 0 0 5550552 502264 0 0 769 1 1 0 0 0 0 0 0 3387 18331 1550 70 10 20
Como podemos ver, los valores de si y so están a cero, sin embargo, el sistema está cargando continuamente páginas en memoria. Con el uso de iostat podremos ir afinando si nuestro sistema está o no realmente paginando en disco.

A continuación
podemos ver un host que no tiene problemas de memoria ya que los valores de free, si,so,pi y po son constantes.
$ vmstat -S 6
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr s0 s2 s4 sd in sy cs us sy id
0 0 0 11655392 2971784 0 0 2408 4 5 0 1 1 0 -0 163 2077 24269 2186 22 2 76
0 0 0 15870360 5630928 0 0 0 0 0 0 0 0 0 0 1044 3554 5886 3391 14 1 84
0 1 0 15865784 5626720 0 0 0 0 0 0 0 0 0 0 907 3367 10856 3295 18 1 81
0 1 0 15868640 5631256 0 0 0 0 0 0 0 0 0 0 934 3169 12233 3068 18 1 80
0 0 0 15871672 5634888 0 0 0 1 1 0 0 0 0 0 699 2855 10245 2876 15 1 83
0 0 0 15870600 5633928 0 0 0 0 0 0 0 0 0 0 1782 4977 6176 4957 16 2 82
0 0 0 15873832 5636952 0 0 0 0 0 0 0 0 0 0 1882 4608 4920 4869 17 2 82
0 0 0 15856600 5621712 0 0 0 0 0 0 0 0 0 0 123 2385 11685 2360 24 2 74
0 1 0 15868976 5631416 0 0 0 0 0 0 0 0 0 0 129 1897 36965 1819 26 2 73
0 0 0 15890056 5648016 0 0 23 1 1 0 0 0 0 0 61 1886 35675 1861 29 2 69
Uso del comando iostat
Vamos a utiliza el comando iostat el cual nos proporciona el uso de los discos, limitándonos a aquellos que se encuentren asignados a nuestro área de swap, de esta forma, podremos verificar si nuesto equipo está realmente utilizándolos
# swap -l
swapfile dev swaplo bloques libre
/dev/dsk/c5t20000004CF8F7B64d0s1 118,1489 16 8389632 7261120
/dev/dsk/c5t20000004CF7FE30Ed0s1 118,1497 16 8389632 7265360


# iostat -xnPzm 6
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
0.5 0.6 5.0 0.6 0.0 0.0 0.7 16.4 0 0 c5t20000004CF8F7B64d0s0 (/)
0.1 0.0 0.7 1.3 0.0 0.0 7.8 9.3 0 0 c5t20000004CF8F7B64d0s1
0.1 0.3 6.9 17.4 0.0 0.0 4.2 23.9 0 0 c5t20000004CF7FE30Ed0s0 (/opt/zones)
0.1 0.0 0.7 1.3 0.0 0.0 7.6 8.5 0 0 c5t20000004CF7FE30Ed0s1
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0 0 c5t600A0B80002AF618000007A94A710D33d0s0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0 0 c5t600A0B80002AF618000007A94A710D33d0s1
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0 0 c5t600A0B80002AF618000007A94A710D33d0s2
0.0 0.1 15.1 73.3 0.0 0.0 16.0 80.8 0 0 c5t600A0B80002AF618000007A94A710D33d0s6
0.4 1.1 8.1 39.3 0.0 0.0 0.0 3.3 0 0 c5t600A0B80002AF618000007A74A70F3ACd0s6
4.4 2.4 126.8 59.9 0.0 0.0 0.0 5.3 0 2 c5t600A0B80002AF618000007A54A70F35Fd0s6
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0 0 sol10-oracle-applications:vold(pid491)
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
5.6 0.2 46.4 0.5 0.0 0.1 1.7 9.5 1 5 c5t20000004CF8F7B64d0s0 (/)
2.4 8.2 19.1 1039.9 0.3 0.5 28.7 47.7 2 5 c5t20000004CF8F7B64d0s1
0.0 0.2 0.0 2.9 0.0 0.0 0.0 7.0 0 0 c5t20000004CF7FE30Ed0s0 (/opt/zones)
0.9 7.8 6.8 974.4 0.3 0.4 30.3 49.6 2 4 c5t20000004CF7FE30Ed0s1
0.9 22.5 6.8 5528.8 0.0 1.2 0.0 50.0 0 98 c5t600A0B80002AF618000007A94A710D33d0s6
0.0 1.9 0.0 350.4 0.0 0.1 0.0 37.7 0 7 c5t600A0B80002AF618000007A74A70F3ACd0s6
55.6 13.3 1266.3 372.3 0.0 2.2 0.0 32.0 0 97 c5t600A0B80002AF618000007A54A70F35Fd0s6
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
3.5 0.0 39.3 0.0 0.0 0.0 0.0 6.9 0 2 c5t20000004CF8F7B64d0s0 (/)
1.5 2.7 12.0 338.7 0.0 0.1 0.1 29.4 0 2 c5t20000004CF8F7B64d0s1
0.2 2.7 1.3 338.7 0.0 0.1 0.0 38.0 0 2 c5t20000004CF7FE30Ed0s1
0.3 27.2 2.7 4387.7 0.0 1.1 0.0 39.8 0 99 c5t600A0B80002AF618000007A94A710D33d0s6
0.2 3.7 2.7 356.2 0.0 0.1 0.0 17.6 0 7 c5t600A0B80002AF618000007A74A70F3ACd0s6
47.0 3.2 841.6 236.9 0.0 2.9 0.0 57.3 0 100 c5t600A0B80002AF618000007A54A70F35Fd0s6

Asi que ..., sí, está swapeando y mucho ... ahora toca parametrizar correctamente nuestro Oracle

Conclusión
Para comprobar el correcto funcionamiento de nuestro sistema deberemos utilizar los comandos vmstat, iostat y sar


Referencias

lunes, 17 de agosto de 2009

Instalar squid en Solaris 10 - Parte 1

Introducción
Squid es un proxy http que nos permite acelerar la navegación y disminuir el consumo de ancho de banda de nuestra conexión a internet. Una de las razones de instalar squid es eliminar la necesidad de bajar repetidas veces el mismo contenido de internet y por lo tanto, es algo muy recomendable cuando hablamos de una lan.

En esta primera parte veremos cómo instalar squid de forma simple, en las siguientes entregas veremos cómo instalar squid como proxy transparente y por último veremos cómo utilizar squid para acelerar nuestras páginas web instalandolo como proxy reverso.

Existe mucha literatura sobre la conveniencia o no de un proxy, la mayoría de lo escrito no es cierto ya que se basan en que Internet es dinámico, y lo es, pero no es tan dinámico como ellos quieren hacernos creer. Un proxy bien instalado es una gran ayuda y ventaja para los usuarios, uno mal instalado es un incordio, sin embargo, esto no difiere en nada a otra aplicación. Una de las quejas sobre el uso de los proxys radica en que el contenido está desfasado, bien, eso puede ser cierto (o no) en función de cómo se configure, además, las páginas no cambian cada microsegundo (normalmente).

Vamos a ver cómo configurar squid-cache para que nos permita tener el contenido fresco y, a su vez, nos permita ahorrarnos ancho de banda.

Compilación de squid-cache
Primero deberemos comprobar si tenemos un compilador de C/C++ disponible en el sistema, si hemos instalado Solaris completo plus OEM, entonces tendremos el compilar gcc en /usr/sfw/bin/gcc en OpenSolaris, tenemos un link en /usr/gnu/bin/cc a /usr/sfw/bin/gcc
root@opensolaris:/ # which cc
/usr/gnu/bin/cc
Lo primero que haremos será descargarnos el código fuente de squid-cache desde su página oficial http://www.squid-cache.org.
$ mkdir ~/squid
$ cd ~/squid
$ wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE6.tar.gz
$ gzip -dc squid-2.7.STABLE5.tar.gz | tar xvpf -
Configuración Compilación
Vamos a configurar la compilación de squid para tener algunas opciones que por defecto no se activan. Simplemente comentaremos algunas de las opciones que hemos activado y, por qué.
  • --enable-cache-digest habilita el hashing de la caché
  • --enable-delay-pools habilita la configuración de anchos de banda
  • --enable-http-violations habilita las violaciones del protocolo HTTP
  • --enable-store-io habilita modos de almacenamiento UFS y DISKD
Si quieres saber más de las opciones de compilación, puedes utilizar el siguiente comando.
$ ./configure --help
Una vez decidido el tipo de configuración, lanzaremos el comando configure y posteriormente el make
$ cd squid-2.7.STABLE6
$ ./configure \
--with-large-files \
--with-pthreads \
--enable-follow-x-forwarded-for \
--enable-default-err-language=Spanish \
--enable-cache-digests \
--enable-delay-pools \
--enable-http-violations \
--prefix=/usr/local/squid \
--enable-x-accelerator-vary \
--with-maxfd=8192 \
--enable-storeio=ufs,diskd
Una vez configurada la instalación, lanzaremos el comando make para proceder a la compilación
$ make
Si todo ha ido bien, ya tenemos compilado nuestro squid, el siguiente paso será instalarlo.

Instalación de squid-cache
En función de si hemos hecho la compilación con root o no, lo instalaremos de la siguiente forma:

Si lo hemos compilado como root o con un usuario que tenga permisos de escritura en el directorio definido en --prefix

# cd squid-2.7.STABLE6
# make && make install
Si lo hemos compilado con otro usuario (ya que no tendrá permisos para crear el directorio que tengamos definido en --prefix)
$ cd squid-2.7.STABLE6
$ make
$ su -
# cd squid-2.7.STABLE6
# make install
Una vez compilado he instalado, crearemos el grupo y usuario encargado de ejecutar squid, en nuestro caso utilizaremos squid como nombre de grupo y usuario.
# groupadd squid
# useradd -g squid -s /bin/false -d /dev/null squid
# passwd -l squid
A continuación vamos a editar el archivo de configuración de squid que se encuentra en $SQUID_HOME/etc/squid.conf los principales parámetros de configuración son los siguientes:

  • visible_hostname nombre_que_queremos_para_el_proxy
  • cache_effective_user _nombre_de_usuario_dueño_del_proceso_
  • cache_effective_group _grupo_del_dueño_del_proceso_
  • http_port _puerto_de_squid_
  • cache_dir _tipo_almacenamiento_ _ubicación_ _tamaño_cache_ 16 256
  • strip_query_terms _guardar_log_sin_parametros_
Además, la definición de los acl se basan en acl _nombre_ opciones según en el siguiente ejemplo, si queremos permitir el acceso a la caché de los equipos de nuestra lan y denegar todo los demás, haremos,
acl ALL src 0.0.0.0/0.0.0.0
acl LAN src 192.168.1.0/255.255.255.0
http_access allow LAN
http_access deny ALL
Este nos permite definir varias reglas de control, sin embargo, si necesitamos incluir muchas cadenas o configuraciones más extensas entonces, squid nos permite definir un acl como una entrada de fichero utilizando la siguiente configuración (Esta configuración tiene la definición de un conjunto de IPs en el archivo bloqued_ips.acl)
acl blacklist src "/usr/local/squid/etc/acls/bloqued_ips.acl"
http_access deny blacklist
    Y el contenido de /usr/local/squid/etc/acls/bloqued_ips.acl es el siguiente
    # cat /usr/local/squid/etc/acls/bloqued_ips.acl
    192.168.1.30
    192.168.1.31
    192.168.1.32
    A continuación está el archivo de configuración completo de squid con varios sistemas de control para impedir el acceso a webs p2p, messenger, etc. Puede encontrar más información sobre la configuración de acls en la documentación oficial de squid-cache http://wiki.squid-cache.org/SquidFaq/SquidAcl
    # vi /usr/local/squid/etc/squid.conf

    ############################################
    ## SQUID.CONF
    ##
    ## Description:
    ## - definicion de confiruacion de SQUID 2.7.x
    ############################################

    ############################################
    ## PARAMETROS ADMINISTRATIVOS
    ############################################
    visible_hostname proxy
    cache_effective_user squid
    cache_effective_group squid
    httpd_suppress_version_string on
    strip_query_terms false

    ############################################
    ## PARAMETROS DE RED
    ############################################
    http_port 3128

    ############################################
    ## PARAMETROS CACHE
    ############################################
    cache_dir ufs /usr/local/squid/var/cache 64000 16 256
    coredump_dir /usr/local/squid/var/run
    pid_filename /usr/local/squid/var/run/squid.pid
    cache_log /dev/null
    cache_store_log /dev/null
    cache_access_log /usr/local/squid/var/logs/access.log
    emulate_httpd_log on
    log_ip_on_direct on

    hierarchy_stoplist cgi-bin ?
    debug_options ALL, 2

    ############################################
    ## PARAMETRIZACION DE LA CACHE MEMORIA
    ############################################
    memory_replacement_policy lru

    ############################################
    ## PARAMETROS TAMA!NO CACHE
    ############################################
    cache_mem 2048 MB
    cache_swap_low 98
    cache_swap_high 99
    maximum_object_size 2048 MB
    maximum_object_size_in_memory 128 KB

    ############################################
    # FTP
    ############################################
    ftp_user anonymous@sfchildren.com


    ############################################
    ## PARAMETRIZACION ERRORES
    ############################################
    error_directory /usr/local/squid/share/errors/Spanish
    err_html_text support@sfchildren.com


    ############################################
    ## REFRESH PATTERN
    ############################################
    # Debian
    refresh_pattern -i \.deb$ 129600 100% 129600
    refresh_pattern -i \.gz$ 129600 100% 129600
    refresh_pattern -i \.bz2$ 129600 100% 129600

    # Imagenes
    refresh_pattern -i \.gif$ 14400 80% 43200
    refresh_pattern -i \.tiff?$ 14400 80% 43200
    refresh_pattern -i \.bmp$ 14400 80% 43200
    refresh_pattern -i \.jp?g$ 14400 80% 43200
    refresh_pattern -i \.xbm$ 14400 80% 43200
    refresh_pattern -i \.png$ 14400 80% 43200
    refresh_pattern -i \.wrl$ 14400 80% 43200
    refresh_pattern -i \.ico$ 14400 80% 43200
    refresh_pattern -i \.pnm$ 14400 80% 43200
    refresh_pattern -i \.pbm$ 14400 80% 43200
    refresh_pattern -i \.pgm$ 14400 80% 43200
    refresh_pattern -i \.ppm$ 14400 80% 43200
    refresh_pattern -i \.rgb$ 14400 80% 43200
    refresh_pattern -i \.ppm$ 14400 80% 43200
    refresh_pattern -i \.rgb$ 14400 80% 43200
    refresh_pattern -i \.xpm$ 14400 80% 43200
    refresh_pattern -i \.xwd$ 14400 80% 43200
    refresh_pattern -i \.pict?$ 14400 80% 43200

    # Movies
    refresh_pattern -i \.mov$ 14400 80% 43200
    refresh_pattern -i \.mp?g?$ 14400 80% 43200
    refresh_pattern -i \.avi$ 14400 80% 43200
    refresh_pattern -i \.qtm?$ 14400 80% 43200
    refresh_pattern -i \.viv$ 14400 80% 43200
    refresh_pattern -i \.swf$ 14400 80% 43200

    # Sounds
    refresh_pattern -i \.wav$ 14400 80% 43200
    refresh_pattern -i \.aiff?$ 14400 80% 43200
    refresh_pattern -i \.au$ 14400 80% 43200
    refresh_pattern -i \.ram?$ 14400 80% 43200
    refresh_pattern -i \.snd$ 14400 80% 43200
    refresh_pattern -i \.mid$ 14400 80% 43200
    refresh_pattern -i \.mp2$ 14400 80% 43200
    refresh_pattern -i \.mp3$ 14400 80% 43200

    # Archives
    refresh_pattern -i \.sit$ 14400 80% 43200
    refresh_pattern -i \.zip$ 14400 80% 43200
    refresh_pattern -i \.hqx$ 14400 80% 43200
    refresh_pattern -i \.exe$ 14400 80% 43200
    refresh_pattern -i \.arj$ 14400 80% 43200
    refresh_pattern -i \.lzh$ 14400 80% 43200
    refresh_pattern -i \.lha$ 14400 80% 43200
    refresh_pattern -i \.cab$ 14400 80% 43200
    refresh_pattern -i \.rar$ 14400 80% 43200
    refresh_pattern -i \.tar$ 14400 80% 43200
    refresh_pattern -i \.gz$ 14400 80% 43200
    refresh_pattern -i \.z$ 14400 80% 43200
    refresh_pattern -i \.a[0-9][0-9]$ 14400 80% 43200
    refresh_pattern -i \.r[0-9][0-9]$ 14400 80% 43200

    # Data files
    refresh_pattern -i \.txt$ 14400 80% 43200
    refresh_pattern -i \.pdf$ 14400 80% 43200
    refresh_pattern -i \.doc$ 14400 80% 43200
    refresh_pattern -i \.rtf$ 14400 80% 43200
    refresh_pattern -i \.tex$ 14400 80% 43200
    refresh_pattern -i \.latex$ 14400 80% 43200

    # Java-type objects
    refresh_pattern -i \.class$ 14400 80% 43200
    refresh_pattern -i \.js$ 14400 80% 43200
    refresh_pattern -i \.class$ 14400 80% 43200

    # Web-type objects
    refresh_pattern -i \.css$ 10 20% 4320
    refresh_pattern -i \.html?$ 10 20% 4320
    refresh_pattern \/$ 10 20% 4320


    # Para evitar problemas con scripts .do
    refresh_pattern -i \.do$ 0 0% 1440

    # Default
    refresh_pattern . 0 20% 4320


    ############################################
    ## CONFIGURACIONES ACLs
    ############################################
    acl all src 0.0.0.0/0.0.0.0

    ############################################
    ## LAN
    ############################################
    acl lan-isp src 192.168.1.0/255.255.255.0

    ############################################
    ## ACCESO LOCALHOST
    ############################################
    acl localhost src 127.0.0.1/255.255.255.255
    acl to_localhost dst 127.0.0.0/8


    ############################################
    ## NO CACHE QUERYs
    ############################################
    acl QUERY urlpath_regex cgi-bin \?
    acl QUERY urlpath_regex gateway.dll \?
    acl QUERY urlpath_regex gateway \?
    # No cachemaos los cgi
    no_cache deny QUERY

    ############################################
    ## ACCESO AL SISTEMA DE CONFIGURACION
    ############################################
    acl manager proto cache_object

    ############################################
    ## DIRECCIONES IP BLOQUEADAS POR ENCIMA DE
    ## LO GENERAL
    ############################################
    acl blacklist src "/usr/local/squid/etc/acls/bloqued_ips.acl"
    acl blacklisturl url_regex -i "/usr/local/squid/etc/acls/bloqued_url.acl"

    http_access deny blacklisturl
    http_access deny blacklist

    ############################################
    ## URL SIN CACHE
    ###########################################
    acl urlnocache url_regex -i "/usr/local/squid/etc/acls/no_cache.acl"
    no_cache deny urlnocache

    ##############################################
    # URL PROHIBIDAS P2P
    ##############################################
    acl bad_url_p2p url_regex -i "/usr/local/squid/etc/acls/webs_p2p.acl"
    http_access deny bad_url_p2p

    ##############################################
    # EXEPCIONES URLS PROHIBIDAS
    ##############################################
    acl bad_url_exceptions url_regex -i "/usr/local/squid/etc/acls/bad_url_exceptions.acl"
    http_access allow bad_url_exceptions

    ##############################################
    ## URL DENEGADAS
    ##############################################
    acl bad_url url_regex -i "/usr/local/squid/etc/acls/bad_url.acl"
    http_access deny bad_url

    ##############################################
    ## EXECEPCIONES PALABRAS PROHIBIDAS
    ##############################################
    acl bad_query_exceptions urlpath_regex -i "/usr/local/squid/etc/acls/bad_words_exceptions.acl"
    http_access allow bad_query_exceptions

    ##############################################
    # PALABRAS PROHIBIDAS
    ##############################################
    acl bad_query urlpath_regex -i "/usr/local/squid/etc/acls/bad_words.acl"
    http_access deny bad_query

    ##############################################
    # DOMINIOS PROHIBIDAS
    ##############################################
    acl bad_domain dstdom_regex -i "/usr/local/squid/etc/acls/bad_domains.acl"
    http_access deny bad_domain


    ##############################################
    # Puertos Seguros
    ##############################################
    acl SSL_ports port 443-563 # SSL
    acl Safe_ports port 80 # http
    acl Safe_ports port 20 21 # ftp
    acl Safe_ports port 1025-65535 # unregistered ports


    # Permitimos utilizar el CONNECT a puertos seguros, hemos deshabilitado el acces
    # para POP y SMTP puesto que nos pueden ocasionar fallos de seguridad, ademas, nos
    # pueden utilizar como SPAMMER's
    acl CONNECT method CONNECT

    # Permitimos acceder al sistema de configuracion solo desde LOCALHOST
    http_access allow manager localhost
    http_access deny manager
    # Cualquier llamada a puertos que no sean seguros denegada
    http_access deny !Safe_ports
    http_access deny CONNECT !Safe_ports

    ##############################################
    # ACCESO A LA CACHE
    ##############################################
    http_access allow lan-isp
    http_access allow localhost
    http_access deny all
    Creación del directorio de swap
    Una vez configurado el sistema, debemos crear el sistema de archivos (swap) para ello deberemos utilizar el argumento -z, pero antes debemos configurar correctamente el sistema de archivos para asignar el usuario y grupo, definidos en cache_efective_user y cache_efective_group
    # cd /usr/local/squid
    # mkdir -p /usr/local/squid/var/cache
    # chown -R squid:squid /usr/local/squid/var/cache
    # cd var
    # mkdir run
    # chown -R squid:squid logs
    # chmod 750 logs
    # /usr/local/squid/sbin/squid -z
    A continuación vamos a verificar que el sistema está correctamente configurado, para ello utilizaremos la opción parse que nos evaluará la estructura del archivo de configuración
    # /usr/local/squid/sbin/squid -k parse
    Iniciar el Servicio de squid
    Ya tenemos todo preparado para poder lanzar nuestro servicio, para ello, utilizaremos el comando RunCache que se encuenta en $SQUID_HOME/bin/RunCache
    # /usr/local/squid/bin/RunCache &
    Verificar Funcionamiento
    Ya podemos verificar el correcto funcionamiento de nuestro servidor proxy, para ello, utilizaremos el comando squidclient que se encuentra en $SQUID_HOME/bin de la siguiente forma:
    $ /usr/local/squid/bin/squidclient -h localhost http://www.sun.com
    Podemos ver cómo en $SQUID_HOME/var/logs/access.log se nos produce una nueva entrada
    # tail -f /usr/local/squid/var/logs/acess.log
    Resumen
    En esta entrega hemos visto cómo configurar squid-cache para que funcione como proxy http de una forma sencilla sobre Solaris 10, en las siguientes entregas entraremos en la configuración con mayor detalle y de cómo podemos sacar el máximo partido a nuestro nuevo proxy.


    Referencias

    sábado, 15 de agosto de 2009

    Cómo saber cuántas CPU hay instaladas en Solaris

    Para saber el número de procesadores y tipo instalados en una máquina con Solaris, utilizaremos el comando psrinfo
    # /usr/sbin/psrinfo
    0 en línea desde 08/03/2009 14:17:57
    1 en línea desde 08/04/2009 11:59:19
    Y si quisiera saber el tipo de CPU que tenemos instalado, simplemente añadiremos la opción -v
    # /usr/sbin/psrinfo -v
    Estado del procesador virtual 0 a: 08/07/2009 14:06:03
    en línea desde 08/03/2009 14:17:57.
    El procesador sparcv9 funciona a 900 MHz,
    y tiene un procesador de coma flotante sparcv9 .
    Estado del procesador virtual 1 a: 08/07/2009 14:06:03
    en línea desde 08/04/2009 11:59:19.
    El procesador sparcv9 funciona a 900 MHz,
    y tiene un procesador de coma flotante sparcv9 .


    Sin embargo, si queremos saber cuántas CPU Físcas tenemos, utilizaremos la opción -p del comando psrinfo
    # psrinfo
    0 en lí­nea desde 08/29/2009 05:20:41
    1 en lí­nea desde 08/29/2009 05:20:42
    2 en lí­nea desde 08/29/2009 05:20:42
    3 en lí­nea desde 08/29/2009 05:20:42
    8 en lí­nea desde 08/29/2009 05:20:42
    9 en lí­nea desde 08/29/2009 05:20:42
    10 en lí­nea desde 08/29/2009 05:20:42
    11 en lí­nea desde 08/29/2009 05:20:42
    # psrinfo -pv
    El procesador físico dispone de 4 virtuales virtuales (0-3)
    SPARC64-VI (portid 1024 impl 0x6 ver 0x93 clock 2150 MHz)
    El procesador físico dispone de 4 virtuales virtuales (8-11)
    SPARC64-VI (portid 1032 impl 0x6 ver 0x93 clock 2150 MHz)
    Referencias

    jueves, 13 de agosto de 2009

    Instalación de Oracle 10g en una zona sobre Solaris - Parte 4

    Introducción
    Hasta aquí hemos visto cómo instalar y configurar Oracle en una Zona de Solaris 10, en este post vamos a ver cómo configurar el listener para que se gestione con SMF (en vez de la forma tradicional). Es cierto, el listener de Oracle es muy robusto, durante los últimos cuatro años sólo he tenido que reiniciarlo en tres ocasiones, y las tres estaban con Oracle 10.2.0.1, desde que hice el upgrade a 10.2.0.4 no se ha quedado tonto nunca, sin embargo, creo que es mejor utilizar SMF para eliminar un punto de fallo más

    Configuración del Listener
    Para la configuración del listener tenemos dos opciones: editar el archivo $ORACLE_HOME/network/admin/listener.ora o ejecutar $ORACLE_HOME/bin/netca

    En ambos casos, la configuración no reviste complicación, a continuación os muestro la configuración del listener llamada PRIMARY y un segundo listener llamado STANDBY cada listener escucha en tres puertos

    $ vi $ORACLE_HOME/network/admin/listener.ora

    PRIMARY =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 1703))
    (ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 1704))
    (ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 1705))
    )
    )

    STANDBY =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 2703))
    (ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 2704))
    (ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 2705))
    )
    )

    :wq
    Ahora vamos a aplicar unas reglas básicas de seguridad para evitar que nos puedan (o tengan más dificil) manipular nuestro listener y a su vez nuestra base de datos.

    Configuración de password en el Listener
    A partir de la versión 10g, los parámetros de configuración por defecto del listener se han incrementado para garantizar una mayor seguridad. A partir de esta versión, las tareas de mantenimiento remotas están deshabilitadas (ADMIN_RESTRICTIONS ON) y se establece como nivel de seguridad el acceso mediante el propietario de la instalación, en la mayoria oracle, en la máquina en la que se ejecuta.
    $ lsnrctl

    LSNRCTL for Solaris: Version 10.2.0.4.0 - Production on 12-AUG-2009 13:36:18

    Copyright (c) 1991, 2007, Oracle. All rights reserved.

    Welcome to LSNRCTL, type "help" for information.

    LSNRCTL> set current_listener STANDBY
    Current Listener is STANDBY
    LSNRCTL> start
    Starting /u01/app/oracle/10.2/db/bin/tnslsnr: please wait...

    TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
    System parameter file is /u01/app/oracle/10.2/db/network/admin/listener.ora
    Log messages written to /u01/app/oracle/10.2/db/network/log/standby.log
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2703)))
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2704)))
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2705)))

    Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
    STATUS of the LISTENER
    ------------------------
    Alias STANDBY
    Version TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
    Start Date 12-AUG-2009 13:36:33
    Uptime 0 days 0 hr. 0 min. 0 sec
    Trace Level off
    Security ON: Local OS Authentication
    SNMP OFF
    Listener Parameter File /u01/app/oracle/10.2/db/network/admin/listener.ora
    Listener Log File /u01/app/oracle/10.2/db/network/log/standby.log
    Listening Endpoints Summary...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2703)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2704)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2705)))
    Services Summary...
    Service "TEST" has 1 instance(s).
    Instance "TEST", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully
    LSNRCTL> change_password
    Old password: __por defecto no tiene__
    New password:
    Reenter new password:
    Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
    Password changed for STANDBY
    The command completed successfully
    LSNRCTL> save_config
    Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
    Saved STANDBY configuration parameters.
    Listener Parameter File /u01/app/oracle/10.2/db/network/admin/listener.ora
    Old Parameter File /u01/app/oracle/10.2/db/network/admin/listener.bak
    The command completed successfully
    LSNRCTL> status
    Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
    STATUS of the LISTENER
    ------------------------
    Alias STANDBY
    Version TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
    Start Date 12-AUG-2009 13:36:33
    Uptime 0 days 0 hr. 9 min. 5 sec
    Trace Level off
    Security ON: Password or Local OS Authentication
    SNMP OFF
    Listener Parameter File /u01/app/oracle/10.2/db/network/admin/listener.ora
    Listener Log File /u01/app/oracle/10.2/db/network/log/standby.log
    Listening Endpoints Summary...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2703)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2704)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2705)))
    Services Summary...
    Service "TEST" has 1 instance(s).
    Instance "TEST", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully
    LSNRCTL> quit
    Corregir los permisos de $TNS_ADMIN ($ORACLE_HOME/network/admin)
    Vamos a limitar el acceso a los archivo listener.ora, tnsnames.ora y sqlnet.ora al usuario oracle y sólo a él. En la primera parte de la instalación, creaba un profile para el usuario oracle con una máscara 027, ésto hace que no tengamos que estar corrigiendo los permisos cada vez que lanzamos alguna utilidad de Oracle. Si no queremos asignar esta máscara (creo que es altamente recomendable) deberemos asegurarnos que todos los ficheros de nuestra instalación están protegidos.

    Sin embargo, vamos a aplicar un valor más restrictivo a nuestro listener.ora y sqlnet.ora para que sólo oracle pueda editarlo.

    Nota: Recuerda que si ejecutas $ORACLE_HOME/bin/netca creará copias de seguridad listenerFECHA.bak que tendrán los permisos según la máscara
    $ pwd
    /u01/app/oracle/10.2/db/network
    $ ls -ltr
    total 22
    drwxr-x--- 2 oracle dba 512 ago 3 15:52 bin
    drwxr-x--- 4 oracle dba 512 ago 3 15:52 tools
    drwxr-x--- 4 oracle dba 512 ago 3 15:54 install
    drwxr-x--- 2 oracle dba 512 ago 3 15:55 doc
    drwxr-x--- 2 oracle dba 1024 ago 3 15:55 mesg
    drwxr-x--- 2 oracle dba 1024 ago 3 16:33 lib32
    drwxr-x--- 2 oracle dba 512 ago 3 16:36 jlib
    drwxr-x--- 2 oracle dba 1024 ago 3 16:39 lib
    drwxr-x--- 2 oracle dba 512 ago 4 16:42 trace
    drwxr-x--- 2 oracle dba 512 ago 12 12:51 log
    drwxr-x--- 3 oracle dba 512 ago 12 13:36 admin
    $ umask
    0027
    $ ls -l admin/
    total 64
    -rw------- 1 oracle dba 1570 ago 12 13:54 listener.ora
    drwxr-x--- 2 oracle dba 512 ago 3 15:52 samples
    -rw-r----- 1 oracle dba 172 dic 26 2003 shrept.lst
    -rw-r----- 1 oracle dba 6490 ago 11 14:02 sqlnet.log
    -rw------- 1 oracle dba 91 ago 12 13:07 sqlnet.ora
    -rw-r----- 1 oracle dba 6546 ago 11 14:02 tnsnames.ora


    Cambios de permisos en lsnrctl
    Oracle recomienda asignar 751 a $ORACLE_HOME/bin/lsnrctl, sin embargo, es más seguro establecer 750 o mejor 700 aunque este último cambio requiere de una verificación más extensa en un entorno de pruebas.
    $ which lsnrctl
    /u01/app/oracle/10.2/db/bin/lsnrctl
    $ ls -l /u01/app/oracle/10.2/db/bin/lsnrctl
    -rwxr-x--x 1 oracle dba 140024 ago 3 16:39 /u01/app/oracle/10.2/db/bin/lsnrctl
    $ chmod 750 /u01/app/oracle/10.2/db/bin/lsnrctl
    $ ls -l /u01/app/oracle/10.2/db/bin/lsnrctl
    -rwxr-x--- 1 oracle dba 140024 ago 3 16:39 /u01/app/oracle/10.2/db/bin/lsnrctl
    Eliminar Servicios no necesario
    El servicio PL/SQL External Procedures (ExtProc) sirve para que el PL/SQL pueda ejecutar binarios del sistema, sin embargo, si no es necesario, eliminaremos el servicio del listener. En nuestro ejemplo no está

    Cambiar el puerto por defecto
    Aunque no es obligatorio, si es muy recomendable cambiar el puerto por defecto 1521 por otro, en nuestro caso es 1703, 1704, 1704 y 2703, 2704, 2705

    Configuración del listener mediante SMF
    Al igual que explicaba como Instalar Hadoop sobre Solaris con SMF podemos seguir los mismos pasos para configurar nuestro listener y olvidarnos de un servicio. Para ello, deberemos crear el directorio /var/svc/manifest/application/database/oracle y copiar el archivo listener.xml de la siguiente forma.

    Recuerda que debes editar las propiedades "home", "project" y "listener" con tus valores antes de importar el XML
    # mkdir -p /var/svc/manifest/application/database/oracle
    # /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/oracle-install/smf/listener.xml
    # svccfg
    svc:> validate /var/svc/manifest/application/database/oracle/listener.xml
    svc:> import /var/svc/manifest/application/database/oracle/listener.xml
    svc:> quit
    Una vez validado e importado, vamos a crear el method encargado de lanzar el listener, para ello, crearemos el archivo listener en /lib/svc/method/listener
    # cd /lib/svc/method
    # /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/oracle-install/smf/listener
    # chmod 750 listener
    # chown root:bin listener
    Por ultimo, nos queda activar el servicio, para ello ejecutaremos el siguiente comando, teniendo en cuenta que hay cuatro instancias primary_10g, standby_10g, primary_11g y standby_11g, en función de cuál sea.
    # svcadm enable -t svc:/application/database/oracle/listener:primary_10g
    Podemos comprobar su estado utilizando el comando svcs y el servicio que queremos comprobar en nuestro caso listener
    # svcs listener
    STATE STIME FMRI
    disabled ago_10 svc:/application/database/oracle/listener:primary_11g
    disabled 16:21:24 svc:/application/database/oracle/listener:standby_11g
    disabled 16:23:13 svc:/application/database/oracle/listener:standby_10g
    online 16:21:37 svc:/application/database/oracle/listener:primary_10g
    # svcadm enable svc:/application/database/oracle/listener:standby_10g
    # svcs listener
    STATE STIME FMRI
    disabled ago_10 svc:/application/database/oracle/listener:primary_11g
    disabled 16:21:24 svc:/application/database/oracle/listener:standby_11g
    online 16:21:37 svc:/application/database/oracle/listener:primary_10g
    online 16:23:47 svc:/application/database/oracle/listener:standby_10g
    Nota: Puedes descargarte directamente el archivo listener.xml y listener si lo prefieres.

    Uso de SVC para Iniciar y Detener el listener
    Ahora, en vez de utilizar lsnrctl stop LISTENER, utilizaremos svcadm {enable|disable} FMRI, por ejemplo, para detener el listener PRIMARY
    # svcadm disable svc:/application/database/oracle/listener:primary_10g
    Como se encuentra dentro de SMF, si por algún motivo el proceso se muere SMF se encargará de volverlo a lanzar, aquí tienes un ejemplo.
    $ ps -ef|grep ls
    oracle 9325 27127 0 16:29:37 pts/1 0:00 grep ls
    oracle 8986 7561 0 16:21:38 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr PRIMARY -inherit
    oracle 9124 7561 0 16:23:48 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr STANDBY -inherit
    $ kill -9 9124
    $ ps -ef|grep ls
    oracle 9349 27127 0 16:29:47 pts/1 0:00 grep ls
    oracle 8986 7561 0 16:21:38 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr PRIMARY -inherit
    oracle 9347 7561 0 16:29:46 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr STANDBY -inherit
    $ svcs listener
    STATE STIME FMRI
    disabled ago_10 svc:/application/database/oracle/listener:primary_11g
    disabled 16:21:24 svc:/application/database/oracle/listener:standby_11g
    online 16:21:37 svc:/application/database/oracle/listener:primary_10g
    online 16:29:46 svc:/application/database/oracle/listener:standby_10g
    Resumiendo
    En este post hemos visto como configurar nuestro listener para hacerlo más seguro y además, cómo configurarlo para usar el framework SMF permitiéndonos olvidarnos un poco de este proceso vital para Oracle. Espero que os haya gustado y no haberos aburrido, en la próxima entrega entraremos en la configuración de los TNS, múltiples bases de datos utilizando projects para cada una de ellas, y por último haremos una base de datos de ejemplo que nos servirá como catálogo de RMAN.

    Referencias

    miércoles, 12 de agosto de 2009

    Cómo poner otro carácter de escape en zlogin -C

    Por defecto, es carácter de escape en zlogin -c es ~. sin embargo, para poder poner cualquier otro, simplemente utilizaremos la opción -e con nuestro nuevo carácter de escape, en nuestro caso #
    # zlogin -C -e\# osiris
    [Conectado a la consola de la zona 'osiris']
    #.
    [Conexión con consola de la zona 'osiris' cerrada]

    lunes, 10 de agosto de 2009

    Instalación de Oracle 10g en una zona sobre Solaris - Parte 3

    Introducción
    En los post anteriores hemos visto cómo preparar el entorno, y posteriormente cómo instalar el motor de base de datos explicando la arquitectura OFA.
    En este, veremos cómo instalar una base de datos a partir de una plantilla que previamente crearemos.

    Creación de una plantilla
    Vamos a crearnos una plantilla con las configuraciones. Esto no es necesario, aunque si muy recomendable si vais a crear varias instancias con la misma estructura. Para no extenderme mucho en el post y que no parezca facebook sólo voy a poner aquellos puntos donde realmente se realizan cambios. Para ello, comenzaremos por lanzar el asistente
    $ $ORACLE_HOME/bin/dbca &
    Seleccionamos "Gestionar Plantillas" y "Siguiente"

    En el paso 6 deberemos seleccionar si queremos o no el modo archivelog, si activamos la casilla de Activar Archivado, deberemos configurar el destino de los mismos.

    Si hemos activado Archivado entonces, haremos click sobre Variable de Ubicación y definiremos los destinos, como se muestra a continuación

    En el paso "7" nos pedirá que asignemos el tamaño de memoria, tipo de conexión y el charset de la base de datos.



    Continuaremos hasta el paso "8" donde seleccionaremos la ubicación de los controlfile, redo y datafiles como se muestra a continuación

    Repetiremos este pasa para cada uno de los tres grupos de redo que tenemos, asignando dos archivos de redo por cada grupo como mínimo

    Finalizaremos el asistente y guardaremos nuestra plantilla como CATALOG para usarla en nuestros próximos pasos.

    Creación de una nueva base de datos
    Vamos a crear nuestra base de datos utilizando la plantilla que hemos creado, de esta forma lanzaremos el asistente de creación dbca y seleccionaremos CATALOG como tipo de base de datos, a continuación os detallo los pasos más importantes

    Continuaremos hasta el paso "8"


    Continuaremos hasta el paso "9"

    Registraremos la base de datos en los listener que queramos y ya podemos darle a crear

    Resumen
    En este post hemos visto cómo crear una plantilla y posteriormente crear una nueva base de datos para poder repetir el proceso de una forma sencilla. En el próximo post, veremos cómo configurar SMF para mantener nuestro listener siempre activo y algunos cambios en la parametrización.


    Referencias

    sábado, 8 de agosto de 2009

    Cómo sincronizar el reloj mediante NTP en Solaris

    Para hacer que el reloj de Solaris se sincronice automáticamente, simplemente crearemos un archivo en /etc/inet/ntp.conf con la IP/host del que queremos se actualice
    # echo "server hora.rediris.es" > /etc/inet/ntp.conf
    # svcadm enable svc:/network/ntp

    viernes, 7 de agosto de 2009

    Instalación de Oracle 10g en una zona sobre Solaris - Parte 2

    Introducción
    En la primera parte, hemos visto como configurar la zona para que nos permita instalar Oracle de una forma más eficiente. En esta parte, vamos a ver cómo diseñar la estructura de directorios para que nos permita una gestión eficiente y sencilla.

    Oracle Flexible Architecture (OFA)
    Oracle define un conjunto de buenas prácticas para distribuir los datos y las aplicaciones, a este tipo de reglas se conocen como OFA. La principal ventaja es la separación entre la lógica, hardware y software, para ello, tendremos los puntos de montaje asignados por cada división hardware (discos, raid) y a su vez por cada división lógica (instancias)

    El punto de montaje será /pN donde p será una cadena constante y N una valor numérico correlativo, por ejemplo.
    /u01
    /u02
    /u03
    En nuestro primer punto de montaje /u01 instalaremos nuestro software Oracle siguiendo la siguiente estructura /u01/app/OSUSER/VERSION/TYPE donde OSUSER es el nombre del usuario del sistema operativo, VERSION la versión del producto y TYPE el tipo de producto. Si queremos instalar la versión Oracle 10g2 SE con el usuario oracle nos quedará de la siguiente forma /u01/app/oracle/10.2/db
    Con la definición OFA como base, yo creo la siguiente configuración adaptada a mi estrucutra
    /u0?/oradata/$ORACLE_SID/
    /u0?/archv_log/$ORACLE_SID/
    /u0?/redo/$ORACLE_SID/
    /u0?/controlfile/$ORACLE_SID/
    A continuación puedes verla con más detalle (la instancia se llama Voldemort)
    $ find /u0{2,3,4} -type d -print 2>/dev/null
    /u02
    /u02/archv_log
    /u02/archv_log/VOLDEMORT
    /u02/controlfile
    /u02/controlfile/VOLDEMORT
    /u02/redo
    /u02/redo/VOLDEMORT
    /u02/oradata
    /u02/oradata/VOLDEMORT
    /u03
    /u03/redo
    /u03/redo/VOLDEMORT
    /u03/controlfile
    /u03/controlfile/VOLDEMORT
    /u03/archv_log
    /u03/archv_log/VOLDEMORT
    /u03/oradata
    /u03/oradata/VOLDEMORT
    /u04
    /u04/redo
    /u04/redo/VOLDEMORT
    /u04/controlfile
    /u04/controlfile/VOLDEMORT
    /u04/archv_log
    /u04/archv_log/VOLDEMORT
    /u04/oradata
    /u04/oradata/VOLDEMORT
    Por lo tanto, nuestra instancia estará definida de la siguiente manera, los controlfile en /u02/controlfile/VOLDEMORT, /u03/controlfile/VOLDEMORT y /u04/controlfile/VOLDEMORT. Redo en /u02/redo/VOLDEMORT, /u03/redo/VOLDEMORT y /u04/redo/VOLDEMORT y los datos en /u05/oradata/VOLDEMORT

    Qué ventaja nos aporta? Principalmente que la estructura es siempre constante, y aunque actualicemos a una release no tendremos problemas. Imaginar que instaláis en $ORACLE_HOME/oradata/$ORACLE_SID, si actualizásemos nuestro $ORACLE_HOME con una nueva versión tenemos un problema, y dos posible soluciones
    • Dejarlo donde estaba. Esto es un caos
    • Reconstruir la DB. Bueno, es posible y no es muy difícil ...
    Una vez aclarado el por qué es muy recomendable la utilización de OFA, vamos a comenzar con la instalación de Oracle 10g2.

    Instalación de Oracle 10g2
    La instalación no supone mayor problema, principalmente porque hemos creado un profile donde hemos asignado nuestro ORACLE_HOME, apuntando a /u01/app/oracle/10.2/db. No voy a entrar en el detalle de la instalación, ya que no es el problema que quiero resolver, basta con seleccionar el tipo de instalación SE, EE e Instalar sólo el motor. A continuación os muestro la pantalla


    Es muy probable que el asistente nos diga que los parámetros del kernel no están. Ya he comentado que en Solaris 10 no hace falta incluirlo en /etc/system, aunque el instalador de Oracle los va a buscar ahí.

    Instalación del patch 10.2.0.4
    Una vez instalado el motor de base de datos, instalaremos el patch 10.2.0.4 (p6810189_10204_Solaris-64) que debes descargar de Metalink, para poder aplicar este parche, es necesario actualizar la versión de opatch a la 10.2.0.4 y los TimeZones

    Preparación de la Estructura OFA
    Vamos a crear la estrucutura que nos permitirá mantener organizado nuestra instalación de Oracle y lo más importante, nos permitirá hacer upgrades de forma "sencilla"
    # mkdir -p /u0{1,2,3,4,5}
    # mkdir /u0{1,2,3}/controlfile
    # mkdir /u0{1,2,3}/redo
    # mkdir /u0{1,2,3,4,5}/oradata
    # chown -R oracle:dba /u0?
    # chmod 700 /u0?
    Aunque yo he creado todos los directorios en el mismo disco, es para simplificar el post, ya que la forma óptima de utilización es montar cada u0x sobre un disco diferente, como os muestro a continuación. Donde u02, u03, u04 son simétricos ya que almacenan los redo, controlfile y temporales y u05 es donde se almacenan los datafiles en un RAID 1+0 en una SAN

    /dev/dsk/c5t600A0B80002AF68E000007354A70F366d0s6
    49G 6,0G 42G 13% /u02
    /dev/dsk/c5t600A0B80002AF618000007A74A70F3ACd0s6
    49G 6,0G 42G 13% /u03
    /dev/dsk/c5t600A0B80002AF68E000007374A710CBEd0s6
    49G 5,5G 43G 12% /u04
    /dev/dsk/c5t600A0B80002AF618000007A54A70F35Fd0s6
    98G 16G 81G 17% /u01
    /dev/dsk/c5t600A0B80002AF68E000007324A70F30Ed0s6
    197G 99G 96G 51% /u05
    /dev/dsk/c5t600A0B80002AF618000007A94A710D33d0s6
    98G 23G 75G 24% /u01/app/oracle/10.2/db/flash_recovery_area

    Conclusión
    Hemos visto como OFA nos aporta una forma organizada de mantener nuestra instalación y un mantenimiento simplificado, ahora ya tenemos la estructura creada y preparada para poder lanzar el asistente de creación de base de datos dbca que nos permitirá administrar las diferentes instancias, sin embargo, esto tendrá que esperar a la próxima entrega.

    Referencias

    jueves, 6 de agosto de 2009

    Cómo cambiar el planificador por defecto en Solaris

    Para establecer el planificador FSS por defecto en Solaris, ejecutaremos en la zona global y reiniciaremos para que tenga efecto.
    # dispadmin -d FSS
    Y para saber cuántos tipos de planificadores hay, simplemente ejecutaremos
    # dispadmin -l
    CONFIGURED CLASSES
    ==================

    SYS (System Class)
    TS (Time Sharing)
    FSS (Fair Share)
    RT (Real Time)
    FX (Fixed Priority)
    IA (Interactive)

    martes, 4 de agosto de 2009

    Instalación de Oracle 10g en una zona sobre Solaris - Parte 1

    Introducción
    Existe mucha información de cómo instalar Oracle 10g sobre Solaris, sin embargo, quería hacer un post donde explicar algunos trucos que suelo utilizar yo.

    El problema, Licenciamiento de Oracle
    Bien, todos sabemos que Oracle se puede Licenciar por usuario y cpu. Hasta aquí todo correcto, pero qué pasa con los equipos CMT (UltraSPARC T1, T2, T2+) que tienen hasta 128 Threads? El problema es que el Sistema computa cada thread como una cpu (aunque realmente no es cierto) y por lo tanto, tenías n micros.

    En las primeras versiones de Solaris 10 no existía forma de físicamente particionar el hardware (si que existe a nivel de Hardware, por ejemplo, en la serie M) y por lo tanto, la solución era utilizar resource pool, sin embargo, para Oracle ésto no era válido (si, he puesto era porque han cambiado un poco las cosas).

    En la versión Solaris Update 4 se introdujo una nueva propiedad llamada cappable que nos permite limitar de una forma más sencilla los recursos de la zona.

    No es que antes no se pudiese, no, lo que sucede es que ahora, es realmente mucho más sencillo habilitar los límites de máximo número de cpu y uso, además según la nota de Metalink 317257.1, es un licenciamiento válido, como se muestra a continuación

    To create a Solaris 10 container that fits the licensing requirements set by Oracle, the Solaris system administrator needs to create a resource pool with the desired number of CPUs or cores and bind a zone to this resource pool. Alternatively, the administrator may set up a zone to use dynamic pool with specified CPU maximum limit. The license is driven by the number of CPUs or cores in this pool.

    Creación Zona para Oracle
    La creación de la Zona no es muy diferente a la creación de una zona como ya expliqué en el post Gestión básica de Zonas, sin embargo, debemos tener en cuenta algunas cosas:

    Oracle hace un uso intensivo de los discos, por lo tanto, es necesario hacer visibles los discos como devices y no montados a través de la zona.


    Es muy recomendable hacer que las IP sean de tipo exclusive para evitar fallos en el rendimiento.
    Para ello, vamos ha configurar la zona, con los siguientes parámetros, en mi configuración los discos están en una SAN con una Emulex, y la máquina tiene dos zonas, gnosis Oracle 10.2.0.4 Production y osiris Oracle 10.2.0.4 Integration. Por ello, la parametrización de cpu-shares es 80 para gnosis y 20 para osiris.


    # zonecfg -z gnosis
    gnosis: No se ha configurado esa zona
    Use 'create' para comenzar a configurar una zona nueva.
    zonecfg:gnosis> create
    zonecfg:gnosis> set zonepath=/opt/zones/gnosis
    zonecfg:gnosis> set autoboot=true
    zonecfg:gnosis> add net
    zonecfg:gnosis:net> set physical=e1000g0
    zonecfg:gnosis:net> set address=10.80.1.7/24
    zonecfg:gnosis:net> set defrouter=10.80.1.254
    zonecfg:gnosis:net> end
    zonecfg:gnosis> add device
    zonecfg:gnosis:device> set match=/dev/dsk/c5t600A0B80002AF68E000007324A70F30Ed0s6
    zonecfg:gnosis:device> end
    zonecfg:gnosis> add device
    zonecfg:gnosis:device> set match=/dev/rdsk/c5t600A0B80002AF68E000007324A70F30Ed0s6
    zonecfg:gnosis:device> end
    zonecfg:gnosis> set scheduling-class=FSS
    zonecfg:gnosis> set cpu-shares=80
    zonecfg:gnosis> set max-shm-memory=4G
    zonecfg:gnosis> verify
    zonecfg:gnosis> commit
    zonecfg:gnosis> exit
    Desde la versión 10 de Solaris, ya no es necesario establecer los valores de max-shm-memory en el archivo /etc/system sin embargo, si el valor de noexec_user_stack a 1. Para ello, vamos a editar el archivo /etc/system de la zona global

    # vi /etc/system

    * **********************************
    * FC Tuning
    * *********************************
    set ssd:ssd_io_time=0x78
    set sd:sd_max_throttle=16

    * ***********************************
    * Parametros para Tunear el Sistema
    * ***********************************

    *
    * maxusers = Total Memory (In Mb)
    *
    set maxusers=4096

    *
    * rflim_fd_max
    * Limite de descriptores maximos de archivos abiertos
    * por defecto: 1024
    *
    set rlim_fd_max=8192

    *
    * rlim_fd_cur
    * por defecto: 64
    *
    set rlim_fd_cur=8192

    *
    * sq_max_size
    * Controla la cola de los drivers (buffer)
    * por defecto: 2
    * asignado a infinito: 0
    *
    set sq_max_size=0

    *************************************************
    * configuracion para el acceso de la memoria *
    *************************************************
    * Minimo porcentaje que pageout puede consumir
    * Default: 4 - Range: 1 .. 80
    set min_percent_cpu=6

    *************************************************
    * permitir accesos de root en la maquina *
    *************************************************
    set reserved_procs=20

    *************************************************
    * parametrizacion de oracle 10g2 *
    *************************************************
    set noexec_user_stack=1
    set semsys:seminfo_semmni=100
    set semsys:seminfo_semmns=1024
    set semsys:seminfo_semmsl=605
    set semsys:seminfo_semvmx=32767
    ************************************************
    * debemos poner MAXINT64 en UltraSPARC
    * setting this parameter to the maximum possible
    * value has no side effects.
    * 4096*2*1024*1024
    *************************************************
    set shmsys:shminfo_shmmax=8589934592
    set shmsys:shminfo_shmmni=100
    set shmsys:shminfo_shmseg=10

    * ya no tiene soporte en el kernel de la sol9
    set shmsys:shminfo_shmmin=1
    Nota: Como ya he dicho, en Solaris 10, ya no es necesario poner aquí los valores semáforos y segmentos de memoria máximos, sin embargo, yo sigo utilizando algun Solaris 9 y por eso, tengo el system así.

    Asignaremos el planificador FSS por defecto a nuestra máquina, rebootaremos para que los cambios se apliquen y concluiremos con la instalación de la zona gnosis y su configuración

    Configuración de Número de CPUs y Uso de CPU
    Dentro de las nuevas posibilidades de configuración que nos aporta Solaris 10u5, tenemos capped-cpu y dedicated-cpu que son excluyentes es decir, no podemos asignar dedicated y capped de forma simultánea.

    Vamos a ver cuándo es interesante capped-cpu y cuando dedicated-cpu. Imaginemos que tenemos una máquina con 4 UltraSPARC IV+, para Solaris existen 8 cpu, y nuestra licencia de Oracle SE es hasta 4 cpus. En esta situación lo que queremos es limitar el número de CPUs visibles a la Zona para ello utilizaremos dedicated-cpu ya que esas 4 cpu asignadas no serán accesibles por ninguna zona más (Realmente, lo que sucede es que se crea un nuevo pset y se binda los procesos de la zona a este pset). Sin embargo, si tengo una máquina con 2 UltraSPARC IIIcu, y al igual que sucede antes, mi licencia es de hasta 4 cpus, lo que me interesa es asignar un valor de capped-cpu para que varias zonas puedan compartir los recursos, siendo 1 un 100% de uso de micro, por lo tanto, si tengo 2 CPUs y quiero que mi zona de Production tenga una CPU y media, asignaré un valor de ncpus=1,50. Utilizando capped-cpu ambas CPUs son visibles para las zonas, sin embargo, sólo podrán utilizar el número de CPUs asignado en ncpus

    Conclusión, la principal diferencia entre dedicated-cpu y capped-cpu radica en la visibilidad de las CPUs para las Zonas, con dedicated-cpu sólo serán visibles para la zona asignada, y con capped-cpu todas las zonas verán las CPUs pero podrán utilizar sólo aquel valor asignado en ncpus

    Una vez que tengamos claro el tipo de resouce pool que queremos, asignaremos una propiedad u otra, en mi caso he asignado los siguientes valores

    Zona Osiris Integration

    # zonecfg -z osiris
    zonecfg:osiris> add capped-cpu
    zonecfg:osiris:capped-cpu> set ncpus=0,75
    zonecfg:osiris:capped-cpu> end
    zonecfg:osiris> verify
    zonecfg:osiris> commit
    Zona Gnosis Production

    # zonecfg -z gnosis
    zonecfg:gnosis> add capped-cpu
    zonecfg:gnosis:capped-cpu> set ncpus=1,75
    zonecfg:gnosis:capped-cpu> end
    zonecfg:gnosis> verify
    zonecfg:gnosis> commit
    Creación del project, grupo y usuario
    Como ye hemos comentado antes, ahora los valores del tamaño máximo de segmento, semáforos, etc. se asignan mediante project de esta forma, es posible modificarlos en caliente. El valor de max-shm-memory será 1/4 de la memoria total del sistema según Metalink
    # projadd group.dba
    # projmod -sK "process.max-msg-qbytes=(privileged,65536,deny)" group.dba
    # projmod -sK "process.max-sem-nsems=(privileged,4096,deny)"group.dba
    # projmod -sK "project.max-shm-memory=(privileged,2147483648,deny)" group.dba
    # groupadd -g 2010 group.dba
    # useradd -s /bin/bash -d /export/home/oracle -m -g dba oracle

    Configuración del profile del usuario oracle
    Aunque no es necesario, ya que se puede establecer siempre de forma manual, creo que es más recomendable crearlo, yo utilizo siempre el profile para evitar problemas al asignar los ORACLE_HOME u ORACLE_SID

    # zlogin osiris
    [Conectado a la zona 'osiris' pts/4]
    Last login: Tue Aug 4 18:49:24 on pts/4
    Sun Microsystems Inc. SunOS 5.10 Generic January 2005
    # su - oracle
    Sun Microsystems Inc. SunOS 5.10 Generic January 2005
    $ id -p
    uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
    $ vi .profile
    # asignamos la mascara por defecto
    umask 027


    # configuracion del path y demas
    PATH=$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin
    export PATH


    # configuracion activa
    ORACLE_ACTIVE=VOLDEMORT


    # usuario de sistema para oracle
    ORACLE_SYSTEM_USER=oracle
    # version de DB
    ORACLE_DB_VERSION=10.2


    # directorios de trabajo de oracle
    ORACLE_BASE_PATH=/u01/app/${ORACLE_SYSTEM_USER}/${ORACLE_DB_VERSION}/db
    ORACLE_HOME=$ORACLE_BASE_PATH
    ORACLE_SID=$ORACLE_ACTIVE
    export ORACLE_BASE ORACLE_HOME ORACLE_SID


    # REV 1.2
    OFA_SUPPORT=Yes


    # configuracion del path y demas
    PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
    export PATH


    # REV 1.1
    ODBCINI=/etc/odbc.ini
    ODBCSYSINI=/etc
    export ODBCINI ODBCSYSINI


    # mostramos la configuracion activa
    echo "*****************************************************"
    banner ${ORACLE_SYSTEM_USER}
    echo "*****************************************************"
    echo "ORACLE configurado con:"
    echo "ORA_SID: $ORACLE_ACTIVE"
    echo "ORA_HOME: $ORACLE_HOME"
    if [ -a /etc/odbc.ini ]; then
    echo "ODBC_SUPPORT: YES"
    echo "+ ODBC_HOME: $ODBCSYSINI"
    echo "+ ODBC_FILE: $ODBCINI"
    else
    echo "ODBC_SUPPORT: ** NO **"
    fi
    echo "USING_OFA: ${OFA_SUPPORT}"


    # finalizamos mirando el correo
    MAIL=/usr/mail/${LOGNAME:?}
    Crearemos la estructura de directorios para la instalación
    # mkdir /u01 /u02 /u03 /u04 /u05
    # chown oracle:dba /u0?
    # chmod 750 /u0?
    Ya tenemos todo preparado para poder comenzar con la instalación de Oracle 10g en nuestra zona de Solaris, puedes continuar con el proceso en la segunda parte de Instalación de Oracle 10g en Solaris - Parte 2



    Referencias