Mostrando entradas con la etiqueta ORACLE. Mostrar todas las entradas
Mostrando entradas con la etiqueta ORACLE. Mostrar todas las entradas

lunes, 2 de febrero de 2009

ORACLE. Cursor variables

Las variables implicitas dentro de un cursor son:

  1. cursor%ISOPEN -> True/False. Devuelve si el cursor está abierto, es decir, después de ejecutar open, y al contrario, es decir, después de ejecutar close.
  2. cursor%FOUND ->True/False. Después de ejecutar fetch, devuelve si el cursor contiene datos. Si se alcanza más allá del último registro después de fetch, la variable devuelve FALSE.
  3. cursor%NOTFOUND ->True/False. Contrario del FOUND.
  4. cursor%ROWCOUNT -> Número. Número de registros afectados en la selección. Después de open, equivale al número total, pero el número decrece después de cada fetch.
Hay que tener en cuenta que FOUND, NOTFOUND y ROWCOUNT no se pueden utilizar antes de abrir el cursor con open, ya que darían una excepción.

Suerte en el mundo Oracle!!!

domingo, 1 de febrero de 2009

ORACLE. Obtener plan de ejecución

Para poder obtener el plan de ejecución podemos utilizar básicamente 2 métodos:

  1. Si queremos obtener el plan pero no guardarlo, ejecutar SET AUTOTRACE ON EXPLAIN antes de ejecutar el SQL que queremos analizar. Una vez finalizado ejecutar SET AUTOTRACE OFF. Para poder obtener utilizar este comando, primero ejecutar $ORACLE_HOME/sqlplus/admin/plustrce.sql y dar el permiso plustrace al usuario ("grant plustrace to ;")
  2. Si queremos guardarlo utilizar EXPLAIN PLAN SET STATEMENT_ID='MI CODIGO' INTO PLAN_TABLE FOR y después ejecutar "SELECT OPERATION, OPTIONS, OBJECT_NAME FROM PLAN_TABLE WHERE STATEMENT_ID='MI CODIGO'. La tabla utilizada es la que definida por defecto pero podemos definir una propia nuestra.

Suerte en el mundo Oracle!!!!

miércoles, 14 de enero de 2009

ORACLE. Función de texto SUBSTR y INSTR

Ya sea dentro de PL/SQL o bien en el mismo SQL Plus las funciones de gestión de textos son muy utilizadas. Algunas con mayor o menor acierto.

Unas de las más utilizadas, sobre todo el tratamiento de flags, tenemos a:

SUBSTR(cadena,inicio,longitud) para extraer unas letras de un texto. Los parámetros:
  • cadena = Texto
  • inicio = Posición Inicial, por defecto 1. Si el valor es negativo, p.e. -1, la posición inicial es la longitud de la cadena -1. Si ponemos 0, Oracle pondrá 1.
  • longitud = Longitud del texto a extraer. En caso de omitirse se extrae todo el string.
Ejemplos

substr('abcdefg', 3, 2) = 'cd'
substr('abcdefg', 3) = 'cdefg'
substr('abcdefg', -3, 1) = 'e'

IN
STR(cadena,cadena_a_buscar, inicio, iteración) para buscar la posición donde se encuentra la cadena a buscar. Los parámetros:
  • cadena = Texto donde se buscará
  • cadena_a_buscar = Texto que se buscará
  • inicio = Posición Inicial, por defecto 1. Si el valor es negativo, p.e. -1, la posición inicial es la longitud de la cadena -1 y entonces la busqueda es modo reverso
  • iteración = Número de vez que buscamos.
En caso de encontrar se devuelve 0.

Ejemplos

instr('abcdeabcde', 'e') = 5
instr('abcdeabcde', 'e',1,1) = 5
instr('abcdeabcde', 'e',1,2) = 10
instr('abcdeabcde', 'e',-2,1) = 5
instr('abcdeabcde', 'a',-2,2) = 1

sábado, 27 de diciembre de 2008

ORACLE. Comandos Linu

Cualquier DBA sabe que necesita interaccionar con el sistema operativo tanto para el tuning de la base de datos, así como para administrarla.

Aquí pongo una lista de los comandos que yo utilizo, que seguro que son pocos y que espero con el tiempo de ampliar, así que cualquier comentario será bueno:

  • ps -fu oracle. Listado de los procesos pertenecientes al usuario oracle
  • ps -ef. Listado completo de los procesos actuales
  • sysctl -p. Carga los parámetros del Kernel definidos en /etc/sysctl.conf
  • sysctl -a. Lista de los parámetros actuales del kernel.
  • lsof -p . Listado de los ficheros actualmente en uso por un proceso PID
  • lsof -u oracle. Listado de los ficheros actualmente en uso por el usuario oracle
  • free -tlos 10 -c 15. Lista cada 10 segundos y 15 iteraciones el uso de la memoria (física y swap).

