Acerca de admin

Tras más de 20 años trabajando con tecnologías Oracle, me decidí a recopilar en un Blog algunas de las cosillas útiles para el día a día.

Cambiar la base de datos del repositorio de el OEM12c

Hoy vamos a ver en una entrada rápida como cambiaríamos la base de datos del OEM12c de un equipo a otro.
Los pasos necesarios para llevar a cabo este cambio son:

  • Parar el OMS
  • Hacer un backup de la base de datos
  • Restaurar la base de datos en la nueva ubicacion
  • Reconfigurar el OEM12c
  • Arrancar el OEM12c

Veamos uno a uno los pasos

Parar el OMS

$AGENT_HOME/bin/emctl stop agent
$OMS_HOME/bin/emctl stop oms

Backup de la base de datos
Aquí llevaríamos a cabo un backup normal de la base de datos con RMAN

Recuperación de la base de datos
Al igual que el backup, se trata de un restore standard mediante RMAN

Reconfigurar el OEM12c
Este es el paso mas dificil de hacer, debemos de conocer los datos:

  • LISTENER_PORT Puerto del listener de la nueva BBDD
  • NUEVOSID SID de la base de datos (no tiene por que cambiar)
  • NUEVOHOST nombredel nuevo host (conviene que esté en el /etc/hosts del servidor)
  • NUEVOPASWD Password del respositorio ( si no se ha cambiado es el mismo que el de sysman anterior)

y con esto,simplemente debemos de ejecutar el cambio de repositorio con el comando

emctl config oms -store_repos_details -repos_port LISTENER_PORT -repos_sid NUEVOSID -repos_host NUEVOHOST -repos_user SYSMAN -repos_pwd NUEVOPASSWD
Oracle Enterprise Manager Cloud Control 12c Release 3
Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.
Successfully updated datasources and stored repository details in Credential Store.
If there are multiple OMSs in this environment, run this store_repos_details command on all of them.
And finally, restart all the OMSs using 'emctl stop oms -all' and 'emctl start oms'.
 

Arrancar el OMS

$AGENT_HOME/bin/emctl start agent
$OMS_HOME/bin/emctl start oms

Instalación de Oracle Enterprise Manager 12c

Hola

Hoy vamos a ver como se hace la instalación de el OEM 12c en un servidor Linux.

Lo primero que haremos será el instalar un Oracle Linux 6.3 y una base de datos Enterprise (es un requerimiento del OEM 12c) que servirá de nuestro repositorio para el cloud. Después de esto, iremos a la web de descargas de Oracle para bajarnos el 12c.
Antes de empezar con la instalación, he de advertiros que, el OEM 12c tiene muchísimas restricciones de licenciamiento, con lo que, os conviene echarles un vistazo antes de instalarlo a la ligera.

Nosotros vamos a llevar a cabo la instalación según este documento http://docs.oracle.com/cd/E24628_01/install.121/e24089/toc.htm.

La instalación la vamos a llevar a cabo con el usuario emc y hemos reservado una particion de 15Gb bajo /oem , aunque pueda parecer una barbaridad de espacio, no nos va a sobrar tanto, por que, como vemos en el cuadro adjunto las necesidades de HW no son precisamente «pequeñas»

requisitos HW

requisitos HW

Además de esto, hemos de tener en cuenta que, nosotros ya tenemos binarios de Oracle instalados en este servidor, por que tenemos la base de datos instalada, por eso el directorio del inventario de oracle será común

[oem@emc fuentes]$ cat /etc/oraInst.loc 
inventory_loc=/oraInventory
inst_group=oinstall

Antes de la instalación deberemos de cerciorarnos que tenemos los siguientes paquetes:

  • make-3.81
  • binutils-2.17.50.0.6
  • gcc-4.1.1
  • libaio-0.3.106
  • glibc-common-2.3.4
  • libstdc++-4.1.1
  • libXtst-1.0.99.2-3.el6.x86_64.rpm
  • sysstat-5.0.5
  • glibc-devel-2.5-49-i686 (This is a 32-bit package)
  • glibc-devel-2.5-49-x86_64 (This is a 64-bit package)

Crearemos el usuario oem que asignaremos al grupo oinstall

Tras descomprimir los 3 ficheros de fuentes (ocupan unos 5 Gb) lanzaremos el comando

./runInstaller

Lo primero que nos solicitará es el usuario del metalink (soporte), nosotros le diremos que no queremos
Captura de pantalla 2013-03-03 a la(s) 18.48.38

