sql server - oracle administrador

Anuncio
INSTITUTO SUPERIOR TECNOLÓGICO
NORBERT WIENER
Manual del Alumno
ASIGNATURA: Aplicativos IV (SQL
Server / Oracle Administrador)
PROGRAMA: S3C
Lima-Perú
2
Manual del Alumno
1. QUÈ ES SQL SERVER
SQL SERVER es un sistema de administración de base de datos relacionales
(RDBMS, Relational Database Management System) cliente – servidor que utiliza
transact – SQL para enviar peticiones entre un cliente y SQL Server.
1.1 Arquitectura cliente – servidor
SQL Server utiliza la arquitectura cliente – servidor para separar la carga de trabajo en
tareas que se ejecuten en equipos servidores y en tareas que se ejecuten en equipos
clientes.
 El cliente es el responsable de la lógica empresarial y de presentar los datos al
usuario. Normalmente, el cliente se ejecuta en uno o varios equipos cliente, pero
también se puede ejecutar en el equipo servidor con SQL Server.
 SQL Server administra las bases de datos y asigna los recursos disponibles del
servidor, como la memoria, el ancho de banda de la red y las operaciones de
disco, entre las distintas peticiones.
1.2 Sistema de administración de base de datos relacionales
El sistema de administración de base de datos relacionales 8RDBMS) es el responsable
de:
 Mantener las relaciones entre los datos de la base de datos.
 Asegurar que los datos estén correctamente almacenados: que no se infrinjan las
reglas que se definen las relaciones entre los datos.
 Recuperar todos los datos hasta un punto de coherencia garantizada en caso de
un error del sistema.
1.3 Transact – SQL
SQL Server utiliza Transact – SQL, una versión del lenguaje de consulta estructurado
(SQL, Structured Query Language), como lenguaje de consultas y programación de sus
bases de datos. SQL puede tener acceso a los datos y consultar, actualizar y administrar
sistemas de datos relacionales.
Los organismos American Nacional Standards Institute (ANSI) e internacional
Standards Organización (ISO) han definido los estándares de SQL. Transact – SQL
acepta el último estándar SQL ANSI publicado en 1992, llamado ANSI SQL – 92.
además de muchas extensiones que amplían sus funciones.
1.4 Integración de SQL Server con Windows NT
Seguridad.
SQL Server está integrado con el sistema de seguridad de Windows NT. Dicha
integración permite utilizar un único nombre de usuario y contraseña para tener acceso a
SQL Server y a Windows NT. SQL Server utiliza también las características de cifrado
de Windows NT para la seguridad de la red. SQL Server proporciona su propia
seguridad para los clientes que no sean sistemas de Microsoft.
Soporte para multiprocesador.
SQL Server acepta la capacidad de multiproceso simétrico (SMP) de Windows NT.
SQL Server aprovecha automáticamente los procesadores adicionales que se agregan al
equipo servidor.
Visor de sucesos de Microsoft.
SQL Server escribe mensajes en los registros de sucesos de aplicación, seguridad y
sistemas de Windows NT, que proporcionan un mecanismo coherente para examinar y
efectuar el seguimiento de los problemas.
3
Manual del Alumno
Servicios de Windows NT.
SQL Server se ejecuta como servicio en Windows NT, lo que permite iniciar y terminar
SQL Server de forma remota.
Monitor de sistema de Windows NT.
SQL Server envían medidas de rendimiento al monitor del sistema de Windows NT,
que permite supervisar el rendimiento del sistema con SQL Server.
Microsoft cluster Server.
Microsoft Cluster Server, un componente de Windows NT edición Enterprise, acepta la
conexión dos servidores o nodos en un cluster para obtener una mayor disponibilidad y
una mejor administración de los datos
4
Manual del Alumno
MODULO 3: Administración de la seguridad
1. IMPLEMENTACIÓN DEL MODO DE AUTENTICACIÓN
En SQL Server se puede implementar el modo de autenticación de Windows NT o el
modo Mixto. Esta sección describe el proceso de cada modo, los pasos que hay que
seguir para implementar la autenticación y cómo crear cuentas de inicio de sesión.
Proceso de Autenticación
Como procesa SQL Server las cuentas de inicio de sesión que autentica Windows NT:
 Cuando un usuario conecta con SQL Server, el cliente abre una conexión de
confianza con SQL Server, que pasa el grupo de y la cuenta de Windows NT del
usuario a SQL Server. Como el cliente sabe tiene abierta una conexión de confianza,
SQL Server sabe que Windows NT ya ha validado la cuenta de inicio de sesión.
 Si SQL Server encuentra la cuenta de usuario o de grupo de Windows NT en la lista
de cuentas de inicio de sesión de SQL Server que se encuentra en la tabla del
sistema syslogins, acepta la conexión. SQL Server no necesita volver a validar la
contraseña porque Windows NT y a ala ha validado.
Como SQL Server procesa las cuentas de inicio de sesión que el mismo autentica:
 Cuando un usuario conecta con una cuenta de inicio de sesión y contraseña de SQL
Server, este comprueba si existe la cuenta de inicio de sesión en la tabla syslogins y
si la contraseña especificada coincide con la contraseña registrada.
 Si SQL Server no tiene establecida una cuenta de inicio de sesión para el usuario, la
autenticación falla y la conexión se rechaza.
5
Manual del Alumno
Creación de cuentas de inicio de sesión
Master.. syslogins
Suid
Name
Loginname
NULL
NULL
BUILTIN/administrators
NULL
NULL
Accountingdomain/ caroyl
6
Acconuntingdomain/ maría
Accountingdomain/ maría
7
Mary
mary
1
Sa
Sa
Puede crear cuentas de inicio de sesión a partir de usuarios y grupos de Windows NT, o
puede crear nuevas cuentas de inicio de sesión en SQL Server.
Las cuentas de inicio de sesión están almacenadas en la tabla del sistema master...
syslogins. Cuando se agrega una cuenta de inicio de sesión a SQL Server, se le suele
asignar una base de datos predeterminada. La asignación de una base de datos
predeterminada a una cuenta de inicio de sesión no crea una cuenta de usuario en esa
base de datos, sino que establece el contexto predeterminado para las acciones que
ejecute el usuario.
Agregar una cuenta de inicio de sesión de Windows NT a SQL Server .
Puede utilizarse el administrador corporativo de SQL Server o el procedimiento
almacenado del sistema sp _ grantlogin (sólo los administradores del sistema pueden
ejecutarlo) para permitir que una cuenta de usuario o de grupo de Windows NT conecte
con SQL Server.
Sintaxis:
sp_grantlogin {'inicio de sesión'}
Inicio de sesión: es el nombre del usuario o grupo de Windows NT que se va agregar.
La siguiente tabla enumera otros procedimientos almacenados del sistema que, se
pueden usar para administrar cuentas de inicio de sesión de Windows NT.
Procedimiento almacenado del sistema
sp_revokelogin
sp_denylogin
Descripción
Quita de SQL Server las entradas de cuenta
De inicio de sesión de un usuario o grupo
de Windows NT.
Impide que un usuario o grupo de
Windows NT conecte con SQL Server.
Agregar una cuenta de inicio de sesión de SQL Server.
Puede utilizarse el administrador corporativo de SQL Server o el procedimiento
almacenado del sistema sp_ addlogin (solo los administradores del sistema pueden
ejecutarlo) para crear una cuenta de inicio de sesión de SQL Server.
Sintaxis: sp_ addlogin 'inicio de sesión', 'contraseña',' base de datos'
2. ASIGNACIÓN DE CUENTAS DE INICIO DE SESIÓN A FUNCIONES.
Las funciones proporcionan un medio para agrupar usuarios en una sola unidad a la que
se pueden aplicar permisos.
SQL Server proporciona funciones fijas de servidor, funciones fijas de base de datos y
funciones de base de datos definidas por el usuario.
Funciones fijas de servidor
6
Manual del Alumno
Las funciones fijas del servidor permiten agrupar los privilegios administrativos en el
nivel del servidor. Se administran de forma independiente de las bases de datos de
usuario en el nivel del servidor y se almacenan en la tabla del sistema master..
syslogins.
En la tabla siguiente se muestran algunas:
Función
Permiso
Sysadmin
Realizar cualquier actividad
Dbcreator
Crear y alterar bases de datos
Diskadmin
Administrar archivos
Processadmin
Administrar procesos de SQL Server
Serveradmin
Condigurar el servidor
Setupadmin
Instalar duplicación
Security
Administrar y auditar inicios de sesión.
Funciones fijas de base de datos.
Las funciones fijas de base de datos permiten agrupar los privilegios administrativos en
el nivel de base de datos. Las funciones fijas de base de datos están almacenadas en la
tabla del sistema sysusers de cada base de datos.
En la tabla siguiente se muestran algunas:
Función
Public
db_owner
db_ accessadmin
db_ddladmin
db_securityadmin
db_backupoperator
db_datareader
db_datawriter
Permiso
Es una función de base de datos especial a
la que pertenecen todos los usuarios.
Mantiene los permisos predeterminados.
Realiza cualquier actividad de funciones
Agregar o eliminar usuarios de bases de
datos, grupos y funciones.
Agregar, modificar o eliminar objetos
Asignar permisos de funciones y objetos
Realizar
copias
de
seguridad
y
restauraciones.
Leer datos de cualquier tabla
Agregar, cambiar o eliminar datos de las
tablas
7
Manual del Alumno
db_denydatareader
db_denydatawriter
No puede leer datos de cualquier tabla
No puede cambiar los datos de cualquier
tabla.
Funciones de bases de datos definidas por el usuario.
La creación de una función de base de datos definida por el usuario permite crear un
grupo de usuarios con un conjunto de permisos comunes.
Agregue una función
 Cuando un grupo de personas necesite realizar el mismo conjunto de
actividades en SQL Server.
 Si no tiene permisos para administrar las cuentas de usuario de Windows
NT
Creación de una función de base de datos definida por el usuario:
Sintaxis :
sp_ addrole función, propietario
Ejemplo
Exec sp_addrole Managers, dbo
Asignación de una cuenta de seguridad a una función de base de datos defiida por el
usuario.
Sintaxis:
sp_addrolemenber función, cuenta de seguridad
Exec sp_addrolemenber Manangers, Alicia
3. ASIGNACIÓN DE PERMISOS A USUARIOS Y FUNCIONES
8
Manual del Alumno
Después de haber asignado cuentas de inicio de sesión a cuentas de usuario y funciones,
debe asignar permisos para exigir la seguridad de la base de datos.
Los permisos especifican para qué objetos de la base de datos tienen autorización los
usuarios y qué pueden hacer los usuarios con esos objetos. Los permisos que en usuario
tiene en una base de datos dependen de los permisos de la cuenta de usuario y de las
funciones a las que pertenezca el usuario. Es importante diseñar los permisos que valla a
conceder a cada usuario o cada grupo. Todas las bases de datos tienen su propio
sistema de permisos independiente.
Tipos de permisos
Hay tres tipos de permisos en SQL Server de instrucción, de objeto y predefinidos
Permisos de instrucción
Son los permisos que se le asignan a un usuario cuando se le agrega a un grupo o a una
función como una consecuencia de su propiedad sobre un objeto.
Por ejemplo, cualquier miembro de la función sysadmin tienen los permisos suficientes
como para desarrollar cualquier acción que tenga lugar durante la instalación de SQL
Server.
Los permisos de instrucción son:
CREATE DATABASE
CREATE TABLE
CREATE VIEW
CREATE PROCEDURE
CREATE RULE
CREATE DEFAULT
BACKUP DATABASE
BACKUP LOG
Permiso de objeto
Son los permisos que se aplican a grupos de objetos, tales como por ejemplo tablas o
vistas, que permiten que los usuarios interactúen con el objeto.
9
Manual del Alumno
Los permisos de objeto son:
SELECT
TABLE
INSERT
VIEW
DELETE
REFERENCES
SELECT
UPDATE
REFERENCES
EXEC
Permisos predefinidos
COLUMN
STORED PROCEDURE
10
Manual del Alumno
Solo los miembro de funciones fijas o los propietarios de los objetos de bases de datos
pueden hacer ciertas actividades. Los permisos que ejecutan dichas actividades se
conocen como personas predefinidas o implícitas.
Los permisos predefinidos son:
Fixed role
Object: owner.
MODULO 4: ADMINISTRACIÓN DE ARCHIVOS DE BASE DE DATOS
1. INTROIDUCCIÓN A LAS BASES DE DATOS.
 Al crear una base de datos es importante comprender como SQL Server 7.0
almacena los datos para poder calcular y especificar la cantidad de espacio en
disco que hay que asignar a la base de datos. Tenga en cuenta los siguientes
hechos y directrices acerca del almacenamiento.
 Todas las bases de datos tienen un archivo de datos principal (.mdf) y uno o varios
archivos de registro de transacciones (.ldf). Una base de datos también puede tener
archivos de datos secundarios (.ndf)
 Cuando se crea una base de datos, se hace una copia de la base model, que incluye
las tablas del sistema. El tamaño mínimo de una base de datos debe ser igual o
mayor que el tamaño de una base de datos model.
 Los datos se almacenan en bloques de 8KB de espacio contiguo en disco,
llamados páginas. Esto significa que una base de datos puede almacenar 128
páginas por 1 MB.
 Las filas no pueden abarcar más de una página. Por tanto, la máxima cantidad de
datos en una fila, quitando el espacio necesario para la cabecera de la fila es 8060
bytes.
 Las tablas y los índices se almacenan en exenciones. Una extensión son 8 páginas
contiguas o 64 KB. Por tanto, una base de datos tiene 16 extensiones por
Megabyte. Las tablas pequeñas pueden compartir extensiones con otros objetos de
la base de datos.
 Los archivos de los registros de transacciones contienen toda la información
