viernes, 24 de abril de 2009

Idiología de este blog

Este blog se normaliza bajo los principios que definen el software libre, a saber:

El software libre es una cuestión de la libertad de los usuarios de ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software. Más precisamente, se refiere a cuatro tipos de libertades para los usuarios del software:

  • La libertad de ejecutar el programa, para cualquier propósito (libertad 0).
  • La libertad de estudiar cómo trabaja el programa, y adaptarlo a sus necesidades (libertad 1). El acceso al código fuente es una condición necesaria.
  • La libertad de redistribuir copias para que pueda ayudar al prójimo (libertad 2).
  • La libertad de mejorar el programa y publicar sus mejoras, y versiones modificadas en general, para que se beneficie toda la comunidad (libertad 3).
Gracias por contribuir a crear un mundo mejor, permiso de distribucción de información no requerido.
http://www.gnu.org/copyleft/copyleft.es.html

jueves, 23 de abril de 2009

Otorgando privilegios para realizar "SELECT" sobre vistas del diccionario de la base de datos

En ocasiones es necesario dar a un usuario silvestre la posibilidad de realizar una consulta sobre una determinada vista o tabla del diccionario de la base de datos.

Si al crear el usuario en la base de datos le damos únicamente el privilegio de "CREATE SESSION", este no puede realizar consultas sobre las vistas o tablas del diccionario de la base datos.

Ejemplo:

Connectado con un usuario normal:

SQL*Plus: Release 10.2.0.1.0 - Production on Jue Abr 23 08:54:29 2009


Copyright (c) 1982, 2005, Oracle. All rights reserved.


Conectado a:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production

With the Real Application Clusters option

SQL> select * from dba_role_privs;
select * from dba_role_privs
*

ERROR en línea 1:
ORA-00942: table or view does not exist

Lo que requerimos es otorgarle el privilegio de "SELECT ANY DICTIONARY", con una cuenta con role de DBA y luego sin necesidad de volverse a logear en la base de datos, volvemos a ejecutar la consulta.

-------------- Nueva ventana con usuario con role DBA --------

SQL*Plus: Release 10.2.0.1.0 - Production on Jue Abr 23 08:56:18 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Conectado a:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

SQL> grant select any dictionary to usuario;

Concesión terminada correctamente.

SQL>


-------------- De vuelta en la otra session -----------------



Con gusto a solicitud de mi amigo Johnny Chacón.

lunes, 20 de abril de 2009

Creando export de Oracle comprimido en Linux

Existe una gran cantidad de notas para ser utilizadas como referencia, para hacer un export de modo comprimido, utilizando el comando "compress" para plataformas UNIX.
En Linux podemos utilizar el comando "gzip" y los archivos "de nodos" a nivel de sistema operativo, para poder realizar esta labor.

Primero que todo en un directorio temporal, vamos a crear los archivos "PIPE", que nos ayudaran a esto.

$>cd /oracle/tmp
$>mknod pipe p
$>mknod pipe p2
$>mknod pipe p3
$>mknod pipe p4
$>mknod pipe p5
$>mknod pipe p6

Luego vamos a crear el siguente archivo de comandos SHELL.

$> more resp_pipe_orcl.sh

ORACLE_HOME=/opt/product/app/10g
ORACLE_SID=ORACLE_
TERM=xterm
PATH=${PATH}:$ORACLE_HOME/bin:/usr/bin
umask 022
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
export NLS_LANG
gzip < /oracle/tmp/pipe > /oracle/respaldo/expdiario_orcl_01_parte.dmp.gz &
gzip < /oracle/tmp/pipe2 > /oracle/respaldo/expdiario_orcl_02_parte.dmp.gz &
gzip < /oracle/tmp/pipe3 > /oracle/respaldo/expdiario_orcl_03_parte.dmp.gz &
gzip < /oracle/tmp/pipe4> /oracle/respaldo/expdiario_orcl_04_parte.dmp.gz &
gzip < /oracle/tmp/pipe5> /oracle/respaldo/expdiario_orcl_05_parte.dmp.gz &
gzip < /oracle/tmp/pipe6> /oracle/respaldo/expdiario_orcl_06_parte.dmp.gz &
exp respaldo/respaldo full=yes file=/oracle/tmp/pipe,/oracle/tmp/pipe2,/oracle/tmp/pipe3, /oracle/tmp/pipe4, /oracle/tmp/pipe5, /oracle/tmp/pipe6 filesize=2048M statistics=none log=/oracle/respaldo/exp_full_diario_orcl_full.log
$>

Lo que hacemos aquí, es crear varios archivos de un export grande, fragmentándolo en pedezos de 2GB como máximo. Cada dispositivo "pipe", lo referenciamos como un archivo independiente.
Antes de iniciar el export, concatenamos el comando gzip con un respectivo nombre final de archivo y lo dejamos corriendo en background, para dejarlos de una vez comprimidos los archivos desde el mismo momento cuando se realiza el export.

Puntos positivos:
  • Ahorramos espacio de almacenamiento
  • Fácil administración de archivos
  • Tamaño total de exports se reduce entre un 60% a un 70%

Desventajas:

  • Mayor tiempo de duración del export
  • Mayor consumo de memoria y cpu durante la ejecución

Recomendaciones

  • Ejecutar durante períodos de bajo nivel de operación del servidor
  • Se puede poner las opciones del export en un "parfile", para mejor administración.

viernes, 3 de abril de 2009

Lectura Interesante: Cuál es el valor de un DBA ?

http://www.dba-oracle.com/t_value_professional_dba.htm

Haciendo Ping a un grupo de Ip's en la red

Deseas hacer ping a un grupo de Ip's y no hacerlo de uno en uno?

Puedes hacerlo de la siguiente forma
for i in {30..35}; do ping -c1 172.20.100.$i; done
[root@admin ~]# for i in {30..35}; do ping -c1 172.20.100.$i;done
PING 172.20.100.30 (172.20.100.30) 56(84) bytes of data.
64 bytes from 172.20.100.30: icmp_seq=0 ttl=62 time=1.91 ms

--- 172.20.100.30 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.913/1.913/1.913/0.000 ms, pipe 2
PING 172.20.100.31 (172.20.100.31) 56(84) bytes of data.
64 bytes from 172.20.100.31: icmp_seq=0 ttl=62 time=1.59 ms

--- 172.20.100.31 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.596/1.596/1.596/0.000 ms, pipe 2
PING 172.20.100.32 (172.20.100.32) 56(84) bytes of data.
64 bytes from 172.20.100.32: icmp_seq=0 ttl=62 time=2.46 ms

--- 172.20.100.32 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.467/2.467/2.467/0.000 ms, pipe 2
PING 172.20.100.33 (172.20.100.33) 56(84) bytes of data.
64 bytes from 172.20.100.33: icmp_seq=0 ttl=62 time=2.10 ms

--- 172.20.100.33 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.100/2.100/2.100/0.000 ms, pipe 2
PING 172.20.100.34 (172.20.100.34) 56(84) bytes of data.
64 bytes from 172.20.100.34: icmp_seq=0 ttl=62 time=1.41 ms

--- 172.20.100.34 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.415/1.415/1.415/0.000 ms, pipe 2
PING 172.20.100.35 (172.20.100.35) 56(84) bytes of data.
From 10.8.0.2 icmp_seq=0 Destination Host Unreachable