Archive for May 2008
Triggers en RAC 10g
22. May 2008 by mstaub.
Hola Francisco, mi consulta es la siguiente. Hace unos días cree dos triggers para pinear objetos en el RAC (uno por cada nodo). Lo que no estoy seguro es cómo se ejecutan los trigges, si ambos se ejecutan sobre un nodo, o se ejecutan sobre los distintos nodos.
No sé si existe algún parámetro para indicar sobre qué nodo debe ejecutarse el trigger, porque a pesar que los cree en cada nodo, ambos aparecen en ambas máquinas.
Agradezco desde ya tu respuesta.
Posted in Consultas | Print | 6 Comments »
Grupo de Usuarios Oracle de Chile
15. May 2008 by fmunoz.
Estimados,
Es con gran Orgullo que les informo del nacimiento del “Grupo de Usuarios Oracle de Chile”, o “Chilean Oracle User Group” con su sigla “CLOUG”. para acceder a este y hacerse miembro, que por el momento es gratuito deben ir a:
Muchos saludos a todos,
Francisco Munoz Alvarez
Posted in Principal | Print | No Comments »
Presentacion MOF - Version 1.2 (En Ingles)
9. May 2008 by admin.
Presentacion MOF - Version 1.2
Estimados,
Esta es la presentacion MOF en que estoy trabajando para cambiar la metodologia de Servicio aqui en Datacom en este momento. Estoy habierto a comentarios sobre el tema y sugerencias.
Gracias por la participacion de todos,
Saludos,
Francisco Munoz Alvarez
Posted in Tutoriales | Print | 1 Comment »
Acelerando Imports en 9i
7. May 2008 by fmunoz.
Aqui van algunos tips para ayudarte con la performance de un import en 9i.
1- Analyze solo despues de la carga (Analyze=n)
2 -Tener el export a ser importado en un disco separado de los de datos de la BD.
3- Usar commit=n
4- Utilizar un solo segmento de rollback grande y poner los demas offline durante import
5- Utilizar indexes=n y recrearlos despues de terminado el import
6- Utilizar un buffer grande para el import. ejemplo:
(opcion del import - tiempo seg -Reduccion %)
commit=y - 120 - 0
commit=y,buffer=64000 - 100 - 17%
commit=n,buffer=30720 - 72 - 40%
commit=n,buffer=64000 - 67 - 44%
7- Pre-crear tablas anticipadamente con scripts y setear ignore=y
8- Setear db_cache_size y log_buffer para un tamano mayor
9- Parar archive, (ALTER DATABASE NOARCHIVELOG;)
Despues de terminada la carga, no olvidarse de crear los indices y generar estadisticas nuevas.
Espero haberte podido ayudar con estos tips.
Saludos,
Francisco Munoz Alvarez
Posted in White Papers | Print | 1 Comment »
Tuning Grupos de Redologs
6. May 2008 by fmunoz.
Estimados,
En mi carrera, varias veces me toco ver situacion y discusiones sobre cuando y como crear nuevos grupos de Redologs en una BD Oracle.
Como ejemplo sitare una situacion que ocurrio en 2 grandes proyectos de Chile (No citare nombres para no causar problemas con algunos colegas). Mi idea de recurir a este tema no es causar discusiones y si plantear mi vision y solucion para problemas de este tipo.
Cuando se descubre un gran volumen de contecion (Wait) en redologs, en las mayoria de las veces al ver el numero de log switches se descubre que hay un gran numero de cambio de redologs por hora o en algunos casos en pequenas ventanas de tiempo.
Ejemplo:
En la BD en question ocurrian mas de 110 log switches por hora y en algunas situaciones, llegaba a casi 600.
Esta BD tenia 10 grupos de redo con dos miembros de 10 MB cada uno. Una BD de 800 GB de tamano y muy transaccional.
Debido a esto, esta BD se pisaba la cola muchas veces durante el dia causando seria contencion en ese sentido. Ese fue el motivo de mi discucion con ciertos Gurus de Oracle en Chile. La solucion de ellos era crear mas grupos de redo de 10MB, por ejemplo de 10 a 50 grupos para disminuir las veces que se pisaba la cola el log switch. Esto en mi opinion no solucionaba el problema ya que el numero de log switches por hora continuaria igual que antes. Es como por ejemplo, estar en un bote que se esta hundiendo, y para evitar esto utilizas una cuchara de sopa para sacar el agua. Por mas que te esfuerces el agua que entra es mayor al que sale. Puedes hacerlo mas rapido y solo lograras hundirte y cansarte como loco. Pero si en vez de una cuachara usaras un balde de 5 litros, podrias sacar el agua mas rapido de lo que entra y evitar que se hunda, caso sea necesario, utilizarias un balde mayor caso el monto de agua que entra es mas grande. Lo mismo se aplica en este sentido. Por eso, yo discutia que habia que aumentar el tamano de los miembros de cada grupo para controlar esta situacion. Es correcto que aumentar el tamano de los miembros de los grupos de Redolog aumentara el tamano de cada archive log, y consequentemente demorara mas el tiempo de recuperacion en caso de falla ya que la cantidad de transacciones a ser aplicada por cada archive sera mayor. Pero que es mejor?
En esta situacion se generan mas de 1000 archives de 10MB cada uno diariamente, sera mejor aplicar 1000 archives en caso de ser necesaria una recuperacion de la BD por falla fisica o logica 24 hrs despues del ultimo respaldo o aplicar 100 archives de 100MB? o 10 de 1GB? Aumentar el tamano de los miembros de los grupos de Redologs ayuda a evitar que se llenen muy rapido y que causen contencion a nivel de I/O y del LGWR y ARC.
Para saber el numero de log switches en su BD puede ejecutar el siguiente script:
spool logs.log
set echo on
set linesize 150
set pagesize 500
column day format a16 heading ‘Dia’
column d_0 format a3 heading ‘00′
column d_1 format a3 heading ‘01′
column d_2 format a3 heading ‘02′
column d_3 format a3 heading ‘03′
column d_4 format a3 heading ‘04′
column d_5 format a3 heading ‘05′
column d_6 format a3 heading ‘06′
column d_7 format a3 heading ‘07′
column d_8 format a3 heading ‘08′
column d_9 format a3 heading ‘09′
column d_10 format a3 heading ‘10′
column d_11 format a3 heading ‘11′
column d_12 format a3 heading ‘12′
column d_13 format a3 heading ‘13′
column d_14 format a3 heading ‘14′
column d_15 format a3 heading ‘15′
column d_16 format a3 heading ‘16′
column d_17 format a3 heading ‘17′
column d_18 format a3 heading ‘18′
column d_19 format a3 heading ‘19′
column d_20 format a3 heading ‘20′
column d_21 format a3 heading ‘21′
column d_22 format a3 heading ‘22′
column d_23 format a3 heading ‘23′
column Total format 9999
column status format a8
column member format a40
column archived heading ‘Archived’ format a8
column bytes heading ‘Bytes|(MB)’ format 9999
Ttitle ‘Log Info’ skip 2
select l.group#,f.member,l.archived,l.bytes/1078576 bytes,l.status,f.type
from v$log l, v$logfile f
where l.group# = f.group#
/
Ttitle off
prompt =========================================================================================================================
Ttitle ‘Log Switch on hour basis’ skip 2
select to_char(FIRST_TIME,’DY, DD-MON-YYYY’) dia,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’00′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’00′,1,0))) d_0,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’01′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’01′,1,0))) d_1,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’02′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’02′,1,0))) d_2,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’03′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’03′,1,0))) d_3,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’04′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’04′,1,0))) d_4,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’05′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’05′,1,0))) d_5,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’06′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’06′,1,0))) d_6,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’07′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’07′,1,0))) d_7,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’08′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’08′,1,0))) d_5,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’09′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’09′,1,0))) d_9,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’10′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’10′,1,0))) d_10,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’11′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’11′,1,0))) d_11,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’12′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’12′,1,0))) d_12,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’13′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’13′,1,0))) d_13,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’14′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’14′,1,0))) d_14,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’15′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’15′,1,0))) d_15,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’16′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’16′,1,0))) d_16,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’17′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’17′,1,0))) d_17,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’18′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’18′,1,0))) d_18,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’19′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’19′,1,0))) d_19,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’20′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’20′,1,0))) d_20,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’21′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’21′,1,0))) d_21,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’22′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’22′,1,0))) d_22,
decode(sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’23′,1,0)),0,’-',sum(decode(substr(to_char(FIRST_TIME,’HH24′),1,2),’23′,1,0))) d_23,
count(trunc(FIRST_TIME)) Total
from v$log_history
group by to_char(FIRST_TIME,’DY, DD-MON-YYYY’)
order by to_date(substr(to_char(FIRST_TIME,’DY, DD-MON-YYYY’),5,15) )
/
Ttitle off
prompt
spool off
Espero que esta nota ayude a algunos de uds a detectar este tipo de situaciones, es muy comun encontrar esto en muchas Bases de Datos. Es increible lo que ayuda cuando se detecta y se soluciona este problema.
Para finalizar acuerdense que cada vez que ocurre un log switch, ocurre un checkpoint o sea imaginense que si esta ocurriendo un log switch 100 veces en una hora, 100 veces el oracle limpio el buffer a disco, 100 veces actualizo los header (encabezados) de todos los archivos de la BD ,100 veces genero archives y mucho mas cosas que ocurren por debajo a nivel de procesos, consultas,etc. En estos casos dejamos el pobre DBWR que es el encargado de hacer esto con la lengua afuera y empiezan a ocurrir los “incomplete checkpoints” en el alert.log. Ya pueden imaginarse la cantidad de I/O generada tambien.
Espero haberles ayudado a entender este importante proceso de tuning de una BD.
Muchos Saludos,
Francisco Munoz Alvarez
Posted in White Papers | Print | No Comments »
Problemas con RMAN - RMAN-03009
5. May 2008 by coberreuter.
Tengo el siguiente error con RMAN:
RMAN-03009: failure of allocate command on t1 channel at 04/30/2008 22:42:08 ORA-03113: end-of-file on communication channel
el script es el siguiente:
Recovery Manager: Release 10.2.0.1.0 - Production on Wed Apr 30 22:42:01 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: QLCNT (DBID=4121126273)
connected to recovery catalog database
RMAN> run {
2> allocate channel t1 type ’sbt_tape’
3> parms ‘ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin/tdpo_h.opt)’;
4>
5> # realiza un backup del controlfile to trace, queda en el udump.
6> sql ‘alter database backup controlfile to trace’;
7>
8> # respaldar base datos.
9> backup incremental level = 0
10> filesperset 6
11> tag = ‘qlcnt_lv0′
12> format ‘qlcnt_df_men_%T_%u’
13> database keep until time ’sysdate+9999′ logs;
14>
15> # respaldar archivelogs
16> backup format ‘qlcnt_ar_men_%T_%u’ archivelog all delete input;
17>
18> release channel t1;
19> }
20>
21>
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of allocate command on t1 channel at 04/30/2008 22:42:08
ORA-03113: end-of-file on communication channel
Posted in Consultas | Print | 3 Comments »
Script CheckList.sql para verificar status de Instancia
4. May 2008 by jpuga.
prompt
prompt
prompt ################################################################################
prompt
prompt
prompt By Mohit sharma
prompt mohit.sharma@india.com
prompt
prompt Edited By
prompt juanpuga@gmail.com
prompt
prompt ################################################################################
set linesize 132
set pagesize 1000
spool report.txt
prompt #### Up Time ####
select ‘Hostname : ‘ || host_name
,’Instance Name : ‘ || instance_name
,’Started At : ‘ || to_char(startup_time,’DD-MON-YYYY HH24:MI:SS’) stime
,’Uptime : ‘ || floor(sysdate - startup_time) || ‘ days(s) ‘ ||
trunc( 24*((sysdate-startup_time) -
trunc(sysdate-startup_time))) || ‘ hour(s) ‘ ||
mod(trunc(1440*((sysdate-startup_time) -
trunc(sysdate-startup_time))), 60) ||’ minute(s) ‘ ||
mod(trunc(86400*((sysdate-startup_time) -
trunc(sysdate-startup_time))), 60) ||’ seconds’ uptime
from sys.v_$instance;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Object status
select object_type,status,count(*) cnt from user_objects group by object_type,status;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Invalid objects
select owner, object_type, substr(object_name,1,30) object_name
from sys.dba_objects
where status=’INVALID’
order by object_type;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Recover files
select * from sys.v_$recover_file;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> partitioned table
select table_name from user_tables where partitioned=’YES’;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Free space in Tablespace
Select tablespace_name,sum(bytes/1024/1024) from sys.dba_free_space group by tablespace_name;
prompt
prompt
prompt ################################################################################
prompt .>>>>>>Max Extents Status
select segment_name, segment_type, extents, max_extents from sys.dba_segments where max_extents-extents<100;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Any partitioned Object approaching to max extents
SELECT PARTITION_NAME,EXTENTS,MAX_EXTENTS,NEXT_EXTENT,max_extents-nvl(next_extent,0) FROM sys.dba_segments
where max_extents-nvl(next_extent,0) < 1000
and partition_name is not null;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Block Contention
SELECT class,sum(count) total_waits, sum(time) total_time FROM v$waitstat GROUP BY class;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Latch Contention
SELECT a.name,100.*b.sleeps/b.gets ratio1,100.*b.immediate_misses/decode((b.immediate_misses+b.immediate_gets),0,1) ratio2
FROM v$latchname a, v$latch b WHERE
a.latch# = b.latch# AND b.sleeps > 0;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Top 10 Queries using more disk reads
select disk_reads,sql_text from v$sqlarea where disk_reads>10000 and rownum < 11 order by disk_reads desc;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Top 10 Queries using more buffer reads
select buffer_gets,sql_text from v$sqlarea where buffer_gets>10000 and rownum < 11 order by buffer_gets desc;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> buffer cache hit ratio
select (1- (sum(decode(a.name,’physical reads’,value,0)))/
(sum(decode(a.name,’db block gets’,value,0)) +
sum(decode(a.name,’consistent gets’,value,0)))) * 100 pct
from v$sysstat a;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Reloads/Pins in v$librarycache
select sum(pins) “executions”,sum(reloads) “cache Misses”,sum(reloads)/sum(pins)*100 “Ratio” from v$librarycache;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Get miss ratio from v$rowcache
select (sum(getmisses)/sum(gets)) * 100 “Hit Ratio” from v$rowcache;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> Redo log space request ratio in v$systat
select (req.value*5000)/entries.value “ratio”
from v$sysstat req,v$sysstat entries
where req.name=’redo log space requests’ and entries.name=’redo entries’ ;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> RBS Contention
select sum(waits)/sum(gets)*100 from v$rollstat;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> sorts stats
Select * from v$sysstat where name like ‘%sorts%’;
prompt
prompt
prompt ################################################################################
prompt .>>>>>> datafiles I/O
select name, phyrds, phywrts from v$datafile df, v$filestat fs where df.file# = fs.file# order by phyrds;
prompt
prompt
prompt
prompt
spool off
Posted in Monitoreo, Tuning | Print | No Comments »
Cual es la manera mas rapida de hacer un Export/Import en Oracle 9?
4. May 2008 by jpuga.
Hola:
Como te comentaba hace un rato, me gustaría saber cual es la manera mas rápida de hacer un Export/Import en Oracle 9i, con ciertas condiciones:
- Desde una Maquina de Producción a otra de Producción
- La maquina de Origen tiene Oracle 9i o 10g
- La maquina de Destinotiene Oracle 9i.
- Ambas maquinas se encuentran en el mismo rango de IP.-
- En la maquina de destino siempre se realiza el Import (Es un proceso recurrente)
Conozco dos formas:
1.- Hacer un Export Full y luego el Import Full de manera directa.- Pero esto tomaría mucho tiempo.-
2.- Hacer un Export Full, y luego hacer el Import por partes, es decir:
- Borrar todas las tablas.-
- Hacer el Import de sólo las Tablas (Sobreescribiendo la data).-
- Crear los Índices.-
- Otorgar los privilegios de accesos.-
Gracias !!!
Posted in Consultas | Print | 2 Comments »