¿Tienes una cuenta? identificate: Usuario Contraseña o puedes obtener una gratis.

Scripts para deteccion de queries costosos

,
14/may/2009::11:17

Estos 2 scripts ayudan a detectar los eventos en espera PASO1 y despues con el valor HASH de dicho evento obtendremos el plan de ejecucion esto para cuando no tenemos disponible el ORACLE GRID.

PASO 1. Script para detector los eventos de espera:

 

select count(1), s.sql_hash_value, sw.event   

from v$session s, v$session_wait sw   

where s.sid=sw.sid  and sw.event!='SQL*Net message from client'

group by s.sql_hash_value,sw.event   

order by 3 desc;

 

 

PASO 2. A través del SQL_HASH_VALUE se puede obtener el plan de ejecución

 

select * from table(dbms_xplan.display_cursor(1424292821));

 

 

 

EJEMPLO

 

 

PASO1 Ejecutar el primer query.

 

COUNT(1)           SQL_HASH_VALUE          EVENT

 

1              4208348705         db file sequential read

1              1046569919         db file scattered read

1              0              db file parallel write

1              0              Streams AQ: waiting for messages in the queue

 

PASO 2. Usar el valor hash en el Segundo query

select * from table(dbms_xplan.display_cursor(4208348705));

 

 

PLAN_TABLE_OUTPUT

HASH_VALUE  4208348705, child number 0

--------------------------------------

SELECT /*+FIRST_ROWS*/ a.t$oorg FROM baandb.twhinh200451 a WHERE a.t$sfit = :1

 

Plan hash value: 1523578419

 

--------------------------------------------------------------------------------------

| Id  | Operation        | Name              | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT |                   |       |       | 14506 (100)|          |

|*  1 |  INDEX FULL SCAN | TWHINH200451$IDX5 |     1 |    51 | 14506   (4)| 00:02:55 |

--------------------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

---------------------------------------------------

 

   1 - access("A"."T$SFIT"=:1)

       filter("A"."T$SFIT"=:1)

 