viernes, 14 de noviembre de 2008

ORACLE. Saber usuario conectado ( whoami )

Para saber el usuario conectado, algo como whoami de linux, podemos:
  1. select user from dual;
  2. show user;
y ya está !!!!!

lunes, 3 de noviembre de 2008

ORACLE. Cargar ficheros textos ASCII

Para cargar un fichero de texto ASCII en Oracle, utilizaremos sqlldr y:
  • Fichero de Entrada (Input file) que son los que contienen los datos,
  • Fichero de configuración (Control file, control= ) que son los que definen la estructura del fichero de entrada y que hacer con los registros
  • Fichero de resultado  y errores (Log file)
  • Fichero de registros erroneos (Bad File), es decir, registros que incumplen la integridad.
  • Fichero de registros rechazados (Reject file), es decir, registros que incumplen una cierta condición.
Ejemplos: Cargar los empleados en la tabla emp, siendo la longitud variables 
                                  y separados por coma

load data
infile 'datos.txt'
into table empleados
fields terminated by "," optionally enclosed by '"'   
( codigo, nombre, salario, departamento )

Ejemplos: Cargar los empleados en la tabla emp, siendo la longitud variables 
                                  y separados por coma

load data
infile 'datos.txt'
into table empleados
fields terminated by "," optionally enclosed by '"'   
( codigo, nombre, salario, departamento )

sábado, 6 de septiembre de 2008

ORACLE. Como ejecutar un comando del S.O. desde SQLPLUS

Hay veces que hemos necesitado ejecutar un comando del s.o.
estando en sqlplus, podemos hacerlo de dos formas:

1. Dentro de sqlplus: host
2. Saliendo momentaneamente de sqlplus: ! + + + exit

Y ya está !!!!

miércoles, 3 de septiembre de 2008

ORACLE. MTTR y recuperación rápida

Es aconsejable para que la recuperación de nuestra instancia sea más rápida y sobre todo controlada, establecer un valor al parámetro FAST_START_MTTR_TARGET con un valor entre 1 y 3600 (1h).

Este parámetro establece el tiempo máximo de recuperación en segundos después de un inicio de recuperación de una instancia (http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams068.htm#sthref192).

En mi caso yo lo tengo a 5 minutos, para tampoco no notarlo en el rendimiento:

alter system set fast_start_mttr_target = 300;

Este valor no debería de ser superior al que Oracle tiene estimado, pues entonces no se tendría en cuenta y no nos serviría de mucho. Ver ambos valores es facil con:

select target_mttr, estimated_mttr from v$instance_recovery;

Es aconsejable desactivar los antiguos parámetros que gestionaban el MTTR:

alter system set log_checkpoint_interval = 0;
alter system set log_checkpoint_timeout = 0;
alter fast_start_io_target = 0;



Más info también en http://www.akadia.com/services/ora_checkpoint_tuning.html

lunes, 18 de agosto de 2008

ORACLE. Sizing Undo

Tamaño (en Kb): Undo Retention (en segundos) * Undo per second * DB_BLOCK_SIZE

Undo Retention = Tiempo de Undo necesario
Undo per second = Numéro de bloques undo generados por segundo ( SELECT (SUM(undoblks))/ SUM ((end_time - begin_time) * 86400) FROM v$undostat;)
DB_BLOCK_SIZE = Tamaño de bloque (show parameter DB_BLOCK_SIZE)

jueves, 7 de agosto de 2008

ORACLE. Mover datafile

Para mover un datafile que no pertenece ni ha SYSTEM ni a los redo log, los pasos a hacer es:

connect sys/password as sysdba
alter tablespace mi_tablespace offile;
alter tablespace mi_tablespace rename datafile 'path_anterior' to 'path_nuevo';
!mv 'path_anterior' 'path_nuevo'
alter tablespace mi_tablespace online;

Vistas interesantes
v$tablespace
v$datafile -> select df.name from v$datafile df, v$tablespace ts where df.ts#=ts.ts# and ts.name='mi_tablespace';

jueves, 22 de mayo de 2008

ORACLE. Otros Backup de archivos necesarios

En esto de la informática cualquier precaución es poca, y en Oracle todabía más. En mi caso, al no utilizar por ahora RMAN, he hecho queda cada dia el cron me haga un backup/traza de mis controlfiles, así como un volcado actualizado de mi spfile a un fichero plano, para que ante cualquier situación pueda editarlo y modificarlo.

Para crear el backup/traza del los controfile solo hay que hacer:
alter database backup controlfile to trace;

Para saber donde lo guarda solo hay que buscar el ultimo fichero de traza (*.trc) dentro de user_dump (show parameter user_dump_dest).

En cuanto al SPFILE en formato plano, tan fácil como
create pfile from spfile;