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

Para desfragmentar/calcular estadisticas en ORACLE

,
24/jul/2009::18:25

Esto nos permite un mejor acceso a los datos y un performance ingon:

 

Movemos las tablas e indices a un tablespace con extents uniformes:

alter table SYSADM.PS_BR_DAD_TBL MOVE tablespace GAPPC;
alter index SYSADM.PS_BR_DAD_TBL REBUILD tablespace PSINDEXC;
alter table SYSADM.PS_GP_PI_MNL_DATA MOVE tablespace GAPPC;
alter index SYSADM.PS_GP_PI_MNL_DATA REBUILD tablespace PSINDEXC;
alter table SYSADM.PS_GPMX_SDIVAR_WA MOVE tablespace GAPPC;
alter index SYSADM.PS_GPMX_SDIVAR_WA REBUILD tablespace PSINDEXC;

Y se ejecutan las estadisticas

execute dbms_stats.gather_table_stats(ownname=> 'SYSADM', tabname=> 'PS_BR_DAD_TBL',estimate_percent=> 100 cascade=> TRUE);
execute dbms_stats.gather_table_stats(ownname=> 'SYSADM', tabname=> 'PS_GP_PI_MNL_DATA',estimate_percent=> 100 cascade=> TRUE);
execute dbms_stats.gather_table_stats(ownname=> 'SYSADM', tabname=> 'PS_GPMX_SDIVAR_WA',estimate_percent=> 100 cascade=> TRUE);

Habilitar TRACE en Oracle

,
22/jul/2009::18:32

Si requieren hacer un trace en una BD para su posterior analisis

Solo tienen que hablitarlo del archivo SQLNET.ORA ubicado en el $ORACLE_HOME/network/admin

y cambiar los parametros marcados en ROJO de Off a ON

$ more sqlnet.ora

# SQLNET.AUTHENTICATION_SERVICES= (NONE)

trace_level_client = 16

trace_file_client = cli

trace_directory_client = /oracle90/network/trace

trace_unique_client = off

trace_timestamp_client = off

log_file_client = archivo_trace_

log_directory_client = /oracle90/network/log

 

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

Cuanto tiempo lleva corriendo el SLQ service?

,
10/jul/2009::10:07

Aunque el diccionario de datos de SQL server no es tan amplio como lo conocemos en ORACLE, por ahi se encuentran algunos scripts que te permiten saber algo como el tiempo que lleva ejecutandose el servicio se SQL server en tu servidor

Para realizar esto lo ejecutamos en MASTER y listo:

 

PARA SQL 2000:

select 'El servicio de Sql Server Service ha estado corriendo por '
+ cast((datediff(hh, crdate, getdate()))/24 as varchar(3)) + ' dias y '
+ cast((datediff(hh, crdate, getdate())) % 24 as varchar(2)) + ' horas'
from sysdatabases where name = 'tempdb'

PARA SQL 2005:
select 'El servicio de Sql Server Service ha estado corriendo por'
+ cast((datediff(hh, create_date, getdate()))/24 as varchar(3)) + ' dias y '
+ cast((datediff(hh, create_date, getdate())) % 24 as varchar(2)) + ' horas'
from sys.databases where name = 'tempdb'

Si lo que simplemente quieres saber es cuando se levanto el servicio entonces este es mejor y mas practico

-- Sql Server 2000 y Sql Server 2005
select crdate from sysdatabases where name = 'tempdb'
-- Sql Server 2005
select create_date from sys.databases where name = 'tempdb'
[ Enlace | Sin comentarios :'( ] del.icio.us del.icio.us Estrella este post *****

Deteccion de espacio en el TBS de UNDO

,
08/jul/2009::10:13

Generalemente este espacio se llena en oracle y deja lo que llamamos WATERMARK o la marca de agua, el cual es el nivel maximo que se ocupo en dicho espacio, por lo que a veces no es exacto decir que esta al 100% por lo que con este script

podran detectar cuanto espacio estan usando en dicho tablespace.

 

 

 

 

select

 

'Espacio de UNDO usado:'||nvl(sum(t.used_ublk * TO_NUMBER(x.value)/1024),0)||' kbytes' AS undofrom v$transaction t, v$parameter x where x.name = 'db_block_size';

select

 

'De un total disponible de: '||to_char( (sum(bytes)/1024),'999,999,999,999')||' kbytes' size_kbfrom dba_data_files where tablespace_name like 'UND%';

Y listo sabran cuanto estan usando de su tablespace de UNDO

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

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