Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
La última versión de Oracle es la versión 19c. La primera base de datos diseñada
para Cloud Computing, que fue lanzada en 2013, fue Oracle 12c, con ella Oracle
intentaba facilitar los esfuerzos de las empresas para estandarizar, consolidar y
automatizar los servicios de las bases de datos en la nube.
Origen de PostgreSQL
PostgreSQL ha tenido una larga evolución, la cual se inicia en 1982 con el
proyecto Ingres en la Universidad de Berkeley. Este proyecto, liderado por Michael
Stonebraker, fue uno de los primeros intentos en implementar un motor de base de
datos relacional. Después de haber trabajado un largo tiempo en Ingres y de haber
tenido una experiencia comercial con el mismo, Michael decidió volver a la
Universidad en 1985 para trabajar en un nuevo proyecto sobre la experiencia de
Ingres, dicho proyecto fue llamado post-ingres o simplemente POSTGRES.
El proyecto post-ingres pretendía resolver los problemas con el modelo de base de
datos relacional que habían sido aclarados a comienzos de los años 1980. El
principal de estos problemas era la incapacidad del modelo relacional de
comprender "tipos", es decir, combinaciones de datos simples que conforman una
única unidad. Actualmente estos son llamados objetos. Se esforzaron en introducir
la menor cantidad posible de funcionalidades para completar el soporte de tipos.
Estas funcionalidades incluían la habilidad de definir tipos, pero también la habilidad
de describir relaciones - las cuales hasta ese momento eran ampliamente utilizadas
pero mantenidas completamente por el usuario. En Postgres la base de datos
«comprendía» las relaciones y podía obtener información de tablas relacionadas
utilizando reglas. Postgres usó muchas ideas de Ingres pero no su código.
La siguiente lista muestra los hitos más importantes en la vida del proyecto
Postgres.
1986: se publicaron varios papers que describían las bases del sistema.
1988: ya se contaba con una versión utilizable.
1989: el grupo publicaba la versión 1 para una pequeña comunidad de usuarios.
1990: se publicaba la versión 2 la cual tenía prácticamente reescrito el sistema
de reglas.
1991: publicación de la versión 3, esta añadía la capacidad de múltiples motores
de almacenamiento.
1993: crecimiento importante de la comunidad de usuarios, la cual demandaba
más características.
1994: después de la publicación de la versión 4, el proyecto terminó y el grupo
se disolvió.
Después de que el proyecto POSTGRES terminara, dos graduados de la
universidad, Andrew Yu y Jolly Chen, comenzaron a trabajar sobre el código de
POSTGRES, esto fue posible dado que POSTGRES estaba licenciado bajo la BSD,
y lo primero que hicieron fue añadir soporte para el lenguaje SQL a POSTGRES,
dado que anteriormente contaba con un intérprete del lenguaje de consultas QUEL
(basado en Ingres), creando así el sistema al cual denominaron Postgres95.
Para el año 1996 se unieron al proyecto personas ajenas a la Universidad
como Marc Fournier de Hub.Org Networking Services, Bruce Momjian y Vadim B.
Mikheev quienes proporcionaron el primer servidor de desarrollo no universitario
para el esfuerzo de desarrollo de código abierto y comenzaron a trabajar para
estabilizar el código de Postgres95.
En el año 1996 decidieron cambiar el nombre de Postgres95 de tal modo que refleje
la característica del lenguaje SQL y lo terminaron llamando PostgreSQL, cuya
primera versión de código abierto fue lanzada el 1 de agosto de 1996. La primera
versión formal de PostgreSQL (6.0) fue liberada en enero de 1997. Desde entonces,
muchos desarrolladores entusiastas de los motores de base de datos se unieron al
proyecto, coordinaron vía Internet y entre todos comenzaron a incorporar muchas
características al motor.
Aunque la licencia permitía la comercialización de PostgreSQL, el código no se
desarrolló en principio con fines comerciales, algo sorprendente considerando las
ventajas que PostgreSQL ofrecía. La principal derivación se originó cuando Paula
Hawthtorn (un miembro del equipo original de Ingres que se pasó a Postgres)
y Michael Stonebraker conformaron Illustra Information Technologies para
comercializar Postgres.
En 2000, ex inversionistas de Red Hat crearon la empresa Great Bridge para
comercializar PostgreSQL y competir contra proveedores comerciales de bases de
datos. Great Bridge auspició a varios desarrolladores de PostgreSQL y donó
recursos de vuelta a la comunidad, pero a fines de 2001 cerró debido a la dura
competencia de compañías como Red Hat y pobres condiciones del mercado.
En 2001, Command Prompt, Inc. lanzó Mammonth PostgreSQL, la más antigua
distribución comercial de PostgreSQL. Continúa brindando soporte a la comunidad
PostgreSQL a través del auspicio de desarrolladores y proyectos, incluyendo
PL/Perl, PL/php y el alojamiento de proyectos de comunidades como PostgreSQL
Build Farm.
En enero de 2005, PostgreSQL recibió apoyo del proveedor de base de
datos Pervasive Software, conocido por su producto Btrieve que se utilizaba en la
plataforma Novell Netware. Pervasive anunció soporte comercial y participación
comunitaria y logró algo de éxito. Sin embargo, en julio de 2006 dejó el mercado de
soporte de PostgreSQL.
A mediados de 2005 otras dos compañías anunciaron planes para comercializar
PostgreSQL con énfasis en nichos separados de mercados. EnterpriseDB añadió
funcionalidades que le permitían a las aplicaciones escritas para trabajar con Oracle
ser más fáciles de ejecutar con PostgreSQL. Greenplum contribuyó mejoras
directamente orientadas a aplicaciones de Data Warehouse e Inteligencia de
negocios, incluyendo el proyecto BizGres.
En octubre de 2005, John Loiacono, vicepresidente ejecutivo de software en Sun
Microsystems comentó: "No estamos yendo tras el OEM de Microsoft pero estamos
viendo a PostgreSQL ahora", aunque no se dieron especificaciones en ese
momento. Para noviembre de 2005, Sun Solaris 10 (lanzamiento 6/06) incluía
PostgreSQL.
En agosto de 2007 EnterpriseDB anunció el Postgres Resource Center y
EnterpriseDB Postgres, diseñados para ser una distribución de PostgreSQL
completamente configurada, incluyendo muchos módulos contribuidos y agregados.
EnterpriseDB Postgres fue renombrado Postgres Plus en marzo de 2008.
El proyecto PostgreSQL continúa haciendo lanzamientos principales anualmente y
lanzamientos menores de reparación de bugs, todos disponibles bajo la licencia
PostgreSQL, y basados en contribuciones de proveedores comerciales, empresas
aportantes y programadores de código abierto mayormente.
Características de Oracle
Modelo relacional: los usuarios visualizan los datos en tablas con el formato
filas/columnas.
Herramienta de administración gráfica intuitiva y cómoda de utilizar.
Control de acceso: tecnologías avanzadas para vigilar la entrada a los datos.
Protección de datos: seguridad completa en el entorno de producción y de
pruebas y gestión de copias de seguridad.
Lenguaje de diseño de bases de datos muy completo (PL/SQL): permite
implementar diseños "activos", que se pueden adaptar a las necesidades
cambiantes de negocio.
Alta disponibilidad: escalabilidad, protección y alto rendimiento para la actividad
empresarial.
Gestión de usuarios: agilidad en los trámites, reducción de costes y seguridad
en el control de las personas que acceden a las aplicaciones y a los sistemas.
Características de PostgreSQL
Soporte de transacciones.
Soporta procedimientos almacenados.
Incluye también un entorno gráfico de administración, que permite el uso
de comandos DDL y DML gráficamente.
Permite trabajar en modo cliente-servidor, donde la información y datos se
alojan en el servidor y los terminales o clientes de la red sólo acceden a la
información.
Además permite administrar información de otros servidores de datos.
Este sistema incluye una versión reducida, llamada MSDE con el mismo motor
de base de datos pero orientado a proyectos más pequeños, que en sus
versiones 2005 y 2008 pasa a ser el SQL Express Edition, que es una edición
Open Source ,es decir, se distribuye en forma gratuita.
Es común desarrollar proyectos completos empleando Microsoft SQL
Server y Microsoft Access a través de los llamados ADP (Access Data Project).
De esta forma se completa la base de datos (Microsoft SQL Server), con el
entorno de desarrollo (VBA Access), a través de la implementación de
aplicaciones de dos capas mediante el uso de formularios Windows.
En el manejo de SQL mediante líneas de comando se utiliza el SQLCMD, osql,
o PowerShell.
Para el desarrollo de aplicaciones más complejas (tres o más capas), Microsoft
SQL Server incluye interfaces de acceso para varias plataformas de desarrollo,
entre ellas .NET, pero el servidor sólo está disponible para Sistemas
Operativos.
El tipo NUMERIC fue mejorado para ser usado como identificador de columna
a partir de la versión 2008 R2.
Arquitectura de Oracle
Un sistema de base de datos Oracle consta de 2 partes, la base de datos en sí y
una instancia de la base de datos. La base de datos consta de estructuras físicas y
lógicas, mientras que la instancia consta de estructuras de memoria y de procesos
asociados con dicha instancia.
Cada vez que se arranca una instancia, se reserva un espacio de memoria (SGA)
y se arrancan una serie de procesos. Después de arrancar la instancia de la base
de datos, el software de la base de datos se encarga de asociarla con una base
de datos específica, lo que se denomina “montar la base de datos”. A partir de este
momento la base de datos está lista para ser abierta, lo que permite a los usuarios
conectarse a ella.
Cada instancia de la base de datos está relacionada con solo y solo una base de
datos. Una instancia de base de datos no puede ser compartida. En un RAC (Real
Application Cluster), normalmente existen varias instancias de base de datos en
diferentes servidores que comparten la misma base de datos. En este modelo la
misma base de datos está relacionada con varias instancias, y cada instancia
únicamente con una base de datos.
Estructuras de Memoria:
Como comentábamos anteriormente, una instancia de base de datos consta de un
área de memoria y una serie de procesos que se hacen llamar “procesos de
background”. Cada vez que una instancia se levanta, se reserva un área de
memoria denominada SGA (System Global Area), y se ejecutan los procesos
asociados.
Existen 2 estructuras básicas de memoria en una instancia de base de datos:
System Global Area (SGA): Esta estructura de memoria es una memoria
compartida, ya que tanto el servidor como los procesos de background tienen
acceso a dicha área de memoria.
Program Global Area (PGA): Esta región de memoria es una memoria privada,
que solo es accesible por los procesos del servidor o de background. La PGA por
tanto no es una memoria compartida, cada proceso tiene su propia PGA.
SGA
Database Buffer Cache: Como sabemos Oracle trabaja con bloques de datos
(mínima cantidad de información que almacena Oracle y que por defecto suelen
ser 8 kb) y no con filas. En esta parte de memoria se almacenan imágenes de los
bloques de datos físicos (de disco) utilizados para realizar consultas o que han
sido modificados por una sentencia. Siempre que un proceso necesite una
determinada información buscará dichos datos en el Database Buffer Cache. Si
encuentra la información aquí podrá leer los datos directamente desde memoria
(cache hit). Si por lo contrario, el proceso no encuentra la información solicitada en
el buffer, tendrá que hacer un acceso a disco y traerse los bloques de datos
necesarios a memoria. (cache miss). Cuando Oracle modifica los datos, lo hace
directamente sobre el Database Buffer Cache. Estos bloques modificados se
denominan bloques sucios o “Dirty Blocks”. La actualización de los bloques en el
Database Buffer Cache se realiza por el algoritmo LRU.
Redo Log Buffer: El Redo Log Buffer se podría definir como una bitácora. Esta
parte de la memoria actúa como un buffer circular y es donde se registrarán todos
los cambios que se produzcan en la base de datos, entendiendo por cambios la
ejecución de las sentencias DML (Insert, Update, Delete, Merge) y DDL
(Create, Alter, Drop, Truncate). Estas entradas de redo se almacenarán por si
fuese necesario una recuperación de la base de datos. Según los procesos vayan
haciendo cambios, se irán generando nuevas entradas de redo que se irán
escribiendo en la SGA. Estas entradas se irán almacenando de forma secuencial
en el buffer y será el proceso de background “Log Writer” (LGWR) el que se
encargará de escribir esta información en el fichero físico de log de redo.
Shared Pool: El área de memoria que comprende la Shared Pool contiene la
“library cache”, “el data dictionary cache” y el “result cache”.
El “data dictionary cache” es una especie de metadatos de la base de datos, es en
definitiva una colección de tablas y vistas que contienen información de la base de
datos, sus estructuras y sus usuarios. Es una zona bastante accedida de la base
de datos.
Otra área es la “library cache”. Es sin duda otra zona bastante concurrida de la
base de datos. Oracle representa cada sentencia SQL que se ejecuta con una
zona SQL compartida, con lo que Oracle es capaz de reconocer cuando 2 usuarios
ejecutan la misma sentencia, y así poder reutilizar la misma área para ambos
usuarios. Esta zona de memoria compartida contiene el plan de ejecución, con lo
que Oracle ahorra memoria utilizando la misma área para las sentencias que se
ejecutan en múltiples ocasiones.
En la “result cache” se almacenan filas y no bloques. En este área por ejemplo
podemos guardar listas de valores muy utilizadas. Para ello tendremos que definir
un tipo de Hint especial en nuestras consultas que hagan que los resultados
obtenidos se almacenen en esta cache.
Large Pool: Esta zona es opcional. El administrador del sistema puede configurarla
siempre que quiera reservar memoria para realizar operaciones de backup o
recuperación de la base de datos o consultas en paralelo.
Java Pool: Esta zona se utiliza para almacenar código Java almacenado y datos
de la JVM. Es a partir de la versión 8i de Oracle a partir de la cual tenemos
disponible esta característica.
Stream Pool: Zona de memoria utilizada para almacenar Oracle Streams.
Normalmente se usa en la configuración de Data Guards (Replicaciones de datos,
donde a partir de este buffer se irá enviando datos a una base de datos
secundaria). A menos que se haya configurado, el tamaño de esta zona de
memoria será de 0 kb.
Keep, Recyble Pools: Estas zonas de memorias son similares a la Database
Buffer Cache, pero se difieren en que son diseñados para mantener la información
más o menos tiempo de lo que la retendría el algoritmo LRU.
Con la infraestructura dinámica de la SGA, el tamaño de los buffers puede ser
alterado sin parar la base de datos. La base de datos utiliza una serie de
parámetros de inicialización para crear y manejar las estructuras de memoria. La
manera más simple de controlar la memoria de la base de datos es dejar a la base
de datos que lo haga de forma automática. Para conseguirlo, lo único que
tendremos que hacer es establecer 2 parámetros de configuración:
MEMORY_TARGET y MEMORY_MAX_TARGET.
PGA
La Program Global Area, es una región privada de memoria que contiene datos e
información de control de los procesos del servidor. Cada proceso tiene su
propia PGA, y el acceso a dicha información es totalmente exclusivo.
En un servidor dedicado, cada proceso tendrá un espacio de pila y una zona
denominada User Global Area (UGA). En un servidor compartido, en el cual
múltiples usuarios comparten el mismo proceso servidor, éste solo tendrá el
espacio de pila, mientras que la UGA se almacenará en la SGA.
Arquitectura de PostgreSQL
Se llama sitio al equipo anfitrión (host) que almacena un conjunto de bases de datos
PostgreSQL. En un sitio se ejecuta solamente un proceso postmaster y múltiples
procesos postgres. Los clientes pueden ejecutarse en el mismo sitio o en equipos
remotos conectados por TCP/IP.
Estructura Lógica:
Desde el punto de vista lógico, la base de datos debe tener al menos 1 “FileGroup”
el cual contiene a toda la metadata de la misma base de datos, es decir tablas y
vistas de sistema, a este “FileGroup” inicial se le conoce como “Primario” y está
presente en todas las bases de datos. Todos los objetos de usuario que contengan
data, ya sean tablas o índices, deben estar ligados a un “FileGroup”, esto se puede
definir al momento de ejecutar la sentencia DDL de creación del objeto, si no se
indica a que “FileGroup” estará ligado ese objeto, este pertenecerá al “FileGroup”
por defecto definido en la base de datos. La base de datos solo puede tener definido
1 solo default “FileGroup”.
Las bases de datos pueden tener hasta 32767 “FileGroups” definidos, según los
límites establecidos para la última versión de SQL Server, la cual es SQL Server
2008 R2. Uno de los propósitos de los “FileGroups” es poder distribuir la data a
través de varios discos duros físicos, de esta manera se puede obtener mayor
rendimiento en las operaciones de I/O debido a que más de un disco trabajara al
mismo tiempo. Otro de los propósitos es poder esconder la ubicación física real de
la información a los programadores, ya que para ellos la tabla “X” pertenece al
“FileGroup” “A”, pero no saben en que data files físicamente se encuentra la
información de la tabla “X”.
Los “FileGroups” pueden contener 1 o más “Datafiles”, y cada uno de estos datafiles
se pude encontrar en un discos diferentes, lo cual también agilizara las consultas y
los ingresos de información a las tablas que se encuentren asignadas a este
“FileGroup”, debido a que SQL Server distribuirá la información uniformemente a
través de todos los “DataFiles” del “FileGroup”.
Estructura Física:
Desde el punto de vista físico, como ya hemos visto, tenemos los “DataFiles” que
los en realidad los archivos de datos, es decir donde se guarda toda la información
de la base de datos. Un “DataFile” solo puede pertenecer a 1 “FileGroup”.
“Mixed”: Los cuales son compartidos hasta por 8 objetos, uno por cada “Page”.
“Uniform”: Los cuales solo pertenecen a un solo objeto, es decir que todos los
“Pages” pertenecen a un solo objeto.
SELECT
La sintaxis básica de select es la siguiente utilizando el estándar de SQL:
insert into usuario (nombre, apellidos, edad, carrera) values ("Martín", "Bastida
Godínez", "23", "Ingeniería en TI");
Tomando como ejemplo si se tuviera una tabla llamada 'usuario' con los campos de
tipo cadena de caracteres (nombre, apellidos, edad, carrera), donde se inserta los
valores que se encuentran en después de la palabra values, los valores se insertan
en el orden correspondiente a como se hizo la llamada de los campos, los valores
van separados por comas, las comillas dobles indican que se está insertando datos
de tipo cadena de caracteres.
Delete
Para eliminar los registros de una tabla usamos el comando "delete":
La ejecución del comando indicado en la línea anterior borra TODOS los registros
de la tabla.
Si queremos eliminar uno o varios registros debemos indicar cuál o cuáles, para ello
utilizamos el comando "delete" junto con la cláusula "where" con la cual
establecemos la condición que deben cumplir los registros a borrar. Por ejemplo,
queremos eliminar aquel registro cuyo nombre de usuario es 'Martín':
Si no encuentra registros que cumplan con la condición del "where", ningún registro
es afectado.
Las condiciones no son obligatorias, pero si omitimos la cláusula "where", la
actualización afectará a todos los registros.
También se puede actualizar varios campos en una sola instrucción:
Para ello colocamos "update", el nombre de la tabla, "set" junto al nombre del campo
y el nuevo valor y separado por coma, el otro nombre del campo con su nuevo valor.
Integridad en base de datos: busca garantizar que sólo las personas autorizadas a
ello podrán acceder a información privilegiada de la empresa. La integridad de una
base de datos se aplica a través de protocolos de autenticación, políticas internas
(como las que impulsan la seguridad de las contraseñas) y un sistema de control de
acceso de usuario que define los permisos que determinan quién puede acceder a
qué datos. Tampoco puede olvidarse el tomar medidas que ayuden a conseguir que
las cuentas no utilizadas queden bloqueadas o sean eliminadas.
Las empresas hacen una copia de seguridad (respaldo) de los datos que
consideran vulnerables en caso de software defectuoso, corrupción de datos, falla
de hardware, piratería maliciosa (hacking), error de usuario u otros eventos
imprevistos. Las copias de seguridad capturan y sincronizan una instantánea de
un punto en el tiempo que luego se usa para devolver los datos a su estado
anterior.
Las mejores prácticas sugieren que se debe programar una copia de seguridad
completa de los datos al menos una vez a la semana, a menudo durante los fines
de semana o fuera del horario laboral. Para complementar las copias de seguridad
completas semanales, las empresas generalmente programan una serie de tareas
de respaldo de datos incrementales o diferenciales que solo realizan copias de los
datos que han cambiado desde la última copia de seguridad completa.
Una biblioteca de cintas virtuales (VTL) proporciona una opción menos costosa
para una matriz de deduplicación. Una VTL es un sistema basado en disco cuyo
comportamiento imita al de una biblioteca de cintas físicas.
A la inversa, la copia de seguridad fuera del sitio transmite copias de datos a una
ubicación remota, que puede incluir el centro de datos secundario de una empresa
o la instalación de colocación arrendada. Cada vez más, la copia de seguridad de
datos fuera del sitio equivale al almacenamiento en la nube basado en suscripción
como un servicio, que proporciona una capacidad escalable y de bajo costo y
elimina la necesidad del cliente de comprar y mantener hardware de respaldo. A
pesar de su creciente popularidad, la elección de la copia de seguridad como un
servicio requiere que los usuarios cifren los datos y tomen otras medidas para
salvaguardar la integridad de los datos.