Lo segundo es si queremos buscar nuevas actualizaciones, nuevamente le diremos que no

usuario metalnk

usuario metalnk

Tras esto, el instalador llevará a cabo las comprobaciones necesarias para la instalación, en caso de tener problemas con alguna de ellas, deberemos de solucionarlas.En nuestro caso, nos muestra un «warning» que podemos omitir.
prerequisitos

Este problema es debido a que necesitamos la instalación de una librería de 32 bits y nuestro sistema es de 64 bits, para solucionarlo solamente tenemos que hacer

yum install glibc-devel.i686

Con la instalacion de esta librería, la comprobación será correcta, y podremos seguir con la instalación.

Una vez pasado ese punto, nos indica que tipo de instalacion queremos hacer.
Tenemos una explicacion de cual es cual en http://docs.oracle.com/cd/E24628_01/install.121/e22624/install_em_exist_db.htm en Table 7-1 Differences Between Simple and Advanced Installation,y, como podeis ver, la instalacion básica se ajusta mas que de sobra a nuestras necesidades.

Captura de pantalla 2013-03-03 a la(s) 18.53.34

Antes de seguir en los siguientes pasos hay que tener unas pequeñas cosillas en cuenta:

  • El wizzard no puede lanzarse desde un host remoto, hay que instalar desde la máquina
  • No tenemos que tener variables ORACLE_HOME o ORACLE_SID
  • No hay que instalar el OEM en un link
  • OEM te va a instalar un Weblogic y el JDK 1.6
  • No trastees el weblogic, hay que dejarlo caer como lo va a dejar la instalacion de OEM
  • La instalación no debe de hacerse como root
  • La base de datos del repositorio debe de ser una versión Enterprise con particionamiento
  • La tarea de recolección de estadísticas debe de estar detenida

En nuestro caso, vamos a dejar la instalacion bajo la particion /oem

paths e instalacion

paths e instalacion

Le introducimos el password y la ubicacion de nuestra base de datos.

password e instancia

password e instancia

Importante: Hemos de tener en cuenta que este paso se «apropiará» de la cuenta de system de la instancia, con lo que se teníamos en Enterpise Control de la instancia nos tocará eliminarlo.

Tras este punto volveremos a tener las comprobaciones de rigor, y tras poner una contraseña acorde (en este punto no nos deja poner una trivial) , llegaremos a la pantalla de instalación.

instalaacion

El proceso de instalación es bastante largo,pero , siguiendo estos pasos finalizar la instalación es simplemente cuestion de tiempo y paciencia.

ORA-20005 Estadisticas bloqueadas

Hoy vamos a ver la causa de un problema que pude darse en sistemas en los que hay varias personas administrando o con privilegios sobre distintos objetos de la base de datos. Una de las situaciones que se pueden dar, es que , uno de los usuarios intente lanzar las estadisticas del planificador de los objetos sobre los que tiene privilegios y se encuentre con un :

ORA-20005: object statistics are locked (stattype = ALL) 
ORA-06512: at "SYS.DBMS_STATS", line 13182 
ORA-06512: at "SYS.DBMS_STATS", line 13202 
ORA-06512: at line 2

¿Por que sucede esto?
Sencillamente, por que, como bien dice el error de oracle, por que alguien ha bloqueado las estadísticas.
Ante todo, el bloqueo de las estadisticas no es algo automático, es una opción deliberada que ha de aplicarse sobre determinados objetos, con lo que, si está así es por que ,alguien con privilegios ha decidido que así sea.

Los segundo que nos preguntamos es ¿por que están bloqueadas?
Hay distintas razones por la que podemos querer bloquear las estadísticas de algunos objetos, pro las principales pueden ser :

  • Por razones de rendimiento: Hay entornos en los que los objetos de la base de datos varian mucho durante su periodo de explotación, el dba puede elegir obtener un juego de estadisticas válido durante un periodo tipo, y aplicar este juego de estadisticas indistintamente del periodo de explotacion en el que se encuentre.
  • Por problemas de ventana, ya que, la generación de estadisticas de esos objetos puede ser un proceso demasiado pesado, con lo que , el dba ha decidido bloqearlas y lanzarlas especificamente en una ventana aparte
  • El proceso de cálculo de estadísticas es un proceso bastante pesado , probablemente el administrador del sistema haya decidido bloquearlas para evitar que cualquier otro usuario con permisos decida lanzarlas

En todo caso, si obtenemos este error ORA-20005, necesitaremos comprobar si realmente están bloqueadas, mediante esta consulta podremos ver que objetos de la base de datos tienen las estadisticas bloqueadas.

