Entradas

Mostrando entradas de febrero, 2008

Excepciones en PL/SQL

Manejo de excepciones En PL/SQL una advertencia o condición de error es llamada una excepción. Las excepciones se controlan dentro de su propio bloque.La estructura de bloque de una excepción se muestra a continuación. DECLARE -- Declaraciones BEGIN -- Ejecucion EXCEPTION -- Excepcion END ; Cuando ocurre un error, se ejecuta la porción del programa marcada por el bloque EXCEPTION , transfiriéndose el control a ese bloque de sentencias. El siguiente ejemplo muestra un bloque de excepciones que captura las excepciones NO_DATA_FOUND y ZERO_DIVIDE. Cualquier otra excepcion será capturada en el bloque WHEN OTHERS THEN . DECLARE -- Declaraciones BEGIN -- Ejecucion EXCEPTION WHEN NO_DATA_FOUND THEN -- Se ejecuta cuando ocurre una excepcion de tipo NO_DATA_FOUND WHEN ZERO_DIVIDE THEN -- Se ejecuta cuando ocurre una excepcion de tipo ZERO_DIVIDE WHEN OTHERS THEN -- Se ejecuta cuando ocurre una excepcion de un tipo no tratado -- en los bloques an

Mensajes de Texto en PLSQL

Para mostrar mensajes en PL/SQL existe un paquete denominado DBMS_OUTPUT que incluye un conjunto de procedimientos y funciones que permiten almacenar información en un "buffer", información que puede recuperarse más tarde. Estas funciones pueden utilizarse también para mostrar la información almacenada en dicho "buffer" a los usuarios. Dentro de estas funciones encontramos, por ejemplo, la función PUT_LINE que pone en el "buffer" parte de la información seguida por un "end-of-line". Esta función puede usarse también para mostrar texto a los usuarios. La función utiliza un único parámetro del tipo carácter y si la función se usa para mostrar mensajes a los usuarios, entonces el contenido del parámetro se corresponde con el contenido del mensaje. Ejemplo: dbms_output.put_line(texto_del_mensaje); Es importante tener en cuenta que para que la aplicación muestre los mensajes al usuario, el parámetro del entorno SQL*Plus SERVEROUTPUT debe estar

sysoper y sysdba

OBJETIVOS Breve articulo para referenciar a los usuarios con privilegios sysoper , sysdba el archivo de contraseñas de oracle y el rol DBA. INTRODUCCIÓN Cuando nos conectamos a oracle, podemos diferenciar entre dos grupos de usuarios: grupo 1: Usuarios que sólo se pueden conectar a la base de datos cuando está abierta. grupo 2: Usuarios que se pueden conectar a la base de datos tanto cuando esté abierto como cuando esté cerrada. Para saber sobre tipos de arranque de base de datos Los usuarios del Grupo 2 son aquellos que tiene el privilegio SYSOPER y/o el SYSDBA .Estos dos privilegios caracterizan a los usuarios de oracle puesto que pueden hacer operaciones de "seguridad" como arranque y parada de base de datos Para poder conectarte con estos privilegios sysdba y sysoper tienes que conectarte indicándo que quieres conectarte con esos privilegios. “sys as sysdba” “sys as sysoper Archivo o fichero de contraseñas En oracle existe un fichero de contraseñas d

Auditar Conexiónes

Se pretende mediante un sencillo ejemplo práctico para ver cómo se puede auditar las conexiónes a una base de datos ORACLE o auditar los intentos de modificación a las tablas de un usuario. Teniendo en cuenta que el parámetro que habilita la posibilidad de auditar la base de datos ORACLE en el init.ora es audit_trail que el comando sql que activa la auditoría sobre algo es AUDIT ( para desactivar NOAUDIT ) y que la tabla para mirar ( usuario sys ) el seguimiento de auditoría es dba_audit_trail vamos a realizar este sencillo ejemplo. Activar la auditoria de intento de conexiones fallidas para todos los usuarios. Miramos que actualmente no está activada la auditoria en la base de datos SQL> select name , value from v$parameter where name like 'audit_trail'; audit_trail NONE Activamos la auditoría de la base de datos SQL> alter system set audit_trail = DB scope = spfile; Reiniciamos la base de datos ( shutdown immediate, startup ) y comprobamos que la

