Runaway queries : Consultas que tardan mas de lo esperado

Hoy vamos a ver otra entrada para dummies.

¿Que es una Runaway query?

Una «Runaway query» es una consulta que tarda mas de lo esperado, pero …
¿Como podemos definir «lo esperado»?

La definición que toma oracle de ese «mas de lo esperado » es que su ejecución se demora mas allá de lo esperado por el planificador , pero , en terminos corrientes llamamos así a las consultas que «no terminan nunca».

Como véis, inaguramos el mes con una entrada muy sencilla, pero es un concepto importante a tener en cuenta

Acciones en sys.aud$

Hoy vamos a ver una entrada rápida y sencilla sobre una de las tablas que mas vamos a usar en la auditoría.

Cuando preguntamos a la tabla sys.aud$ por un evento ( por ejemplo ver los logins), lo hacemos en base a un código del campo action#.
pero , ¿cual es el listado de codigos y la descripcion?
La respuesta es muy sencilla, y se encuentra en la tabla audit_actions
Si queremos saber el listado de descripciones para nuestra tabla solo deberemos de hacer

SELECT action, name 
  FROM audit_actions
ORDER BY 1;

Otro ejemplo facil de uso, es, si queremos saber el código de accion para un borrado de usuario,lo podemos obtener con :

SELECT action 
          FROM audit_actions
        WHERE name='DROP USER';

Com veis, una tabla muy util y tremendamente sencilla de consultar

entradas searadas por comas en el tnsnames.ora

Hoy vamos a ver una funcionalidad sencillísima del tnsnames.ora, pero que nos permitirá tener nuestros ficheros mucho mas reducidos y ordenados.
Supongamos tenemos un fichero con las entradas:

PROD=
  (DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST=host1)(PORT=1521))
     (CONNECT_DATA=
        (SERVICE_NAME=factura)
     )
  )
PRODUCCION=
  (DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST=host1)(PORT=1521))
     (CONNECT_DATA=
        (SERVICE_NAME=factura)
     )
  )
FACTURACION=
  (DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST=host1)(PORT=1521))
     (CONNECT_DATA=
        (SERVICE_NAME=factura)
     )
  )

Como veis, tenemos 3 entradas totalmente idénticas que nos aumentan el fichero y puede dar a errores en el momento de cambiarlos.
Pues, hay una forma de simplificar mucho esto, y esta forma es ponerlos en una única entrada separada por comas

PROD,PRODUCCION,FACTURACION=
  (DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST=host1)(PORT=1521))
     (CONNECT_DATA=
        (SERVICE_NAME=factura)
     )
  )

Haciendo pruebas esto funciona (amenos desde las versiones 9i hasta la 12c) .
Una configuración muy sencilla que nos facilita mucho el mantenimiento del fichero

ORA-28221 REPLACE not specified cambiando la passwd de un usuario

Hoy vamos a ver una entrada muy muy básica.

En nuestro trabajo diario estamos acostumbrados a poder cambiar las contraseñas con el comando

ALTER USER usuario IDENTIFIED BY contraseña

Si le pedimos a un usuario que se cambie su contraseña, podemos encontrarnos con el error

 ORA-28221 REPLACE not specified

Que ha ocurrido?

La solucion es muy muy sencilla, simplemente ha de indicar cual es el password actual.
El código que debe de ejecutar un usuario para cambiar su contraseña es

ALTER USER usuario IDENTIFIED BY nuevacontraseña REPLACE antigua_contraseña ;

Como decíamos al principio , tremendamente sencillo, pero puede hacernos perder tiempo si no lo sabemos

Como siempre, mas informacion en la web de soporte en la noca OERR: ORA-28221 «REPLACE not specified» Reference Note (Doc ID 194726.1)

Rman DUPLICATE en 12c y Windows

Hoy vamos a ver una sencilla entrada en la que indicaremos como duplicar una base de datos en windows mediante RMAN DUPLICATE.
Este método está muy documentado en un montón de webs, pero , en entornos windows suele tener la pega ( como todo lo de Oracle+Windows) del servicio de windows.

Supongamos que tenemos una base de datos llanada PROD y que queremos clonarla para su uso en desarrollo en otra llamada DESA.
Además de esto, queremos modificar el path de los ficheros de la base de datos, ya que,en la máquina de desarrollo queremos que todo lo que esté en D: y E: pase a estar en Z:

Así pues, los pasos serán:

1- Creamos el init.ora de la instancia a partir de la clonada

Aunque hay documentos que te explican como crear un init mínimo, lo mejor y mas cómodo segun mi opinion es crear un sencillo pfile en texto dsde el spfile del origen

create pfile='initDESA.ora' from spfile;

2- Editamos el initSID.ora y cambiamos TARGET por SID en todas las lineas

Abriremos con cualquier editor el fichero que acabamos de generar y substituiremos la cadena PROD por DESA

3- Creamos el fichero de passwd

Tendremos que ir al $ORACLE_HOME/database crear nuestro fichero de password.

orapwd file=PWDDESA.ora password=mipasswd entries=6 force=y

4- Cramos el servicio de windows

Este es el paso que podemos evitarnos en unix, pero que es inevitable en windows

oradim -NEW -SID DESA -SYSPWD mipasswd -SRVC OracleServiceDESA -STARTMODE auto -SRVCSTART system -SPFILE

5- paramos y arrancamos en modo nomount

El proceso de creacion de servicio habrá arrancado la base de datos , pro lo que tendremos que entrar , pararla y dejarla arrancada en modo nomount.

6- añadimos las líneas de cambio de path en el nuevo INIT.ora

Este es el punto mas extraño ya que, las opciones de cambio de nombre del path del fichero no están en el fichero de comandos de rman, sino en el init.ora de la nueva base de datos.

Con estos comandos movemos tanto los logfiles como los datafiles normales a su nuevo path


LOG_FILE_NAME_CONVERT =('D:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA','E:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA')
DB_FILE_NAME_CONVERT = ('D:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA','E:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA')

7- Creamos el fichero de comandos rman


connect target sys/XXXX.@PROD;
connect catalog user/pass@CATALOG;
connect auxiliary /

CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 4;
CONFIGURE CHANNEL DEVICE TYPE SBT_TAPE parms 'ENV=(NSR_SERVER=backupserver, NSR_DATA_VOLUME_POOL=pollduplicados)';

RUN{
DUPLICATE TARGET DATABASE TO "DESA" ;

}

8-Lanzamos el duplicado

Ahora solamente queda lanzar el rman


rman cmdfile=comandos.crv logfile=duplicacion.log

Y un un tiempo record tendréis duplicada vuestra base de datos PROD renombrada a DESA y en el nuevo path Z:\oracle\ORADATA\DESA