necesaria para recuperar la base de datos en caso de un error del sistema. De forma
predeterminada, el tamaño del registro de transacciones es el 25 por ciento del
tamaño de los archivos de datos. Utilice esta proporción como punto de partida y
ajústela en función de la necesidades de la aplicación.
Como se almacenan los datos:
Base de Datos
Datos
Datos
(archivos)
(archivos)
.mdf o .ndf
Registro
(archivos)
.ldf
Extensión (8 espacios
Contiguos, páginas de 8
KB)
Datos
11
Manual del Alumno
Página (8 KB)
Tamaño máximo de fila = 8060 bytes.
2. CONFIGURACIÓN DEL SERVIDOR
A través de este artículo pretendemos explicar brevemente las opciones de
configuración de SQL Server 7. No se trata de ofrecer una explicación exhaustiva de
todos los aspectos de la configuración del servidor, sino de un repaso básico para tener
una visión global de cuáles son los puntos clave. Si necesitas más información debes
consultar los Books On line o Libros en pantallas, que sin duda constituyen la mejor
información existente sobre SQL Server.
Pantalla principal.
La pantalla de configuración es accesible haciendo clic con el botón de la derecha sobre
el servidor desde el administrador corporativo (Enterprise Manager) y seleccionando la
opción “Propiedades” en el menú contextual.
La pantalla principal muestra información general sobre el servidor. Incluyendo la
versión de NT y otras informaciones útiles, como la página de códigos del servidor.
Las tres opciones de Autoinicio permiten iniciar los servicios de SQL Server de forma
automática al arrancar el equipo.
Desde esta ventana también podemos acceder a los parámetros de inicio del servidor:
12
Manual del Alumno
Los parámetros de inicio son los siguientes:
Opciones de inicio Descripción
- drutaAccesoArchivo,Master. La ruta de acceso completa del archivo de la base de
datos master.
- erutaAccesoRegistroErrores. La ruta de acceso completa del archivo de registro de
errores.
- lrutaAccesoRegistroMaster. La ruta de acceso completa del archivo de registro de la
base de datos master.
- c Permite no ejecutar SQL Server como un servicio de NT.
- f Inicia SQL Server con la configuración mínima. Esto permite reparar un error en la
configuración.
- m Inicia SQL Server en modo de usuario único.
- n No Utiliza el registro de aplicación de Windows NT para registrar sucesos de SQL
Server.
- pnivelPrecisión Específica el nivel máximo de precisión que van a admitir los tipos de
datos decimal y numeric.
- sclaveRegistro Permite iniciar SQL Server con datos de configuración almacenados en
otra clave de Registry que no sea la clave por defecto. Sólo puede utilizarse desde la
línea de comandos.
/Ttraza # Indica que SQL Server se debe iniciar con un indicador de traza.
-x Deshabilita el mantenimiento de estadísticas. Permite el máximo rendimiento.
Memoria
A pesar de que lo más recomendable es permitir que SQL Server gestione
dinámicamente la memoria, si es necesario un ajuste fino puede realizarse desde esta
pantalla:
13
Manual del Alumno
Cuando se utiliza la opción de asignación dinámica, SQL Server controla
periódicamente la cantidad de memoria que necesita para trabajar y toma memoria del
sistema o la suelta según sus necesidades. Sin embargo, deja siempre 5 MB libres para
NT, con el objeto de evitar la paginación del código del sistema.
Esas 5 MB pueden recuperarse utilizando una asignación fija de memoria. Sin embargo,
el propio SQL Server nos advierte de las asignaciones conflictivas: desplazar la
asignación de memoria a las zonas amarillas o rojas supone asignar demasiada poca
memoria a NT. Si asignamos menos memoria a NT de la que necesita incurriremos en
una penalización del rendimiento general.
La reserva de memoria física para SQL Server permite bloquear memoria para evitar
que Windows NT la asigne a otros procesos si es necesario. Esta configuración puede
acelerar el rendimiento de SQL Server, pero puede ir en detrimento de otros procesos
del sistema, como el propio NT, y pueden producirse errores de memoria insuficiente.
No obstante, si el servidor es un servidor totalmente dedicado a SQL Server y NT
dispone de suficiente memoria para sus procesos, esta opción permite acelerar el
rendimiento.
Procesador
Desde esta pantalla se controla el uso de procesadores de SQL Server.
Si la máquina dispone de varios procesadores, puede asignarse los procesadores que
utilizará SQL Server chequeando la casilla correspondiente.
14
Manual del Alumno
La opción máximo de subprocesos secundarios (maximun worker threads) establece el
número máximo de subprocesos abiertos por las conexiones a SQL Server. Cada
conexión a SQL Server realiza sus operaciones en un subproceso (thread)
independiente, lo que puede acelerar considerablemente la ejecución de consultas ,
sobre todo en equipos con varios procesadores. (SMP).
Sin embargo, la creación de subprocesos consume recursos del sistema, no solo por el
tiempo necesario para crearlos sino por el aumento en la complejidad de la gestión de
esos subprocesos. Si un sistema con un solo procesador llega a tener muchos
subprocesos abiertos el rendimiento general bajará bastante.
La forma de evitar esa paralización es disminuir el número máximo de subprocesos
abiertos. De esta forma, cuando llegue a SQL Server una nueva conexión, si se ha
superado el número de subprocesos máximo el sistema esperará a que un subprocesos
quede libre y asignará la nueva conexión a ese subproceso. Esto no significa que
disminuya el rendimiento, al contrario lo más probable es que algún subproceso se
libere muy rápidamente y pueda asignarse con mucha rapidez a la nueva conexión,
evitando el gasto de recursos que supone abrir un nuevo subproceso.
La opción aumento de prioridad (priority boost) permite cambiar la prioridad de los
procesos de NT y SQL Server. Por defecto, los procesos de NT tienen prioridad 7 en un
equipo con un solo procesador y 15 en un SMP. Si activamos esta opción, los procesos
de NT pasan a tener prioridad 15 y 24 respectivamente. No se aconseja el uso de esta
opción en máquinas de un solo procesador.
La opción utilizar fibras de Windows NT (Use Windows NT Fibers) permite repartir
mejor el trabajo entre varios procesadores. Las fibras y los subprocesos son muy
parecidos, salvo en que las fibras están controladas por la aplicación mientras que los
subprocesos están controlados por el núcleo del sistema operativo. Las fibras forman
parte del sistema de subprocesos, es decir, un subproceso puede tener varias fibras, pero
no al revés. El cambio de tareas entre subprocesos es más costoso en recursos que el
cambio de tareas entre fibras.
Si se utiliza el sistema de fibras en un equipo SMP, SQL Server asigna un subproceso a
cada CPU, y a partir de ese momento las conexiones se ejecutan en fibras
independientes dentro de cada subproceso. Esto mejora mucho el rendimiento, pero sólo
es factible en máquinas con varios procesadores.
Las opciones de paralelismo sólo están disponibles en equipos con varios procesadores.
El sistema de consultas en paralelo permite procesar consultas complejas con un plan de
ejecución en paralelo, es decir, con varios subprocesos atendiendo a la misma consulta.
Los ejemplos de consultas que se pueden ejecutar en paralelo son los SubQueries,
como por ejemplo este:
SELECT orderID, COUNT(*) AS Order_Count
FROM orders
WHERE orderdate >='1997/04/01'
AND orderdate < DATEADO (mm,3,'1997/04/01'
AND EXISTS
(
SELECT*
FROM [order details].
WHERE orders. orderID = [order details]. orderID
AND orders. ShippedDATE<orders.RequiredDATE
)
GROUP BY orderID
ORDER BY orderID
15
Manual del Alumno
Mediante esta opción puede determinarse el número de procesadores que SQL Server
utilizará en una consulta ejecutada en paralelo.
El criterio que SQL Server utiliza para determinar si una consulta ha de ejecutarse en
paralelo o no es muy complejo, y puede examinarlo buscando “Grado de paralelismo”
en los Books Online. Sin embargo, podemos ajustarlo mediante la opción umbral de
costo para paralelismo (cost threshold for parallelism). Cuando más alto sea el umbral
más compleja ha de ser una sentencia para que SQL Server se decida a ejecutarla en
paralelo, así que podría pensarse que el mejor número es el más bajo. Pero esto no es
cierto: Planificar una consulta en paralelo también cuesta un tiempo. Y ese tiempo sólo
merece la pena gastarlo cuando la consulta sea realmente compleja. El valor
predeterminado es 5, lo que supone un compromiso entre la complejidad de la consulta
y el tiempo necesario para planificarla.
Seguridad
Desde esta pestaña se controlan las opciones de seguridad del servidor.
La opción de autentificación establece el tipo de seguridad que utilizará el servidor a la
hora de verificar los permisos de acceso. Microsoft recomienda utilizar siempre
seguridad integrada (y aún lo recomienda más en el caso de utilizar Windows 2000) de
modo que esta opción siempre está disponible. La opción de seguridad propia de SQL
Server es la opción por defecto.
El nivel de auditoria permite grabar en el Registro de Eventos de NT los sucesos
relacionados con la conexión.
La cuenta de inicio de servicio es determinante a la hora de ejecutar según qué tareas
desde SQL Server. Puede escogerse entre utilizar la cuenta de sistema, que
probablemente no tendrá acceso a algunos recursos (impresoras, unidades de red)o
utilizar una determinada cuenta. Bajo esa cuenta se ejecutarán todas las tareas que
realice SQL Server (incluyendo procedimientos almacenados, paquetes de DTS, etc.) .
16
Manual del Alumno
Los procesos planificados el SQL Server Agent se ejecutan bajo una cuenta que se
configura separadamente.
Conexiones
Esta pantalla administra las opciones de conexión
El número máximo de conexiones concurrentes permite limitar la cantidad de
conexiones simultáneas a SQL Server. Cada conexión requiere aproximadamente 40 kb
de modo que utilizar esta opción puede servir para controlar los recursos del sistema. Si
se deja a 0, SQL Server permitirá abrir tantas conexiones como admita el hardware,
hasta un total de 32.767.
Las opciones de conexión se aplican de forma automática a todos los usuarios
conectados y son las siguientes:
Configuración Descripción
Comprobación de restricciones sin efecto en SQL Server 7, se incluye por
compatibilidad con SQL Server 6.x
Transacciones implícitas. Cuando esta opción está activada, cualquier sentencia inicia
una transacción que luego ha de confirmarse explícitamente. No es necesario escribir
BEJÍN TRAN, pero si es necesario hacer un COMMIT TRAN para que la sentencia se
confirme. Si está desactivado, las transacciones se confirman de forman automática
cuando la sentencia se ejecuta correctamente.
Cerrar cursos al confirmar Cierra los cursores abiertos de forma automática cuando se
ejecuta un COMMIT o un ROLLBACK de una transacción.
17
Manual del Alumno
ANSI Warnings Habilita los avisos que se producen en determinadas condiciones de
error.
ANSI Padding. Esta opción actúa sobre el tratamiento que se le da a los valores varchar
y varbirary cuando contienen blancos o cero a la derecha. Si la opción está activada, los
valores varchar y varbinary no se truncan si contienen blancos o ceros a la derecha,
respectivamente. Si la opción está desactivada, los valores se truncan, y los tipos de
datos char y binary, se comportan como si fueran varbinary y varchar.
ANSI Nulls Cuando esta opción esta activada, una operación de igualdad entre dos
valores nulos devolverá FALSE.
Abortar en errores aritméticos Termina una consulta cuando se produce un error de
desbordamiento o de división entre cero durante la ejecución de una consulta.
Ignorar errores aritméticos Devuelve un valor NULL cuando se produce un error de
desbordamiento o de división entre cero durante una consulta.
Utilizar identificaciones con comillas Cuando esta opción esta activada, los
identificadores y las palabras reservadas en una sentencia SQL
pueden ir
entrecomillados.
NOCOUNT Desactiva el mensaje que se devuelve al final de cada instrucción. Que
indica el número de filas afectadas.
ANSI NULLS por defecto Cuando esta opción está activada. Las nuevas columnas que
se crean en las tablas y aceptarán valores nulos si no se especifica lo contrario.
La opción siguiente permite que otros servidores se conecten al servidor local. Esta
opción debe estar activada cuando el servidor interviene en replicaciones o cuando se
han de ejecutar tareas contra otro servidor. El tiempo máximo de espera en una
conexión remota puede establecerse en la remota.
La opción Exigir transacciones distribuidas fuerza al servidor a utilizar DTC en
transacciones en las que intervengan varios servidores.
Opciones de servidor.
La siguiente pantalla muestra opciones que se aplican al servidor:
18
Manual del Alumno
La opción de lenguaje por defecto establece el formato de mensajes, nombres de meses,
días de la semana, fechas y otras características relativas a la localización. El lenguaje se
establece para cada login y puede cambiarse si se desea.
La opción de permitir modificaciones en las tablas de catálogos es muy útil y permite
realizar cambios en las tablas de la base de datos master lanzando sentencias SQL
contra ellas Microsoft desaconseja este método, pero en alguna ocasión puede ser útil
para reparar algún accidente.
La opción de triggers anidados permite que un trigger que se desencadena en una tabla
lance a su vez otro trigger de otra tabla. El nivel máximo de anidación es de 16 triggers.
El límite de costo del regulador de consultas es una opción muy útil que permite
establecer el tiempo máximo en segundos que puede durar una consultar para que el
regulador la lance.
Esto permite evitar la ejecución accidental de consultas salvajes que tardarían mucho
tiempo en ejecutarse. Si se desactiva se lanzarán todas las consultas, sea cual sea su
coste.
La opción de correo permite especificar que perfil de usuario utilizará SQL Server para
los mensajes enviados mediante el servicio SQL Mail.
El soporte de año 2000 permite crear una “ventana” de 100 años para interpretar las
fechas que llegan al sistema con dos dígitos. Esta opción para el año. SQL Server utiliza
cuatro dígitos para el año en todos los campos de tipo fecha. También sirve para
interpretar la fecha cuando el usuario sólo envía dos dígitos de año al servidor.
Opciones de bases de datos.
La última pantalla gestiona opciones generales para las bases de datos.
19
Manual del Alumno
La opción de llenado de índices permite establecer el porcentaje de utilización de las
páginas de índices cuando el sistema reconstruye los mismos. Por lo general lo más
aconsejable es utilizar la personalización del factor de llenado en cada índice, a menos
que todas las tablas de todas las bases de datos se utilicen de la misma manera. Ya que
el factor de llenado de los índices depende de la utilización de las tablas a las que hacen
referencia.
Las opciones de copia de seguridad establece los tiempos de respuesta cuando SQL
Server recupera una base de datos de un dispositivo de copia de seguridad.
Por último, la opción de tiempo de espera para recuperación determina cuanto tiempo
estará SQL Server intentando recuperar una base de datos al arrancar el servicio antes
de dar un error de “base de datos no recuperada”.
Eso es todo. Todas estas opciones están ampliamente documentadas en los libros en
pantalla, así que os recomendamos que los consultéis antes de decidiros a cambiar
cualquier aspecto.
3. CREACIÓN DE BASE DE DATOS
CREATE DATABASE library
ON
PRIMARY (NAME = library_data,
FILENAME =`C: \mssql7\data\library.ldf`,
SIZE = 10 MB,
MAXSIZE = 5 MB
FILEGROWTH = 20 %)
LOG ON
(NAME = library_log,
FILENAME =`C: \mssql7\data\library.ldf`,
SIZE = 3 MB,
MAXSIZE = 5 MB
FILEGROWTH = 1 MB)
Puede crear una base de datos con el asistente para crear base de datos, el administrador
corporativo de SQL Server o la instrucción CREATE DATABASE. El proceso de
creación de una base de datos crea también un registro de transacciones para la base de
datos.
La información acerca de la base de datos de SQL Server está almacenada en la tabla
sysdatabases de la base de datos master . Por tanto, debe utilizar la base de datos
master para crear una base de datos cuando utilice instrucciones Transact – SQL.
Importante: debe de hacer una copia de seguridad de la base de datos master cada vez
que cree, modifique o elimine una base de datos.
20
Manual del Alumno
Este es el asistente para crear bases de datos dentro del Enterprise Manager.
Al crear una base de datos se pueden establecer las siguientes opciones:
PRIMARY: Esta opción especifica los archivos del grupo de archivos principal. El
grupo de archivos principal contiene todas las tablas del sistema de la base de dato.
También contiene todos los objetos no asignados a grupos de archivos del usuario. Una
base de datos solo puede tener un archivo principal.
FILENAME: Esta opción especifica el nombre del archivo del sistema operativo y la
ruta de acceso al archivo.
SIZE: Esta opción especifica el tamaño de los archivos de datos o registro.
MAXSIZE: Esta opción especifica el tamaño máximo hasta el que puede crecer el
archivo.
Puede especificar el tamaño en MB o en KB . Si no especifica el tamaño el archivo
crece hasta que el disco esta lleno.
4. MODIFICAR BASE DE DATOS
según se vaya trabajando con SQL Server descubrirá que, con el transcurso del tiempo,
tendrá que modificar los parámetros para mejorar su eficacia. SQL Server le permite
agregar archivos o registro de transacciones a la base de datos siempre que lo necesite.
Hay muchas opciones que se pueden personalizar llegado el caso.
Ampliación de Base de Datos
Para ampliar una base de datos utilizando el Enterprise Manager de SQL, haga clic con
el botón derecho del ratón en la base de datos deseada que se encuenta en la ventana
Server Manager y seleccione Propiedades.( Administrador Corporativo).
21
Manual del Alumno
-
Creación y manejo de tablas
Consultas con SQLPlus
Pantallas de ingreso con SQLForms
Programación en PL/SQL
Informes con SQLReport
Diseño de menú con SQLMenu
Ajustándonos a esta lógica, el tema central de este artículo y punto de partida en cualquier curso
de Oracle será el diseño y creación de tablas.
Creación de tablas
Como expusimos en nuestro artículo anterior, en Oracle cada estructura de información se
denomina TABLA las cuales, junto a los índices y al diccionario de datos del sistema, componen la
base de datos. Por lo tanto, la creación de las tablas en el proceso de programación en Oracle
juegan un papel muy importante. En el momento de crear las tablas se definen características a
dos niveles: Tabla y Columna, como se muestra a continuación:
A nivel de Tabla
Nombre:
Nombre de la tabla puede ser de 1 a 30 caracteres.
Propietario:
La tabla tiene como propietario al usuario que las crea En nuestro
caso somos el usuario EIDOS. Otro usuario que desee usar nuestras
tablas debe tener autorización para ello y hacer referencia a la tabla
como eidos.clientes (propietario.tabla)
Cantidad de Columnas:
Una tabla puede tener un máximo de 254 columnas.
A nivel de Columna
Nombre:
Puede tener de 1 a 30 caracteres.
Tipo de dato y su ancho
CHAR
Máximo de 255. Por defecto 1.
NUMBER
Máximo de 105 dígitos. Por defecto 44.
INTEGER
Numérico sin decimal. Por defecto 38.
DATE
Hasta el 31 de diciembre de 4712.
LONG
Tipo caracter con tamaño variable hasta 65535 bytes. Permite una sola
columna LONG por tabla. No se puede usar en subconsultas, funciones o
índices.
RAW
Dato en binario puro (imágenes y sonido) con un ancho máximo de 255.
LONGRAW
Igual que LONG, pero para almacenar datos en binario puro.
Restricciones: Su función es definir reglas de validación de la columna.
Para facilitar la continuidad del análisis, usaremos como ejemplo las tablas definidas en el artículo
anterior: Clientes y VENTAS.
La definición de restricciones al crear las tablas permite establecer reglas de validación de datos,
así como los controles necesarios para mantener la integridad referencial entre tablas a través de
las columnas claves. Las restricciones que se pueden definir son:
Valor obligatorio:
En Oracle existe el concepto de valor nulo (NULL), como un valor indefinido
o ausencia de valor y que es diferente al numero 0 o al carácter espacio. Por
22
Manual del Alumno
lo tanto, para que una columna siempre tenga valor (sea obligatoria) se
define como NOT NULL.
Rango de valores:
Sirven para chequear que el valor sea mayor a un valor determinado o para
que se encuentre entre dos valores.
Clave Primaria:
Columnas que identifican de forma única al registro, es un valor único y no
nulo (NOT NULL). Por ejemplo: el código del cliente es una clave primaria
que identifica de forma única e irrepetible a cada cliente.
Clave Externa:
Columna de la tabla que hace referencia a un valor que tiene que estar
registrado en otra tabla. Por ejemplo: la columna código de la tabla VENTAS
es una clave externa que hace referencia a un valor de la columna código
(clave primaria) de la tabla Clientes.
En la versión 6 de Oracle (que dado lo reciente de la versión 7 aún se usa ampliamente) la única
restricción que estaba activa era la de valor obligatorio (NOT NULL), siendo las otras restricciones
sólo declarativas, o sea, que quedaban registradas en la definición de la tabla, pero no se podían
activar. En la versión 6, para garantizar la unicidad de la clave primaria, era necesario crear índices
con claves únicas, aspecto éste que retomaremos más adelante. En la versión 7 de Oracle estas
restricciones están implementadas, garantizándose la verificación y correción de datos en
cualquier momento sin tener que programar estos controles.
Destacadas estas cuestiones veamos, entonces cómo se procede para crear las tablas Clientes y
Ventas.
Tabla Clientes
Objetivo:
Ficha con datos para identificar al cliente. Consta del código del cliente (número
secuencial), fecha de alta al sistema, nombre, teléfono, dirección y alguna anotación.
Requisitos: Se debe identificar a cada cliente con un código único (clave primaria), registrando su
nombre, teléfono y fecha de registro (estos datos son obligatorios). La dirección y
anotaciones son campos opcionales.
Creación de la tabla: Ver el fuente 1
Fuente 1
CREATE TABLE clientes
(
codigo integer
NOT NULL
PRIMARY KEY,
fecha date
NOT NULL,
nombre char(30) NOT NULL,
telefono char(20) NOT NULL,
direccion char(100),
anotacion LONG
);
Tabla Ventas
Objetivo:
Registrar las ventas con al siguiente información: Código del cliente, fecha de la
venta, artículo y valor de la venta.
23
Manual del Alumno
Requisitos: El número del cliente es una clave externa que hace referencia a la columna codigo
en la tabla Clientes. En este caso, todos los datos son obligatorios. Se controla que la
columna valor sea mayor a cero.
Creación de la tabla: ver fuente 2
Fuente 2
CREATE TABLE ventas
(
codigo INTEGER NOT NULL
REFERENCES clientes(codigo),
fecha DATE
NOT NULL,
articulo CHAR(20) NOT NULL,
valor NUMBER(10,2) NOT NULL
CHECK (valor>0)
);
Las restricciones de Claves Primaria y Clave Externa se definieron a nivel de columna, pero se
pueden definir a nivel de tabla, al final de la misma, como se muestra en el fuente 3:
Fuente 3
CREATE TABLE clientes
(codigo
INTEGER
nombre
CHAR(30)
direccion
CHAR(100),
anotacion
LONG,
PRIMARY KEY (codigo));
NOT NULL,
NOT NULL,
CREATE TABLE ventas
(codigo
INTEGER
NOT NULL,
fecha
DATE
NOT NULL,
articulo
CHAR(10),
valor
NUMBER(6,2)
NOT NULL
CHECK (valor>0),
FOREIGN KEY (codigo) REFERENCES clientes(codigo));
La definición de la clave a nivel de tabla es necesaria cuando la misma está formada por más de
una columna.
Unicidad de la clave con índices
Para garantizar la unicidad de los valores de la clave primaria de la tabla Clientes (en la versión 6
donde esta restricción sólo es declarativa y no está activa), se debe crear un índice que garantice
la unicidad de la clave principal. Un requisito importante para la unicidad de la clave principal es
que las columnas de la clave se definen como NOT NULL.
A continuación mostraremos cómo crear el índice cliente_codigo para garantizar la unicidad de la
clave primaria:
CREATE UNIQUE INDEX cliente_codigo
ON clientes(código);
24
Manual del Alumno
Secuencias: codificación numérica
La codificación numérica del cliente se puede realizar con una secuencia que automáticamente
genera los números enteros en orden ascendente, no siendo necesario recordar cuál fue el último
número asignado ; esto evita la duplicidad de códigos.
La secuencia es un objeto que genera valores enteros únicos y se emplean para crear claves
primarias numéricas, con el uso del siguiente mandato:
CREATE SEQUENCE codigo_cliente
INCREMENT BY 1
START WITH 1;
Para registrar un nuevo código con la secuencia definida anteriormente se usa la pseudo-columna
codigo_cliente.NEXTVAL, la cual nos dará el siguiente valor que le corresponde a la secuencia, la
forma en que esto se realiza se explicará más adelante, cuando analicemos el ingreso de datos.
Para conocer el valor actual de la secuencia, o sea, el último código asignado, se usa la pseudocolumna codigo_cliente.CURRVAL, desde la tabla DUAL del sistema, cuyo fin es poder consultar
pseudo_columnas (como se muestra a continuación):
SELECT user,sysdate,codigo_cliente.currval
FROM DUAL;
donde:
1.2.3.-
user es el nombre del usuario
sysdate es la fecha del sistema
codigo_cliente.currval es el último valor asignado a la secuencia.
Ingreso de datos
Una vez creadas las tablas, índices y secuencias, estamos en condiciones de ingresar datos en
la tabla.
El ingreso, modificación y eliminación de registros se realiza fundamentalmente con el diseño de
pantallas (formularios) desde el módulo SQLFORMS (que será tema de análisis específico en
otro artículo). No obstante, en este artículo veremos el uso de los mandatos INSERT UPDATE y
DELETE.
Para ingresar un nuevo registro debemos ensayar lo que se muestra en la tabla 1:
Nombre de la Tabla (acciones)
Columnas
25
Manual del Alumno
INSERT INTO CLIENTES
VALUES(
codigo_cliente.NEXTVAL,
'PINTURERIAS PROPIOS',
'45 67 89'
TO_DATE('10/04/95','DD/MM/YY'),
'Uruguay 1234',
'LIBRERIA'
);
codigo= secuencia
nombre
teléfono
fecha
dirección
anotación
Tabla1: Inserción de nuevos registros
Como se podrá observar, en este ejemplo no se especificó la lista de columnas a insertar, lo que
indica que se van a ingresar datos para todas las columnas. Por lo tanto, los valores para cada
columna se tienen que ingresar en el orden en que están definidos en la tabla. Además, es de
destacar que la palabra reservada VALUES indica la lista de valores a ingresar; que los datos tipo
carácter van entre comillas; que la fecha se registra como una cadena de caracteres usando la
función TO_DATE (encargada de transformar la cadena de caracteres '10/04/95' en fecha, a
partir de un formato de fecha especificado -'DD/MM/YY'-).
También observamos que a la columna codigo se le asignó el siguiente valor de la secuencia
codigo_cliente (codigo_cliente.NEXTVAL).
En caso de que sólo se asignaran valores a algunas columnas se debe dar la lista de columnas
como se muestra en el fuente 4 correspondiente a la lista de columnas.
Fuente 4
INSERT INTO CLIENTES (codigo,nombre,teléfono,fecha)
VALUES
(codigo_cliente.NEXTVAL,'CASA AUGE DEPORTES',
'598768',TO_DATE('15/04/95','DD/MM/YY'));
Las columnas a las que se les ingresa información se listan después del nombre de la tabla, en el
orden deseado. Las columnas no listadas tendrán valor NULL, por ello todas las columnas
definidas como obligatorias (NOT NULL) deben estar en la lista.
Los siguientes ejemplos muestran posibles errores y sus correspondientes mensajes en el
registro de datos:
1.-
Falta dato del teléfono que es obligatorio:
INSERT INTO CLIENTES(codigo,nombre)
VALUES (codigo_cliente.NEXTVAL,
'EMPRESA D'
);
Mensaje de error:
ORA-01400: mandatory (NOT NULL) column is missing or NULL during insert.
2.-
Intento de registrar cliente con código ya existente:
26
Manual del Alumno
INSERT INTO CLIENTES(codigo,nombre,teléfono)
VALUES (1,'EMPRESA TTT','341234');
Mensaje de error:
ORA-00001: duplicate key in index
Obsérvese en el caso 2 que la secuencia codigo_cliente no fue usada al ingresar el valor del
código, y sí en el caso 1, provocando error de duplicidad de código. Esto ocurre porque la
creación de la secuencia no garantiza la unicidad del código, ya que podemos registrar un código
de cliente sin su uso. Sin embargo, la unicidad esta garantizada por la definición del índice único
visto anteriormente. Si siempre se usa la secuencia la unicidad por supuesto que está
garantizada, pero la simple definición de la secuencia no es garantía de su uso.
Listados de registros
A continuación veremos cómo obtener listados para revisar la información registrada, para lo cual
seleccionaremos (select) registros desde (from) una tabla. En realidad el mandato SELECT será
tema de análisis más detallado en la próxima entrega, por lo que ahora sólo lo trataremos con el
objetivo de visualizar los datos ingresados.
Para obtener un listado de todas las columnas y todos los registros de la tabla Clientes debemos
seguir este procedimiento:
Nombre de la Tabla
SELECT * FROM clientes;
Donde * = Todas las columnas
El resultado es el que se muestra en la tabla 2:
Código Fecha
Nombre
1
10-Apr-95
Pinturerías propios
2
15-Apr-95
Casa Auge deportes
3
20-Apr-95
Feria del libro
4
30-Apr-95
Club de tenis
Tabla 2: Datos de la tabla Clientes
Teléfono
45 67 89
598768
(0567)845677
905877
Dirección
Uruguay 1234
Para listar sólo algunas columnas de la tabla clientes el procedimiento a seguir es:
SELECT codigo,nombre FROM clientes;
El resultado es el que se muestra en la tabla 3:
Anotación
Ferretería
27
Manual del Alumno
Código Nombre
1
Pinturerías propios
2
Casa Auge deportes
3
Feria del libro
4
Club de tenis
Tabla 3: Datos de la tabla Clientes para Codigo y Nombre
Modificación de registros.
Para modificar valores de la tabla usaremos el mandato UPDATE, con el objetivo de modificar el
teléfono y la dirección del cliente Feria del libro. Para ello, basta con definir:
UPDATE clientes
SET telefono='234567',
direccion='Andes 945'
WHERE nombre='Feria del libro';
donde:
Clientes es el nombre de la tabla
SET es para indicar el inicio de la lista de columnas y sus nuevos valores.
WHERE garantiza la selección de la fila del cliente.
Es importante destacar que si no se usa la cláusula WHERE, se modificará el valor de la columna
en todas las filas de la tabla.
Eliminación de registros
La eliminación de registros se realiza con el mandato DELETE. El siguiente ejemplo eliminará los
clientes con el código cero:
DELETE FROM clientes
WHERE codigo=0;
En este caso, si se omite la cláusula WHERE serán eliminados todos los registros de la tabla.
SQLPlus
Todas las tareas anteriormente estudiadas se realizan con el módulo SQLPlus de Oracle, que
trabaja en forma interactiva. A continuación enunciaremos los pasos necesarios para usar
SQLPLUS y poder crear tablas, índices o secuencias, así como insertar datos y obtener listados:
1.-
Llamar al programa
SQLPLUS
2.-
Identificación del usuario
Enter user-name: EIDOS
28
Manual del Alumno
Enter password:
Si la identificación es correcta se obtiene mensaje de:
Connected to: ORACLE
Si, por el contrario, la identificación es incorrecta se recibe el siguiente mensaje:
ERROR: ORA-01017:
invalid username/password;
logon denied
3.-
Indicador en pantalla de que SQLPlus está a la espera de la orden:
SQL>_
4.-
Escribir los mandatos de creación de tablas, índices y secuencia en un archivo
(TABLAS.SQL) con el uso del editor.
SQL>edit tablas
5.-
Ejecutar los mandatos escritos en el archivo TABLAS.SQL
SQL>@tablas
6.-
Para salir de SQLPlus
SQL>exit
Otras tareas
A continuación examinaremos una serie de mandatos, a nivel de definición de las tablas, gracias a
los cuales se puede:
1.2.3.4.5.6.7.-
Listar estructuras de las tablas (DESCRIBE)
Modificar la estructura de las tablas (ALTER TABLE)
Renombrar las tablas (RENAME)
Eliminar una tabla (DROP TABLE)
Eliminar un indice (DROP INDEX)
Consultar las tablas del diccionario
Listado de tablas, Índices y secuencias propiedad del usuario.
Detengámonos en los detalles más significativos de cada una de dichas tareas:
1.-
Listar estructura de las tablas (DESCRIBE)
Para obtener la estructura (descripción de una tabla) el mandato que se debe emplear es:
SQL>DESCRIBE clientes;
con lo que el resultado será el que se ofrece en la tabla 4.
Name
NUMERO
FECHA
NOMBRE
TELEFONO
DIRECCION
Null?
NOT NULL
NOT NULL
NOT NULL
NOT NULL
Type
NUMBER(38)
DATE
CHAR(30)
CHAR(20)
CHAR(100)
29
Manual del Alumno
ANOTACION
LONG
Tabla 4: Resultado del uso del mandato DESCRIBE
2.-
Modificar la estructura de las tablas (ALTER TABLE)
La modificación de la estructura de las tablas con el uso de ALTER permite:
-
Añadir nuevas columnas.
Añadir restricciones a una columna, en este caso la tabla no debe contener datos.
Modificar el ancho de la columna.
Modificar el tipo de datos de la columna sólo si la columna no contiene datos o está vacía.
Modificar al tipo LONG sólo una columna sin restricciones.
El siguiente ejemplo muestra cómo añadir, en la tabla Ventas, las columnas Factura (para registrar
el número de factura) y Cobro (tipo carácter con 2 posibles valores, N=NO cobrada,
NULL=cobrada) y modificar la columna valor para ampliar su ancho.
ALTER TABLE ventas
ADD (
factura
integer,
cobro
char
)
MODIFY (
valor number(10,2)
);
3.-
Renombrar las tablas (RENAME)
Para cambiar el nombre de la tabla Clientes a EMPRESAS se usa el siguiente mandato:
SQL>RENAME clientes TO empresas;
4.-
Eliminar una tabla (DROP TABLE)
Le eliminación de la tabla es como sigue:
SQL>DROP TABLE clientes;
En este caso se eliminan, también, todos los índices de la tabla.
5.-
Eliminar un índice (DROP INDEX)
SQL>DROP INDEX cliente_codigo;
6.-
Consultar las tablas del diccionario.
Toda la información de las tablas está registrada en el diccionario del sistema (Data
Dictionary), que son tablas especiales que se crean en la instalación de ORACLE (que son
administradas por el sistema).
Para consultar la lista de tablas que componen el diccionario se escribe:
30
Manual del Alumno
SQL>HELP DATA DICT
Gracias a lo cual se muestra una lista con la información de la tabla 5:
Nombre de la tabla
ACCESSIBLE_COLUMNS
ACCESSIBLE_TABLES
AUDIT_ACTIONS
ALL_INDEXES
ALL_SEQUENCES
ALL_TABLES
.....
USER_TABLES
USER_TAB_COLUMNS
USER_TAB_GRANTS
Descripción
columns of all tables, views, and clusters
tables and views accessible to the user
maps action type numbers to action type names
descriptions of indexes on accessible
descriptions of the user's own sequences
description of tables accessible to the user
descriptions of the user's own tables
columns of the user's tables, views, and clusters
grants on objects where the user is the owner, grantor, or
grantee
Tabla 5: Consulta de las tablas que componen el diccionario
También podemos ver la estructura de una tabla del diccionario como se muestra a
continuación:
SQL>DESCRIBE ALL_TABLES;
SQL>DESCRIBE all_indexes;
SQL>DESCRIBE all_sequences;
7.-
Listar las tablas, índices y secuencias definidas por un usuario
Para las tablas:
SQL>SELECT TABLE_NAME "TABLA"
FROM ALL_TABLES
WHERE OWNER='EIDOS';
Resultado: Clientes y Ventas
Para los índices:
SQL>SELECT table_name,index_name
FROM all_indexes
WHERE owner='EIDOS';
Resultado: Clientes (con índice Cliente_Nombre y Cliente_Numero) y Ventas (con índice
Venta_Numero)
Para las secuencias:
31
Manual del Alumno
SQL>SELECT sequence_name
FROM all_sequences
WHERE sequence_owner='EIDOS';
Resultado: el nombre de la secuencia usada (SEQUENCE_NAME) Codigo_Cliente
Sentencia SELECT
Como ya sabemos, la herramienta fundamental de SQL es la sentencia SELECT, que permite
seleccionar registros desde las tablas de la Base de Datos, devolviendo aquellos que cumplan
las condiciones establecidas y pudiendo presentar el resultado en el orden deseado.
Primeramente estudiaremos la forma básica de la sentencia SELECT, que esta formado por:
SELECT
FROM
WHERE
Lista...
Tabla, Tabla...
Condiciones...
ORDER BY Expresión,Expresión,...
;
Fin de la sentencia.
Donde:
La orden SELECT puede contener:
-
Columnas: nombre, telefono
Expresiones y funciones: SYSDATE-fecha,UPPER(direccion)
Pseudo-Columnas del Sistema: SYSDATE,USER.
Asterisco: Todas las columnas.
La orden FROM identifica la lista de tablas a consultar. Si alguna de las tablas a consultar
no es propiedad del usuario, debe especificarse el nombre del propietario antes que el
nombre de la tabla en la forma nombre_propietario.nombre_tabla.
La orden WHERE decide los registros a seleccionar según las condiciones establecidas,
limitando el número de registros que se muestran.
La orden ORDER BY indica el orden en que aparece el resultado de la consulta.
Ilustremos lo explicado hasta el momento con el ejemplo del fuente 1, donde
consultaremos las ventas realizadas en los últimos 10 días, mostrando el nombre del
cliente, artículo vendido y su valor.
Fuente 1
SELECT nombre,articulo,valor
FROM
Lista nombre del cliente,
nombre del artículo y
el valor de la venta.
clientes,ventas
Tablas con la información de clientes y ventas.
WHERE clientes.codigo=ventas.codigo
Establece la relación, según código de cliente,
entre las tablas clientes y ventas.
and sysdate-ventas.fecha>=10
32
Manual del Alumno
ORDER BY nombre
;
Consulta las ventas de los últimos 10 días.
Ordenar el listado por nombre del cliente.
Fin de la sentencia.
El resultado de esta sentencia SELECT sería el de la tabla 1:
NOMBRE
ARTICULO
VALOR
CASA AUGE DEPORTES
PAPEL
330.0
CASA AUGE DEPORTES
DISKETTE
33.0
CLUB DE TENNIS
PAPEL
500.5
...
CLUB DE TENNIS
PAPEL
100.5
FERIA DEL LIBRO
PAPEL
310.0
PINTURERIAS PROPIOS
PAPEL
220.5
PINTURERIAS PROPIOS
DISKETTE
20.5
Tabla 1: Resultados de la sentencia SELECT del fuente 1
Obsérvese que las columnas que tienen el mismo nombre en ambas tablas se diferencian
escribiendo el nombre de la tabla antes que el nombre de la columna, como en el caso de
ventas.fecha, ventas.codigo y clientes.codigo.
Operadores lógicos
Para construir la condición de la consulta necesitamos conocer los operadores lógicos, por
eso a continuación damos una lista de los operadores más usados, agrupados en cuatro
grupos:
1.
2.
3.
4.
Valor único:Comprueban un valor simple.
Lista de valores:Comprueban más de un valor.
Combinaciones lógicas:Combinan expresiones lógicas.
Negación:Invierte el resultado de la expresión con operadores de valor único o de lista
de valores.
Valor único
> < >= <= =
Operadores clásicos de comparación:
mayor, menor, mayor e igual, menor e igual, igual a.
!= <> ^=
Operador "Distinto de" en sus tres formas.
IS NULL
Comprueba la ausencia de datos (valor nulo).
No se puede usar la comparación = NULL.
LIKE
33
Manual del Alumno
Selecciona registros según el reconocimiento de un patrón de consulta.
Lista de valores
BETWEEN valor AND valor
Comprueba que el valor se encuentre en el rango de valores.
IN (valor,...,valor)
Verifica si el valor pertenece a la lista de valores.
Combinaciones lógicas.
AND
Retorna Verdadero si todas las condiciones son verdaderas.
OR
Retorna Verdadero si alguna de las condiciones es verdadera.
Negación
NOT
Invierte el resultado de una expresión lógica, por ejemplo.
IS NOT NULL
NOT BETWEEN valor AND valor
NOT IN (valor,...,valor)
NOT LIKE
A continuación mostramos algunas consultas con el uso de diferentes operadores lógicos:
-
Clientes a los que no se les ha registrado su dirección.
SELECT nombre,telefono
34
Manual del Alumno
FROM clientes
WHERE direccion IS NULL;
-
Clientes dados de alta en los últimos 10 días.
SELECT nombre,direccion,telefono
FROM clientes
WHERE fecha BETWEEN sysdate-10
AND sysdate;
-
Datos de los Clientes que pertenecen a una lista de clientes.
SELECT nombre,direccion,telefono
FROM clientes
WHERE nombre
IN ('PINTURAS','CASA DE DEPORTES')
;
-
Clientes dados de altas en lo que va del mes y cuyo nombre comience con la letra P u otra
letra mayor o su teléfono contenga el código (0567). Ver fuente 2
Fuente 2
SELECT nombre,direccion,telefono,fecha
FROM clientes
WHERE
fecha BETWEEN
to_date('01/'||to_char(sysdate,'MM/YY'),'DD/MM/YY')
AND
sysdate
AND (nombre >= 'P' OR telefono LIKE '%(0567)%');
El manejo de fecha es una de las capacidades de mayor variedad e interés en ORACLE por las
posibilidades que presenta en el almacenamiento, cálculo y presentación de fechas. Por eso,
en el último ejemplo damos un vistazo a algunas funciones útiles en el uso de fechas como
son:
to_char(sysdate,'MM/YY')
Devuelve una cadena de caracteres de la forma mes/año de la fecha actual.
'01/'||to_char(sysdate,'MM/YY')
Forma la cadena de caracteres 01/mes/año que representa el primer día del mes. El operador ||
se usa para unir o concatenar cadenas de caracteres.
35
Manual del Alumno
...
to_date('01/'||to_char(sysdate,
'MM/YY'
),
'DD/MM/YY')
...
Convierte la cadena de caracteres 01/mes/año al tipo fecha.
Patrón de consulta
Una de las herramientas lógicas más poderosas de SQL es el reconocimiento de un patrón de
consulta, instrumento éste que permite la búsqueda por nombre, dirección u otro dato
parcialmente recordado. Los patrones de consulta juegan un papel importante en el momento
de realizar consultas, ya que es común que necesitemos encontrar un texto y no recordemos
exactamente cómo fue ingresado. Con el uso del operador LIKE podemos comparar patrones y
ubicar un texto, independientemente de la posición en que se encuentre.
Para la definición del patrón de consulta existen dos tipos de caracteres especiales:
% (signo de porcentaje)
llamado comodín, representa cualquier cantidad de espacios o
caracteres en esa posición. Significa que se admite cualquier cosa en su lugar: un caracter,
cien caracteres o ningún caracter.
_ (signo de subrayado)
llamado marcador de posición, representa exactamente una
posición e indica que puede existir cualquier caracter en esa posición.
En los fuentes 3, 4 y 5 detallamos tres ejemplos de consulta con el Operador LIKE:
Listar los clientes cuya dirección contengan la palabra URUGUAY independientemente de su
ubicación:
Fuente 3
SELECT nombre,direccion,telefono
FROM clientes
WHERE direccion LIKE '%URUGUAY%';
Listar los clientes cuyos teléfonos tienen comienzan con el código de área el 0722
SELECT nombre,direccion,telefono
FROM clientes
WHERE telefono LIKE '(0722)%';
Listar los clientes cuyo nombre terminan con la palabra LIBRO:
Fuente 4
SELECT nombre,direccion,telefono
FROM clientes
WHERE nombre LIKE '%LIBRO';
36
Manual del Alumno
Listar los clientes que tengan la palabra LIBRO a partir de la 5ª posición en el nombre.
Fuente 5
SELECT nombre,direccion,telefono
FROM clientes
WHERE nombre LIKE '____LIBRO%';
Agrupamiento de datos
SQL proporciona una forma eficiente para manejar la información con el agrupamiento de datos
a través de la formación de grupos y las funciones correspondientes, dando la posibilidad de
procesar no solo registros individuales como hemos hecho hasta ahora. También podemos
agrupar registros por un criterio determinado, como por ejemplo, agrupar por clientes las ventas
realizadas.
Cada grupo tendrá como resultado de la consulta una fila resumen que contiene la información
del grupo.
Para la formación de grupos adicionamos, a la forma básica de la sentencia SELECT vista
anteriormente, la orden GROUP BY ubicada antes de ORDER BY, como se muestra a
continuación:
SELECT
FROM
WHERE
GROUP BY
;
Lista...
Tabla, Tabla...
Condiciones
Expresión, Expresión,...
ORDER BY Expresión, Expresión,...
Terminador
Las funciones para el procesamiento de grupos son:
COUNT(columna)
Cantidad de registros en que la columna tiene valores no nulos.
COUNT(*)
Cantidad de registros que hay en la tabla, incluyendo los valores nulos.
MIN(columna)
Valor mínimo del grupo.
MAX(columna)
Valor máximo del grupo.
SUM(columna)
Suma los valores del grupo.
AVG(columna)
Calcula valor medio del grupo, sin considerar los valores nulos.
La lista de columnas a mostrar en la consulta puede contener las funciones de grupo, así como
la columna o expresión usada para formar los grupos en la orden GROUP BY. En una misma
consulta no se pueden mezclar funciones de grupo con columnas o funciones que trabajan con
registros individuales.
Las ventas por cliente es un buen ejemplo para mostrar el uso de los grupos. En el siguiente
caso se hace un resumen de ventas por cliente, con la cantidad de ventas, valor mínimo, medio
37
Manual del Alumno
y máximo, así como la suma total de ventas. La formación del grupo será por el nombre del
cliente y la columna a cuantificar para cada grupo será el valor de las ventas.
SELECT nombre "CLIENTE",
COUNT(valor) "VENTAS",
MIN(valor) "MINIMA",
AVG(valor) "MEDIA",
MAX(valor) "MAXIMA",
SUM(VALOR) "TOTAL"
FROM clientes,ventas
WHERE clientes.codigo=ventas.codigo
GROUP BY nombre
;
CLIENTE
VENTAS MINIMA
CASA AUGE DEPORTES 3
33.0
CLUB DE TENNIS
3
100.5
FERIA DEL LIBRO
3
110.0
PINTURERIAS PROPIOS 3
20.5
Tabla 2: Estadística de la base de datos
MEDIA
138.667
237.167
203.333
90.500
MAXIMA
330.0
500.5
310.0
220.5
TOTAL
416.0
711.5
610.0
271.5
Como se puede observar en la tabla 2, a cada columna se le asignó un título de cabecera, que
se escribe entre comillas dobles a la derecha de la columna, con el objetivo de mejorar la
presentación de la consulta.
El orden en las consultas por grupos, cuando no esta presente la orden ORDER BY, está dado
por la columna que forma los grupos. Si deseamos cambiar ese orden, como es el caso de
ordenar por el valor total de ventas, se debe adicionar al final la orden ORDER BY
SUM(VALOR).
En el ejemplo del fuente 6 se forman grupos por artículo para obtener la cantidad de ventas,
valor mínimo, medio y máximo, así como la suma total de ventas para cada artículo, ordenado
de mayor a menor por la venta total.
Fuente 6
SELECT articulo, COUNT(valor) "VENTAS",MIN(valor) "MINIMA",
AVG(valor) "MEDIA",MAX(valor) "MAXIMA",SUM(VALOR) "TOTAL"
FROM ventas
GROUP BY articulo
ORDER BY SUM(valor) DESC
;
ARTICULO VENTAS MINIMA MEDIA MAXIMA
PAPEL
8
100.5
234.00 500.5
DISKETTE 4
20.5
34.25
53.0
Tabla 3: Otra estadística de la base de datos
Subconsultas
TOTAL
1872
137
38
Manual del Alumno
Otro aspecto de fácil diseño y uso que muestra una vez más las posibilidades de SQL son las
subconsultas.
Subconsulta es aquella consulta de cuyo resultado depende otra consulta, llamada principal, y
se define como una sentencia SELECT que esta incluida en la orden WHERE de la consulta
principal. Una subconsulta, a su vez, puede contener otra subconsulta y así hasta un máximo
de 16 niveles.
Las particularidades de las subconsultas son:
1.
Su resultado no se visualiza, sino que se pasa a la consulta principal para su
comprobación.
2.
Puede devolver un valor único o una lista de valores y en dependencia de esto se debe
usar el operador del tipo correspondiente.
3.
No puede usar el operador BETWEEN, ni contener la orden ORDER BY.
4.
Puede contener una sola columna, que es lo más común, o varias columnas. Este último
caso se llama subconsulta con columnas múltiples. Cuando dos o más columnas serán
comprobadas al mismo tiempo, deben encerrarse entre paréntesis.
Expliquemos como se construye una subconsulta con el siguiente ejemplo, donde necesitamos
saber ¿cuál fue la mayor venta realizada?. Para ello, diseñemos una subconsulta que busque
el valor máximo de venta con el uso de la función MAX(valor) y una consulta principal que
muestre las ventas iguales al máximo valor encontrado por la subconsulta. Veamos el fuente 7.
Fuente 7
SELECT nombre,articulo,valor
FROM clientes,ventas
WHERE valor = ( Subconsulta para buscar
SELECT MAX(valor)
el valor máximo de venta.
FROM ventas
)
AND clientes.codigo=ventas.codigo
;
NOMBRE:
ARTICULO:
VALOR:
CLUB DE TENNIS
PAPEL
500.5
Otra aplicación clásica de la subconsulta es cuando deseamos saber las ventas de un artículo
realizadas por encima de su venta promedio. En este caso, es necesario realizar los pasos
mostrados en el fuente 8:
Fuente 8
SELECT
nombre,valor "PAPEL"
FROM
clientes,ventas
WHERE
clientes.codigo=ventas.codigo
AND articulo='PAPEL'
AND valor >
(
SELECT AVG(valor)
Subconsulta de
venta promedio de
39
Manual del Alumno
FROM ventas
WHERE articulo='PAPEL'
papel.
)
ORDER BY valor DESC
;
Ordenado por valor de venta
en forma descendente
NOMBRE
PAPEL
CLUB DE TENNIS
500.5
CASA AUGE DEPORTES 330.0
FERIA DEL LIBRO
310.0
Tabla 4: ventas por encima de su venta promedio
Grupos con subconsulta
Hasta el momento estudiamos por separado un conjunto de herramientas de SQL, viendo en
cada caso sus posibilidades. Ahora pasaremos a ver la combinación de grupos y subconsultas,
lo que multiplica las posibilidades de SQL en cuanto al rendimiento en el diseño de consultas
complejas se refiere, las cuales se pueden realizar en forma sencilla y con pocas líneas de
código.
Para combinar grupos con subconsulta debemos incluir en la sentencia SELECT la orden
HAVING, que tiene las siguientes características:
1.
Funciona como la orden WHERE, pero sobre los resultados de las funciones de grupo, en
oposición a las columnas o funciones para registros individuales que se seleccionan
mediante la orden WHERE. O sea, trabaja como si fuera una orden WHERE, pero sobre
grupos de registros.
2.
Se ubica después de la orden GROUP BY.
3.
Puede usar una función de grupo diferente a la de la orden SELECT.
El ejemplo a diseñar para nuestra aplicación es la consulta ¿cuál fue el artículo más vendido y
en qué cantidad?. En este caso, la orden HAVING de la consulta principal selecciona aquellos
artículos (GROUP BY) que tienen una venta total (SUM(valor)) igual a la mayor venta realizada
por artículo (MAX(SUM(valor))) que devuelve la subconsulta.
La sentencia SELECT y el resultado de nuestra consulta sería la del fuente 9 y la tabla 5:
Fuente 9
SELECT articulo "ARTICULO MAS VENDIDO",SUM(valor) "VENTA"
FROM ventas
GROUP BY articulo
HAVING SUM(valor) =
(
Subconsulta para buscar
SELECT MAX(SUM(valor))
el artículo más vendido
FROM ventas
con la formación de grupos
GROUP BY articulo
por artículo.
)
;
ARTICULO MÁS VENDIDO
VENTA
40
Manual del Alumno
PAPEL
1872
Tabla 4: ventas por encima de su venta promedio
Indices
El índice es un instrumento que aumenta la velocidad de respuesta de la consulta, mejorando
su rendimiento y optimizando su resultado. El manejo de los índices en ORACLE se realiza de
forma inteligente, donde el programador sólo crea los índices sin tener que especificar,
explícitamente, cuál es el índice que va a usar. Es el propio sistema, al analizar la condición de
la consulta, quien decide qué índice se necesita. Por ejemplo cuando en una consulta se
relacionan dos tablas por una columna, si ésta tiene definido un índice se activa, como en el
caso cuando relacionamos la tabla de clientes y ventas por la columna código para identificar al
cliente (WHERE clientes.codigo=ventas.codigo)
La identificación del índice a usar está relacionada con las columnas que participan en las
condiciones de la orden WHERE. Si la columna que forma el índice está presente en alguna de
las condiciones éste se activa. No obstante, existen casos en que la presencia de la columna
no garantiza el uso de su índice, ya que éstos son ignorados, como en las siguientes
situaciones cuando la columna indexada es:
Evaluada con el uso de los operadores IS NULL o IS NOT NULL.
SELECT nombre,articulo,valor
FROM clientes,ventas
WHERE nombre IS NOT NULL;
Modificada por alguna función, excepto por las funciones MAX(columna) o MIN(columna).
SELECT nombre,articulo,valor
FROM clientes,ventas
WHERE UPPER(nombre)>' '
;
Usada en una comparación con el operador LIKE a un patrón de consulta que comienza con
alguno de los signos especiales (% _).
SELECT nombre,articulo,valor
FROM clientes,ventas
WHERE nombre
LIKE '%DEPORTE%'
;
Finalmente debemos aclarar que los registros cuyo valor es NULL para la columna indexada,
no forman parte del índice. Por lo tanto, cuando el índice se activa estos registros no se
muestran como resultado de la consulta.
Programación PL/SQL
41
Manual del Alumno
El lenguaje de programación de Oracle, llamado PL/SQL, es un lenguaje portable, procedural
y de transacción muy potente y de fácil manejo, con las siguientes características
fundamentales:
1.
Incluye todos los comandos de SQL estudiados en el artículo Oracle Básico I y II (ver
revista Algoritmo números 8 y 9, respectivamente):
-
2.
SELECT
INSERT
UPDATE
DELETE.
Es una extensión de SQL, ya que este es un lenguaje no completo dado que no incluye
las herramientas clásicas de programación. Por eso, PL/SQL amplia sus posibilidades al
incorporar las siguientes sentencias:
-
Control condicional
IF ... THEN ... ELSE ... ENDIF
-
Ciclos
FOR ... LOOP
WHILE ... LOOP
3.
Incorpora opciones avanzadas en:
-
Control y tratamiento de errores llamado excepciones.
Manejo de cursores.
Variedad de procedimientos y funciones empaquetadas incorporadas en el módulo
SQL*Forms para la programación de disparadores (Trigger) y procedimientos del usuario
(Procedure).
Estructura del bloque de código
Veamos a continuación la organización del bloque de código de PL/SQL, compuesto por
cuatro secciones DECLARE, BEGIN, EXCEPTION y END como se detalla en el fuente 1:
/* --- Fuente 1 ----------------------------------------------------------[<< nombre del bloque >>]
Etiqueta que identifica al Bloque.
[DECLARE]
Declaración de
Variable
Constante
Cursor
Se inicializa con un valor que no se puede modificar.
Area de trabajo que contiene los datos de la fila de la tabla en uso. El cursor es
el resultado de una sentencia SELECT.
para control de errores.
ExcepciónVariables
BEGIN
Código.
[EXCEPTION]
Control y tratamiento de errores.
42
Manual del Alumno
Es el punto al que se transfiere el control del programa siempre que exista un problema. Los indicadores de
excepción pueden ser definidos por el usuario o por el sistema, como es por ejemplo la excepción
ZERO_DIVIDE. Las excepciones se activan automáticamente al ocurrir un error, existiendo la definición de la
excepción OTHERS que considera aquellos errores no definidos y que siempre se ubica al final de todas las
excepciones.
END [nombre del bloque];
Fin del Bloque.
Con el ejemplo del fuente 2 ilustraremos las distintas secciones que componen un bloque de
código en PL/SQL. En este caso deseamos calcular la venta promedio del día y, en caso que
la misma sea menor a lo esperado, se debe registrar en la tabla VENTABAJA.
/* --- Fuente 2 ----------------------------------------------------------DECLARE
esperada
CONSTANT NUMBER(5) := 500;
xtotal
NUMBER;
xcant
NUMBER;
xprom
NUMBER;
BEGIN
/*Asigna a la variable xtotal el TOTAL de las ventas
y a la variable xcant la cantidad de ventas del día.
*/
SELECT SUM(valor),COUNT(valor) INTO xtotal,xcant
FROM ventas WHERE fecha=sysdate;
xprom:=xtotal/xcant;
IF xprom >= esperada THEN
message('Ventas por encima de la esperada');
pause;
ELSE
/*Se registra en la tabla ventabaja las ventas por debajo
del promedio esperado */
INSERT INTO ventabaja VALUES (sysdate,xprom);
END IF;
EXCEPTION
WHEN ZERO_DIVIDE THEN
message('No se realizaron ventas en el día');
pause;
WHEN OTHERS THEN
message('Error Indefinido');
pause;
END;
Asignación de valores
Las dos formas que existen para asignar valores a variables de memoria, vistas en el ejemplo
anterior, son:
-
Con el operador de asignación :=, como cuando calculamos el promedio de las ventas
asignándole valor a la variable xprom con la siguiente sentencia:
xprom:=xtotal/xcant;
43
Manual del Alumno
-
Con la sentencia SELECT que contiene la orden INTO, como se muestra, es la
asignación de valores a las variables xtotal y xcant con el siguiente código:
SELECT SUM(valor),
COUNT(valor)
INTO xtotal,xcant
FROM ventas
WHERE fecha=sysdate;
Veamos a continuación, con la creación del procedimiento FECHAALTA, la asignación de
valores a una variable de registro llamada Client_Rec, que va a contener la estructura de una
fila de la tabla CLIENTES y que estará formada por todos los campos correspondientes a la
tabla. Para esto usaremos el atributo de variable %ROWTYPE que declara una variable de
registro que contiene la estructura de la tabla, y después, con el uso de la sentencia SELECT *
INTO, se asigna a la variable de registro los valores de la fila. La referencia a un dato
contenido en la variable de registro se hace de la forma variable_registro.campo, como por
ejemplo cliente_rec.fecha hace referencia a la fecha del alta del cliente.
Pasemos a mostrar lo anteriormente expuesto a través del código del fuente 3.
/* --- Fuente 3 ----------------------------------------------------------PROCEDURE FECHAALTA IS
BEGIN
DECLARE
cliente_rec clientes%ROWTYPE;
BEGIN
SELECT * INTO cliente_rec
FROM clientes
WHERE codigo = 5;
IF cliente_rec.fecha>sysdate-10
THEN
message(
cliente_rec.nombre||
' Dado de alta en los últimos 10 días');
pause;
ELSE
message(
cliente_rec.nombre||
' Dado de alta hace más de 10 días');
pause;
END IF;
END;
END;
SELECT con control de excepciones
La sentencia SELECT en PL/SQL no muestra en pantalla las filas resultantes de la consulta,
como ocurre en SQL (el cual trabaja en forma interactiva) sino que, según sea la acción a
realizar, así será la cantidad de filas devueltas por la consulta, existiendo en este caso una de
las tres posibles situaciones recogidas en la tabla 1:
Cantidad de filas
Acción
Una
Se realiza la siguiente sentencia
Más de una
Ocurre la excepción TOO_MANY_ROWS
Ninguna
Ocurre la excepción NO_DATA_FOUND
Tabla 1: Situaciones posibles según la búsqueda realizada
44
Manual del Alumno
Por esta razón, veremos a continuación, a través de un ejemplo, el uso de la sentencia
SELECT, con control de excepciones para definir la acción a realizar en dependencia de la
cantidad de filas devueltas por la consulta.
Veamos con el código del fuente 4 en el que se define el procedimiento VentasDe para
consultar las ventas realizadas en el día de un determinado artículo:
/* --- Fuente 4 ----------------------------------------------------------PROCEDURE ventasde(xarticulo ventas.articulo%TYPE) is
BEGIN
DECLARE xnombre
clientes.nombre%TYPE;
xventas
NUMBER;
BEGIN
SELECT nombre into xnombre
FROM
clientes,ventas
WHERE clientes.codigo=ventas.codigo
AND
ventas.fecha=sysdate
AND
articulo=xarticulo;
message(
'Solo una venta de '
xarticulo¦¦' a: '¦¦xnombre);
EXCEPTION
WHEN NO_DATA_FOUND THEN
message('No hay ventas de '||xarticulo);
pause;
WHEN TOO_MANY_ROWS THEN
SELECT
COUNT(*) INTO XVENTAS
FROM
ventas
WHERE
ventas.fecha=sysdate
AND
articulo=xarticulo;
message(
TO_CHAR(xventas)¦¦
' Ventas de '¦¦xarticulo);
pause;
WHEN OTHERS THEN
message('Error Indefinido');
pause;
END;
END;
Este procedimiento ventasde recibe un parámetro que es el nombre del artículo a consultar,
por lo cual, para ejecutarlo, se debe escribir ventasde('PAPEL').
Obsérvese también que la sentencia SELECT COUNT(*) INTO, usada en este ejemplo,
siempre devuelve una fila, ya que no existe formación de grupos al no estar presente la orden
GROUP BY. Por lo tanto, en este caso la única acción posible a realizar es pasar a la
siguiente sentencia, o sea, no se requiere control de excepciones.
Manejo de cursores
El conjunto de filas resultantes de una consulta con la sentencia SELECT, como vimos
anteriormente, puede estar compuesto por ninguna, una o varias filas, dependiendo de la
condición que define la consulta. Para poder procesar individualmente cada fila de la consulta
45
Manual del Alumno
debemos definir un cursor (que es un área de trabajo de memoria) que contiene los datos de
las filas de la tabla consultada por la sentencia SELECT.
Los pasos para el manejo de cursores, tema novedoso en la programación de Oracle con
PL/SQL, son:
-
Definir el cursor, especificando la lista de parámetros con sus correspondientes tipos de
datos y estableciendo la consulta a realizar con la sentencia SELECT.
-
Abrir el cursor para inicializarlo, siendo éste el momento en que se realiza la consulta.
-
Leer una fila del cursor, pasando sus datos a las variables locales definidas a tal efecto.
-
Repetir el proceso fila a fila hasta llegar a la última.
-
Cerrar el cursor una vez que se terminó de procesar su última fila.
A continuación veremos un ejemplo de cursor con las siguientes características:
Objetivo:
Consultar las ventas de una fecha dada ordenadas de mayor a menor.
Nombre:
CVENTAS.
Parámetros:
cfecha, variable que contiene la fecha a consultar.
Código de
definición del
cursor:
Ver figura 1
Figura 1: Código de definición de cursor
Con el procedimiento VENTAS5 del fuente 5, mostraremos cómo usar el cursor cventa
anteriormente definido, con el fin de registrar en la tabla VENTAMAYOR las 5 mayores ventas
en una fecha dada.
/* --- Fuente 5 ----------------------------------------------------------PROCEDURE VENTAS5 (xfecha DATE) is
BEGIN
DECLARE CURSOR cventas (cfecha DATE)
IS SELECT articulo,valor
46
Manual del Alumno
FROM ventas
WHERE fecha=cfecha
ORDER BY valor DESC;
xarticulo
ventas.articulo%TYPE;
xvalor
ventas.valor%TYPE;
BEGIN
OPEN cventas(xfecha);
FOR i IN 1..5 LOOP
FETCH cventas INTO xarticulo,xvalor;
EXIT WHEN cventas%NOTFOUND;
INSERT INTO
ventamayor VALUES
(xfecha,xarticulo,xvalor);
COMMIT;
END LOOP;
CLOSE cventas;
END;
END;
Para llamar al procedimiento ventas5 en una fecha dada, se puede escribir, por ejemplo:
ventas5(to_date('15/11/95','DD/MM/YY')
o
ventas5(sysdate).
A continuación detallaremos las sentencias usadas en este procedimiento:
DECLARE cursor
Define el cursor, su consulta y la lista de parámetros que se pasan a la orden WHERE, es solo
la declaración del cursor y no la realización de la consulta.
xarticulo ventas.articulo%TYPE;
Define la variable xarticulo igual a la columna articulo de la tabla ventas, que con el uso del
atributo de variable %TYPE permite declarar una variable del mismo tipo que una columna de
la tabla. No es necesario conocer cómo está definida esa columna en la tabla y, en caso que
la definición de la columna sea modificada, automáticamente se cambia la variable xarticulo.
OPEN cventas(xfecha);
Realiza la consulta asociada al cursor, pasando el valor del parámetro y guardando sus
resultados en un área de la memoria, desde la cual, posteriormente, se pueden leer estas filas.
47
Manual del Alumno
FOR i IN 1..5 LOOP
Ciclo numérico de repetición para poder consultar las 5 primeras ventas devueltas por el
cursor.
FETCH cventas INTO xarticulo,xvalor;
Lee la siguiente fila de datos del cursor cventas y pasa los datos de la consulta a las variables
xarticulo y xvalor.
EXIT WHEN cventas%NOTFOUND;
Garantiza la salida del ciclo antes de las última repetición, en caso que para una fecha dada
se hayan efectuado menos de 5 ventas, ya que en esta situación la consulta del cursor
devuelve menos de 5 filas.
%NOTFOUND es un atributo de cursor que es verdadero cuando la última sentencia FETCH
no devuelve ninguna fila.
INSERT INTO ventamayor
VALUES(xfecha,xarticulo,xvalor);
Insertar en la tabla ventamayor los valores leídos desde el cursor.
COMMIT;
Actualización de la tabla ventamayor.
END LOOP;
Fin del ciclo.
CLOSE cventas;
Cierra el cursor, eliminado sus datos del área de memoria.
Disparadores
El módulo SQL*Forms tiene incorporado una colección de procedimientos y funciones
llamados "empaquetados" que se pueden incluir en el código de procedimientos o
disparadores (TRIGGER) definidos por el usuario.
El disparador es un bloque de código que se activa cuando se pulsa una determinada tecla u
ocurre cierto evento, como puede ser:
48
Manual del Alumno
-
Mover el cursor hacia o desde un campo, registro, bloque o forma.
-
Realizar una consulta.
-
Validar un dato.
-
Hacer una transacción al insertar, modificar o eliminar registros de la base de datos.
Oracle asocia a cada tecla de función un procedimiento empaquetado, pudiendo el usuario
redefinir esta asignación o capturar el disparador para ampliarlo o modificarlo con su propio
código.
INDICE
1.
Alcance
y
Objetivos
..........................................................................................4
2. Conceptos
Básicos
............................................................................................5
Arquitectura Oracle
Instancia
.....................................................................................5
......................................................................................................5
Iniciando La Base de Datos
........................................................................7
Cerrando la Base de Datos
.........................................................................8
Net8
............................................................................................................9
3. Accediendo
a
la
información
...............................................................................11
3.1.
SQL
*Plus
y
SQL
............................................................................…….….11
3.1.1.
Consultar
Información
–
comando
SELECT
...................................12
3.1.2.
Comando
describe
.........................................................................14
3.1.3.
Edición
de
buffer
de
SQL*Plus
.......................................................14
3.1.4.
Tipos
de
Datos
de
Oracle
..............................................................15
3.1.5.
Comando
........................................................................15
INSERT
49
Manual del Alumno
3.1.6.
Comando
UPDATE
........................................................................16
3.1.7.
Comando
DELETE
.........................................................................17
3.1.8.
Operaciones
con
funciones
y
tipos
de
datos
...................................17
3.1.8.1
Valores
y
funciones
numéricas
........................................17
3.1.8.2
Referencia
a
valores
y
funciones
de
fecha
.......................19
3.1.8.3
Referencia
a
valores
y
funciones
de
caracteres
...............21
3.1.8.4
Funciones
de
grupo
.........................................................22
3.1.9.
Cláusula
GROUP
BY
en
comando
SELECT
..................................22
3.1.10. Cláusula
HAVING
en
comando
SELECT
........................................23
3.1.11. Proceso
de
comando
SQL
...............................................................24
3.2
Transacciones
..............................................................................................24
3.2.1. Comando
COMMIT
...........................................................................24
3.2.2. Comando
ROLLBACK
......................................................................25
3.2.3. Concurrencia
y
Consistencia
.............................................................25
4. Estructura
de
la
Base
de
datos
..............................................................................27
Tablespaces
..................................................................................................27
Alcance y Objetivos
Creando un tablespace
......................................................................27
Alterando un tablespace
....................................................................28
Borrando un tablespace
.....................................................................28
Tablespace temporales
......................................................................28
50
Manual del Alumno
Segmentos
Extents
.....................................................................................................29
...........................................................................................................29
4.3.1.
Cláusula
Storage
................................................................................29
Bloques Oracle
..............................................................................................30
5. creación
de
los
objetos
de
Base
de
Datos
..............................................................31
Tablas
.............................................................................................................31
Creación de tablas
..............................................................................31
Modificación de tablas
Borrar una tabla
........................................................................32
..................................................................................32
Vistas
..............................................................................................................32
Indices
............................................................................................................33
5.3.1.
Indices
Unique
....................................................................................34
Secuencias
.....................................................................................................34
Sinónimos
.......................................................................................................35
5.5.1.
Sinónimos
públicos
.............................................................................36
6. Uso
de
Constraints
..................................................................................................38
Constraint Not Null
…………………………………………………………………38
Constraint Unique
…………………………………………………………………..38
Constraint Check
…………………………………………………………………...39
Constraint Primary Key
…………………………………………………………….39
Constraint Foreing Key
…………………………………………………………….40
Agregado Constraints
……………………………………………………………....41
Deshabilitar un Constraint
Habilitar un Constraint
Borrar un Constraint
7. El
………………………………………………………….41
………………………………………………………………42
………………………………………………………………...42
segmento
Rollback
...............................................................................................44
Concepto ...........................................................................................................44
Alcance y Objetivos
51
Manual del Alumno
Creación, eliminación y asignación de transacciones
8. Administración
...................................44
de
usuarios
.....................................................................................46
Creación
.........................................................................................................46
Alteración de usuarios
....................................................................................46
Eliminación de usuarios
..................................................................................47
Terminando la sesión de usuarios
..................................................................47
Control de recursos del sistema ( Perfiles de usuarios )
9. Privilegio
...............................48
de
acceso
................................................................................................51
Privilegios de sistema
Privilegio de objetos
Usos de Roles
.....................................................................................51
.......................................................................................53
................................................................................................54
10. Creación
de
una
Base
de
Datos
.............................................................................57
Consideraciones
Pasos a seguir
..........................................................................................57
...............................................................................................57
Alcance y Objetivos
52
Manual del Alumno
1.
Alcance y Objetivos
Este curso tiene como alcance entender los conceptos generales de Oracle,
administrar y manejar la información de la Base de datos y sus objetos.
Los objetivos del curso se detallan a continuación:
Conocimiento de la arquitectura de la Base de datos.
Montar y desmontar una Base de Datos.
Crear una Base de datos completa.
Manejar la información de una Base de datos .
Conocer los parámetros de configuración.
Manejar la estructura de la base de datos con Tablespace.
Definir el almacenamiento de las tablas, índices, clusters y otros objetos.
Conocer el rollback segment y los segmentos temporales.
Crear, monitorear y borrar usuarios.
Otorgar privilegios de acceso.
Alcance y Objetivos
53
Manual del Alumno
2.
Conceptos Básicos
Oracle es un administrador de base de datos relacional que brinda acceso a
la información bajo una arquitectura abierta de fácil manejo y
administración.
Funciones del administrador de Base de datos:
Instalar y actualizar el servidor Oracle y las herramientas de aplicación.
Crear los archivos de almacenamiento y los objetos.
Definir los tamaños de almacenamiento y planear los futuros requerimientos
de espacio para la base de datos.
Administrar la seguridad de usuarios y accesos.
Respaldar y recuperar la información.
Monitorear y optimizar la performance de la Base de datos.
Arquitectura Oracle
La forma como Oracle está diseñado para trabajar se puede describir en
sus 3 componentes:
Programas cargados en memoria que se encargan de
ejecutar y controlar los comandos de la base de datos,
manejan las áreas de memoria y los archivos físicos.
Existen muchos procesos tales como el PMON, SMON,
DBWR, etc, cada uno de ellos tiene una función específica.
Estructura de Bloques de memoria en donde se almacena información de
memoria :
la base de datos, es necesario para el trabajo de server y
para agilizar sus operaciones.
El área de memoria
destinado para este trabajo se conoce como SGA ( System
Global Area ).
Es una estructura física, archivos que contienen la data,
Archivos :
estructuras lógicas, registro de cambios hechos a la base,
estos son: Data Files. Control Files y Redo Log Files.
Procesos :
Instancia
Se denomina instancia a la combinación del SGA y los procesos de
background. Cuando se inicia, el SGA se crea en la memoria y se inician
los procesos de Background.
Debemos distinguir entre una instancia Oracle y la base de datos. Primero
la instancia es iniciada y luego la base de datos es cargada por la instancia.
Conceptos Básicos
54
Manual del Alumno
ARQUITECTURA ORACLE
*************************************************************************************
***************************************************************************************
*
INSTANCIA ORACLE
Conceptos Básicos
55
Manual del Alumno
Iniciando la Base de Datos
Los pasos a seguir para iniciar el administrador de base de datos Oracle
son 3:
1. Iniciar la instancia
2. Montar la Base de datos
3. Abrir una Base de datos
El comando STARTUP permite realizar estos 3 pasos
Se puede iniciar la Base de Datos desde el programa Server Manager, por
ejemplo en Windows NT desde una ventana de interfaz de comandos en la
siguiente forma:
D:\>SVRMGR30
Las siguientes son cláusulas que pueden acompañar al comando startup:
DATABASE
OPEN
MOUNT
Especifica el nombre de la base de datos.
Permite a los usuarios acceder a la base de datos.
Monta la base de datos para ciertas actividades del DBA,
pero no permite el ingreso de usuarios.
NOMOUNT
Crea el SGA e inicia los procesos background, pero no
permite el acceso a la base de datos.
EXCLUSIVE
Permite solo a la actual instancia acceder a la base de
datos.
PARALLEL
Permite a varias instancias acceder a la base de datos.
PFILE = parfile Permite usar un archivo de configuración distinto al default.
FORCE
Aborta la instancia en ejecución antes de realizar un
startup normal.
RESTRICT
Permite conectarse solo a los usuarios con el privilegio
RESTRICTED SESSION.
RECOVER
Inicia la recuperación de la base de datos.
Se puede iniciar una instancia Oracle sin montar la base de datos por
ejemplo para crear una base de datos nueva.
Conceptos Básicos
56
Manual del Alumno
Luego para montarla o abrirla usaríamos el comando:
ALTER DATABASE [ mount / open ]
Una base de datos puede ser montada pero no abierta para realizar
algunas funciones del DBA como por ejemplo para recuperar alguna
información dañada.
En este caso luego se iniciará Oracle con el
comando:
ALTER DATABASE OPEN;
El estado de la base de datos puede ser alterado para permitir o no el
acceso a usuarios con el siguiente comando:
ALTER SYSTEM [ enable / disable ] RESTRICTED SESSION.
Cerrando la Base de Datos
Para cerrar la base de datos y desmontar la instancia s usa el siguiente
comando:
SHUTDOWN [ normal / immediate / abort ]
Por ejemplo desde el Server Manager de la siguiente forma:
Shutdown normal
Nuevas conexiones no son permitidas.
El servidor espera a que los
usuarios conectados actualmente se desconecten de la base de datos para
realizar el shutdown. Por default el shutdown es normal. Si se completa,
la próxima vez que se inicie Oracle no se requerirá la recuperación de la
instancia.
Shutdown inmediate
Los comandos SQL actualmente en proceso no son culminados y a todas
las transacciones que no llegaron a culminarse se les realiza un rollback.
Se cierra y desmonta la base de datos limpiamente. La siguiente vez que
se inicie Oracle tampoco se necesitará una recuperación de la instancia.
Conceptos Básicos
57
Manual del Alumno
Shutdown abort
Se cortan los comandos SQL, no se realiza rollback de las transacciones.
No se cierra la base de datos, pero si la instancia. La próxima vez que
inicie Oracle automáticamente se realizará la recuperación de la instancia.
2.5. Net8 – Software de comunicación
Una vez que Oracle se inicia, el Oracle Server está disponible para trabajar
desde el mismo servidor o desde una aplicación o herramienta en una PC
o estación de trabajo.
Net8 es un software que permite la conexión desde una PC de la red a la
base de datos en un servidor, o desde un servidor a otro y utiliza el
protocolo TNS (Transparent Network Substrate), este es interpretado a
traves de adaptadores de protocolos standares como el IPX y el TCP / IP.
Para configurar una conexión desde una estación cliente hacia un servidor
Oracle se debe realizar lo siguiente:
1. Ingresar al programa “Net8 Easy Configuration” desde el menu del
cliente Oracle instalado en el computador.
2. Escoger ala opción “Add Database Alias” para crear una conexión a la
base de datos.
3. Escribir el nombre de la conexión, puede ser el mismo nombre de la
base de datos o cualquier nombre que la identifique.
4. Escoger el protocolo con que se conecta la estación al servidor donde
se reside la base de datos, por ejemplo TCP / IP.
5. Registrar el nombre del servidor o su dirección dependiendo del
protocolo, así como el nombre de la instancia que maneja la base de
datos.
6. El programa mostrará los datos registrados esperando la confirmación.
Luego de confirmar los datos el cliente ya podrá con4ectarse a la base de
datos a través de cualquier herramienta, por ejemplo SQL*Plus indicando el
nombre de usuario, clave y el nombre de la conexión creada.
Conceptos Básicos
58
Manual del Alumno
PRACTICA DEL CAPITULO 2
1. Levantar la base de datos Oracle en estado MOUNT.
2. Selecciona los registros de la vista V$SGA.
3. Selecciona los registros de la vista V$PARAMETER.
4. Selecciona los datos de la vista DBA_USER. Que ocurre?.
5. Cambiar el estado de la Base de Datos de MOUNT a OPEN y volver a
intentar visualizar los datos de la vista DBA_USERS.
6. Cerrar la base de datos Oracle sin esperar a que los usuarios finalicen
sus operaciones.
7. Copia el archivo de parámetros initorcl.ora a otro con el nombre
inittest.ora y modifica el nombre de la base de datos en este nuevo
archivo.
8. Levantar la Base de Datos
parámetros. Que ocurre?
Oracle usando el nuevo archivo de
9. Usa el archivo de parámetros original para levantar la base de datos,
restringiendo el acceso a los usuarios con el privilegio RESTRICTED
SESSION.
10. Usar el comando ALTER SYSTEM para permitir el acceso a todos los
usuarios.
Conceptos Básicos
59
Manual del Alumno
3.
Accediendo a la información
3.1. SQL*PLUS y SQL
SQL*Plus es una herramienta diseñada para usarse con Oracle, la cual
extiende la capacidad del SQL estándar ANSI, es decir reconoce y ejecuta
comandos SQL y comandos especializados de SQL*Plus que pueden dar
formato a reportes, proveer facilidades de ayuda y edición, y mantener
variables de sistema.
SQL ( Structured Query Language ) es un simple y potente lenguaje de
acceso a base de datos, además es le lenguaje estándar para manejo de
sistemas de base de datos relacional. El SQL implementado por Oracle
es 100% compatible con el ANSI / ISO estándar SQL.
Los comandos SQL pueden ser clasificados de la siguiente manera:
De
:
definición
de
datos Comandos que permiten crear, alterar y
eliminar objetos, así como también comandos
que permiten otorgar privilegios de acceso,
por ejemplo los comandos :
CREATE,
ALTER, DROP, GRANT, entre otros.
De manipulación de datos Comandos
de
consulta,
inserción,
:
actualización y borrado de datos, los
comandos más conocidos son SELECT,
INSERT, UPDATE y DELETE.
De
control
de
datos Manejan los cambios realizados por los
:
comandos de manipulación, entre ellos se
encuentran
el
COMMIT,
ROLLBACK,
SAVEPOINT.
Ingresando a SQL * Plus
AL ingresas al programa desde el servidor o desde un cliente Windows,
DOS o de alguna otra plataforma, SQL*Plus solicitará el nombre de usuario
y clave en la base de Datos, una vez conectado aparecerá el siguiente
mensaje:
Accediendo a la información
60
Manual del Alumno
De ingresar mal el nombre de usuario o la clave, se visualizará el mensaje y
código de error respectivo. Para mayor detalle, Oracle nos muestra un
código el cual puede ser consultado en el catálogo de errores.
Otro ,motivo por el cual no se puede conectar a la base de datos, por
ejemplo puede ser porque el driver de conexión (Net8) no está bien
instalado o configurado. Esto en el caso que la conexión sea desde una
estación de la red o remota.
Para culminar una sesión en SQL*Plus:
SQL>EXIT
3.1.1. Consultar información – Comando SELECT
Seleccionar información de una base de datos, o consultarla, es una de las
operaciones de base de datos más comunes.
El comando Select es un comando muy potente que se usa para obtener la
información contenida en una o más tablas, vistas y snapshots.
Sintaxis:
SELECT [all / distinct] fields FROM [table / view / snapshot]
WHERE condition
START WITH condition CONNECT by condition
GROUP BY expr HAVING condition
ORDER BY [expression / position] [ASC / DESC]
FOR UPDATE OF expresion
A toda esta sintaxis los requerimientos mínimos para un estatuto SELECT
son:
SELECT campo FROM nombre de la tabla.
Ejemplo:
SQL>Select empno, ename, job from emp;
La cláusula WHERE permite adicionar condiciones de búsqueda:
SELECT campo FROM nombre de la tabla WHERE condición
Los operadores de comparación para esta cláusula son:
=
.
¡= <> ^=
>
>=
<
Accediendo a la información
Igual
.
No igual a
Mayor que
Mayor o igual a
Menor que
a
61
Manual del Alumno
<=
BETWEEN....AND.....
IN (List)
IS NULL
LIKE
Menor o igual a
Entre dos valores
Igual o cualquier miembro de la lista
Es un valor nulo
Busca un patrón de caracteres
caracteres comodín.
usando
Los operadores lógicos son:
NOT
AND
OR
Ejemplo:
SELECT ename, job, sal
FROM emp
WHERE sal >= 1500 and job=‟MANAGER‟ or job = „SALESMAN‟;
Resultado:
ENAME
--------------ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
TURNER
JOBSAL
------------------SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
SALESMAN
SAL
----------1060
1250
2975
1250
2850
2450
1500
7 rows selected
La cláusula ORDER BY se puede usar para ordenar en forma ascendente,
descendente por múltiples columnas
Ejemplo:
SELECT ename, job, sal
FROM emp
WHERE deptno =30
ORDER BY job, sal DESC, ename;
Resultado:
ENAME
JOBSAL
--------------------------------Accediendo a la información
JAMES
CLERK
SAL
----------950
62
Manual del Alumno
BLAKE
ALLEN
TURNER
MARTIN
WARD
MANAGER
SALESMAN
SALESMAN
SALESMAN
SALESMAN
2850
1600
1500
1250
1250
6 rows selected
3.1.2. Comando DESCRIBE
Este comando de SQL*Plus permite visualizar la estructura de una tabla,
vista o snapshot:
SQL>DESCRIBE EMP
Name
----------EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
Null?
------------NOT NULL
NOT NULL
Type
---------------------NUMBER (4)
VARCHAR2 (10)
VARCHAR2 (9)
NUMBER (4)
DATE
NUMBER(7,2)
NUMBER(7,2)
NUMBER(2)
3.1.3. Edición del buffer de SQL con comandos de SQL*Plus
Comando
A[PPEND]
C[HANGE]
Descripción
Añade un texto específico Al final de la línea actual en el buffer.
Cambia la primer ocurrencia de texto en la línea actual del
buffer con la cadena provista, por ejemplo:
C/ENP/EMP.
CL[EAR] BUFFER Limpia el buffer.
DEL
Borra la línea actual del buffer.
I[NPUT]
Añade una o más líneas de texto después de la línea actual en
el buffer. Presione <RETURN> sobre una línea en blanco
para salir del modo de entrada (input).
L[IST]
Lista de todas las líneas del buffer.
L[IST] n
Lista de la línea n del buffer.
R[UN]
Despliega y ejecuta el contenido del buffer.
N
Coloca el apuntador del buffer en la línea n.
n<text string>
Reemplaza el contenido actual de la línea con la cadena de
texto provista.
3.1.4. Tipos de Datos Oracle
Accediendo a la información
VARCHAR2(n) Especifica una cadena de caracteres de longitud variable,
la cual tiene un tamaño de longitud máxima en bytes. El
63
Manual del Alumno
tamaño máximo es de 4000.
El tamaño debe ser
especificado para VARCHAR2.
CHAR(n)
Especifica una cadena de caracteres de longitud fija. El
tamaño máximo es de 2000 bytes y el de default es de 1
byte.
NUMBER (n,d) Valores numéricos consistentes de los dígitos 0-9, con
signo (+,-) opcional y un punto decimal. La precisión n
puede tener un rango de 1 a 38 y la escala d pude tener un
rango de –84 a 127. Donde n es el número máximo de
dígitos y d es el número máximo de decimales.
LONG
Cadena de caracteres de longitud variable que puede
contener hasta 2 gigabytes. No se puede definir más de
una columna tipo LONG por tabla. No se puede hacer un
join de tablas usando una columna LONG como columna
base del join o una búsqueda basada sobre una columna
LONG. Una columna tipo LONG no puede aparecer en un
constraint de integridad(excepto para el NULL y NOT
NULL).
DATE
Valores tipo fecha y hora, desde Enero 1°, 4712 A.C a
Diciembre 31, 4712 D.C
RAW(n)
Datos en binario, cuyo tamaño es en bytes. El tamaño
máximo es de 2000 bytes y este debe ser especificado para
la columna de tipo RAW.
LONG RAW
Datos en binario de longitud variable de tamaño hasta de 2
gigabytes.
BLOB
Datos en binario de longitud de hasta 4 gigabytes, los
cambios realizados pueden ser manejados a través de
transacciones con los comandos COMMIT o ROLLBACK.
CLOB
Datos en caracteres de hasta 4 gigabytes, también pueden
ser manejados en transacciones.
BFILE
Datos en binario que se encuentran en archivos fuera de la
base de datos.
El campo almacena un puntero a la
información de este archivo. Almacena hasta 4 gigabytes.
3.1.5.
Insertando registros en una tabla – Comando INSERT
El comando INSERT permite añadir registros a una tabla de la base de datos.
Sintaxis
INSERT INTO tabla [(columna1, columna2…..)]
VALUES (valor1, valor2.....);
Ejemplos:
Accediendo a la información
SQL>INSERT INTO DEPT VALUES(50,‟FINANCE‟,‟LOS ANGELES‟);
1 row created.
64
Manual del Alumno
SQL>INSERT INTO INTO emp( empno, ename, hiredate, sal, deptno )
VALUES (100,‟LERNER‟, ‟01-JAN-92‟, 2000, 30 );
1 row created.
SQL>INSERT INTO emp( empno, ename, deptno)
SELECT id, name, department
FROM old_emp
WHERE department IN(10,20,30,40);
Fíjese que en el primer ejemplo no es necesario especificar el nombre de los
campos de la tabla, el registro se insertará con los valores especificados en el
orden según como se crearon los campos de la tabla.
En el segundo ejemplo solo se registran datos para los campos indicados, en
este caso es necesario escribirlos. El resto de campos se mantendrán con
valor NULL.
El siguiente ejemplo muestra que se puede agregar más de un registro con
un solo comando INSERT haciendo uso del comando SELECT para tomar los
registros de otra tabla.
3.1.6.
Actualizando Registros – Comando UPDATE
El comando UPDATE se utiliza para modificar los datos de una tabla.
Sintaxis
UPDATE tabla
SET columna1=valor, columna2=valor….
[WHERE condición ]
Ejemplos:
SQL>UPDATE emp
SET job = „SALESMAN‟; sal = sal + 1.05, deptno = 30
WHERE empno =7788;
1 row updated
SQL>UPDATE emp
SET job=„SALESMAN‟
WHERE job =„SALES‟;
7 rows updated
SQL>UPDATE emp set sal = 3000;
Accediendo a la información
50 rows updated
65
Manual del Alumno
los ejemplos nos muestran como actualizar un registro específico, como en el
primer caso, luego un conjunto de registros y fíjese que en el último ejemplo
se actualizarán todos los registros de la tabla, este comando puede ser muy
útil pero a la vez peligroso si no se indica la cláusula WHERE por error.
3.1.7.
Borrado de Registros – Comando DELETE
El comando DELETE elimina registros de una tabla.
Sintaxis:
DELETE FROM tabla
[ WHERE condición ];
Ejemplo:
SQL>DELETE FROM emp
WHERE empno = 1234;
1 row deleted.
El ejemplo muestra la eliminación de un registro específico, se pueden
eliminar varios registros según la condición, así como todos los registros de la
tabla, esto sucede cuando no se escribe la cláusula WHERE.
3.1.8.
3.1.8.1.
Operaciones con funciones y tipos de datos
Valores y funciones numéricas
Los cálculos se llevan a cabo usando las expresiones aritméticas de suma
(+), resta (-), multiplicación (*), y división (/) y pueden ser usados en la
mayoría de los comandos SQL.
El resultado del cálculo se puede desplegar como si fuesen columnas con
expresiones aritméticas en estatutos SELECT.
Ejemplo:
SQL>SELECT ename, sal, comm, sal+comm
FROM emp
WHERE job = „SALESMAN‟
AND comm. > 0.25 * sal
ORDER BY 4;
Resultado:
Accediendo a la información
ENAME
SAL
COMM
----------------------------------WARD
1250
500
MARTIN
1250
1400
SAL+COMM
----------------1750
2650
66
Manual del Alumno
Función NVL
Con el valor de función nulo, NVL, se convierte un valor nulo a uno no nulo
con el propósito de evaluar una expresión.
Cuando NVL evalúa la primer expresión, si es NOT NULL (No nulo) regresa
expr1, de otra forma regresa expr2.
Sintaxis:
NVL ( expr1 , expr2 ).
Ejemplo:
SELECT ename, job, sal, comm, NVL ( sal + 0 ) + NVL ( comm,0 )
FROM emp
WHERE deptno = 30;
Resultado:
ENAME
JOB
SAL
COMM
comm,0 )
-------------- ----------------- --------------------------------ALLEN
SALESMAN
1600
1900
WARD
SALESMAN
1250
1750
JONES
SALESMAN
2975
MARTIN
SALESMAN
1250
2650
BLAKE
MANAGER
2850
SCOTT
SALESMAN
3150
TURNER
SALESMAN
1500
1500
JAMES
CLERK
850
NVL ( sal, 0 ) + NVL (
--------------------------------
8 rows selected
Ejemplos de algunas funciones:
Función ROUND
SQL>SELECT ename, sal, sal/22, ROUND( sal/22,0 )
FROM emp
WHERE ename IN („ALLEN‟,‟JONES‟);
Accediendo a la información
300
500
2975
1400
2850
3150
0
950
67
Manual del Alumno
ENAME
-----------ALLEN
JONES
SAL
---------1600
2975
SAL/22
-----------------72.7272727
135.227273
ROUND( sal/22,0 )
-------------------------73
135
Función TRUNC
SQL>SELECT ename, sal, sal/22, TRUNC( sal/22,0 )
FROM emp
WHERE ename IN („ALLEN‟,‟JONES‟);
ENAME
-----------ALLEN
JONES
3.1.8.2.
SAL
---------1600
2975
SAL/22
-----------------72.7272727
135.227273
TRUNC( sal/22,0 )
-------------------------72
135
Referencia a valores y funciones de fecha
Use operaciones aritméticas sencillas en comandos SQL para ejecutar
cálculos sobre valores de fechas en la base de datos.
Fecha + número
fecha.
Fecha – número
fecha.
Fecha – Fecha
Añade un número de días a la fecha, produciendo una
Resta un número de días a la fecha, produciendo una
Resta una fecha a otra, produciendo un número de días.
Ejemplo:
SQL>SELECT ename, hiredate, hiredate+90
FROM emp
WHERE deptno = 10;
ENAME
--------------CLARK
KING
MILLER
HIREDATE
-------------------09-JUN-81
17-NOV-81
23-JAN-82
HIREDATE + 90
---------------------07-SEP-81
15-FEB-81
23-APR-82
Algunas funciones :
Función
Ejemplo
Resultado
ADD_MONTHS
ADD_MONTHS
(HIREDATE,6)
Regresa una fecha 6 meses
después de la fecha de
contratación.
ADD_MONTHS
(HIREDATE,-6)
Accediendo a la información
Regresa una fecha 6 meses
antes
de
la
fecha
de
contratación.
68
Manual del Alumno
LAST_DAY
LAST_DAY (HIREDATE) Regresa el ultimo día del mes
que contiene una fecha de
contratación.
NEXT_DAY
NEXT_DAY
(HIREDATE,‟FRIDAY‟)
MONTHS_BET
WEEN
MONTHS_BETWEEN
(SYSDATE,HIREDATE)
SYSDATE
Regresa la fecha del primer
Viernes después de la fecha de
contratación.
Regresa el número de meses
entre hoy y la fecha de
contratación.
SYSDATE (no requieren Regresa la fecha y hora actual.
argumento)
La función de conversión TO_CHAR da formato al desplegado de valores de
fecha.
Ejemplo:
(hiredate,‟fmDD”of” Month YYYY‟) “Data of Hire”
emp
deptno = 20;
Resultado:
Date of Hire
-------------------17 of December 1980
12 of January 1983
3 of December 1981
Formatos de Fecha:
DD
Día del mes (ej: 1- 31)
DY
Día de la semana (ej: FRI)
DAY
Nombre del día en mayúsculas, ajustado con blancos a
una longitud de 9 caracteres (ej: MONDAY)
DDSPTH
Nombre deletreado del día en mayúsculas (ej: TWELFTH)
MM
Mes ( 01-12 ) (ej: JAN=01)
MON
Nombre del mes en mayúsculas, abreviación de 3 letras
(ej: JAN)
69
Manual del Alumno
MONTH
Nombre del mes en mayúsculas, ajustado con blancos a
una longitud de 9 caracteres (ej: JANUARY)
YY
Año en 2 dígitos (ej: 91)
Accediendo a la información
YYYY
Año en 4 dígitos (ej: 1991)
HH:MI:SS
Horas:Minutos:Segundos (ej: 09:00:00)
Fm
Modo de llenado: los elementos subsecuentes suprimirán
los ajustes con blancos, dejando una variable de longitud
variable )
3.1.8.3.
Referencia a valores y funciones de caracteres
Combine columnas y constantes de caracteres en un desplegado que sea
más significativo en su lectura que una lista de columnas recuperadas por
SQL * Plus.
Ejemplo – Concatenación
Despliegue los nombres de los departamentos combinados con sus
ubicaciones bajo el encabezado de DEPARTMENTS.
SQL>SELECT dname II „- „II loc DEPARTMENTS
FROM dept;
Resultado:
DEPARTMENTS
------------------------------------ACCOUNTING – NEW YORK
RESEARCH – DALLAS
SALES – CHICAGO
OPERATIONS – BOSTON
FINANCE – LOS ANGELES
RESEARCH – BOSTON
PERSONNEL – TAHITI
EDUCATION – MAUI
8 rows selected
Funciones:
Función
INITCAP
Ejemplo
INITCAP(ENAME)
Resultado
Regresa la primer letra de cada
nombre en mayúscula, el resto
en minúsculas (ej: Smith).
70
Manual del Alumno
UPPER
UPPER(ENAME)
Regresa todos los caracteres en
una cadena en mayúscilas (ej:
SMITH)
Accediendo a la LOWER(ENAME)
información
LOWER
Regresa todos los caracteres en
una cadena en minúsculas (ej:
smith).
SUBSTR
SUBSTR(JOB, 1, 5)
Regresa la
regresa
5
MANAG)
LENGTH
LENGTH(ENAME)
Regresa el número de caracteres
en la cadena (ej: 6)
3.1.8.4.
primer posición,
caracteres
(ej:
Funciones de grupo
Las funciones de grupo obtienen resultados basados en grupos de registros
en vez de un resultado por registro.
Función
AVG
Ejemplo
AVG(SAL)
Resultado
Valor promedio de salaries.
COUNT
COUNT(COMM)
Número de valores no nulos en la
columna COMM.
COUNT(*)
Número de registros de una tabla.
MAX
MAX(SAL)
Máximo salario de un empleado.
MIN
MIN(SAL)
Mínimo salario de un empleado.
SUM
SUM(COMM)
Suma de valores de COMM.
3.1.9. Cláusula GROUP BY en el comando SELECT
La cláusula GROUP BY despliega una tabla en subgrupos de registros.
Ejemplo:
SQL>SELECT DEPTNO, COUNT(*)
FROM emp
GROUP BY deptno;
DEPTNO
COUNT(*)
71
Manual del Alumno
-------------------------------------------------------10
3
20
3
30
8
3.1.10. Cláusula HAVING en el comando SELECT
Accediendo a la información
Para poner una condición en la función GROUP BY se utiliza la cláusula
HAVING.
Ejemplo:
SQL>SELECT job, 12 * AVG( sal )
FROM emp
GROUP BY job
HAVING COUNT (*)>2;
Resultado:
JOB
-----------------CLERK
SALESMAN
12 * AVG ( )
-----------------------------12450
23450
En el ejemplo anterior se muestra el promedio de los salaries * 12 de los
empleados agrupados por tipo de trabajo, pero solo de aquellos grupos que
tienen más de 2 trabajadores.
72
Manual del Alumno
3.1.11.
Proceso de un comando SQL :
Accediendo a la información
Todo comando SQL ejecutado en un base de datos Oracle pasa por las
siguientes etapas:
Parse
Execute
Fetch
Parse
Etapa de la preparación del comando en donde Oracle revisa la sintaxis del
comando, revisa el diccionario de datos para validar los privilegios de acceso
y busca la forma más rápida y efectiva de ejecutar el comando.
Oracle usa un área de memoria llamada cursor para registrar la información
de estado de un comando.
Execute
En este momento Oracle lee y graba la información física y lógica, realiza el
chequeo de constraints y modifica la información si es necesario.
Fetch
Devuelve el resultado de los registrois solicitados por un comando SELECT.
3.2.
Transacciones
Oracle denomina transacción a una secuencia de comandos SQL.
Una transacción comienza al iniciar una sesión Oracle o al final de una
transacción previa.
La transacción finaliza cuando se ejecuta el comando COMMIT o el comando
ROLLBACK, también puede que el usuario aborte la transacción.
3.2.1. Comando COMMIT
Inserciones, borrados y actualizaciones a tablas no se hacen permanentes
hasta que el trabajo es salvado en la base de datos ejecutando el comando
COMMIT.
Hasta que el trabajo no es salvado, únicamente el usuario que hizo los
cambios los puede ver; todos los demás usuarios ven los datos como estaban
al momento del último COMMIT.
Accediendo a la información
73
Manual del Alumno
3.2.2. Comando ROLLBACK
El comando rollback cancela todos los cambios pendientes regresando al
estado en que estaba la información al momento del último COMMIT.
Ejemplo:
COMMIT
I
INSERT
I
INSERT
I
DELETE
I
INSERT
I
ROLLBACK
I
UPDATE
I
UPDATE
I
COMMIT
En esta secuencia de commandos que contiene 2 transacciones, sólo se
actualiza la información modificada por los 2 últimos comandos UPDATE.
3.2.3. Concurrencia y Consistencia
Dos de los requerimientos más importantes de un manejador se sistemas de
información es el controlar la concurrencia y la consistencia de la información.
Sin un control adecuado de la concurrencia la data puede ser cambiada o
actualizada en mala forma, comprometiendo la integridad de la información.
Los comandos DML, de manipulación de datos, tales como INSERT,
DELETE, UPDATE, bloquean los registros en forma implícita hasta que se
liberan con el comando COMMIT;
Cuando un usuarios solicita información de la base de datos no espera a que
otro realice COMMIT a sus transacción en caso de que esté trabajando con la
misma información solicitada. Tampoco el usuario que graba la información
espera a que termine el comando SELECT de otro usuario.
Un usuario solo espera el término de la transacción de otro usuario cuando
intenta actualizar un mismo registro o registros de la base de datos.
PRACTICA DEL CAPITULO 3
Accediendo a la información
74
Manual del Alumno
1. Use la tabla EMP para completar los ejercicios siguientes:
a)
Despliegue los nombres y fecha de contratación de cada
empleado.
b)
Despliegue la información del paso 1 con la fecha de contratación
apareciendo primero.
c)
Despliegue a los empleados que ganen más de $2000. Etiquete a
la columna como Employee.
d)
Despliegue a los empleados que no son oficinistas (clerks) o
vendedores (salesman). Ordene la lista por nombre de empleado.
e)
Despliegue los nombres de empleados cuyos nombres contengan
la letra “S”.
f)
Despliegue los nombres de empleados y salarios para aquellos
que ienen un salario menor que su comisión. Etiquete al nombre de
empleado como Name y a la columna de salario como Salary.
g)
Despliegue a todos los empleados contratados en 1981.
h)
Despliegue la cantidad de empleados de los departamentos 10 y
20.
2. Use las tablas NATION e INVENTION para completar los ejercicio
faltantes:
a)
Despliegue todas las invenciones de Edison y el año en que fueron
inventadas.
b)
Despliegue todas las naciones cuya capital es Wellington o
Georgetown.
c)
Despliegue todas la naciones que tienen poblaciones entre
230,000 y 820,000. Ordénelas de forma ascendente por nación.
d)
Despliegue los inventores, invenciones y años de todas la
invenciones que no fueron inventadas entre 1800 y 1900. Ordene la lista
por invención, usando la posición de columna.
e)
Despliegue lo 10 primeros caracteres del nombre del inventor para
todos aquellos cuyo nombre empieza con la letra L.
Accediendo a la información
75
Manual del Alumno
4.
Estructura de la Base de Datos
4.1.
Tablespaces
Una base de datos Oracle puede subdividirse en áreas conocidas como
tablespaces.
Cada tablespace está compuesto por uno o más archivos del sistema
operativo.
El tablespace SYSTEM se crea en el momento de crear una base de
datos, en él se almacena las tablas y vistas del diccionario de datos Oracle.
Un tablespace puede permanecer en línea o fuera de línea excepto el
tablespace SYSTEM.
Se crean tablespaces en una base de datos para almacenar segmentos
rollback, segmentos temporales, información de las aplicaciones, índices,
etc.
4.1.1. Creando un Tablespace
Para crear un tablespace se utiliza el comando CREATE TABLESPACE de la
siguiente forma:
CREATE TABLESPACE nombre_tablespace
DATAFILE nombre_archivo SIZE tamaño
DEFAULT STORAGE cláusula_storage
[ ONLINE/OFFLINE ]
Ejemplo:
Estructura de la Base de Datos
Create
ts_tablas_inventario
Datafile „E:\ORADATA\INVENTA\DFINV01.ORA‟ size 20M;
tablespace
4.1.2. Alterando un tablespace
Se puede modificar
TABLESPACE:
un
tablespace
a
través
del
comando
ALTER TABLESPACE nombre_tablespace
ADD DATAFILE nombre_archivo SIZE tamaño
RENAME DATAFILE nombre_archivo1 TO nombre_archivo2
[ ONLINE/OFFLINE ]
ALTER
76
Manual del Alumno
Ejemplo:
Alter Tablespace ts_tables_inventario offline;
Alter
tablespace
ts_tablas_inventario
Add datafile „E:\ORADATA\INVENTA\DFINV02.ORA‟ size 20M;
4.1.3. Borrando un tablespace
Un tablespace puede ser eliminado cuando ya no se requiere la información
contenida en él. El comando DROP TABLESPACE se usa para este fin de la
siguiente forma:
DROP TABLESPACE nombre_tablespace INCLUDING CONTENTS;
Ejemplo:
Drop tablespace ts_tables_inventario INCLUDING CONTENTS;
Un tablespace que contiene información no puede ser eliminado sin la cláusula
INCLUDING CONTENTS.
Una vez que el tablespace es eliminado la información dentro de él no estará
disponible.
4.1.4. Tablespaces temporales
Los tablespaces temporales son usados por la base de datos para ejecutar
operaciones implícitas como por ejemplo para sortear información.
Para utilizar un tablespace como temporal se utiliza la cláusula TEMPORARY
al momento de crear el tablespace.
Por default el tablespace se crea con la opción PERMANENT.
4.2. Segmentos
Estructura de la Base de Datos
Un segmento es un conjunto de extents. Un segmento puede relacionarse a
un objeto en la base de datos. Los tipos de segmentos que existen son:
Segmento rollback
Segmento de data
Segmentos de índices
Segmentos temporales
Conjunto de extents donde se almacena
información de recuperación.
Un conjunto de extents que forman una
tabla.
Conjunto de extents que forman un
índice.
Conjunto de extents que almacenan
información de objetos temporales.
77
Manual del Alumno
4.3.
Extens
Un extents es un conjunto de bloques continuos. Cuando un objeto de la base
de datos s crea o necesita crecer en almacenamiento, se crea un nuevo extent.
Cada segmento en la base de datos es creado con un extent como mínimo.
El primer extent creado es llamado INITIAL EXTENT.
Los siguientes extents son llamados NEXT EXTENTS.
La creación frecuente de extents en un segmento puede ocasionar la
fragmentación de un tablespace.
4.3.1. Cláusula Storage
El control en la creación de extents se maneja a través de la cláusula
STORAGE
Storage Parameters:
INITIAL
Tamaño en Bytes del primer extent de un
segmento.
NEXT
Tamaño en bytes de los siguientes extents
de un segmento.
MAXEXTENTS
Especifica el número total de extents que
pueda tener el segmento.
MINEXTENTS
Número de extents a generarse cuando se
crea el segmento. Por default es 1.
PCTINCREASE
Porcentaje de incremento en el tamaño para
los siguientes extents a crearse.
4.4.Estructura
Bloques
Oracle
de la
Base de Datos
Un bloque Oracle es la mínima unidad de almacenamiento usando en la base
de datos.
El tamaño del bloque Oracle es determinado en el momento de la creación de
la base de datos en el parámetro DB_BLOCK_SIZE. Una vez que la base de
datos es creada, el tamaño del bloque no puede ser cambiado.
Este tamaño es usado tanto para los bloques físicos como para los bloques de
memoria usados por Oracle.
El siguiente cuadro muestra la relación entre segmentos, bloques y extents:
78
Manual del Alumno
5.
Creación de Objetos de la Base de Datos
Estructura de la Base de Datos
5.1. Tablas
5.1.1. Creación de Tablas
Para crear una tabla se usa el comando CREATE TABLE de la siguiente forma:
CREATE TABLE Nombre_tabla
( columna1 tipo_dato constraint_columna1,
columna2 tipo_dato constraint_columna2,
.......)
TABLESPACE nombre_tablespace
STORAGE cláusula_storage
AS subquery;
Ejemplos:
79
Manual del Alumno
CREATE TABLE in_equipos_computo
( cod_equip
number (4),
empno
number (4),
fech_asig
date )
storage (initial 512K next 64K minextents 1 maxextents 200);
CREATE TABLE in_detalle_equipos
( cod_equip number (4),
cod_tipo
number (3),
cod_marca number (3),
memoria
number (4),
caracter
varchar2(30))
storage (initial 5M next 512K minextents 1 maxextents 100);
CREATE TABLE in_tipos_equipos
( cod_tipo
number (3),
descripcion
char (20))
storage (initial 4K next 4K minextens 1 maxextents 100);
CREATE TABLE in_marcas
( cod_marca
number (3),
descripcion
char (20))
storage (initial 4K next 4K minextens 1 maxextents 100);
Reglas de nomenclatura:
Debe ser un nombre con longitud de 1 a 30 caracteres, siendo el primer
carácter alfabético.
Solamente debe contener los caracteres:
Creación de objetos
A - Z, a – z, 0 – 9 , _(subrayado)
No debe ser una palabra reservada de Oracle.
No debe ser igual al nombre de otro objeto dentro del mismo usuario ORACLE.
5.1.2. Modificación de Tablas
La sentencia ALTER TABLE se utiliza para alterar la definición de un tabla:
Añadiendo columnas restricciones.
Modificando definiciones de columnas (tipos de datos, NOT NULL, etc)
Ejemplos:
SQL> ALTER
IN_EQUIPOS_COMPUTO
ADD (fech_mante
TABLE
date);
80
Manual del Alumno
SQL> ALTER
IN_DETALLE_EQUIPO
MODIFY (caracter
TABLE
VARCHAR2(40));
5.1.3. Borrar una Tabla
Para eliminar una tabla use el comando DROP TABLE de la siguiente manera:
DROP TABLE nombre_Tabla;
Ejemplo:
SQL> DROP TABLE IN_MARCAS;
5.2.
Vistas
Una vista es una representación lógica de una o más tablas. Una vista no
contiene datos. Todos los datos son derivados de la(s) tabla(s) subyacentes.
Para crear una vista use el comando CREATE VIEW de la siguiente
forma:
SQL> CREATE VIEW nombre_vista as sentencia_select;
Ejemplo:
SQL> CREATE VIEW mantenimiento as
SELECT cod_equip, fech_mante from IN_EQUIPOS_COMPUTO
Where sysdate-fech_mante>90;
Para eliminar una vista se usa el comando DROP VIEW por ejemplo:
Creación de objetos
SQL> DROP VIEW mantenimiento;
En el siguiente ejemplo vemos una vista STAFF que visualiza la información
contenida en la table EMP:
81
Manual del Alumno
5.3.
Indices
Los índices son estructuras opcionales asociadas a tables empleadas para
agilizar la ejecución de consultas o garantizar la existencia única de un registro
específico.
El servidor ORACLE accesa datos en dos forma:
FULL TABLE SCAN (secuencia)
INDEX (selective)
Se debe crear un índice si se anticipa que habrá recuperación frecuente de
menos del 10-15% de los registros en una tabla grande y además las columnas
son frecuentemente referenciadas por una cláusula WHERE.
Características de las columnas para indexación:
La columna es usada frecuentemente en cláusulas WHERE.
Cada valor es único ( el mejor caso ).
Amplio rango de valores.
Muchos nulos/relativamente pocos valores.
Una tabla puede tener cualquier número de índice, en este caso hay una
relación implícita e indirectamente proporcional entre la velocidad de consulta
contra la velocidad de actualización.
Sintaxis:
Creación de objetos
CREATE [UNIQUE] INDEX Nombre_indice
ON Tabla (columna1, columna2....)
STORAGE cláusula_storage;
Ejemplo:
SQL> CREATE INDEX i_equipos_computo1on
In_equipos_computo (cod_equip)
Storage (initial 64K next 4K minextents 1 maxextents 200);
Oracle usará el índice creado en este caso:
SQL> SELECT * from in_equipos_computo where cod_equip=23;
Pero no en este caso;
SQL> SELECT * from in_equipos_computo;
El commando DROP INDEX se utiliza para eliminar un índice, por ejemplo:
82
Manual del Alumno
SQL> DROP INDEX i_equipos_computo1;
5.3.1. Indices UNIQUE
Los índices sirven para asegurar que no existan dos registros con valores
idénticos en las(s) columna(s) indexada(s).
Ejemplo:
SQL> CREATE UNIQUE INDEX i_marcas1 on
IN_MARCAS (cod_marca);
5.4.
Secuencias
Se crean secuencias para generar números enteros únicos para múltiples
usuarios. Los números de secuencia pueden ser usados para generar llaves
primarias automáticamente.
Sintaxis para la creación de secuencias:
CREATE SÉQUENSE nombre_secuencia
INCREMENT BY n
START WITH n
MAXVALUE n
MINVALUE n;
Ejemplo:
Creación de objetos
SQL> CREARE SEQUENCE s_cod_equip
START WITH increment by 1 MAXVALUE 9999;
Una secuencia se incrementa de la siguiente forma:
SQL> SELECT s_cod_equip.nextval from dual;
También se puede incrementar así:
SQL> INSERT INTO in_equipos_computo values
(s_cod_equip.nextval, 100, to_date(‟01-APR-99‟,‟DD-MON-YY‟));
Una secuencia se elimina con el commando DROP SEQUENCE, por ejemplo:
SQL> DROP SÉQUENSE s_cod_equip;
5.5.
Sinónimos
Los sinónimos son alias que se crean sobre las tablas o vistas de la base de
datos para un mejor manejo del acceso a dichos objetos.
83
Manual del Alumno
El nombre completo de una tabla está compuesto por el nombre del dueño y el
nombre de la tabla, por ejemplo la tabla emp se llama SCOTT.EMP.
Si un usuario llamado MARK trata de leer datos de esta tabla debería hacer lo
siguiente:
SQL > SELECT * from SCOTT.EMP;
Sin embargo se podría crear un sinónimo para esta tabla de la siguiente
manera:
SQL > CONNECT MARK/OPER
SQL > CREATE SYNONYM EMP for SCOTT.EMP;
SQL > SELECT * FROM EMP;
La sintaxis es la siguiente:
CREATE [PUBLIC] SYBONYM nombre_sinónimo FOR [owner.]nombre_objeto;
El sinónimo creado viene a ser un objeto más de la base de datos cuyo dueño
es el usuario que lo ha creado.
5.5.1. Sinónimos públicos
Creación de objetos
Los sinónimos públicos son creados por un usuario con nivel de administrador
este sinónimo puede ser utilizado por cualquier usuario de la base de datos.
Por ejemplo:
SQL > CONNECT SYSTEM/MANAGER
SQL > CREATE PUBLIC SYNONYM emp for scot.emp;
Si los usuarios JACKSON y KORDA tienen acceso a la tabla EMP del usuario
SCOTT pueden leer los datos de la siguiente forma:
SQL> SELECT * from emp;
Esto debido a que existen el sinónimo público;
Eliminar un sinónimo
Para eliminar un sinónimo se usa el siguiente comando:
DROP [PUBLIC] SYNONYM nombre_sinónimo;
Ejemplo:
SQL > CONNECT SYSTEM/MANAGER
SQL > DROP PUBLIC SYNONYM EMP;
84
Manual del Alumno
PRACTICA DEL CAPITULO 4 Y 5
1.
Conectarse a la Base de datos como usuario SYSTEM. Crea un nuevo
tablespace llamado RBS en un datafile llamado rbs01.ora de 10 KB con un
default de MINEXTENTS=2 y PCTINCREASE=0.
2.
Crea un nuevo tablespace llamado TEMP para segmentos temporales
en un archivo llamado TEMP01.ORA de 200 KB con un default
PCTINCREASE de 0.
3.
Crea un nuevo tablespace llamado APPL_DATA en un archivo
appl01.ora de 200 KB con un default INITIAL d 20 KB , NEXT de 10 KB y
PCTINCREASE de 0.
4.
Finalmente crea un tablespace llamado USERS_DATA en un archivo
users01.ora de 1 MB.
5.
Verificar que los tablespace han sido creados viendo el diccionario de
datos.
6.
Crea una tabla llamada TEST en el tablespace USER_DATA con un
INITIAL EXTENT de 50 KB. Qué ocurre?
7.
Crea una tabla test como copia de la tabla TEST2 en el tablespace
USERS_DATA, luego alterar el tablespace USERS_DATA en modo READ
ONLY y trata de dropear la tabla TEST2. Qué ocurre y por qué?
8.
Escribir una consulta que visualice el total de esoacio libre en bloques y
en bytes para cada tablespace.
9.
Modificar la consulta anterior para listar el espacio libre por datafile.
10.
Escribir una consulta que visualice los segmentos que ocupan más de
50 extents en la base de datos.
Creación de objetos
85
Manual del Alumno
6.
Uso de Constraints
Los constraints son condiciones o restricciones que se aplican a los campos de
una tabla para garantizar la integridad de la información de la base de datos.
Se pueden crear al momento de crear una tabla o posteriormente.
Los tipos de constraints son:
NOT NULL
UNIQUE
CHECK
PRIMARY KEY
FOREIGN KEY
Sintaxis:
CREATE TABLE nombre_tabla
(nombre_columna1 tipo_columna1
nombre_columna2 tipo_columna2
constraint_tabla1
constraint_tabla2….;
constraint_columna1,
constraint_columna2,.....)
El constraint puede ser definido junto a la declaración de cada columna o al
final de la creación de la tabla.
6.1.
Constraint NOT NULL
Cuando una columna deba contener valores use el constraint not null. Este
constraint asegura que al momento de insertar o actualizar una columna esta
contenga datos.
Ejemplo:
SQL > CREATE TABLE Clientes (
Nombre
CHAR(30)CONSTRAINT cons_clients_nombre NOT NULL,
……);
Table created.
6.2.
Constraint UNIQUE
Asegura que 2 o más filas en una tabla no tengan valores duplicados.
ejemplo:
Por
SQL > CREATE TABLE clientes (
…..;
DNI
NUMVER(10) CONSTRAINT cons_clients_dni UNIQUE USING INDEX
TABLESPACE ts_clients STORAGE (initial 500k next
100k)
….);
Constraints
86
Manual del Alumno
Table created.
Un índice es automáticamente creado para el constraint unique.
El nombre del índice es el mismo que el del constraint.
La cláusula USING INDEX sirve para especificar el tablespace y los parámetros
de almacenamiento para el índice.
6.3.
Constraint CHECK
Verifica que una condición especificada para una o más columnas sea
verdadera.
Ejemplo:
SQL > CREATE TABLE cliente (
….,
tip_documento
char(1)
CONSTRAINT cons_clients_tipdoc
CHECK
(tip_documento in („1‟,‟2‟,‟3‟)),
....);
Table created.
Una columna puede tener múltiples constraints de chequeo.
6.4.
Constraint PRIMARY KEY
Compuesto por uno o más campos que identifican a cada fila en una tabla. Por
ejemplo:
SQL > CREATE TABLE clientes(
Codigo
NUMBER(6)
KEY,
…..);
Table created.
CONSTRAINT cons_clients_pk PRIMARY
SQL > CREATE TABLE factura(
Ser_factura number(3),
Num_factura number(8),
…..,
CONSTRAINT
cons_factura_pk
num_factura),
…..);
Table created.
PRIMARY
KEY
(ser_factura,
En el primer caso se define una clave primaria para un solo campo, en el
segundo caso la clave primaria es compuesta y el constraint debe ser definido
al final de la declaración de los campos.
87
Manual del Alumno
Los campos que forman parte de la clave primaria por definición son “únicos” y
“no” “nulos”, en este caso también se genera un índice.
6.5.
Constraint FOREIGN KEY
Constraints
Controla que el valor de una columna especificada como FOREIGN KEY exista
en la clave primaria de otra tabla. Por ejemplo:
SQL > CREATE TABLE DEPT(
Deptno
NUMBER(7)
CONSTRAINT s_dept_pk_id PRIMARY KEY,….);
Table created.
SQL > CREATE TABLE EMP(
…..,
DEPTNO
NUMBER(7)
CONSTRAINT s_emp:fk_dept_id REFERENCES s_dept (id),
…..);
Table created.
Si se inserta en una fila un código de departamento válido, el comando
procederá porque el valor existe en la clave primaria, por ejemplo:
SQL > INSERT INTO s_emp VALUES (26,…..,10);
1 row inserted.
Sin embargo si hacemos lo siguiente:
SQL > INSERT INTO s_emp VALUES (26,…..,80);
Nos aparecerá el mensaje:
ERROR at line 1;
ORA-02291:integrity constraint (S_EMP_FK_DEPT_ID)
Violated-parent key
not found
Constraints
88
Manual del Alumno
En este caso el código de departamento 80 no existe en las tablas s_dept.
Ejemplo de constraints con claves compuestas:
CREATED TABLE master(
a NUMBER(4),
b NUMBER(4),
CONSTRAINT master_ok_ab PRIMARY KEY (a,b));
CREATED TABLE detail(
a NUMBER(4),
b NUMBER(4),
c NUMBER(4),
CONSTRAINT detail_fk_ab FOREIGN KEY (a,b) REFERENCES
master;
…..);
6.6.
Agregando Constraints
Para agregar constraints a una tabla ya existenete se utiliza el comando
ALTER TABLE, por ejemplo:
SQL > ALTER TABLE s_emp
ADD(CONSTRAINT s_emp_pk_id PRIMARY KEY(id),
CONSTRAINT s_emp_ck_salary CHECK(salary >500));
SQL > ALTER TABLE s_emp
ADD(CONSTRAINT s_emp_fk_manager_id
FOREIGN KEY (manager_id) REFERENCES s_emp);
En el primer ejemplo se altera la tabla s_emp para agregar 2 constraint, uno
con clave primaria y el otro para verificar no se ingrese un salario igual o menor
a 500.
En el segundo caso se crea un constraint FOREIGN KEY que hace referencia a
la clave primaria de la misma tabla.
6.7.
Deshabilitar un Constraint
Para que un constraint ya existente deje de funcionar momentáneamente se
usa el comando ALTER TABLE de la siguiente forma:
ALTER TABLE nombre_tabla DISABLE
CONSTRAINT nombre_constraint [CASCADE];
La cláusula CASCADE se usa en el caso que existan otros constraint que
dependan del constraint a deshabilitar, por ejemplo se usa para en un
constraint PRIMARY KEY.
Constraints
89
Manual del Alumno
6.8.
Habilitar un Constraint
Para hacer funcionar nuevamente un constraint se usa el siguiente comando:
ALTER TABLE nombre_tabla ENABLE
CONSTRAINT nombre_constraint [CASCADE];
La tabla del diccionario de datos USER_CONSTRAINTS puede ser consultada
para verificar el estado del constraint.
6.9.
Borrar un Constraint
Para eliminar un constraint también se usa el comando ALTER TABLE de la
siguiente forma:
ALTER TABLE nombre_tabla DROP
CONSTRAINT nombre_constraint [CASCADE];
Constraints
90
Manual del Alumno
PRACTICA DEL CAPITULO 6
Crear las siguientes tablas con la definición de constraints indicada:
TABLA CONTRATO
Num_contrato
F_contrato
Codcli
Monto
number(6)
date
char(6)
number (10,2)
TABLA CONTRATO_DETALLE
Num_contrato
c_secuencia
tipo_joya
sub_tipo_joya
peso
monto
number(6)
number(2)
char(2)
char(2)
number(5,2)
number(10,2)
TABLA CLIENTES
codcli
nombre
tipo_docum
num_docum
c_distrito
direccion
char(6)
char(30)
char(1)
number(10)
char(2)
char(30)
CONSTRAINTS
Tabla
Constraint
Campo
Contrato
Contrato
Contrato
Contrato_detalle
Clientes
Clientes
primary key
not null
foreign key
foreign key
primary key
not null
num_contrato
f_contrato
codcli
num_contrato
codcli
nombre
Constraints
91
Manual del Alumno
7.
El segmento ROLLBACK
7.1.
Concepto
El segmento rollback es una porción de la base de datos donde se guarda la
información antes de ser modificada por una transacción, permitiendo que los
cambios hechos a la información puedan ser restaurados.
Los rollback
segments se almacenan en los tablespace y puede existir más de uno en un
tablespace.
Existe un primer rollback segment en el tablespace SYSTEM, pero se deben
crear rollback adicionales en otros tablespace para empezar a ejecutar
transacciones en la base de datos.
Cada transacción es asignada a un rollback segment, las transacciones buscan
el primer rollback segment que se encuentre disponible a no ser que se
especifique el nombre del rollback a utilizar.
7.2.
Creación, eliminación y asignación de transacciones
Para crear un rollback segment se utiliza el siguiente comando:
CREATE PUBLIC ROLLBACK SEGMENT nombre_rollback_segment
TABLESPACE nombre_tablespace
STORAGE cláusula_storage;
Ejemplo:
CREATE PUBLIC ROLLBACK SEGMENT segment1
TABLESPACE ts_rollback_seg1
STORAGE (initial 10K next 10K minextents 2 maxextents 121);
Un rollback segment debe contener como mínimo 2 extends y el parámetro
PCTINCREASE es siempre 0 y no puede ser especificado.
Cuando se crea un rollback segment por default se coloca OFFLINE . Para
alterar un rollback segment y activarlo se usa el siguiente comando:
ALTER ROLLBACK SEGMENT segment ONLINE;
También se pueden alterar los parámetros de almacenamiento del rollback con
el comando ALTER ROLLBACK SEGMENT.
Para que una transacción trabaje con un rollback específico se usa el
comando:
Segmento Rollback
92
Manual del Alumno
SET TRANSACTION USE ROLLBACK SEGMENT SEGMENT1;
Por ejemplo:
SQL > SET TRANSACTION USE ROLLBACK SEGMENT SEGMENT1;
SQL > UPDATE EMP SET salary = salary * 1.5;
SQL > COMMIT;
El siguiente ejemplo muestra como eliminar un rollback segment:
DROP ROLLBACK SEGMENT SEGMENT1.
8.
Administración de usuarios
Segmento Rollback
8.1.
Creación
93
Manual del Alumno
CREATE USER nombre_usuario
IDENTIFIED BY [clave_usuario] [EXTERNALLY]
DEFAULT TABLESPACE nombre_tablespace
TEMPORATY TABLESPACE nombre_tablespace
FROFILE nombre_frofile
QUOTA [UNLIMITED][integer] ON nombre_tablespace
Donde:
EXTERNALLY
Verifica el acceso a la base de datos a través
del sistema operativo.
DEFAULT TABLESPACE
Indica el tablespace donde por default se
crearán los objetos del usuario.
TEMPORARY TABLESPACE Indica el tablespace temporal del usuario. Se
usa para los procesos internos de Oracle como
por ejemplo para sortear tablas.
QUOTA
Especifica el tamaño en KB o MB (integer) que
el usuario puede almacenar en un tablespace.
UNLIMITED permite usar todo el espacio del
tablespace.
PROFILE
Asigna un profile al usuario
Ejemplo:
SQL > CREATE USER scott
IDENTIFIED BY tiger
DEFAULT TABLESPACE user_data
TEMPORARY TABLESPACE ts_temporal
QUOTA 15M ON user_data;
Statement processed.
Para administrar la creación de usuarios también podemos utilizar la
herramienta Schema Manager desde un cliente Oracle en Windows o desde un
servidor NT.
8.2.
Alteración de usuarios
Con el comando ALTER USER se puede modificar las definiciones hechas al
momento de crear un usuario.
Sintaxis:
ALTER USER nombre_usuario
IDENTIFIED
BY [clave_usuario]
[EXTERNALLY]
Administración
de usuarios
DEFAULT TABLESPACE nombre_tablespace
TEMPORARY TABLESPACE nombre_tablespace
PROFILE nombre_profile
94
Manual del Alumno
QUOTA [UNLIMITED] [integer] ON nombre_tablespace
Ejemplo:
SQL > ALTER USER scott
DEFAULT TABLESPACE ts_tables_inventario;
8.3.
Eliminación de usuarios
Para eliminar un usuario se utiliza el comando DROP USER de la siguiente
forma:
DROP USER nombre_usuarios [CASCADE]
La cláusula CASCADE se usa para eliminar todos los objetos pertenecientes al
usuario.
Ejemplo:
SQL > DROP USER scott;
Statement processed.
8.4.
Terminando la sesión de usuario
Cuando un usuario está haciendo uso de un recurso que se necesita
urgentemente o en algún otro caso se puede terminar la sesión de un usuario
con el comando ALTER SYSTEM.
Sintaxis:
ALTER SYSTEM KILL SESION „integer1,integer2‟
Donde:
Administración de usuarios
Integer1
EL ID de la sesión
Integer2
Número de la serie de la sesión.
Estos valores pueden obtenerse de la tabla v$sesion, por ejemplo:
95
Manual del Alumno
SQL > select sid, serial#, username from v$session;
SID
------------8
SERIAL#
----------------103
USERNAME
------------------SCOTT
Ejemplo:
SQL > Alter system kill session „ 8, 103‟;
Statement processed.
8.5.
Control de recursos del sistema
Para controlar los recursos del sistema por usuario se utilizan los perfiles de
usuario (profiles) , estos trabajan con los siguientes recursos:
Tiempo de CPU.
Operaciones de I/O.
Tiempo en espera.
Tiempo de conexión.
Espacio de memoria.
Sesiones concurrentes.
Cuando una sesión sobrepasa los límites especificados en el profile sucede
que:
Se ejecuta rollback sobre la transacción actual.
Todos los comando anteriores permanecen intactos.
Solo comandos COMMIT, ROLLBACK o DISCONNECT son permitidos.
No se permite cualquier otro trabajo sobre la sesión actual.
Las limitaciones de recursos se pueden habilitar o deshabilitar del sistema
mediante el comando ALTER SYSTEM:
ALTER SYSTEM SET RESOURCE_LIMIT= {TRUE/FALSE};
La base de datos por default no controla el límite de recursos por usuario, a no
ser que se especifique el valor TRUE en el parámetro RESOURCE_LIMIT del
archivo de configuración de oracle INIT.ORA.
Crear un Profile
Administración de usuarios
Para crear un profile se utiliza el comando CREATE PROFILE así:
CREATE PROFILE nombre_profile LIMIT restricciones;
Las restricciones son:
96
Manual del Alumno
CPU_PER_SESSION
Tiempo de uso del CPU en milisegundos
para una sesión.
CPU_PER_CALL
Tiempo de uso del CPU en milisegundos
por operación a la base de datos.
SESSIONS_PER_USER
Número
de
sesiones concurrentes
por usuario.
CONNECT_TIME
Tiempo de conexión del usuario en
minutos.
IDLE_TIME
Tiempo de inactividad en minutos.
LOGICAL_READS_PER_SESSION Número de bloques de datos físicos y de
memoria que pueden leerse.
Ejemplo:
SQL > CREATE PROFILE developer_profile LIMIT
SESSIONS_PER_USER5
CPU_PER_CALL UNLIMITED
IDLE_TIME 60;
Profile created.
Modificar u profile
Este es un ejemplo de modificación de profile:
SQL > ALTER PROFILE developer_profile LIMIT
SESSIONS_PER_USER2
CPU_PER_SESSION 300000
LOGICAL_READS_PER_CALL 1000;
Profile altered.
Default profile
Cada base de datos tiene un profile llamado default el cual se asigna a todos
los usuarios que no tiene un profile específico. La definición de este profile
puede ser también modificada por el comando ALTER PROFILE, por ejemplo:
SQL > ALTER PROFILE default LIMIT
SESSIONS_PER_USER5
CPU_PER_CALL 3600
IDLE_TIME 30;
Profile altered.
Para asignar un profile a un usuario se utiliza la cláusula profile al momento de
crearlo
o utilizando
comando ALTER USER, por ejemplo:
Administración
deelusuarios
SQL > CREATE USER anna IDENTIFIED BY clave
DEFAULT TABLESPACE user_data
TEMPORARY TABLESPACE ts_temporal
PROFILE developer_profile;
97
Manual del Alumno
SQL > ALTER USER anna PROFILE developer_profile;
Eliminar un profile
Para eliminar un profile use el siguiente comando:
SQL > DROP PROFILE developer_profile;
Administración de usuarios
98
Manual del Alumno
9.
Privilegios de Acceso
Se pueden otorgar privilegios a usuarios para el acceso a la base de datos y a
los objetos de la base de datos.
El control de privilegios involucra:
Dar a un usuario el derecho a realizar un tipo de operación.
Habilitar y restringir acceso a modificar la información.
Habilitar y restringir la posibilidad de realizar funciones del sistema y cambiar la
estructura de la base de datos.
Dar derechos a usuarios en forma individual o en grupo.
Dar derechos a todos los usuarios.
Tipo de privilegio
SYSTEM
OBJECT
9.1.
Descripción
Cada privilegio del sistema permite a los usuarios
realizar una operación o tipo de operación en la
base de datos.
Cada privilegio del sistema permite realizar una
operación sobre una tabla, vista, procedimiento,
función o package.
Privilegios del sistema
Los privilegios de SISTEMA no especifican un determinado objeto, estos
especifican una operación o tipo de operación.
Por ejemplo el privilegio SELECT ANY TABLE permite que un usuario puede
ver la información de cualquier tabla de la base de datos. Un privilegio de
objeto permite a un usuario consultar una tabla en particular, como por ejemplo
SCOTT.EMP.
Para otorgar un privilegio se sistema se usa el comando GRANT de la siguiente
forma:
GRANT {privilegio_sistema / rol} to {usuario / rol / PUBLIC}
[UIT ADMIN. OPTION];
donde:
ROL
PUBLIC
UIT ADMIN. OPTION
Privilegios de acceso
Grupo de privilegios a otorgar.
Acceso a todos los usuarios.
Permite que el usuario que recibe el acceso
pueda dárselo a otro usuario o rol. Si se da
acceso a un rol con ADMIN. OPTION el usuario
puede alterar o borrar el rol.
99
Manual del Alumno
Para dar un privilegio de sistema, el usuario que lo brinda debe haber recibido
el privilegio con ADMIN. OPTION. Por ejemplo:
SQL > CONNECT SYSTEM/MANAGER
SQL > GRANT ALTER USER TO SCOTT;
Para visualizar los privilegios de sistema que pueden ser otorgados use la vista
DBA_SYS_PRIVS de la siguiente manera:
SQL > SELECT * from DBA_SYS_PRIVS;
GRANTEE
----------------------------CONNECT
CONNECT
CONNECT
CONNECT
CONNECT
CONNECT
CONNECT
CONNECT
DBA
YES
DBA
YES
DBA
YES
DBA
YES
DBA
YES
DBA
YES
DBA
YES
DBA
YES
DBA
YES
……
PRIVILEGE
----------------------------------------------
ADM
------
ALTER SESSION
NO
CREATE CLUSTER
NO
CREATE DATABASE LINK
NO
CREATE SEQUENCE
NO
CREATE SESSION
NO
CREATE SYNONYM
NO
CREATE TABLE
NO
CREATE VIEW
NO
ALTER ANY CLUSTER
ALTER ANY INDEX
ALTER ANY PROCEDURE
ALTER
ANY
ROLE
ALTER ANY SEQUENCE
ALTER ANY SNAPSHOT
ALTER ANY TABLE
ALTER ANY TRIGGER
ALTER
DATABASE
Quitando privilegios del sistema
Para quitar un privilegio de sistema se utiliza el comando REVOKE de la
siguiente forma:
REVOKE {privilegio_sistema / rol} FROM {usuario / rol / PUBLIC};
100
Manual del Alumno
Ejemplo:
SQL > REVOKE ALTER USER FROM SCOTT;
Statement Processed.
9.2.
Privilegios de los objetos
Privilegios
de accesorealizar una o más operaciones sobre una tabla, vista,
Permite
a los usuarios
secuencia o algún otro objeto.
Los tipos de privilegios objeto varían
dependiendo del objeto.
Los comandos SQL permitidos por los privilegios de objetos son:
Privilegio de Objeto
SELECT
UPDATE
INSERT
ALTER
DELETE
EXECUTE
INDEX
REFERENCES
Comando SQL permitidos
SELECT FROM objeto (tabla, vista o snapshot)
UPDATE objeto (tabla o vista)
INSERT INTO objeto (tabla o vista)
ALTER objeto (tabla o secuencia), CREATE
TRIGGER ON objeto(tablas)
DELETE FROM objeto (tablas o vistas)
TRUNCATE objeto (tablas)
EXECUTE objeto (procedimiento o función)
CREATE INDEX ON objeto (tablas)
CREATE o ALTER TABLE definiendo un
constraint de clave foránea. (tablas)
Para dar privilegios sobre objetos se usa el comando GRANT así:
GRANT {privilegio_objeto / ALL} [(columna)]
ON [owner]. Objeto TO {usuario / rol / PUBLIC}
[WITH GRANT OPTION];
Ejemplos:
SQL > GRANT SELECT, INSERT (EMPNO, ENAME, DEPTNO),
UPDATE (ENAME)
ON emp TO mark;
Statement processed.
En el primer ejemplo se está dando acceso de consulta a los usuarios mark y
jacson sobre la tabla EMP. En el segundo caso el accseo es de consulta,
inserción sobre algunos campos y actualización sobre el campo ENAME de la
tabla EMP para el usuario mark.
Para visualizar los accesos otorgados a los usuarios sobre los objetos se utiliza
la vista DBA_TAB_PRIVS, la cual tiene la siguiente estructura:
101
Manual del Alumno
Name
Null?
-----------------------------------GRANTEE
NOT NULL
OWNER
NOT NULL
TABLE_NAME
NOT NULL
GRANTOR
NOT NULL
PRIVILEGE
NOT
NULL
Privilegios de acceso
GRANTABLE
Type
-------------------------------VARCHAR2 (30)
VARCHAR2 (30)
VARCHAR2 (30)
VARCHAR2 (30)
VARCHAR2 (40)
VARCHAR2 (3)
Donde:
GRANTEE
OWNER
TABLE_NAME
GRANTOR
PRIVILEGE
GRANTABLE
Usuario que recibe el privilegio.
Dueño del objeto.
Nombre del objeto.
Usuario que otorga el privilegio.
Privilegio otorgado.
UIT GRANT OPTION sí o no.
Quitando privilegios sobre los objetos
Para quitar un privilegio de objeto se usa el comando REVOKE de la siguiente
forma:
REVOKE privilegio_objeto ON [owner.]objeto
FROM {usuario / rol / PUBLIC};
Ejemplo:
SQL > REVOKE ALL ON EMP FROM mark;
Statement processed.
9.3.
Roles
Un rol es un conjunto de privilegios de sistema o de objetos que se pueden
asignar a los usuarios para facilitar la administración de accesos.
Normalmente se debe crear un rol para el acceso de objetos o del sistema por
cada aplicativo o tipo de usuario.
102
Manual del Alumno
Creando un rol
Privilegios de acceso
Para crear un rol se usa el siguiente comando:
CREATE ROLE nombre_rol;
Una vez creado el rol se otorga los privilegios al rol y luego se asigna el rol al
usuario.
Ejemplo:
SQL > CREATE ROLE rol_inventario;
SQL > GRANT all on in_equipos_computo to rol_inventario;
SQL > GRANT all on in_detalle_equipos to rol_inventario;
SQL > GRANT select on in_tipos_equipos to rol_inventario;
SQL > GRANT select on in_marcas to rol_inventario;
SQL > GRANT rol_inventario to jackson;
En el ejemplo se crea un rol llamado “rol_inventario” al cual se da acceso a 4
tablas, luego se incluye al usuario Jackson dentro del rol “rol_inventario”. De
esta forma el usuario jackson y todos los que se incluyan en este rol tienen
acceso a las 4 tablas.
Parsa visualizar los privilegios de sistema y de objetos asignados a usuarios
existen las vistas ROLE_SYS_PRIVS y ROLE_TAB_PRIVS.
También se pueden asignar roles a otros roles y visualizarlos en la vista
ROLE_ROLE_PRIVS.
Eliminar un rol
Para eliminar un rol se usa el comando:
DROP ROLE nombre_rol;
103
Manual del Alumno
PRACTICA DEL CAPITULO 8 Y 9
1.
Crear los siguientes usuarios en la Base de datos:
OWNER_CONTRATOS
Este usuario debe tener privilegio de conexión a la base de datos y todo lo
necesario para crear los objetos de la práctica anterior. Debe crear además
los sinónimos públicos para su acceso posterior.
OPS$YAGUILA
OPS$SQUIROZ
Son usuarios que van hacer uso del aplicativo y por lo tanto debemos crear un
rol CONTRATO para el acceso a las tablas (insert, update, delete y select).
OPS$OPERADOR
El operador debe tener acceso para levantar y cerrar la base de datos, además
de controlar el acceso a las sesiones de los usuarios y a las tablas del usuario
OWNER_CONTRATOS.
2. Modificar la clave de los usuarios SYS y SYSTEM
3. Crear un PROFILE para los usuarios de los aplicativos que controle el
tiempo de conexión inactiva de 15 minutos y 1 conexión por usuario
como máximo.
4. Realizar una consulta para visualizar los accesos del role CONTRATO.
5. Realizar una consulta para revisar los usuarios que tienen los privilegios
del rol CONTRATO.
6.
Listar los objetos de cada usuario en la base de datos.
Privilegios de acceso
104
Manual del Alumno
10. Creando una Base de Datos
10.1. Consideraciones
Antes de crear una Base de Datos existen algunos puntos que se deben tener
en cuenta como por ejemplo:

Cual será la estructura de los archivos físicos a crear, es decir en que
unidades y directorios se van a grabar los archivos de los diferentes
tablespaces de la base de datos así como los archivos de control y backup.

Estimar el espacio requerido para el tablespace SYSTEM y para el resto
de objetos de la base de datos.

Cuál será el tamaño del bloque Oracle.
10.2. Pasos a seguir
Los pasos a seguir para crear una base de datos son:
1.
Crear el archivo de parámetros
Una instancia para cualquier base de datos es iniciada usando un archivo de
parámetros. Existe un archivo de oparámetros llamado initorcl.ora que se usa
para la creación de la base de datos que se crea en la instalación de Oracle,
este puede servir de modelo para la nueva base de datos a crear.
Editar el archivo de parámetros para revisar los siguientes parámetros:
DB_NAME
DB_DOMAIN
CONTROL_FILES
DB_BLOCK_SIZE
DB_BLOCK_BUFFERS
ROLLBACK_SEGMENTS
Nombre de la base de datos a crear.
Nombre de un dominio, se usa para
base de datos distribuidas.
Nombre de los archivos de control.
Tamaño del bloque Oracle.
Cuántos bloques Oracle se almacenan
en SGA.
Rollback
segments
que
serán
activados en la base de datos.
Ejemplo:
DB_NAME = CISS
DB_DOMAIN = UNI
CONTROL_FILES
C:\ORADATA\DBS\CONTROL1.ORA,
D:\ORADATA\DBS\CONTROL2.ORA
DB_BLOCK_SIZE = 2048
Creación de la base de datos
=
105
Manual del Alumno
Se recomienda crear más de un archivo de control en discos distintos para
tener respaldo en caso falle uno de ellos.
Recuerde que el primer rollback segment que se crea es el rollback SYSTEM,
luego debe crearse un rollback segment adicional en el tablespace SYSTEM.
De acuerdo al número de transacciones el resto de rollback segments se
crearán en cualquier tablespace creado para este propósito.
2.
3.
Ingresar a Server Manager y conectarse a Oracle como un
administrador.
Arrancar la instancia
Iniciar la instancia especificando el archivo de parámetros a no ser que se use
el default, de la siguiente manera:
SVRMGR
>
STARTUP
C:\ORANT\DATABASE\INITUNI.ORA;
NOMOUNT
PFILE=
El parámetro NOMOUNT indica que no se debe montar ninguna base de datos.
4.
Crear la base de datos
Para crear la base de datos se usa el comando CREATE DATABASE, por
ejemplo:
CREATE DATABASE CISS datafile „ c:\oradata\dbs\system01.ora,‟ SIZE
30M LOGFILE
„
c:\oradata\dbs\log01.ora‟ SIZE
512K, „
sys:oradata\dbs\log02.ora‟ size 512K MAXDATAFILES 100;
Al crear la base de datos Oracle realiza lo siguiente:






Crea los archivos de control de disco.
Crea los archivos redo en el disco.
Crea el tablespace SYSTEM y el rollback SYSTEM.
Crea el diccionario de datos.
Crea los usuarios SYS y SYSTEM.
Monta y abre la base de datos para su uso.
Creación de la base de datos
Descargar