Controlar el TableSpaces

OBJETIVOS Automatizar el control de espacios libre en los tablespaces de base de datos mediante un procedimiento pl/sql. Se pretende facilitar un procedimiento que compruebe el espacio libre del tablespace y si este es menor de un portentaje especificado del total se envie un correo de alerta para que el administrador pueda aumentar el tamaño del tablespace COMO VER EL ESPACIO LIBRE DE LOS TABLESPACES DE ORACLE Para ver el espacio libre que queda en un tablespace tenemos que mirar en la tabla dba_free_space SELECT tablespace_name, ROUND(sum(bytes)/1024/1024,0) FROM dba_free_space WHERE tablespace_name NOT LIKE 'TEMP%' GROUP BY tablespace_name; Con esta consulta obentemos el nombre del tablespace y el espacio en Megas libre Para ver el espacio total en un tablespace tenemos que mirar en la tabla dba_data_files SELECT tablespace_name, round(sum(BYTES/1024/1024),0) FROM dba_data_files b WHERE tablespace_name NOT LIKE 'TEMP%' GROUP BY b.tablespace_name; C

Usuarios

CREACIÓN DE USUARIOS Una de las más básicas tareas de un administrador de base de datos es identificar los usuarios. Cada usuario que conecta en la base de datos debe de tener una cuenta. En las cuentas compartidas son difíciles de aplicar una auditoria. Para crear un usuario utilizamos la sentencia CREATE USER . Cuando creas una cuenta como mínimo tienes que asignar un único nombre (username) y una contraseña para poder autenticarse. Para cambiar alguno de los atributos que se le ha añadido al usuario creado se utiliza la sentencia ALTER USER . AUTENTICACIÓN ORACLE Cuando uno se conecta con una instancia de una base de datos la cuenta de usuario debe de estar autenticada. ORACLE provee tres métodos de autenticación para nuestra cuenta de usuario. AUTENTICACIÓN MEDIANTE PASSWORD Cuando un usuario conecta con una base de datos verifica que este usuario y la contraseña introducida almacenada en la base de datos, sea correcta. Las contraseñas se guardan encriptadas en la base de datos (

Memoria de ORACLE

El total disponible de memoria en un sistema tiene que estar configurado de forma que todos los componentes de ese sistema funcionen óptimamente. Una pauta a seguir para que el sistema quede bien configurado podría ser el siguiente: Componentes del sistema Memoria del Sistema Oracle SGA Componentes ~ 50\% del total Sistema operativo + Otros componentes ~15\% del total Memoria de usuario ~ 35\% del total Esta es la primera pauta que podemos seguir a la hora de reservar o ver la memoria que se necesita o que se puede poner cómo máximo en un sistema para que Oracle funcione correctamente y los demás componentes del sistema puedan hacerlo también. ( habría que tener en cuenta también el número de usuarios que accederán concurrentemente al sistema ). Una vez que hemos decidido que la SGA de nuestra base de datos ORACLE va a ser el 50\% de la memoria total del sistema. Esta memoria la tenemos que dividir entre los componentes que

Arranque y Parada

Arrancar base de datos El arranque de una base de datos ORACLE requiere tres etapas Arrancar la instancia Montar la base de datos Abrir la base de datos Arrancar la base de datos En esta parte del arranque se generan los procesos background. Se crea la SGA. Sus dimensiones se basan en el fichero de inicialización "init.ora". SQLPLUS> connect sys as sysdba connected SQLPLUS> startup nomount Oracle Instance started Montar la base de datos En esta parte del proceso de arranque se produce la conexión al/los archivo/s de control. En este estado se puede: Cambiar el modo de archivado de la B.D. Renombrado de archivos de Redo Log o del asociado al tablespace SYSTEM Crear, modificar o suprimir nuevos Redo Log o grupos de Redo Log Partiendo del anterior estado ( nomount ), montamos la base de datos de la siguiente forma: SQLPLUS> alter database mount database mounted En caso de que queramos iniciar la base de datos en este estado bastaría con hacer lo si

El listener

Imagen
TNS Listener es un proceso servidor que provee la conectividad de red con la base de datos Oracle. El listener está configurado para escuchar la conexión en un puerto específico en el servidor de base de datos. Cuando una se pide una conexión a la base de datos, el listener devuelve la información relativa a la conexión. La información de una conexión para una instancia de una base de datos provee el nombre de usuario, la contraseña y el SID de la base de datos. Si estos datos no son correctos se devolverá un mensaje de error. Por defecto el puerto del listener es el 1521 El listener no limita el número de conexiones a la base de datos Toda la información del listener la contiene un archivo denominado listener.ora ( $ORACLE_HOME/network/admin. ) El comando para gestionar el listener es lsnrctl. Mediante este comando podemos: Parar el listener. Ver el estado del listener. Arrancar el listener. Rearrancar el listener. SEGURIDAD LISTENER ORACLE 10G (securing t

Diccionario de Datos

Imagen
Oracle posee un diccionario de datos; es decir la manera de extraer el catálogo de objetos de una base de datos, nos refererimos a: tablas, usuarios, roles, vistas, columnas de las tablas, secuencias, constraints, sinónimos, índices, triggers, funciones etc.., esta información se encuentra contenida en tablas y vistas del sistema. Dichas tablas en base a las cuales podemos obtener esta información aplicando sentencias sql. A continuación enumeramos las tablas más importantes del diccionario de datos que nos permitirá obtener información de los objetos de la base de datos. Notas: Los prefijos dba_ son exclusividad para los usuarios que tengan el rol dba que sería el administrador de la base de datos y mostraría información de accesos de los usuarios que tienen asignado dicho rol. Los prefijos_user indican que mostrará información en el ámbito del usuario que se encuentre conectado; [esquema].[objeto]. Información sobre todos los objetos: tablas, vistas, funciones, procedimientos, índice

Tablas

El lenguaje de definición de datos (DDL, Data Definition Language) es el encargado de permitir la descripcion de los objetos que forman una base de datos. El lenguaje de definición de datos le va a permitir llevar a cabo las siguientes acciones: Creación de tablas, índices y vistas. Modificación de las estructura de tablas, índices y vistas. Supresión de tablas, índices y vistas. Pero antes de continuar vamos a comentar la nomenclatura que emplearemos, si tiene algún conocimiento de programación le resultará familiar. Nomenclatura La sintaxis empleada para la sentencias en las diferentes páginas esta basada en la notación EBNF. Vamos a ver el significado de algunos simbolos. Símbolo Significado < > Encierran parámetros de una orden que el usuario debe sustituir al escribir dicha orden por los valores que queramos dar a los parámetros. [ ] Indica que su contenido es opcional. { } Indica que su contenido puede repetirse una o mas veces. | S

Sinónimos

Un sinónimo es un nombre alternativo que identifica un tabla en la base de datos. Con un sinónimo se pretende normalmente simplicar el nombre original de la tabla, aunque tambien se suelen utilizar para evitar tener que escribir el nombre del propietario de la tabla. No todas las bases de datos soportan los sinónimos. Para crear un sinónimo hay uque utilizar la sentencia CREATE SYNONYM especificando el nombre que deseamos utilizar como sinónimo y la tabla para la que estamos creando el sinónimo. CREATE SYNONYM FOR ; Ejemplo: El siguente ejemplo crea el sinónimo Coches para la tabla tCoches. CREATE SYNONYM Coches FOR tCoches; Para eliminar el sinónimo creado debemos emplear la sentencia DROP SYNONYM . DROP SYNONYM Coches;

Vistas

En el modelo de datos relacional la forma de guardar la información no es la mejor para ver los datos Una vista es una consulta, que refleja el contenido de una o más tablas, desde la que se puede acceder a los datos como si fuera una tabla. Dos son las principales razones por las que podemos crear vistas. Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la información que hay en una tabla, pero no a toda la tabla. Comodidad, como hemos dicho el modelo relacional no es el más comodo para visualizar los datos, lo que nos puede llevar a tener que escribir complejas sentencias SQL, tener una vista nos simplifica esta tarea. Las vistas no tienen una copia física de los datos, son consultas a los datos que hay en las tablas, por lo que si actualizamos los datos de una vista, estamos actualizando realmente la tabla, y si actualizamos la tabla estos cambios serán visibles desde la vista. Nota: No siempre podremos actualizar los datos de una vista, depende

Índices

Imagen
Definición de Índices Un índice es una estructura de datos que permite acceder a diferentes filas de una misma tabla a través de un campo (o campos clave). Un índice permite un acceso mucho más rápido a los datos. Introducción a los índices. Para entender lo que es un índice debemos saber primero como se almacena la información internamente en las tablas de una base de datos. Cada tabla se divide en páginas de datos, imaginemos un libro, podriamos escribirlo en "una sola hoja enorme" al estilo pergamino egipcio, o bien en páginas a las que podemos acceder rápidamente a traves de un índice. Está idea es la que se aplica en el mundo de las bases de datos, la información esta guardada en una tabla (el libro) que tiene muchas hojas de datos (las páginas del libro), con un índice en el que podemos buscar la información que nos interesa. Si queremos buscar la palabra zapato en un diccionario , ¿qué hacemos? Leemos todo el diccionario hasta encontrar la palabra, con lo qu

Subconsultas

Definición de subconsultas. Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT . Normalmente se utilizan para filtrar una clausula WHERE o HAVING con el conjunto de resultados de la subconsulta, aunque también pueden utilizarse en la lista de selección. Por ejemplo podriamos consultar el alquirer último de un cliente. SELECT CO_CLIENTE, NOMBRE, MARCA, MODDELO FROM ALQUILERES WHERE CO_CLIENTE = 1 AND FECHA_ALQUILER = ( SELECT MAX (FECHA_ALQUILER) FROM ALQUILERES WHERE CO_CLIENTE = 1) En este caso, la subconsulta se ejecuta en primer lugar, obteniendo el valor de la máxima fecha de alquier, y posteriormente se obtienen los datos de la consulta principal. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre paréntesis. La subconsulta se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula HA

Consultas agregadas

La cláusula GROUP BY La clausula GROUP BY combina los registros con valores idénticos en un único registro. Para cada registro se puede crear un valor agregado si se incluye una función SQL agregada, como por ejemplo Sum o Count, en la instrucción SELECT . Su sintaxis es: SELECT [ ALL | DISTINCT ] < nombre_campo > [{,< nombre_campo >}] [{, }] FROM < nombre_tabla >|< nombre_vista > [{,< nombre_tabla >|< nombre_vista >}] [ WHERE < condicion > [{ AND | OR }]] [ GROUP BY < nombre_campo > [{,< nombre_campo >}]] [ HAVING < condicion >[{ AND | OR }]] [ ORDER BY < nombre_campo >| [ ASC | DESC ] [{,< nombre_campo >| [ ASC | DESC ]}]] GROUP BY es opcional. Si se utiliza GROUP BY pero no existe una función SQL agregada en la instrucción SELECT se obtiene el mismo resultado que con una consulta SELECT DISTINCT . Los valores Null en los campos GROUP BY se