select owner, table_name, stattype_locked
from dba_tab_statistics
where stattype_locked is not null; 

Lo siguiente que querremos saber, es de cuando son el juego de estadísticas que estamos utilizando, para eso ampliaremos la consulta a:

 select table_name,last_analyzed  from dba_tables 
   where table_name in 
          (select table_name 
                 from dba_tab_statistics 
                     where stattype_locked is not null 
                           and OWNER='ESQUEMAPRUEBAS)
     order by last_analyzed asc 

Para desbloquear todas las estadísticas de un esquema ESQUEMAPRUEBAS podemos usar el metascript

  select 
  'exec dbms_stats.unlock_table_stats('
   ||chr(39)
   ||'ESQUEMAPRUEBAS'
   ||chr(39)||
    ','
   ||chr(39)
   ||TABLE_NAME
   ||chr(39)||' );'
      from dba_tab_statistics where
           stattype_locked is not null 
              and OWNER='ESQUEMAPRUEBAS';

y ver los distintos objetos, o hacerlo directamente con la llamada :

exec dbms_stats.unlock_schema_stats('ESQUEMAPRUEBAS');

Como nota final, hay que tener cuidado con el desbloqueo de estadísticas ya que hay algunas estadísticas del sistema que pueden estar bloqueadas con lo que no conviene desbloquear todas las estadísticas de todos los esquemas.

Para mas información, como siempre esta metalink, allí tenemos la notas relacionadas

  • «ORA-38029 «Object Statistics Are Locked» – Possible Causes [ID 433240.1]»
  • Preserving Statistics using DBMS_STATS.LOCK_TABLE_STATS [ID 283890.1]

Encontrar el proceso que se come la CPU en windows

Una de las principales diferencias de oracle para Unix y Windows radica en que, debido a el tipo de sistema operativo, en Windows tenemos un proceso monolítico oracle.exe, y no la multitud de procesos que nos encontramos en los sistemas Unix. Así pues, cuando queremos saber cual es el proceso que se nos come la CPU, siempre vamos a tener una misma respuesta oracle.exe y, además de eso, probablemente no podamos enlazarlo con los procesos de sistema operativo.

¿Como solucionamos este problema?

Para empezar, mi recomendación es tener en el servidor uno de estos dos programas

  • Pprocess explorer
  • QSlice

Los dos programas son gratuitos y se pueden descargar desde soporte de microsoft, y nos permitirán ver con mayor facilidad el origen de nuestro problema.

Si abrimos el process explorer , veremos algo similar a esto:
process explorer

Aquí podemos ver como uno de los procesos oracle se esta comiendo el 100% de la CPU , si hacemos boton derecho «propiedades», el process explorer nos indicará en una ventana independiente la informacion de este proceso, si vamos a la pestaña «threads» y ordenamos por CPU, tendremos:
proceso oralce.exe

Aqui vemos como los treads que mas CPU están consumiendo son

  • 3076 con el 23%
  • 4976 con el 19,95%

Ahora, teniendo estos dos número de thread, si que podremos ir a nuestra ventana de sql y enlazar este numero de thread con el proceso/sesion de Oracle que está causando la carga


select proc.spid ThreadNO,  
sess.username Usuario,  
sess.osuser OSUser,
sess.machine Maquina,  
sess.status Estado,  
sess.sid SessionID,  
sess.program Program  
from v$process proc, v$session sess, v$bgprocess bg  
where sess.paddr = proc.addr  
and bg.paddr(+) = proc.addr  
and proc.spid in (3076)

Esta informacion tambien puede obtenerse con qslice.exe, solamente que la información del thread está en exadecimal, y habremos de pasarla a decimal, por otra parte, la ventaja del qslice.exe es que es más ligero que el process explorer, con lo que, como decía al principio, mi recomendación es tener los dos en el servidor

Modificar el editor por defecto de SQLplus en Unix

Vamos con una nota rápida y sencilla, pero bastante útil.

SQLPlus tiene por defecto el editor ed , sinceramente, el ed no es el editor mas usado del mundo, de hecho, no conozco a nadie que lo tenga como su primera opción, la pregunta ahora es, ¿Como hacemos para modificar este editor por defecto?

muy sencillo:


define_editor='vi'

Para no tener que estar añadiendo esta línea cada vez que entramos, podemos añadirla al fichero profile de sqlplus genérico que se encuentra en


$ORACLE_HOME/sqlplus/admin/glogin.sql