martes, 24 de septiembre de 2019

Pasar CLOB a VARCHAR2

Simplemente creamos un campo nuevo y movemos los datos del clob al varchar2 
luego renombramos la columna y listo 
ALTER TABLE TEST ADD temp VARCHAR2(4000);
UPDATE TEST
   SET temp = DBMS_LOB.SUBSTR (a, 4000),
       a = NULL;
ALTER TABLE TEST DROP COLUMN A;

ALTER TABLE TEST RENAME COLUMN temp TO A;

jueves, 12 de septiembre de 2019

Sesiones que estan al tope de CPU


set pagesize 150 
col program form a30 heading "Program"
col CPUMins form 99990 heading "CPU in Mins"
select rownum as rank, a.*
from (
SELECT v.sid, program, v.value / (100 * 60) CPUMins
FROM v$statname s , v$sesstat v, v$session sess
WHERE s.name = 'CPU used by this session'
and sess.sid = v.sid
and v.statistic#=s.statistic#
and v.value>0
ORDER BY v.value DESC) a
where rownum < 11;

lunes, 2 de septiembre de 2019

Ejecutar un query en varias bases de datos.

Muchas veces pasa que nos pides verificar por ejemplo 5 bases de datos standby o varias que sucedio algo "X" y nuestros incorregibles jefes nos piden..

"Decime como estan TODAS las bases de datos ... "

Claro, ahi es donde nos convertimos en Dios O Tusan O Coperfield y les respondemos

"SI YA TE DIGO..... "

un ejemplo practico es el siguiente;

Esto ocurre a veces cuando se compila un pkg en la primaria, en alguna de las stdby queda mal en la memoria y da ese error, como en general no saben en qué stdby falla, la solución es quitarlo de la shared pool en todas,

ORA-04045: errors during recompilation/revalidation of APP_ESDC81.PACK_DATA_COMMONS
ORA-16000: database open for read-only access
ORA-06508: PL/SQL: could not find program unit being called: 

es aleatorio,  por lo que el problema debe de darse en uno de los servers readonly

por esto hice el siguiente shell.

for b in
(nombre de las instancias de base de datos, en este caso todas las standby de esta fucking empresa)
cvprdsb6 cvprdsb7 cvprdsb8 cvprdsb5 cvprdsb4 cvprdsb13 cvprdsb14 cvprdsb15 cvprdsb16 cvprdsb17 cvprdsb18 cvprdsb19 cvprdsb20 cvprdsb3 cvprdsb9 cvprdsb2 cvprdsb10 cvprdsb12 cvprdsb11 cvprdsb1 cvprdsb21 cvprdsb22 cvprdsb23 cvprdsb24 bicvprdsb cvprdsb25 cvprdsb29 cvprdsb26 cvprdsb27 bicvprdsb
do
  echo "======================="
  echo "Base: "$b
  echo "======================="
   sqlplus "sys/pass@$b as sysdba" <<+
exec dbms_shared_pool.purge('APP_ESDC81.PACK_DATA_COMMONS','P');
+
done

En alguna bd puede llegar a tardar unos minutos, es normal.
Asi como el exec se puede hacer cualquier consulta masiva a todas las bases de datos.

Espero que les sea de utilidad.


RMAN - Cuando no se encuentra un archive log --- RMAN-06726: could not locate archived log

  Lo importante en todo esto, es estar dentro del catalogo correspondiente, sino el crosscheck NO FNCIONA !!   oracle backup of logfiles is ...