[ Enlace | Un miserable comentario :( ] del.icio.us del.icio.us Estrella este post *****

Creacion de BD via script en ORACLE 10g

,
31/mar/2009::07:30

Para la creacion de una BD en ORace 10g, no necesariamente debemos emplear el DBCA (Database creation assitance), debido a que crea un tablespace llamado XDB el cual luego es un problema quitar, para hacerlo via script lo podemos ejecutar de la siguiente manera.

Primero se crea el archivo de variables de ambiente.

Debemos crear el archivo initDB_NAME.ora dentro del $ORACLE_HOME/dbs. Este archivo debe tener la siguiente sintaxis:

 

db_cache_size=805306368

java_pool_size=16777216

large_pool_size=16777216

shared_pool_size=1291845632

streams_pool_size=0

*.audit_file_dest='/oracle/admin/DB_NAME/adump'

*.background_dump_dest='/oracle/admin/DB_NAME/bdump'

*.compatible='10.2.0.3.0'

*.control_files='/dbname_sist000/oradata/DB_NAME/control01.ctl','/dbname_sist000/oradata/DB_NAME/control02.ctl','/dbname_sist000/oradata/DB_NAME/control03.ctl'

*.core_dump_dest='/oracle/admin/DB_NAME/cdump' 

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='DB_NAME'

*.disk_asynch_io=FALSE

*.dispatchers='(PROTOCOL=TCP) (SERVICE=DB_NAMEXDB)'

*.job_queue_processes=10

#*.log_archive_dest_1='LOCATION=/dbname_logs/logs'

*.open_cursors=3000

*.pga_aggregate_target=1073741824

*.processes=600

*.remote_login_passwordfile='EXCLUSIVE'

*.sessions=665

*.sga_target=2147483648

*.tape_asynch_io=FALSE

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS'

*.user_dump_dest='/oracle/admin/DB_NAME/udump'


 

Debemos asegurarnos de que los filesystem y rutas de archivos existan, si no existen se crean :D ya saben con mkdir. Una vez realizado esto, debemos crear nuestro archivo de creacion de DB el cual es un archivo SQL. el cual contendra la siguiente sintaxis:

 

CREATE DATABASE DB_NAME

USER SYS IDENTIFIED BY password

USER SYSTEM IDENTIFIED BY password

LOGFILE GROUP 1 ('/dbname_sist000/oradata/DB_NAME/redo01.rdo') SIZE 100M,

GROUP 2 ('/dbname_sist000/oradata/DB_NAME/redo02.rdo') SIZE 100M,

GROUP 3 ('/dbname_sist000/oradata/DB_NAME/redo03.rdo') SIZE 100M

MAXLOGFILES 50

MAXLOGMEMBERS 5

MAXLOGHISTORY 1

MAXDATAFILES 200

MAXINSTANCES 1

CHARACTER SET WE8ISO8859P1

NATIONAL CHARACTER SET AL16UTF16

DATAFILE '/dbname_sist000/oradata/DB_NAME/system01.dbf' SIZE 500M

EXTENT MANAGEMENT LOCAL

DEFAULT TEMPORARY TABLESPACE TEMP

TEMPFILE '/dbname_temp/oradata/DB_NAME/temp01.dbf'

SIZE 500M

UNDO TABLESPACE UNDOTBS

DATAFILE '/dbname_undo/oradata/DB_NAME/undotbs_001.dbf'

SIZE 500M  AUTOEXTEND OFF

SYSAUX DATAFILE '/dbname_sist000/oradata/DB_NAME/sysaux01.dbf' SIZE 500M autoextend off;

Una vez hecho esto, ejecutamos nuestro archivo de variables, para asegurarnos que estaremos en la DB correcta.

ya saben . ./DB_NAME.env

y nos conectamos via SQLPLUS, generalmente esto lo hacemos con el usuario oracle. asi que para conectarnos es mas facil con un simple 

startup nomount pfile='</path/initSID.ora>'


nos cercioramos que estamos en la BD correcta con un:
select instance_name from v$instance;


Y listo ejecutamos nuestro archivo con la siguiente instruccion:

@/home/crea_DB_NAME.sql


Y cuando finaliza ejecutamos los siguientes comandos desde SQL*PLUS:

@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/rdbms/admin/catdbsyn
@?/rdbms/admin/catexp
--- Como SYSTEM
cd /oracle/product/10.2/sqlplus/admin 
./pupbld 
<<--- la ruta esta en $ORACLE_HOME/sqlplus/admin 

Y no debemos olvidar la creacion del archivo de password para esta BD que creamos :

orapwd FILE=/oracle/dbs/DB_NAME.pwd PASSWORD=password ENTRIES=5


levantamos el listener y verificamso que este corriendo:

lsnrctl status

y listo! 
Para mayor referencia y algunos parametros extras pueden usar el siguiente link:


y una vez hecho esto la BD ya esta lista!! 

 

 

 

 

 

 

[ Enlace | Sin comentarios :'( ] del.icio.us del.icio.us Estrella este post *****

Renombrar Tablespace

,
11/mar/2009::12:54

Siguiendo con la administracion de BD actualmente podemos renombrar un tablespace y su datafiles en las versionas de ORACLE 10g para esto seguimos los siguientes pasos:

SQL> alter tablespace B_INDX_888 rename to B_INDX888;

Tablespace altered

Una vez hecho esto, ponemos el tablespace en modo OFFLINE y nos vamos a la ubicacion de dicho datafile, para renombrar el archivo a nivel SO:

/ora_indx014/oradata/b4bsiexp $ ll

total 62054464

-rw-r-----   1 oracle     dba        16043220992 Mar 11 12:42 B_INDX889_001.dbf

-rw-r-----   1 oracle     dba        15728648192 Mar 11 12:40 B_INDX_888_001.dbf

/ora_indx014/oradata/b4bsiexp $ mv B_INDX_888_001.dbf B_INDX888_001.dbf

Una vez renombrado el datafile tenemos de definir el nuevo Datafile en el tablespace correspondiente:

SQL> alter database rename file '/ora_indx014/oradata/b4bsiexp/B_INDX_888_001.dbf' to '/ora_indx014/oradata/b4bsiexp/B_INDX888_001.dbf';

Database altered

Y ahora ponemos el Tablspace en modo ONLINE y listo, si por alguna razon existen usuarios que tengan asignados este tablespace es necesario que se le defina nuevamente para evitar posibles errores.


[ Enlace | Un miserable comentario :( ] del.icio.us del.icio.us Estrella este post *****

Mover objetos de tablespace

,
16/feb/2009::12:59

PAra mover TAblas a otro tablespace

Alter table OWNER.TABLENAME move tablespace wh5_data;

 

PAra mover indices:

Alter index OWNER.INDEXNAME rebuild tablespace wh5_index;

 

Si se requiere modificar un trigger 

 

Primero se dropea el trigger

 

Drop Trigger OWNER.TRIGGERNAME;

y despues de modificar la secuencia en el trigger se ejecuta el script para crear el trigger:

 

CREATE OR REPLACE TRIGGER "OWNER"."TRIGGERNAME" BEFORE

INSERT ON "OWNER"."TRIGGERNAME" FOR EACH ROW 

DECLARE

BEGIN

IF :NEW.SERIALKEY IS NULL THEN

SELECT OWNER.TRIGGERNAME

INTO   :NEW.SerialKey

FROM   dual;

     END IF;

END;

 

 

[ Enlace | Un miserable comentario :( ] del.icio.us del.icio.us Estrella este post *****

Validacion de espacios en datafiles para los TBspaces

,
07/ene/2009::12:36

Este escript nos puede ser de utilidad para la clonacion de alguna BD

esto debido a que se requiere tener la misma estructura de filesystem para tener la BD identica, por lo que requerimos saber que filesystem se requieren crear a nivel SO y cuanto espacio ocuparan. Con este script lo lograran de manera mas rapida.

 

column Free_space_gb format 9999999.999

column Allocated_gb format 9999999.999

column Used_gb format 9999999.999

column tablespace format a35

column filename format a70


select ts.name tablespace, trim(substr(df.name,1,100)) filename, df.bytes/1048576000 allocated_gb,

((df.bytes/1048576000) - nvl(sum(dfs.bytes)/1048576000,0))used_gb,nvl(sum(dfs.bytes)/1048576000,0) free_space_gb

from V$DATAFILE df left outer join dba_free_space dfs on df.file# = dfs.file_id join V$TABLESPACE ts

on df.ts# = ts.ts# 

group by ts.name, dfs.file_id, df.name, df.file#, df.bytes UNION

select ts.name tablespace, trim(substr(df.name,1,100)) filename, df.bytes/1048576000 

allocated_gb, ((df.bytes/1048576000) - nvl(sum(dfs.bytes)/1048576000,0))used_gb,nvl(sum(dfs.bytes)/1048576000,0) 

free_space_gb

from V$TEMPFILE df left outer join dba_free_space dfs on df.file# = dfs.file_id join V$TABLESPACE ts

on df.ts# = ts.ts#

group by ts.name, dfs.file_id, df.name, df.file#, df.bytes

order by filename;

 

Y eso es todo amigos feliz año 

[ Enlace | Sin comentarios :'( ] del.icio.us del.icio.us Estrella este post *****

switcheo de Tablespace de UNDO

,
17/dic/2008::09:29

Cuando tienen un tablespace de UNDO a veces este espacio se llena demasiado y se requiere liberar y reutilizar el mismo

Para esto es necesario que se cree un nuevo tablespace de UNDO en el cual podemos hacerlo desde el OEM, dando click derecho en el tablespace de UNDO ya existente, y seleccionamos CREAR como.

Hecho esto, debemos indicarle a ORACLE que ese sera el UNDO por defecto:

Alter system set Undo_tablespace= UNDOTBS2 scope=both;

reiniciamos la BD

Dropeamos el tablespace anterior:

drop tablespace UNDOTBS incluiding contents and datafiles;

y despues regeneramos el tablespace (solamente le asignamos 1 Gb en primera instancia)

y ahora repetimos el proceso para establecer nuevamente nuestro espacio de deshacer.

 

Saludos cordiales

Cambio de parametros de ORACLE

,
12/dic/2008::15:50

Muchas veces se requiere el cambio de algunos parametros de Oracle para un mejor performance de las BD para esto se realiza lo siguiente:

 

ejecutar archivo de variables.

conectarse al SQL plus:

sqlplus '/as sysdba'

Realizamos el respaldo de los parametros actuales mediante el siguiente comando:

Create pfile from spfile;

despues de esto para cada parámetro haces lo siguiente:

  SQL> alter system set sessions=3500 scope=spfile;

 

System altered.

 

SQL> alter system set sga_max_size=13639876608 scope=spfile;

 

System altered.

 

SQL> alter system set sga_target=13639876608 scope=spfile;

 

System altered.

 

SQL> alter system set shared_pool_reserved_size=89758105 scope=spfile;

 

System altered.

 

SQL> alter system set sort_area_size=4194304  scope=spfile;

  y asi para cada parámetro.

 

Se reinicia la BD y listo los cambios se podran ver reflejados con un

Show parameters; 


[ Enlace | Sin comentarios :'( ] del.icio.us del.icio.us Estrella este post *****

Poner en Modo Archive una Bd en ORACLE

,
09/dic/2008::09:14

Si es necesario poner en modo archive una BD, es tan simple como lo siguiente:

ejecutar variables de ambiente

sqlplus '/as sysdba'

verficamos que estamos en la BD mediante la vista V$instance;

SQL> select instance_name from V$instance;

 INSTANCE_NAME

----------------

mydatabasename

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /ora_logs001/oradata/b4bsiexp/

Oldest online log sequence     35308

Next log sequence to archive   35317

Current log sequence           35317

 

y listo hemos cambiado la BD a Archivelog

Depuracion de Filesystem

,
08/dic/2008::08:41

En Oracle cuando tenemos una BD en modo archive, genera muchos archivos con la extension .arc el cual nos va a saturar en algunas ocasiones problemas de espacio, por lo que aqui esta la solucion a ese problema:

Exportar Variables de ambiente 

$rman

RMAN> connect target;

RMAN> crosscheck archivelog all;

RMAN> delete achivelog all;

confirmar que yes!

RMAN>exit;

 

y listo !

[ Enlace | Sin comentarios :'( ] del.icio.us del.icio.us Estrella este post *****

Creacion de oracle DB mediante Script

,
05/dic/2008::14:12

Bueno siguiendo con mi pequeño manual de autoayuda y que espero le sirva a algun dba principiante ahora les va la manera de generar una BD de manera automatica via script:

Primero debemos generar el script de la creacion de BD (este ejemplo es para 9g):

 

CREATE DATABASE CATPRCSC

USER SYS IDENTIFIED BY password

USER SYSTEM IDENTIFIED BY password

LOGFILE GROUP 1 ('/catprcsc_sist000/oradata/CATPRCSC/redo01.rdo') SIZE 100M,

GROUP 2 ('/catprcsc_sist000/oradata/CATPRCSC/redo02.rdo') SIZE 100M,

GROUP 3 ('/catprcsc_sist000/oradata/CATPRCSC/redo03.rdo') SIZE 100M

MAXLOGFILES 50

MAXLOGMEMBERS 5

MAXLOGHISTORY 1

MAXDATAFILES 200

MAXINSTANCES 1

CHARACTER SET WE8ISO8859P1

NATIONAL CHARACTER SET AL16UTF16

DATAFILE '/catprcsc_sist000/oradata/CATPRCSC/system01.dbf' SIZE 500M

EXTENT MANAGEMENT LOCAL

DEFAULT TEMPORARY TABLESPACE TEMP

TEMPFILE '/catprcsc_temp/oradata/CATPRCSC/temp01.dbf'

SIZE 500M

UNDO TABLESPACE undotbs

DATAFILE '/catprcsc_undo/oradata/CATPRCSC/undotbs01.dbf'

SIZE 400M  AUTOEXTEND OFF

SYSAUX DATAFILE '/catprcsc_sist000/oradata/CATPRCSC/sysaux01.dbf' SIZE 500M autoextend off;

Este archivo debera tener extension sql, este archivo lo ejecutaremos desde SQL*PLUS

Una vez creado esto, debemos de generar un archivo de parametros el cual debemos de guardar dentro del ORACLE_HOME (no es el home de oracle)

el cual debera contener los siguientes datos y se lo pueden nombrar como initCATPRCSC.ora
el contenido de este archivo sera el siguiente:
db_name=CATPRCSC
db_files = 400                                                         # SMALL
db_file_multiblock_read_count = 16                                  # MEDIUM
db_cache_size=500m
shared_pool_size = 300M                                            # SMALL
db_block_size=8192
log_checkpoint_interval = 10000
processes = 200                                                        # SMALL
parallel_max_servers = 5                                              # SMALL
log_buffer = 1048576                                                    # SMALL
max_dump_file_size = 10240      # limit trace file size to 5 Meg each
global_names = TRUE
control_files = ('/catprcsc_sist000/oradata/CATPRCSC/control01.ora',
                 '/catprcsc_sist000/oradata/CATPRCSC/control02.ora',
                 '/catprcsc_sist000/oradata/CATPRCSC/control03.ora')

undo_management=auto
undo_tablespace=UNDOTBS
sga_max_size=850M
compatible=9.2.0.0.0
background_dump_dest=/oracle10/db10/admin/CATPRCSC/bdump
user_dump_dest=/oracle10/db10/admin/CATPRCSC/udump
core_dump_dest=/oracle10/db10/admin/CATPRCSC/cdump

una vez creados estos archivos y ya con nuestras variables de ambiente creadas, nos conectamos con SQL*PLUs como sys e iniciamos nuestra BD en modo no mount

startup nomount

y ejecutamos nuestro script con @/home/oracle/CreaCATPRCSC.sql y esperamos el prompt.

Cuanto se termina el proceso se ejecutan los siguientes scripts desde SQL*PLUS:

Run catalog and catproc
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/rdbms/admin/catdbsyn
@?/rdbms/admin/catexp
--- Como SYSTEM

cd /oracle/product/10.2/sqlplus/admin
./pupbld
<<--- la ruta esta en $ORACLE_HOME/sqlplus/admin 

y una vez hecho esto la BD ya esta lista!! 
FELICIDADES!!


 

[ Enlace | Sin comentarios :'( ] del.icio.us del.icio.us Estrella este post *****

Variables de ambiente en 1,2 x 3

,
05/dic/2008::13:42

Bueno cuando tenemos varias BD o de plano nos conectamos a varios servidores y por alguna razon no estan nuestras variables de ambiente bien definidas en Unix(nos falta indicar ubicacion de archivos de oracle y ejectuabes entre otros etc)

Esta es la mejor opcion:

crear un archivo en vi, con extension .env

En este caso yo le pongo el nombre del SID de la BD ejm CATPRCSC.env

OJO: UNIX si es muy quisquilloso con los nombres de arhivos podemos tener el mismo nombre de archivo con solo cambiar una letra por minuscula y lo reconocera como un archivo completamente diferente por ejemplo: CATPRCSC.env, Catprcsc.env, CaTpRcSc.env etc asi que no mas fijense bien.

 

en el vi podemos indicar nuestras variables de ambiente del modo siguiente:

export ORACLE_BASE=/oracle10/db10 <-- la ruta de instalacion del oracle o donde estan los archivos de instalacion de oracle

export ORACLE_HOME=/oracle10/db10 <- la ruta donde esta una version en especifico de oracle

export PATH=$ORACLE_HOME/bin:$PATH <-- Donde se ecuentran los binarios de oracle

export LD_LIBRARY_PATH=/oracle10/db10/lib

export ORACLE_SID=CATPRCSC <--Definimos la BD que queremos configurar.

 

Una vez definidos estas variables las podemos ejecutar del siguiente modo:

$ . ./Archivo.env

y asi podremos conectarnos a nuestra BD sin problemas.

 

OJO!!! si tienes mas de una BD es importante que ejecutes estos archivos antes de cualquier operacion o actividad a realizar, debido a que puedes conectarte a una BD por error y provocar perdida de informacion o inconsistencia de datos


 

[ Enlace | Sin comentarios :'( ] del.icio.us del.icio.us Estrella este post *****

Depuracion del recyclebin en Oracle

,
03/dic/2008::17:22

Si alguna vez se presenta demasiada lentitud en alguna BD, ya sea para abrir las propiedades de algun tablespace mediante el OEM. El uso de esta sentencia ayuda a mejorar el performance de la BD.

para realizar esto en SQL*PLUS conectarse como sys.

 

Primero se verifican cuantos objetos existen.

select * from dba_recyclebin;

y despues realizamos la depuracion o purgado del mismo:

purge dba_recyclebin;

 

Se debe tener paciencia por que dependiendo de la cantidad de objetos es lo que tardara en realizarse esta actividad en promedio de 30 a 60 mins.

 

Saludos

 

 

[ Enlace | Un miserable comentario :( ] del.icio.us del.icio.us Estrella este post *****