Curso Fundamentos de Oracle, SQL y PLSQL
Curso Fundamentos de Oracle, SQL y PLSQL
Curso Fundamentos de Oracle, SQL y PLSQL
Fundamentos de Oracle, SQL y PLSQL
Creado por:
José Alexander Rodríguez Vargas
1. Fundamentos de Oracle
¿Qué es Oracle?
Oracle es un sistema de gestión de base de datos relacional (o RDBMS por el acrónimo en
inglés de Relational Data Base Management System), desarrollado por Oracle Corporation.
Se considera a Oracle como uno de los sistemas de bases de datos más completos,
destacando:
○ soporte de transacciones
○ estabilidad
○ escalabilidad
○ Soporte multiplataforma.
Su dominio en el mercado de servidores empresariales ha sido casi total hasta hace poco,
recientemente sufre la competencia del Microsoft SQL Server de Microsoft y de la oferta de
otros RDBMS con licencia libre como PostgreSQL, MySql o Firebird. Las últimas versiones de
Oracle han sido certificadas para poder trabajar bajo GNU/Linux.
Licencias de Oracle
Oracle a partir de la versión 10g Release 2, cuenta con 6 ediciones:
○ Oracle Database Enterprise Edition(EE).
La versión empresarial es la más alta del rango en las versiones de Bases de Datos
oracle para servidor, cuenta con opciones tales com RAC, Particionamiento, Spatial,
etc, y estas opciones pueden manejarse de manera separada para mejorar la
funcionabilidad de la base de datos. Esta licencia se usa generalmente en servidores
que tienen más de 4 CPU’s. y no tiene limites de memoria.
○ Oracle Database Standard Edition (SE).
La version standard es diseñada para empresas medianas y pequeñas. Ofrecevarias
características y funcionalidades implementadas en la version Enterprise.
Opciones de
Base de Datos como Data Guard, Particionamiento, Spatial, etc no vienen incluidas
con esta version. Esta version estandar aplica a servidores de 1 a 4 CPU’s , si se
exceden los cuatro CPU’s deberá entonces adquirir una licencia de Enterprise Edition,
la versión de Standard Edition no tiene limites de memoria y puede usarse en clustering
con Oracle RAC sin cargo adicional a partir de la versión 10g.
○ Oracle Database Standard Edition One (SE1)
La version Standar edition one es de menor costo y menos nivel que la Standar Edition.
Se introdujo con Oracle 10g , tiene algunas restricciones en sus funcionalidades,
puede ser licenciada solo para pequeños servidores con una capacidad maxima de 2
procesadores.
○ Oracle Database Express Edition (XE).
Introducida en 2.005, ofrece una versión Oracle 10g libre para distribuirse sobre
plataformas Windows y Linux, tiene restricciones de solo un CPU, 4 Gigas de datos y
usa máximo 1 GB de RAM, el soporte de esta versión se encuentra en foros y no a
través de Oracle Corporation.
La única edición gratuita es la Express Edition, que es compatible con las demás
ediciones de Oracle Database 10gR2 y Oracle Database 11g.
Esta version puede embeberse con otras aplicaiones de terceros y se puede distribuir
gratuitamente.
○ Oracle Database Personal Edition (PE).
La personal edition es una versión de base de datos singular para usuario. Es casi
igual a la version Enterprise Edition, pero no soporta opciones avanzadas como RAC,
Streams, XMLDB, etc.
○ Oracle Database Lite Edition (LE).
Destinado para funcionar en dispositivos móviles tales como celulares, PDA’s, etc.
Incrusta una base de datos móvil situada en el dispositivo y se puede sincronizar con
una instalación basada en servidor.
Versiones de Oracle
○ Oracle5
○ Oracle6
○ Oracle7: 7.0.16—7.3.4
○ Oracle8 Database: 8.0.3—8.0.6
○ Oracle8i Database Release 1: 8.1.5.0—8.1.5.1
○ Oracle8i Database Release 2: 8.1.6.0—8.1.6.3
○ Oracle8i Database Release 3: 8.1.7.0—8.1.7.4
○ Oracle9i Database Release 1: 9.0.1.0—9.0.1.5 (patchset as of December 2003)
○ Oracle9i Database Release 2: 9.2.0.1—9.2.0.8 (patchset as of April 2007)
○ Oracle Database 10g Release 1: 10.1.0.2—10.1.0.5 (patchset as of February 2006)
○ Oracle Database 10g Release 2: 10.2.0.1—10.2.0.5 (patchset as of April 2010)
○ Oracle Database 11g Release 1: 11.1.0.6—11.1.0.7 (patchset as of September 2008)
○ Oracle Database 11g Release 2: 11.2.0.1 (released 20090901)
Sistemas Operativos y Arquitecturas Soportadas en Oracle 10g R2
○ Oracle Database 10g Release 2 (10.2.0.4) for MAC OS X on Intel x8664
○ Oracle Database 10g Release 2 (10.2.0.4) for Microsoft Windows Vista x64, Microsoft
Windows Server 2008 R2 x64, Windows 7 x64
○ Oracle Database 10g Release 2 (10.2.0.3/10.2.0.4) for Microsoft Windows Vista,
Windows Server 2008, Windows 7
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows (x64)
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows (64bit Itanium)
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x8664
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Linux Itanium
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Linux on Power
○ Oracle Database 10g Release 2 (10.2.0.1.0) for AIX5L
○ Oracle Database 10g Release 2 (10.2.0.1.0) for HPUX PARISC
○ Oracle Database 10g Release 2 (10.2.0.1.0) for HPUX Itanium
○ Oracle Database 10g Release 2 (10.2.0.2) for HP Tru64 UNIX
○ Oracle Database 10g Release 2 (10.2.0.2) for HP OpenVMS Alpha
○ Oracle Database 10g Release 2 (10.2.0.2) for OpenVMS Itanium
○ Oracle Database 10g Release 2 (10.2.0.2) for Solaris Operating System (x86)
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Solaris Operating System (x8664)
○ Oracle Database 10g Release 2 (10.2.0.1.0) for Solaris Operating System (SPARC)
(64bit)
○ Oracle Database 10g Release 2 (10.2.0.2) for z/Linux
○ Oracle Database 10g Release 2 (10.2.0.2) for z/OS (OS/390)
○ Oracle Database 10g Release 2 (10.2.0.2.20) for Fujitsu Siemens BS2000/OSD
Sistemas Operativos y Arquitecturas Soportadas en Oracle 11g R2
○ Microsoft Windows (32bit)
○ Microsoft Windows (x64)
○ Linux x86
○ Linux x8664
○ Solaris (SPARC) (64bit)
○ Solaris (x8664)
○ HPUX Itanium
○ HPUX PARISC (64bit)
○ AIX (PPC64)
Reseña Histórica de Oracle
1977: Larry Ellison y unos amigos, fundaron Software Development Laboratories.
1979: SDL cambia su nombre a "Relational Software, Inc."
RSI introdujo su producto Oracle V2 como la primera versión temprana de un sistema de base
de datos relacional, esta versión no tenía soporte de transacciones pero implementaba
funcionalidades básicas de consultas SQL y JOIN’s. RSI, nunca lanzó la versión 1.
1982: RSI, cambia su nombre nuevamente siendo ahora conocida como “Oracle Corporation”
para alinearse más estrechamente con su producto estrella, como estrategía de marketing.
1983: La compañia lanza Oracle versión 3, el cual fue reescrito usando lenguaje C, y tiene
funcionalidades para soportar transacciones como son COMMIT y ROLLBACK.
1984: Oracle Corporation lanza la versión 4, el cual tiene soporte de readconsistency.
1985: Oracle Corporation lanza la versión 5 con soporte Cliente Servidor.
1986: Oracle version 5.1 es lanzado con soporte para queryes distribuidos.
1988: Oracle lanza la versión 6 que viene con soporte de PL/SQL embebido con Oracle Forms
versión 3 (La versión 6 de Oracle, no podía almacenar el código de PL/SQL en la base de
datos propiamente dicha). Esta versión también tenía bloqueo de fila y copias de seguridad en
caliente.
1989: Oracle Corporation entra en el mercado de productos de aplicaciones y desarrolla su
ERP (Que luego llegará a hacer parte de Oracle EBussiness Suite), basada en la base de
datos relacional Oracle.
1990: Se lanza Oracle Applications versión 8.
1992: Aparece Oracle versión 7 con soporte de integridad referencial, procedimientos
almacenados y triggers.
1997: Oracle Corporation lanza la versión 8, que apoyo el desarrollo orientado a objetos y
aplicaciones multimedia.
1999: Se lanza la versión Oracle8i dirigido a proporcionar una base de datos interactue mejor
con Internet (La letra i en su nombre viene de “Internet”). Esta versión también incorpora una
máquina virtual de JAVA nativa en la base de datos (Oracle JVM).
2000: Oracle EBusiness Suite 11i son pioneros en integrar software enterprise application.
2001: Oracle9i se lanza con 400 nuevas características, incluyendo entre ellas la posibilidad de
leer y escribir documentos XML. También se provee una opción para Oracle RAC “Real
Application Clusters”
2003: Oracle Corporation lanza Oracle Database 10g, el cual soporta expresiones regulares.
(la g viene de “Grid”, haciendo incapie en un enfoque de marketing)
2005: se lanza el release 2 (Oracle Database 10.2.0.1 10gR2).
2006: Oracle Corporation anuncia Unbreakable Linux.
2007: Oracle Database 10g release 2 establece un nuevo record mundial TPCH.
2007: Oracle Corporation lanza la versión de base de datos 11g para Linux y Windows.
2008: Oracle Corporation adquiere BEA Systems.
2010: Oracle Corporation adquiere Sun Microsystems.
Para más información, consultar el siguiente enlace.|
http://www.oracle.com/timeline/index.html
Instalación Básica de Una Base de Datos Oracle XE
Se demostrarán dos maneras de instalar la base de datos Oracle XE
1. Instalación mediante el gestor de paquetes aptget de Ubuntu.
1. Editar el fichero sources.list
$ sudo nano /etc/apt/sources.list
2. Ingresar el repositorio para descargar el Oracle XE, adicionando la siguiente linea.
deb http://oss.oracle.com/debian unstable main nonfree
3. Guardar el archivo y salir.
4. Obtener la llave GPG de autorización
$ wget http://oss.oracle.com/el4/RPMGPGKEYoracle O | sudo
aptkey add
5. Actualizar la base de datos de paquetes
$ sudo aptget update
6. Luego de actualizados los repositorios, instalar el Oracle XE
$ sudo aptget install oraclexe
Se le solicitará al usuario confirmación de la instalación de paquetes adicionales y la
base de datos, se debe indicar la autorización digitando “yes”.
7. Configurar la base de datos luego de la instalación
$ sudo /etc/init.d/oraclexe configure
■ Configurar la contraseña para los usuarios SYS y SYSTEM
■ Configurar el puerto del listener. Por defecto es el 1521
■ Configurar el puerto para acceder al servicio de la base de datos via web. Por
defecto es el 8080.
Si desea realizar la desinstalación de la base de datos por el método aptget, puede
usar lo siguiente.
Listar los paquetes instalados (Buscar los que sean de Oracle)
$ dpkg getselections oracle*
$ dpkg l oracle*
Deberia tenerse un paquete con el nombre: oraclexe ó oraclexeuniversal.
Tras identificar el paquete, proceder a desinstalarlo digitando un comando tras
otro así:
$ sudo aptget remove oraclexeuniversal
$ sudo aptget purge oraclexeuniversal
$ sudo rm rf /usr/lib/oracle
$ sudo deluser oracle
$ sudo delgroup dba
2. Instalación mediante el gestor de paquetes dpkg de Ubuntu, teniendo el instalador
.deb de la base de Datos.
1. Verificar que se tengan los dos instaladores siquientes:
libaio_0.3.1041_i386.deb
oraclexeuniversal_10.2.0.11.0_i386.deb
2. El paquete libaio_0.3.1041_i386.deb contiene unas librerías de
dependencia que se
requieren previamente antes de instalar la base de datos, para su instalación
digitaremos lo siguiente:
$ sudo dpkg i libaio_0.3.1041_i386.deb
3. tras finalizar la instalación de esta libreria, proseguir con el siguiente comando para
la instalación de la base de datos.
$ sudo dpkg i oraclexeuniversal_10.2.0.11.0_i386.deb
4. Configurar la base de datos luego de la instalación
$ sudo /etc/init.d/oraclexe configure
■ Configurar la contraseña para los usuarios SYS y SYSTEM
■ Configurar el puerto del listener. Por defecto es el 1521
■ Configurar el puerto para acceder al servicio de la base de datos via web. Por
defecto es el 8080
Si desea realizar la desinstalación de la base de datos por el método dpkg, puede
usar lo siguiente.
Listar los paquetes instalados (Buscar los que sean de Oracle)
$ dpkg getselections oracle*
$ dpkg l oracle*
Deberia tenerse un paquete con el nombre: oraclexe ó oraclexeuniversal.
Tras identificar el paquete, proceder a desinstalarlo digitando un comando tras
otro así:
$ sudo dpkg remove oraclexeuniversal
$ sudo dpkg purge oraclexeuniversal
$ sudo aptget autoremove
$ sudo rm rf /usr/lib/oracle
$ sudo deluser oracle
$ sudo delgroup dba
Nota: Se recomienda para hacer la desintalación de paquetes usar el método de
aptget.
Verificación de la Instalación de la Base de Datos
Ingresar por el browser la siguiente URL:
http://127.0.0.1:8080/apex
Verificar el ingreso a la aplicación con los usuarios SYS y SYSTEM y la contraseña que se
definió en la instalación.
Nota: Si se desea cambiar el puerto por defecto en el que se ejecuta el apex, es decir el 8080,
nos conectamos como usuario SYSTEM y ejecutamos los pasos siguientes::
1. Verificar el puerto en el que se esta ejecutando la aplicación:
SELECT
DBMS_XDB.GETHTTPPORT "PuertoHTTP"
FROM
DUAL;
2. Ejecutar el siguiente bloque para cambiar el puerto al que queramos:
BEGIN
DBMS_XDB.SETHTTPPORT('9090');
END;
/
Instalación Básica de Una Base de Datos Oracle Enterprise
Prerrequisitos:
Para ver la cantidad de RAM y Swap ejecuta los siguientes comandos:
$ grep MemTotal /proc/meminfo
$ grep SwapTotal /proc/meminfo
Para ver el espacio libre en disco ejecuta:
$ df h
Instalar un servidor ssh en la máquina
$ sudo aptget install ssh
1. Descargar las siguientes y complementos necesarios para la instalación.
$ sudo aptget install unzip buildessential x11utils rpm ksh lsbrpm libaio1
$ wget
http://security.ubuntu.com/ubuntu/pool/universe/i/ia32libs/ia32libs_2.7ubuntu6.1_amd6
4.deb
$ dpkgdeb x ia32libs_2.7ubuntu6.1_amd64.deb ia32libs
$ sudo cp ia32libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib/
$ cd /usr/lib
$ sudo ln s libstdc++.so.5.0.7 libstdc++.so.5
Si la arquitectura es de 64 bits, se deberá usar:
$ wget
http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc3.3/libstdc++5_3.3.617ubuntu1_am
d64.deb
$ dpkgdeb x libstdc++5_3.3.617ubuntu1_amd64.deb ia64libs
$ sudo cp ia64libs/usr/lib/libstdc++.so.5.0.7 /usr/lib64/
$ cd /usr/lib64/
$ sudo ln s libstdc++.so.5.0.7 libstdc++.so.5
3. Ejecutar los siguientes pasos como usuario root. Crear los grupos oinstall y dba
$ sudo su
# addgroup oinstall
# addgroup dba
4. Crear el usuario oracle y asignarlo a los dos grupos creados en el paso 3.
# useradd g oinstall G dba p password d /home/oracle s /bin/bash oracle
# mkdir /home/oracle
# chown R oracle:dba /home/oracle
5. Cambiar el password al usuario oracle creado.
# passwd oracle
6. Crear algunos enlaces simbólicos necesarios en el sistema, y asignación de permisos.
# ln s /usr/bin/awk /bin/awk
# ln s /usr/bin/rpm /bin/rpm
# ln s /usr/bin/basename /bin/basename
# mkdir /etc/rc.d
# for i in 0 1 2 3 4 5 6 S ; do ln s /etc/rc$i.d /etc/rc.d/rc$i.d ; done
Creamos el directorio base de oracle (/u01/app/oracle)
# mkdir p /u01/app/oracle
y opcionalmente un directorio de datos para las bases de datos que creemos (/u02/oradata):
# mkdir p /u02/oradata
# chown R oracle:dba /u01 /u02
# chmod R 775 /u01 /u02
7. Crear el archivo .bashrc para el usuario oracle
# su oracle
$ touch .bash_profile
Editar el fichero con:
$ nano .bash_profile
Ahora, adicionar las siguientes líneas a este fichero:
#!/bin/bash
# enable color support of ls and also add handy aliases
if [ x /usr/bin/dircolors ]; then
test r ~/.dircolors && eval "$(dircolors b ~/.dircolors)" || eval "$(dircolors b)"
alias ls='ls color=auto'
#alias dir='dir color=auto'
#alias vdir='vdir color=auto'
alias grep='grep color=auto'
alias fgrep='fgrep color=auto'
alias egrep='egrep color=auto'
fi
umask 022
ORACLE_BASE=/u01/app/oracle
export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=capacita
export ORACLE_SID
ORACLE_TERM=xterm
export ORACLE_TERM
ORACLE_OWNER=oracle
export ORACLE_OWNER
# TNS_ADMIN=/home/oracle/config/10.2.0 export TNS_ADMIN
NLS_LANG=SPANISH_SPAIN.WE8ISO8859P1
export NLS_LANG
#ORA_NLS10=${ORACLE_HOME}/db_1/nls/data; export ORA_NLS10
CLASSPATH=${CLASSPATH}:${ORACLE_HOME}/jdbc/lib/classes12.zip
LD_LIBRARY_PATH=${ORACLE_HOME}/lib
export LD_LIBRARY_PATH
DISABLE_HUGETLBFS=1
export DISABLE_HUGETLBFS
TEMP=/tmp
export TEMP
TMPDIR=/tmp
export TMP
PATH=.:$PATH:/u01/app/oracle/product/10.2.0/db_1/bin
export PATH
Salir del usuario oracle y retornar al usuario root, para proseguir con la instalación digitando exit
sobre el prompt
$ exit
También se deberan crear los siguientes directorios como sigue:
# mkdir p /home/oracle/config/10.2.0
# mkdir /var/lock/subsys
8. Es necesario también ajustar algunos parámetros del kernel. Para ver la configuración
actual de nuestro sistema ejecutar los siguientes comandos:
# sysctl a | grep sem
# sysctl a | grep shm
# sysctl a | grep filemax
# sysctl a | grep ip_local_port_range
9. Para actualizar el fichero de configuración se debe proceder a sacar una copia
del fichero así:
# cp /etc/sysctl.conf /etc/sysctl.conf.old
Luego editar el fichero con el comando:
# nano /etc/sysctl.conf
y finalmente, adicionar o reemplazar los parámetros con los siguientes valores:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.filemax = 65536
net.ipv4.ip_local_port_range = 1024 65000
Al reiniciar se leerá la con figuración del kernel de /etc/sysctl.conf y se aplicaran los cambios.
Pero si queremos que los cambios se apliquen inmediatamente ejecutamos la siguiente
instrucción:
# sysctl p
10. Verificar los límites de shell, así:
# ulimit a
Por defecto, hay un límite por usuario de 1024 descriptores de fichero, y 2047 procesos, para
modificar estos valores, primero sacamos una copia al fichero /etc/security/limits.conf de la
siguiente manera:
# cp /etc/security/limits.conf /etc/security/limits.conf.old
Luego Editamos el fichero con la instrucción:
# nano /etc/security/limits.conf
para modificar estos valores así:
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
Las dos últimas líneas imponen un límite inicial de 1024, pero permiten que un usuario
aumente el límite a 65536 usando el comando ulimit n 65536.
Las dos primeras líneas limitan el número de procesos.
11. Se debe modificar el fichero pam_limits.so que es el módulo que procesa la configuración
del fichero /etc/security/limits.conf que se cambió en el paso anterior. Primero sacar una copia
de seguridad de la siguiente manera:
# cp /etc/pam.d/login /etc/pam.d/login.old
Luego editar el fichero así:
# nano /etc/pam.d/login
buscar en el apartado de /etc/security/limits.conf y verificar si existe la línea
session required pam_limits.so
session required /lib/security/pam_limits.so
de no existir, agregarla.
13. Ahora comenzaremos el proceso de Instalación y deberemos salir del usuario root y
continuar con el usuario del SO, para ello digitar la palabra exit sobre la consola así:
# exit
12. Ubicarse en el directorio que contiene el zip de instalación y luego descomprimirlo.
$ unzip oracle_10gr2_linux32.zip
13. Tras el proceso de descompresión, se debió crear una carpeta llamada database, ubicarse
allí.
$ cd database
14. En este paso se requiere ejecutar un asistente gráfico para proseguir el proceso de
instalación. Sí la instalación se ha ejecutado en una máquina diferente en donde queremos
instalar Oracle, podríamos exportar el sistema X remoto a nuestra máquina local, a
continuación se detallan estos pasos, y si nos encontramos directamente sobre la maquina de
la instalación solo sería ejecutar el entorno gráfico y omitir estos pasos.
En la máquina local o cliente
$ xhost + IP_SERVER_ORACLE
En la máquina remota (Servidor Oracle)
$ export DISPLAY=IP_CLIENTE:0
De nuevo en la máquina local o cliente, ejecutar lo siguiente
$ ssh oracle@IP_SERVER_ORACLE X
ya estando en el servidor Oracle, buscar la carpeta “database” y Ejecutar el shell de instalación
así:
$ ./runInstaller ignoreSysPreReqs
Ponemos el flag “ignoreSysPreReqs” porque por defecto se espera instalar en una maquina
Red Hat, y fallaria la comprobacion de seguridad al comprobar que nuestro sistema operativo
no es ese. con este flag le forzamos a que continue la instalación independientemente del
sistema que tengamos. Ahora se visualizaran las pantallas del asistente y las configuraciones
apropiadas.
Pantalla de Bienvenida a la instalación de Oracle 10g, puslamos sobre el botón siguiente.
Buscamos el directorio oracle en el /home y digitamos “oraInventory”, luego escogemos en
Nombre de grupo “oinstall”luego clic en Siguiente.
Seleccionamos en el tipo de instalación, Enterprise Edition y pulsamos Siguiente.
Se visualiza el nombre de la instalación y su directorio raíz, pulsamos en Siguiente.
Se realizan una serie de chequeos para determinar si se cumplen algunos requisitos, se
muestra una advertencia sobre el Sistema Operativo, que no es certificado por Oracle, pero a
pesar de ello pulsamos sobre el botón Siguiente.
Se le mostrará una advertencia que algunos requisitos han fallado y que si desea continuar,
pulsar sobre Sí.
Seleccionamos Crear Base de Datos y pulsamos sobre el botón Siguiente.
Escogemos que deseamos crear una base de datos de propósito general, y pulsamos sobre
el botón Siguiente.
En nombre de la base de datos global, digitamos capacitacion.datacenter.com.co
En el SID, nos quedaron los 8 caracteres del nombre global: capacita.
Como Juego de carácteres escogemos: Unicode estándar UTF8 AL32UTF8.
Adicionalmente, indicamos que queremos instalar los esquemas de ejemplo.
Finalmente, damos clic en Siguiente.
Dejamos para la opción de Gestión de la base de datos, la opción de administración por
defecto y pulsamos sobre el botón Siguiente.
Escogemos como opción de almacenamiento Sistema de Archivos, y escogemos el directorio
que previamente se había destinado para ello: /u02/oradata. Luego pulsamos Siguiente.
En la opción de Copias de Seguridad, escogemos que no deseamos realizarlas de manera
automática y clic en Siguiente.
Escogemos que vamos a manejar una sola contraseña para los usuarios, la ingresamos y
damos clic en Siguiente.
Verificar usuarios SYS, SYSTEM, SYSMAN y DBSNMP
Se presenta un resumen de las configuraciones y productos que van a ser instalados,
pulsamos sobre el botón Instalar, para copiar los archivos necesarios al equipo y ejecutar la
base de datos
Se presenta un resumen de la instalación, y damos clic en Aceptar.
Se le solicita al usuario conectarse como usuario root y ejecutar dos scripts:
# /home/oracle/oraInventory/orainstRoot.sh
# /u01/app/oracle/product/10.2.0/db_1/root.sh
Configuración de la red de Oracle
Listener de Oracle
TNS Listener es un proceso servidor que provee la conectividad de red con la base de datos
Oracle. El listener está configurado para escuchar la conexión en un puerto específico en el
servidor de base de datos. Cuando una se pide una conexión a la base de datos, el listener
devuelve la información relativa a la conexión. La información de una conexión para una
instancia de una base de datos provee el nombre de usuario, la contraseña y el SID de la base
de datos. Si estos datos no son correctos se devolverá un mensaje de error.
○ Por defecto el puerto del listener es el 1521
○ El listener no limita el número de conexiones a la base de datos
Toda la información del listener la contiene un archivo denominado listener.ora
($ORACLE_HOME/network/admin. )
El comando para gestionar el listener es lsnrctl. Mediante este comando podemos:
○ Parar el listener.
○ Ver el estado del listener.
○ Arrancar el listener.
○ Rearrancar el listener.
Archivo TNSNAMES.ora
Archivo ubicado en los clientes,contiene los nombres de servicio de red, asignados a
descriptores a través de los cuales se nos permite acceder
Parámetros del archivo:
HOST: Dirección ip del servidor con el cual queremos conectar
PORT: Puerto donde escucha la base de datos
SERVICE_NAME: Nombre del servicio de base de datos al que queremos conectar
DESCRIPTOR DE CONEXION: Nombre o Alias con el que se identifica la conexión.
Podemos comprobar si la conexión es correcta mediante el comando TNSPING
Arranque y parada de la base de Datos
Arrancar base de datos
El arranque de una base de datos ORACLE requiere tres etapas
1. Arrancar la instancia
2. Montar la base de datos
3. Abrir la base de datos
1. Arrancar la base de datos
En esta parte del arranque se generan los procesos background.
Se crea la SGA. Sus dimensiones se basan en el fichero de inicialización “init.ora”.
SQLPLUS> connect sys as sysdba
connected
SQLPLUS> startup nomount
Oracle Instance started
2. Montar la base de datos
En esta parte del proceso de arranque se produce la conexión al/los archivo/s de control.
En este estado se puede:
1. Cambiar el modo de archivado de la B.D.
2. Renombrado de archivos de Redo Log o del asociado al tablespace SYSTEM
3. Crear, modificar o suprimir nuevos Redo Log o grupos de Redo Log
Partiendo del anterior estado ( nomount ), montamos la base de datos de la siguiente forma:
SQLPLUS> alter database mount
database mounted
En caso de que queramos iniciar la base de datos en este estado bastaría con hacer lo
siguiente:
SQLPLUS> connect sys as sysdba
connected
SQLPLUS> startup mount
Oracle Instance started
Database mounted
3. Abrir base de datos
En esta parte de proceso abren todos los ficheros asociados a los tablespaces y los
ficheros de Redo Log.
La B.D. está accesible para todos los usuarios
Si es necesaria una recuperación (por un fallo de luz o CPU), se produce en este momento.
Partiendo del anterio estando ( mount ), abrimos la base de datos de la siguiente forma:
SQLPLUS> alter database open
database opened
En caso de que queramos iniciar la base de datos en este estado bastaría con hacer lo
siguiente:
SQLPLUS> connect sys as sysdba
connected
SQLPLUS> startup
Oracle Instance started
Database opened
Mas alternativas para el arranque de base de datos
Arranque solo para usuarios con el privilegio RESTRICTED SESSION
SQLPLUS> startup restrict
Arranque forzado
SQLPLUS> startup force
Arranque con un fichero de parámetros distinto al habitual o localizado en una situación
diferente a donde se encuentra por defecto
SQLPLUS> startup pfile=/oracle/database/init2.ora
Parada base de datos
La parada de una B.D. Oracle se realiza mediante el comando SHUTDOWN desde SQL*DBA
después de haber establecido una conexión como SYS AS SYSDBA
Existen tres tipos de shutdown
1. shutdown normal
2. shutdown immediate
3. shutdown abort
1. Shutdown normal
Espera a que los usuarios conectados actualmente finalicen TODAS las operaciones.
Evita nuevas conexiones. Los usuarios que intentan conectarse reciben el mensaje “Shutdown
in progress”.
Cierra y desmonta la B.D. Cierra la SGA para los procesos background.
No necesita recuperacion al arrancar la base de datos
SQLPLUS> connect sys as sysdba
connected
SQLPLUS> shutdown normal
2. Shutdown immediate
Espera a que las transacciones actuales se completen
Evita nuevas transacciones y nuevas conexiones. Los usuarios que intentan conectarse o los
que ya están conectados al intentar realizar una nueva transacción reciben el mensaje
“Shutdown in progress”.
El proceso PMON finaliza las sesiones no activas y realiza ROLLBACK de aquellas
transacciones que no estén validadas.
Cierra y desmonta la B.D. Cierra la SGA para los procesos background.
No necesita recuperacion al arrancar la base de datos
SQLPLUS> connect sys as sysdba
connected
SQLPLUS> shutdown immediate
3. Shutdown abort
Parada drástica, no espera a que los usuarios conectados actualmente finalicen sus
transacciones. El usuario conectado recibe el mensaje “No logged on”.
No se realiza ROLLBACK de las transacciones pendientes.
El proceso PMON finaliza las sesiones no activas y realiza ROLLBACK de aquellas
transacciones que no estén validadas.
Si necesita recuperacion al arrancar la base de datos
SQLPLUS> connect sys as sysdba
connected
SQLPLUS> shutdown abort
Arquitectura de Oracle
Una Base de Datos Oracle es un conjunto de datos almacenados y accesible según el formato
de tablas relacionales. Una tabla relacional tiene un nombre y unas columnas, su definición.
Los datos están almacenados en las filas. Las tablas pueden estar relacionadas con otras.
Una Base de Datos Oracle está almacenada físicamente en ficheros, y la correspondencia
entre los ficheros y las tablas es posible gracias a las estructuras internas de la BD, que
permiten que diferentes tipos de datos estén almacenados físicamente separados. Está
división lógica se hace gracias a los espacios de tablas, tablespaces.
Tablespaces
Un tablespace es una unidad lógica de almacenamiento dentro de una base de datos oracle.
Es un puente entre el sistema de ficheros del sistema operativo y la base de datos.
Cada tablespace se compone de, al menos, un datafile y un datafile solo puede pertenecer a
un tablespace.
Cada tabla o indice de oracle pertenece a un tablespace, es decir cuando se crea una tabla o
indice se crea en un tablespace determinado.
Hay varias razones que justifican este modo de organización de las tablas en espacios de
tablas:
● Un espacio de tablas puede quedarse offline debido a un fallo de disco, permitiendo que
el SGBD continúe funcionando con el resto.
● Los espacios de tablas pueden estar montados sobre dispositivos ópticos si son de
sólo lectura.
● Permiten distribuir a nivel lógico/físico los distintos objetos de las aplicaciones.
● Son una unidad lógica de almacenamiento, pueden usarse para aislar completamente
los datos de diferentes aplicaciones.
● Oracle permite realizar operaciones de backup/recovery a nivel de espacio de tabla
mientras la BD sigue funcionando.
Cuando se crean se les asigna un espacio en disco que Oracle reserva inmediatamente, se
utilice o no. Si este espacio inicial se ha quedado pequeño Oracle puede gestionar el
crecimiento dinámico de los ficheros sobre los que se asientan los espacios de tablas. Esto
elimina la posibilidad de error en las aplicaciones por fallos de dimensionamiento inicial. Los
parámetros de crecimiento del tamaño de los espacios de tablas se especifican en la creación
de los mismos.
Se pueden ver los espacios de tablas definidos en nuestra BD con el comando SQL siguiente:
SQL> select * from user_tablespace;
Datafiles
Un datafile es la representación física de un tablespace. Son los "ficheros de datos" donde se
almacena la información físicamente. Un datafile puede tener cualquier nombre y extensión
(siempre dentro de las limitaciones del sistema operativo), y puede estar localizado en
cualquier directorio del disco duro, aunque su localización típica suele ser
$ORACLE_HOME/Database. Un datafile tiene un tamaño predefinido en su creación (por
ejemplo 100Mb) y este puede ser alterado en cualquier momento. Cuando creemos un datafile,
este ocupará tanto espacio en disco como hayamos indicado en su creación, aunque
internamente esté vacío. Oracle hace esto para reservar espacio continuo en disco y evitar así
la fragmentación. Conforme se vayan creando objetos en ese tablespace, se irá ocupando el
espacio que creó inicialmente.
Un datafile está asociado a un solo tablespace y, a su vez, un tablespace está asociado a uno
o varios datafiles. Es decir, la relación lógica entre tablespaces y datafiles es de 1N,
maestrodetalle.
Los datafiles tienen una propiedad llamada AUTOEXTEND, que se si está activa, se encarga
de que el datafile crezca automáticamente (según un tamaño indicado) cada vez que se
necesite espacio y no exista. Al igual que los tablespaces, los datafiles también puede estar en
línea o fuera de ella.
Ejemplo de creación y manipulación de tablespaces y Datafiles
Conocer el tablespace por defecto
SQL>select property_value from database_properties where property_name =
'DEFAULT_PERMANENT_TABLESPACE';
Ver el tamaño en Megas de los Tablespace
SQL>select tablespace_name, file_name, bytes / 1024 / 1024 from dba_data_files;
Crear un tablespace
SQL> create tablespace ts_prueba_dat datafile
'/u02/oradata/capacita/ts_prueba_dat_01.dbf' size 10M;
Aumentar el tamaño de un datafile
SQL>alter database datafile '/u02/oradata/capacita/ts_prueba_dat_01.dbf' resize 20M;
Adicionar un nuevo datafile al tablespace
Con esta instrucción lo que estamos haciendo es añadir un nuevo datafile llamado
“/u02/oradata/capacita/ts_prueba_dat02.dbf” a nuestro tablespace “ts_prueba_dat” con 10
Mbytes de tamaño. Además, estamos indicando que queremos que aumente por si mismo
cada vez que se llene y que aumente en bloques de 1 Mb cada vez. Finalmente le ponemos
un tope al tamaño total que queremos que tenga nuestro datafile con la instrucción maxsize,
por lo que una vez que llegue a 20 Mb, si se llena, no volverá a crecer más.
Para indicar en cualquier momento que queremos que un datafile no crezca más
automáticamente, podemos utilizar:
SQL>alter database datafile nombre_datafile autoextend off;
Y para indicar en cualquier momento que un determinado datafile crezca automáticamente, la
instrucción que ejecutaremos será:
SQL>alter database datafile nombre_datafile autoextend on next 1 M maxize 300 M;
Nota: en esta sentencia, se puede indicar que queremos que crezca indefinidamente, sin tome
máximo. Esto lo conseguimos con "maxsize unlimited", pero es muy peligroso porque por
algún problema descontrolado, nos puede crecer tanto que nos quedemos si disco en la
máquina y luego es muy complicado restaurar un tamaño normal.
Cambiar el tablespace por defecto de un usuario
SQL>alter user usuario default tablespace ts_prueba_dat quota unlimited on
ts_prueba_dat;
Borrar un tablespace
SQL>drop tablespace ts_prueba_dat including contents cascade constraints;
***************************************** Pausa Activa *****************************************
La papelera de Reciclaje en Oracle
Cuando la RecycleBin está activada, las tablas que borremos en realidad no se eliminan.
En cambio, cuando se elimina una tabla, Oracle sólo cambia el nombre de la tabla y
todos sus objetos asociados (índices, triggers, segmentos de línea de negocio, etc)
a un nombre generado por el sistema que se inicia con BIN$.
Por defecto la papelera de reciclaje viene activada en Oracle, para verificar que esto es
correcto se puede hacer la verificación por el SQLPlus como usuario SYSTEM así:
SQL> show parameter recyclebin
Ejemplo de Uso de la papelera
1. Crear una tabla como sigue:
create table tabla1
(
version varchar2(10) not null,
fecha varchar2(10) default to_char(sysdate , 'dd/mm/yyyy') not null,
hora varchar2(8) default to_char(sysdate , 'hh24:mi:ss') not null
);
2. Insertar un dato para la verificación.
SQL>insert into tabla1 (version) values ('version 1');
3. Borrar la tabla
SQL> drop table tabla1;
4. Listar las tablas del usuario así:
SQL>select * from user_tables;
SQL>select * from tab;
5. Listar los objetos de la papelera de reciclaje
SQL>select object_name, original_name, type, can_undrop as "UND", can_purge as
"PUR", droptime from recyclebin;
6. Recobrar la tabla de la papelera de reciclaje
SQL>flashback table tabla1 to before drop;
7. Listar las tablas del usuario y el contenido de la tabla recuperada
SQL>select * from tab;
SQL>select * from tabla1;
8. Borrar nuevamente la tabla, ejecutando el paso 3.
9. Crear nuevamente la tabla exactamente igual que en el paso 1.
10. realizar el siguiente insert.
SQL>insert into tabla1 (version) values ('version 2');
11. Listar las tablas del usuario y el contenido de tabla1, como en el paso 7.
12. Borrar la tabla nuevamente
SQL> drop table tabla1;
13. Listar los objetos de la papelera de reciclaje.
SQL>select object_name, original_name, type, can_undrop as "UND", can_purge as
"PUR", droptime from recyclebin;
14. Recobrar nuevamente la tabla: tabla1
SQL>flashback table tabla1 to before drop;
15. Listar la información de la tabla. ¿Qué versión aparece y porqué?
16. Borrar nuevamente la tabla.
18 recuperar este objeto mediante la instrucción del paso 14, sustituyendo tabla1 por el valor
de la columna object_name entre comillas dobles.
19, Listar el contenido de la tabla.
Ahora bien, si deseamos borrar una tabla omitiendo la papelera de reciclaje, se puede hacer
como sigue:
SQL>drop table tabla1 purge;
Si se desea vaciar la papelera de reciclaje, se puede hacer así:
SQL>purge recyclebin;
Si se desea que las tablas borradas durante la sesión no vayan a la papelera de reciclaje, se
puede desactivar la papelera de la sesión así:
SQL>alter session set recyclebin=on;
Ofuscación de Código (wrap)
Generar el resultado de una consulta en un archivo (spool)
Cargar la información de un archivo de texto a una tabla de la dase de datos (sqlldr)
***************************************** Pausa Activa *****************************************
Oracle : Instancia
Una instancia de Oracle es un conjunto de estructuras de memoria que están asociadas con
los archivos de datos(datafiles) en una máquina. Una base de datos (database) es una
colección de archivos físicos.
Esquema <> Usuario
Es muy común escuchar que la gente asocie los términos usuario y esquema (user y
schema). Esto puede ser cierto en algunos motores de bases de datos pero no en Oracle.
Para Oracle, un USER es un nombre de una cuenta que se agrega a una base de datos, y un
ESQUEMA es el conjunto de objetos que ese USUARIO posee. Si bien es cierto que uno de
los pasos cuando uno crea un usuario es la creación del ESQUEMA en el que se almacenaran
sus objetos, y que el nombre que se le asocia es el mismo que tiene el usuario, es bastante
simple demostrar por que no es lo mismo una cosa que la otra.
Ejemplo: Crear una tabla llamada mi_tabla con una columna llamada usuario de tipo varchar2
de 30 caracteres, esta misma tabla se debe crear para dos usuarios, e insertar un dato con el
nombre del usuario.
para cambiar el esquema por defecto, se puede usar:
SQL>ALTER SESSION SET CURRENT_SCHEMA=usuario2;
Verificar el estado de las tablas para cada usuario.
Si se desea ver el usuario y esquema actual, se pueden emplear estas dos consultas:
SQL>SELECT USERNAME USUARIO, SCHEMANAME ESQUEMA FROM
V$SESSION WHERE SID IN (SELECT SID FROM V$MYSTAT);
SQL>SELECT USER USUARIO, SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')
ESQUEMA FROM DUAL;
Lo más importante a recordar es que el comando alter session set current_schema solamente
cambia el ESQUEMA por defecto del USUARIO. No modifica los privilegios que tenemos sobre
ese ESQUEMA, ni cambian los resultados cuando hacemos una consulta que depende del
nombre del usuario, como por ejemplo las consultas sobre las USER_ views.
Que es un perfil
Los perfiles se utilizan para limitar la cantidad de recursos del sistema y de la BD disponibles
para un usuario. Si no se definen perfiles para un usuario se utiliza el perfil por defecto, que
especifica recursos ilimitados.
Los recursos que pueden ser limitados via perfil son los siguientes:
COMPOSITE_LIMIT
Suma del máximo de CPU_PER_SESSION, CONNECT_TIME,
LOGICAL_READS_PER_SESSION y PRIVATE_SGA. Si este limite es excedido, Oracle
aborta la sesión y regresa un error.
CONNECT_TIME
Tiempo permitido de conexión por sesión en minutos.
CPU_PER_CALL
Máximo tiempo de CPU por llamada en centésimas de segundo.
CPU_PER_SESSION
Máximo tiempo de CPU por sesión en centésimas de segundo.
IDLE_TIME
Tiempo máximo permitido sin actividad por el usuario antes de ser desconectado. Se expresa
en minutos.
LOGICAL_READS_PER_CALL
Máximo número de bloques de base de datos leídos por llamada.
LOGICAL_READS_PER_SESSION
Máximo numero de bloques de base de datos leídos por sesión.
PRIVATE_SGA
Máxima cantidad de bytes de espacio privado reservado en la SGA. Se puede expresar en el
formato enteroK para kilobytes o enteroM para megabytes.
SESSIONS_PER_USER
Máximo número de sesiones concurrentes permitidas por usuario.
FAILED_LOGIN_ATTEMPTS
Número de intentos fallidos de conexión de un usuario, antes de que Oracle ponga la cuenta
bloqueada.
PASSWORD_GRACE_TIME
Número de días de gracia para realizar un cambio de password de nuestra cuenta. Si en el
periodo de tiempo delimitado no fue cambiado el password, el password expira.
PASSWORD_LIFE_TIME
Número de días de vida de un password.
PASSWORD_LOCK_TIME
Número de días que permanecerá bloqueado un usuario después de rebasar el límite
FAILED_LOGIN_ATTEMPTS.
PASSWORD_REUSE_MAX
Número de veces que un password puede ser reusado.
PASSWORD_REUSE_TIME
Número de días que tienen que pasar para poder reusar un password.
PASSWORD_VERIFY_FUNCTION
En este parámetro, se puede especificar un script para validar el password. Por ejemplo, que
tenga una determinada cantidad de caracteres, que tenga letras y números, etcétera.
Creación, borrado y alteración de perfiles
Para crear un perfil, se requiere tener el privilegio CREATE PROFILE asignado en el usuario
que lo quiere crear, y se usa el siguiente comando:
create profile nombre_perfil limit
nombre_limite_1 [valor entero | unlimited | default ]
nombre_limite_2 [valor entero | unlimited | default ]
...
nombre_limite_n [valor entero | unlimited | default ];
Por default, cada perfil creado tiene todos los límites posibles del mismo de acuerdo a la
versión de la base de datos. Existe un perfil llamado default el cual, regirá a todos los usuarios
de la base de datos, mientras no sea creado uno nuevo y asignado a un usuario en especial.
En el perfil creado, los límites que no sean asignados con un valor predefinido, tendrán el valor
del perfil default de la base de datos, como se ve en el siguiente ejemplo:
Para habilitar el uso de perfiles, se debe digitar la siguiente sentencia como usuario
administrador:
SQL>alter system set resource_limit=true;
Para activar los perfiles el administrador debe ejecutar la siguiente orden:
Ejemplo de creación de un perfil
SQL>create profile per_prueba limit connect_time 45;
Visualizar los atributos del perfil:
SQL>select * from dba_profiles where profile = 'PER_PRUEBA' order by
resource_name;
Ejemplo de modificación de un perfil (Se debe tener privilegio de ALTER PROFILE)
SQL>alter profile per_prueba limit password_life_time 30;
SQL>select * from dba_profiles where profile = 'PER_PRUEBA' order by
resource_name;
Nota. Si se desea regresar un valor al default, se tendrá que poner dicho valor en vez de un
número propiamente.
Para borrar un perfil, nada más tenemos que aplicar el comando drop como en muchos tipos
de objetos en Oracle.
SQL>drop profile per_prueba;
Crear un perfil
SQL>create profile per_prueba limit idle_time 1
failed_login_attempts 1
sessions_per_user 1;
Consultar el perfil del usuario:
SQL>select username, default_tablespace, temporary_tablespace, profile
from dba_users where username = 'XXX';
Asignar el nuevo perfil al usuario:
SQL>alter user XXX profile per_prueba;
Verificación de los parametros del perfil.
En general, el perfil por defecto debe ser adecuado para los usuarios normales; los usuarios
con requerimientos especiales deberían tener perfiles especiales.
Privilegios
Es la capacidad de un usuario dentro de la base de datos a realizar determinadas operaciones
o acceder a determinados objetos de otros usuarios.
Privilegios sobre los objetos
GRANT {PRIV_OBJETO [, PRIV_OBJETO]… | ALL [PRIVILEGES]}
[(COL [,COL]…)]
ON [USUARIO] OBJETO
TO {USUARIO | ROL | PUBLIC} [,{USUARIO | ROL | PUBLIC}…]
[WITH GRANT OPTION];
ON = Especifica el objeto sobre el que se dan los privilegios.
TO = Identifica a los usuarios o roles a los que se conceden los privilegios.
ALL = Concede todos los privilegios sobre el objeto especificado.
WITH GRANT OPTION = Permite que el receptor del privilegio o rol se lo asigne a otros
usuarios o roles.
PUBLIC = Asigna los privilegios a todos los usuarios actuales y futuros: El propósito principal
del grupo PUBLIC es garantizar el acceso a determinados objetos a todos los usuarios de la
base de datos.
Privilegios de sistema
Dan derecho a ejecutar un tipo de comando SQL o a realIzar alguna acción sobre objetos de
un tipo especificado. Por ejemplo, el privilegio para crear TABLESPACES es un privilegio de
sistema. Formato:
GRANT {PRIVILEGIO | ROL} [, {PRIVILEGIO | ROL}, …]
TO {USUARIO | ROL | PUBLIC} [,{USUARIO | ROL | PUBLIC}]
[WITH ADMIN OPTION];
WITH ADMIN OPTION = Permite que el receptor del privilegio o rol pueda conceder esos
mismos privilegios a otros usuarios o roles.
Retirada de privilegios de objetos a los usuarios
REVOKE {PRIV_OBJETO [,PRIV_OBJETO]… | ALL [PRIVILEGES]}
ON [USUARIO.]OBJETO
FROM {USUARIO | ROL | PUBLIC} [, {USUARIO | ROL | PUBLIC}]…;
Retirada de privilegios de sistema o roles a los usuarios
REVOKE {PRIV_SISTEMA | ROL} [,{PRIV_SISTEMA | ROL}]…
FROM {USUARIO | ROL | PUBLIC} [,{USUARIO | ROL | PUBLIC}]…;
Cada tipo de objeto tiene su propio conjunto de permisos:
Tablas: select, insert, update, delete, alter, debug, flashback, on commit refresh, query rewrite,
references, all
Vistas: select, insert, update, delete, under, references, flashback, debug
Secuencias: alter, select
Paquetes, Procedimientos, Funciones, Clases JAVA: execute, debug
Vistas Materializadas: delete, flashback, insert, select, update
Directorios: read, write
Librerias: execute
Tipos de Datos: execute, debug, under
Operadores: execute
Indextypes: execute
Roles
Conjunto de privilegios agrupados. Formato:
CREATE ROLE NOMBREROL [IFENTIFIED BY CONTRASEÑA];
Nota: Un rol puede decidir el acceso de un usuario a un objeto, pero no puede permitir la
creación de objetos.
Supresión de privilegios en los roles
REVOKE NOMBREPRIVILEGIO ON NOMBRETABLA FROM NOMBREROL;
REVOKE NOMBREPRIVILEGIO FROM NOMBREROL;
Supresión de un rol
DROP ROLE NOMBREROL;
Establecer un rol por defecto
ALTER USER NOMBREUSUARIO
DEFAULT {[ROLE NOMBRE_ROL] | [NONE]};
NONE = Hace que el usuario no tenga rol por defecto.
Para la verificación de los roles y privilegios asignados a la sesión actual, se pueden usar las
siguientes consultas:
SQL>SELECT GRANTED_ROLE "Rol", ADMIN_OPTION "Admin" FROM
USER_ROLE_PRIVS;
SQL>SELECT PRIVILEGE "Privilegio", ADMIN_OPTION "Admin" FROM
USER_SYS_PRIVS;
Si se desea hacer esta consulta para otros usuarios, se deberán utilizar la vista
dba_role_privs.
Tipos de Objetos en Oracle
○ Tablas
Son la unidad básica de almacenamiento de datos en Oracle. Los datos son
almacenados en filas y columnas. La tabla se define a través de:
Nombre.
Conjunto de columnas (nombre y tipo)
○ Sinonimos
Un sinónimo es un nombre alternativo que identifica un tabla en la base de datos. Con
un sinónimo se pretende normalmente simplificar el nombre original de la tabla, aunque
también se suelen utilizar para evitar tener que escribir el nombre del propietario de la
tabla.
○ Funciones
Una función es un conjunto de instrucciones en PL/SQL, que pueden ser llamados
usando el nombre con que se le haya creado. Se diferencian de los procedimientos, en
que las funciones retornan un valor al ambiende desde donde fueron llamadas.
○ Procedimientos
Un procedimiento almacenado es un conjunto de instrucciones en PL/SQL, que pueden
ser llamado usando el nombre que se le haya asignado.
○ Paquetes
Los paquetes en Oracle se utilizan para guardar subprogramas y otros objetos de la
base de datos. Un paquete consta de los siguientes elementos:
Especificación o cabecera: contiene las declaraciones públicas (es decir, accesibles
desde cualquier parte de la aplicación) de sus programas, tipos, constantes, variables,
cursores, excepciones, etc.
Cuerpo: contiene los detalles de implementación y declaraciones privadas, es decir,
accesibles solamente desde los objetos del paquete.
○ Triggers
Un Trigger en PLSQL es un tipo especial de procedimiento almacenado asociado con
una tabla de la base de datos Oracle y que se "dispara" (is triggered) cada vez que se
ejecuta sobre dicha tabla una sentencia INSERT, una sentencia UPDATE o una
sentencia DELETE, es decir, es un procedimiento que permite realizar distintas
operaciones cuando un registro de una tabla Oracle es actualizado o borrado, o cuando
se añade un registro nuevo a dicha tabla.
○ Indices
Un índice es una estructura de datos que permite acceder a diferentes filas de una
misma tabla a través de un campo (o campos clave). Un índice permite un acceso
mucho más rápido a los datos.
○ Constraints
○ Secuencias
○ JAVA
○ DBLinks
○ Usuarios
○ Jobs
○ Types
○ Directorios
○ Perfiles
○ Tablespaces
○ Vistas
○ Vistas Materializadas
○ Roles
2. Fundamentos de SQL
Definición
El lenguaje de consulta estructurado o SQL (por sus siglas en inglés structured query
language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite
especificar diversos tipos de operaciones en éstas. Una de sus características es el manejo
del álgebra y el cálculo relacional permitiendo efectuar consultas con el fin de recuperar de
una forma sencilla información de interés de una base de datos, así como también hacer
cambios sobre ella. Es un lenguaje informático de cuarta generación (4GL).
Orígenes y Evolución
Los orígenes del SQL están ligados a los de las bases de datos relacionales. En 1970 E. F.
Codd propone el modelo relacional y asociado a éste un sublenguaje de acceso a los datos
basado en el cálculo de predicados. Basándose en estas ideas, los laboratorios de IBM definen
el lenguaje SEQUEL (Structured English QUEry Language) que más tarde sería ampliamente
implementado por el sistema de gestión de bases de datos (SGBD) experimental System R,
desarrollado en 1977 también por IBM. Sin embargo, fue Oracle quien lo introdujo por primera
vez en 1979 en un programa comercial.
El SEQUEL terminaría siendo el predecesor de SQL, siendo éste una versión evolucionada del
primero. El SQL pasa a ser el lenguaje por excelencia de los diversos sistemas de gestión de
bases de datos relacionales surgidos en los años siguientes y es por fin estandarizado en
1986 por el ANSI, dando lugar a la primera versión estándar de este lenguaje, el "SQL86" o
"SQL1". Al año siguiente este estándar es también adoptado por la ISO.
Sin embargo, este primer estándar no cubre todas las necesidades de los desarrolladores e
incluye funcionalidades de definición de almacenamiento que se consideraron suprimir. Así
que en 1992 se lanza un nuevo estándar ampliado y revisado del SQL llamado "SQL92" o
"SQL2".
En la actualidad el SQL es el estándar de facto de la inmensa mayoría de los SGBD
comerciales. Y, aunque la diversidad de añadidos particulares que incluyen las distintas
implementaciones comerciales del lenguaje es amplia, el soporte al estándar SQL92 es
general y muy amplio.
El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo:
Características Generales
Optimización
Como ya se dijo arriba, y suele ser común en los lenguajes de acceso a bases de datos de
alto nivel, el SQL es un lenguaje declarativo. O sea, que especifica qué es lo que se quiere y
no cómo conseguirlo, por lo que una sentencia no establece explícitamente un orden de
ejecución.
El orden de ejecución interno de una sentencia puede afectar gravemente a la eficiencia del
SGBD, por lo que se hace necesario que éste lleve a cabo una optimización antes de su
ejecución. Muchas veces, el uso de índices acelera una instrucción de consulta, pero ralentiza
la actualización de los datos. Dependiendo del uso de la aplicación, se priorizará el acceso
indexado o una rápida actualización de la información. La optimización difiere sensiblemente
en cada motor de base de datos y depende de muchos factores.
Lenguaje de definición de datos (DDL)
El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es el que se
encarga de la modificación de la estructura de los objetos de la base de datos. Existen cuatro
operaciones básicas: CREATE, ALTER, DROP y TRUNCATE.
CREATE
Este comando crea un objeto dentro de la base de datos. Puede ser una tabla, vista, índice,
trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte.
ALTER
Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos
a una tabla, modificar el tipo de un campo, agregar/quitar índices a una tabla, modificar un
trigger, etc.
RENAME
Cambia el nombre a una tabla, vista, secuencia o sinonimo privado.
DROP
Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, índice, trigger,
función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se
puede combinar con la sentencia ALTER.
TRUNCATE
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DROP, es
que si se quiere borrar todo el contenido de la tabla, es mucho más rápido, especialmente si la
tabla es muy grande. La desventaja es que TRUNCATE sólo sirve cuando se quiere eliminar
absolutamente todos los registros, ya que no se permite la cláusula WHERE. Si bien, en un
principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en
realidad una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a
crear y no ejecuta ninguna transacción.
Lenguaje de manipulación de datos DML(Data Manipulation Languaje)
Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un
lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios
llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de
datos adecuado.
El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y
manipular datos en una base de datos relacional.
INSERT
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una
base de datos relacional.
UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de
registros existentes en una tabla.
MERGE
lo que permite la sentencia SQL MERGE es, dependiendo de una condición lógica, actualizar
registros (UPDATE) cuando la condición se cumple, o insertar registros (INSERT) cuando
dicha condición no se cumple, de ahí surge la denominación de UPSERT.
DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla,
Instrucciones de Transferencia
Administran las modificaciones creadas por las instrucciones DML. Lo forman las
instrucciones ROLLBACK, COMMIT y SAVEPOINT.
Lenguaje de Control de Datos DCL (Data Control Language)
Administran los derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT
y REVOKE.
Tipos de Datos en Oracle
Es importante conocer los tipos de datos disponibles en un Sistema Gestor de Base de Datos
(SGBD), de esta forma podremos optimizar al máximo el uso de recursos de las aplicaciones.
A continuación se indican los tipos de datos de Oracle y sus características básicas:
TIMESTAMP WITH LOCAL TIME Almacena datos de tipo hora Cuando se usa un SELECT
ZONE incluyendo la zona horaria para mostrar los datos de este
local (relativa), franccionando tipo, el valor de la hora será
los segundos ajustado a la zona horaria de
la sesión actual
Operadores de Comparación
Operador Operación Ejemplo
Operadores de Aritméticos
Operador Operación Ejemplo
+ Suma select nombre,
salario+comision from emp
where oficio='VENDEDOR';
Existen en SQL muchas funciones que pueden complementar el manejo de los datos en las
consultas. Se utilizan dentro de las expresiones y actuan con los valores de las columnas,
variables o constantes.
Pueden anidarse funciones dentro de funciones. Y existe una gran variedad de funciones
para cada tipo de datos:
aritméticas,
de cadenas de caracteres,
de manejo de fechas,
de conversión,
otras,
de grupo.
Funciones Aritméticas
Función Cometido Ejemplo Resultado
Con las fechas pueden utilizarse varios formatos. Estos formatos permiten modificar la presentación
de una fecha. En la siguiente tabla se presentan algunos formatos de fecha y el resultado que
generan.
Máscaras de Formato Numéricas
Formato Cometido Ejemplo Resultado
q Trimestre. select 1
to_char(sysdate,'q')
from dual;
Otras Funciones
Función Cometido Ejemplo Resultado
La cláusula Group By sirve para calcular propiedades de uno o más conjuntos de filas. Si se
selecciona más de un conjunto de filas, Group By controla que las filas de la tabla original sean
agrupadas en un temporal.
Los datos seleccionados en la sentencia "Select" que lleva el "Group By" deben ser:
● Una constante.
● Una función de grupo (SUM, COUNT, AVG…)
● Una columna expresada en el Group By.
Clausula Having
La cláusula Having se emplea para controlar cual de los conjuntos de filas se visualiza. Se evalúa
sobre la tabla que devuelve el Group By. No puede existir sin Group By.
Having es similar al Where, pero trabajo con grupos de filas; pregunta por una característica de
grupo, es decir, pregunta por los resultados de las funciones de grupo, lo cual Where no pude
hacer.
Funciones de Grupo
Oracle dispone de funciones que nos permiten contar registros, calcular sumas, promedios, obtener
valores máximos y mínimos. Las funciones de grupo operan sobre un conjunto de valores (registros)
y retornan un solo valor.
Características:
● Se pueden usar en una instrucción "select" y combinarlas con la cláusula "group by"
● Todas estas funciones retornan "null" si ningún registro cumple con la condicion del "where"
(excepto "count" que en tal caso retorna cero).
● El tipo de dato del campo determina las funciones que se pueden emplear con ellas.
Las relaciones entre las funciones de grupo y los tipos de datos es la siguiente:
Si realiza una consulta con la función "count" incluyendo entre paréntesis un campo y la tabla
contiene 18 registros, 2 de los cuales contienen valor nulo, el resultado devuelve un total de 16
filas porque no considera aquellos con valor nulo.
Todas las funciones de grupo, excepto "count(*)", excluye los valores nulos de los campos;
"count(*)" cuenta todos los registros, incluidos los que contienen "null".
Hay que tener en cuenta que los valores nulos no participan en el cálculo de las funciones de
conjuntos. Estas funciones se pueden utilizar con las cláusulas DISTINCT y ALL. También se
pueden utilizar aunque no realicemos agrupación alguna en la consulta, considerando a toda la
tabla como un grupo.
Operaciones con Conjuntos
Permite combinar los resultados de varios "Select" para obtener un único resultado.
UNION: Combina los resultados de dos consultas. Las filas duplicadas que aparecen se reducen a
una fila única.
UNION ALL: Como la anterior pero aparecerán nombres duplicados.
INTERSECT: Devuelve las filas que son iguales en ambas consultas. Todas las filas duplicadas
serán eliminadas.
MINUS: Devuelve aquellas filas que están en la primera "Select" y no están en la segunda "Select".
Las filas duplicadas del primer conjunto se reducirán a una fila única antes de que empiece la
comparación con el otro conjunto.
Reglas para la utilización de operadores de conjunto:
● Las columnas de las dos consultas se relacionan en orden, de izquierda a derecha.
● Los nombres de columna de la primera sentencia "Select" no tiene porque ser los mismos que
los nombres de la segunda.
● Los "Select" necesitan tener el mismo numero de columnas.
● Los tipos de datos deben coincidir, aunque la longitud no tiene que ser la misma.
Otras características adicionales en los operadores de conjunto
● Los resultados se ordenan ascendentemente por defecto según las columnas de la primer
sentencia SELECT, excepto en UNION ALL
● La cláusula ORDER BY Puede aparecer sólo una vez al final de la sentencia
● Puede aceptar el nombre de la columna o el alias de la primer sentencia SELECT o la notación
de posición
● Los operadores de conjuntos pueden ser usados en subconsultas
● Cuando se usa un operador de conjuntos en la cláusula WHERE, debe existir coincidencia
entre las columnas de la condición y las del resultado del operador de conjunto
Combinaciones de Tabla (Joins)
La sentencia join en SQL permite combinar registros de dos o más tablas en una base de
datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN:
interno, externo, y cruzado.
En casos especiales una tabla puede unirse a sí misma, produciendo una autocombinación,
SELFJOIN.
Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra
relacional, y generalizando es una función de composición.
Tablas de ejemplo
Todas las explicaciones que están a continuación utilizan las siguientes dos tablas para ilustrar
el efecto de diferentes clases de uniones JOIN.
Apellido IDDepartamento
Andrade 31
Jordán 33
Steinberg 33
Róbinson 34
Zolano 34
Gaspar 36
NombreDepartamento IDDepartamento
Ventas 31
Ingeniería 33
Producción 34
Mercadeo 35
La tabla Empleado contiene a los empleados con el número del departamento al que
pertenecen; mientras que la tabla Departamento, contiene el nombre de los
departamentos de la empresa, se puede notar que existe un empleado que tiene asignado
un número de departamento que no se encuentra en la tabla Departamento (Gaspar),
igualmente, en la tabla Departamento existe un departamento al cual no pertenece
empleado alguno (Mercadeo). Esto servirá para presentar algunos ejemplos más
adelante.
Combinación interna (INNER JOIN)
Este es el tipo de JOIN más utilizado por lo que es considerado el tipo de combinación
predeterminado.
SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera,
conocida como explícita usa la palabra JOIN, mientras que la segunda es implícita y usa ','
para separar las tablas a combinar en la sentencia FROM de la declaración SELECT.
Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones
que cumplan lo que indica la sentencia WHERE.
Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL
ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le
agregan predicados tales como IS NULL o IS NOT NULL.
Como ejemplo, la siguiente consulta toma todos los registros de la tabla Empleado y encuentra
todas las combinaciones en la tabla Departamento. La sentencia JOIN compara los valores en
la columna IDDepartamento en ambas tablas. Cuando no existe esta correspondencia entre
algunas combinaciones, éstas no se muestran; es decir que si el número de departamento de
un empleado no coincide con los números de departamento de la tabla Departamento, no se
mostrará el empleado con su respectivo departamento en la tabla resultante.
Las dos consultas siguientes son similares, y se realizan de manera explicita (A) e implícita
(B).
A. Ejemplo de la sentencia INNER JOIN explícita:
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDdepartamento = departamento.IDdepartamento
B. Ejemplo de la sentencia INNER JOIN implícita:
SELECT *
FROM empleado, departamento
WHERE empleado.IDdepartamento = departamento.IDDepartamento
Resultados:
Zolano 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Steinberg 33 Ingeniería 33
Andrade 31 Ventas 31
C. Ejemplo de combinación tipo theta:
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento < departamento.IDDepartamento
Las operaciones INNER JOIN puede ser clasificadas como de equivalencia, naturales, y
cruzadas.
De equivalencia (equijoin)
Es una especie de thetajoin que usa comparaciones de igualdad en el predicado JOIN.
Cuando se usan operadores, tales como < o > no se puede clasificar en este rango.
D. Ejemplo de combinación de equivalencia:
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
La tabla resultante presenta dos columnas llamadas IDDepartamento, una proveniente de la
tabla Empleado y otra de la tabla Departamento.
SQL:2003 no tiene una sintaxis específica para esta clase de combinaciones.
Natural (Natural join)
Es una especialización de la combinación de equivalencia, anteriormente mencionada. En este caso
se comparan todas las columnas que tengan el mismo nombre en ambas tablas. La tabla resultante
contiene sólo una columna por cada par de columnas con el mismo nombre.
E. Ejemplo de combinación natural:
SELECT *
FROM empleado NATURAL JOIN departamento
El resultado es un poco diferente al del ejemplo D, ya que esta vez la columna IDDepartamento se
muestra sola una vez en la tabla resultante.
Empleado.Apellido IDDepartamento Departamento.NombreD
epartamento
Zolano 34 Producción
Jordán 33 Ingeniería
Róbinson 34 Producción
Steinberg 33 Ingeniería
Andrade 31 Ventas
El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar
problemas si la base de datos cambia, porque al añadir, quitar, o renombrar las
columnas, puede perder el sentido la sentencia; por esta razón es preferible expresar el
predicado usando las otras expresiones nombradas anteriormente (ejemplos A y B).
Cruzada (Cross join)
Presenta el producto cartesiano de todos los registros de las dos tablas.
El código SQL para realizar este producto cartesiano enuncia las tablas que serán
combinadas, pero no incluye algún predicado que filtre el resultado.
F. Ejemplo de combinación cruzada explícita:
SELECT *
FROM empleado CROSS JOIN departamento
G. Ejemplo de combinación cruzada implícita:
SELECT *
FROM empleado, departamento;
Andrade 31 Ventas 31
Jordán 33 Ventas 31
Steinberg 33 Ventas 31
Zolano 34 Ventas 31
Róbinson 34 Ventas 31
Gaspar 36 Ventas 31
Andrade 31 Ingeniería 33
Jordán 33 Ingeniería 33
Steinberg 33 Ingeniería 33
Solano 34 Ingeniería 33
Róbinson 34 Ingeniería 33
Gaspar 36 Ingeniería 33
Andrade 31 Producción 34
Jordán 33 Producción 34
Steinberg 33 Producción 34
Solano 34 Producción 34
Róbinson 34 Producción 34
Gaspar 36 Producción 34
Andrade 31 Mercadeo 35
Jordán 33 Mercadeo 35
Steinberg 33 Mercadeo 35
Solano 34 Mercadeo 35
Róbinson 34 Mercadeo 35
Gaspar 36 Mercadeo 35
Esta clase de combinaciones son usadas pocas veces, generalmente se les agregan
condiciones de filtrado con la sentencia WHERE para hallar resultados específicos.
Combinación externa (OUTER JOIN)
Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un
registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no
existe otro registro que le corresponda.
En SQL:2003 no existe una notación implícita para las combinaciones externas.
Este tipo de operación se subdivide dependiendo de la tabla a la cual se le admitirán los
registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha, o
combinación completa.
de tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)
El resultado de esta operación siempre contiene todos los registros de la tabla de la
izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un
registro correspondiente en la tabla de la derecha, para uno de la izquierda.
La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla
izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor
nulo NULL en caso de no correspondencia.
A diferencia del resultado presentado en los ejemplos A y B (de combinación interna)
donde no se mostraba el empleado cuyo departamento no existía; en el siguiente
ejemplo se presentarán los empleados con su respectivo departamento, e inclusive se
presentará el empleado, cuyo departamento no existe.
H. Ejemplo de tabla izquierda para la combinación externa:
SELECT distinct *
FROM empleado
LEFT OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
Andrade 31 Ventas 31
Róbinson 34 Producción 34
Zolano 34 Producción 34
Steinberg 33 Ingeniería 33
de tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)
Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene
todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la
consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, para
uno de la derecha.
La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha
con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en
caso de no correspondencia.
I. Ejemplo de tabla derecha para la combinación externa:
SELECT *
FROM empleado
RIGHT OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
Zolano 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Steinberg 33 Ingeniería 33
Andrade 31 Ventas 31
En este caso el área de Mercadeo fue presentada en los resultados, aunque aún no hay
empleados registrados en dicha área.
combinación completa (FULL OUTER JOIN)
Esta operación presenta los resultados de tabla izquierda y tabla derecha aunque no
tengan correspondencia en la otra tabla. La tabla combinada contendrá, entonces, todos
los registros de ambas tablas y presentará valores nulos NULLs para registros sin pareja.
J. Ejemplo de combinación externa completa:
SELECT *
FROM empleado
FULL OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
Zolano 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Steinberg 33 Ingeniería 33
Andrade 31 Ventas 31
Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en
su área correspondiente, y se muestra además el departamento de Mercadeo con valor
nulo en los empleados de esa área.
K. El mismo ejemplo puede expresarse así:
SELECT *
FROM empleado
LEFT JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
UNION
SELECT *
FROM empleado
RIGHT JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
WHERE empleado.IDDepartamento IS NULL
El catálogo de Oracle
El catálogo de oracle es un conjunto de tablas y vistas que contienen la definición de la
estructura lógica y física de la base de datos.
Esto incluye los objetos existentes, la situación de los datafiles, la configuración de los
usuarios, etc.
Los nombres de las tablas de catálogo sigue la siguiente nomenclatura de prefijos:
DBA_ Objetos con información de administrador. Sólo accesibles por usuarios DBA.
USER_ Objetos con información del usuario con el que estamos conectado.
Proporcionan menos información que los objetos DBA_
ALL_ Objetos con información de todos los objetos en base de datos.
V_$ ó V$ Tablas virtuales
Existe una tabla de catálogo para cada tipo de objeto posible (en plural).
TABLES, VIEWS, SEQUENCES, TABLESPACES...
Sabiendo esto podemos ver algunos ejemplos:
DBA_TABLES Información para administradores de las tablas en base de datos.
USER_VIEWS Información de las vistas creadas por el usuario desde el que
accedemos.
ALL_SEQUENCES Información de todas las secuencias existentes en base de datos.
DBA_TABLESPACES Información de administración sobre los tablespaces.
USER_TAB_COLUMNS Todas las columnas de tabla en el usuario activo.
Los objetos de catálogo pueden estar relacionados entre ellos. Por ejemplo, el objeto
ALL_TABLES guarda una relación 1N con el objeto ALL_TAB_COLUMNS: Una tabla tiene N
columnas.
Si se quiere que todos los usuarios tengan algún tipo de acceso a un objeto, podemos dar ese
privilegio al rol PUBLIC.
El catálogo público son aquellas tablas (USER_ y ALL_) que son accesibles por todos los
usuarios. Normalmente dan información sobre los objetos creados en la base de datos.
El catálogo de sistema (DBA_ y V_$) es accesible sólo desde usuarios DBA y contiene tanto
información de objetos en base de datos, como información específica de la base de datos en
sí (versión, parámetros, procesos ejecutándose...)
Ciertos datos del catálogo de Oracle debe actualizarse para el buen funcionamiento de la base
de datos (ANALYZE).
ALL_TAB_COMMENTS Contiene los comentarios para tablas y vistas.
ALL_COL_COMMENTS Contiene los comentarios para las columnas de tablas y
vistas.
Estas tablas se mantienten por medio de la sentencia COMMENT.
Con todas esta información en la base de datos, podemos escribir procedimientos o scripts
SQL para generar documentación o generar a su vez scripts.
Fuentes
http://www.gplivna.eu/papers/sql_join_types.htm#p4
http://www.oracledeveloper.net/display.php?id=213
http://www.oraclepassport.com/OracleJoins.html
http://www.smartsoft.co.uk/Oracle/oracletipsandtricks.htm
http://www.java2s.com/Code/Oracle/CatalogOracle.htm
http://es.wikipedia.org/wiki/Join
http://www.plsql.biz/2007/01/hintsenplsqlparadeterminarelmtodo.html
http://www.oracle.com/index.html
http://es.wikipedia.org/wiki/Oracle
http://en.wikipedia.org/wiki/Oracle_Database
http://www.pythian.com/news/13291/installingoracle11gr2enterpriseeditiononub
untu1004lucidlynx/
http://ubuntulife.wordpress.com/2007/02/11/instalaroracle10grelease2enubuntu edgy/
http://www.taringa.net/posts/linux/5400558/AplicacionesXremotasdesdeWindow s.html
http://www.buanzo.com.ar/lin/x_cliente_servidor.html
http://www.infor.uva.es/~jvegas/cursos/bd/orarq/orarq.html
http://www.infor.uva.es/~jvegas/cursos/bd/oraseg/oraseg.html
http://blobgle.com/blog/?p=51
http://alexhomar.blogspot.com/2007/05/esquemausuario.html
http://orlandoolguin.wordpress.com/2009/09/20/manejodeperfiles/
http://cursos.atica.um.es/cursosdba/dba10g1.php
http://www.desarrolloweb.com/manuales/tutorialoracle.html
http://www.elartedeprogramar.cl/foro/sql/miniguiadeprogramacionoracleplsql/?PHPSESSI
D=d5f1570a72e581449b195c2a4f5d1857
http://www.devjoker.com/gru/TutorialPLSQL/PLSQ/TutorialPLSQL.aspx
http://www.dataprix.com/comocrearunnuevoesquemaenoraclepasopaso
http://www.programacionweb.net/foros/mensaje/?num=16941
http://www.infor.uva.es/~jvegas/cursos/bd/orarq/orarq.html
http://www.dbasupport.com.mx/index.php?option=com_content&view=article&id=126:Apuntes
+de+SQLPlus&catid=1:administracion&Itemid=3
http://www.infor.uva.es/~jvegas/cursos/bd/sqlplus/sqlplus.html#conexion
http://www.orafaq.com/wiki/SQL*Plus_FAQ
http://www.exes.es/ManSQL/index.asp?Pg=sql_plsql_10.htm
http://4.bp.blogspot.com/_nt6c3XlwGIs/Sh2sQXxP6gI/AAAAAAAAAaI/74PTi9JdGPM/s1600h/qu
ery.jpg
http://www.dbaoracle.com/oracle_tips_like_sql_index.htm
http://carcasco.blogspot.com/2009/05/oraclebusquedaslikefuzzycontains.html
http://www.dbaoracle.com/plsql/
http://www.dbaoracle.com/oracle_tips_like_sql_index.htm
http://www.orafaq.com/node/1918
http://knoworacle.wordpress.com/2010/02/25/oracle10gtop10oracleplsqlperformancetips/
http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96624/12_tune.htm
http://download.oracle.com/docs/cd/B12037_01/appdev.101/b10807/12_tune.htm
http://www.plsql.biz/2006/08/buclesyproblemasderendimiento.html
http://www.devshed.com/c/a/Oracle/TuningPLSQLCode/
http://www.dbaoracle.com/oracle_news/2004_2_5_rittman.htm
http://www.dbspecialists.com/files/presentations/bulk_binds.html
http://daust.blogspot.com/2006/01/xechangingdefaulthttpport.html
http://www.maestrosdelweb.com/editorial/tutsql1/
http://www.desarrolloweb.com/manuales/9/
http://es.wikipedia.org/wiki/SQL
http://www.redcientifica.com/oracle/c0002p0004.html
http://www.softcov.com/es/database/oracledatadictionaryused.html
http://www.bd.cesma.usb.ve/ci5313/em04/taller4_MEV.pdf
http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=268
http://66.221.222.85/reference/builtin_functions.html
http://techonthenet.com/oracle/functions/
http://www.infor.uva.es/~jvegas/cursos/bd/sqlplus/sqlplus.html#columnas
http://www.oraclebase.com/articles/10g/MergeEnhancements10g.php
http://www.oracleya.com.ar/simulador/simulador.php?cod=212&punto=54
http://oracleya.com.ar/temarios/descripcion.php?cod=190&punto=1
http://www.desarrolloweb.com/articulos/1900.php