martes, 12 de marzo de 2013

Particiones en MySQL



Particiones en MySQL

Cuando alguna de las tablas de tu base de datos llega a crecer tanto que el rendimiento empieza a ser un problema, es hora de empezar a leer algo sobre optimización. Índices, el comando EXPLAIN, el registro de consultas lentas, … estas son herramientas básicas que todo el mundo debería conocer. Una característica algo menos conocida, aunque se introdujo en la versión 5.1 de MySQL, son las particiones.
En el hospital en que trabajo la mayor tabla con la que tenemos que lidiar es la que almacena todos y cada uno de los contratos de todos los trabajadores que alguna pasaron por el hospital desde que se fundó en los años 50. Esto supone sólo un par de cientos de miles de tuplas, lo cuál no debería dar muchos dolores de cabeza con una base de datos bien optimizada, consultas razonables, y un hardware decente. Sin embargo, hay personas que tienen que tratar con cantidades de datos realmente obscenas, que multiplican estos números por 10 veces 10.
Una solución que nos puede venir a la cabeza, sobre todo si la mayor parte de la información se almacena a modo de histórico y no se accede a ella frecuentemente, es dividir la tabla en varias porciones. Podríamos mantener una tabla para el año en curso y otra para el resto de años, por ejemplo; o una para cada uno de los años; una por lustro; por década… dependiendo de cómo se trabaje con los datos.
El particionado es un concepto parecido, aunque automatizado, que puede ahorrarnos muchos quebraderos de cabeza. Consiste en dividir los datos en particiones más pequeñas (hasta 1024) procurando, porque de otra forma sería absurdo, que sólo haya que acceder a una partición a la hora de buscar una tupla.
Se puede particionar una tabla de 5 maneras diferentes:
  • Por rango: para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual
    1. ALTER TABLE contratos  
    2. PARTITION BY RANGE(YEAR(fechaInicio)) (  
    3.     PARTITION partDecada50 VALUES LESS THAN (1960),  
    4.     PARTITION partDecada60 VALUES LESS THAN (1970),  
    5.     PARTITION partDecada70 VALUES LESS THAN (1980),  
    6.     PARTITION partDecada80 VALUES LESS THAN (1990),  
    7.     PARTITION partDecada90 VALUES LESS THAN (2000),  
    8.     PARTITION partDecada00 VALUES LESS THAN (2010),  
    9.     PARTITION partDecada10 VALUES LESS THAN MAXVALUE  
    10. );  
  • Por listas: para construir nuestras particiones especificamos listas de valores concretos.
    1. ALTER TABLE contratos  
    2. PARTITION BY LIST(YEAR(fechaInicio)) (  
    3.     PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959),  
    4.     PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969),  
    5.     PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979),  
    6.     PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989),  
    7.     PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999),  
    8.     PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006,  
    9. 2007, 2008, 2009),  
    10.     PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016,  
    11. 2017, 2018, 2019)  
    12. );  
  • Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
    1. ALTER TABLE contratos  
    2. PARTITION BY HASH(YEAR(fechaInicio))  
    3. PARTITIONS 7;  
  • Por clave: similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
    1. ALTER TABLE contratos  
    2. PARTITION BY KEY()  
    3. PARTITIONS 7;  
  • Compuesta: podemos combinar los distintos métodos de particionado y crear particiones de particiones
  • Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)
    1. EXPLAIN SELECT COUNT(*)  
    2. FROM contratos  
    3. WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'  
    select_typetabletypekeyrowsExtra
    SIMPLEcontratosALL239796Using where
    Y este el resultado de añadir las particiones (nótese la palabra clave PARTITIONS para que nos muestre también la información relativa a las particiones)
    1. EXPLAIN PARTITIONS SELECT COUNT(*)  
    2. FROM contratos  
    3. WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'  
    select_typetablepartitionstypekeyrowsExtra
    SIMPLEcontratospartDecada50ALL8640Using where
    Como véis, el número de tuplas que MySQL tiene que comprobar se ve disminunido en 2 órdenes de magnitud.

Bitacora



Que es una Bitacora


La estructura es ampliamente usada para grabar las modificaciones de la base de datos es la Bitácora, herramienta que permite registrar, analizar detectar y notificar eventos que suceden en cualquier sistemas de informacion utilizado en las organizaciones. La estructura mas ampliamente usada para grabar las modificaciones de la BD.

Cuales son sus funciones

La importancia de las bitácoras es la de recuperar información ante incidentes de seguridad, detección de comportamiento inusual, información para resolver problemas, evidencia legal, es de gran ayuda en las tareas de cómputo forense.
Cada registro de la bitácora escribe una única escritura de base de datos y tiene lo siguiente :

Nombre de la transacción : Nombre de la transacción que realizó la operación de escritura.
Nombre del dato : El nombre único del dato escrito.
Valor antiguo : El valor del dato antes de la escritura.
Valor nuevo : El valor que tendrá el dato después de la escritura.


Es fundamental que siempre se cree un registro en la bitácora cuando se realice una escritura antes de que se modifique la base de datos.

También tenemos la posibilidad de deshacer una modificación que ya se ha escrito en la base de datos, esto se realizará usando el campo del valor antiguo de los registros de la bitácora.

Los registros de la bitácora deben residir en memoria estable como resultado el volumen de datos en la bitácora puede ser exageradamente grande.

Una bitácora puede registrar mucha información acerca de eventos relacionados con el sistema que la genera los cuales pueden ser:
•          Fecha y hora.
•          Host origen.
•          Usuario.
•          Actividad realizada.



Ejemplo de una creacion de una bitacora en MySQL



Enseguida plantearé un ejemplo de una bitácora desarrollada para la siguiente base de datos de MySQL, llamada proyecto, que tiene las tablas carrera, departamento y maestros.
CREATE DATABASE proyecto;
USE proyecto
CREATE TABLE IF NOT EXISTS `carrera` (`clave_carrera` int(11) NOT NULL, `nom_carrera` varchar(20) NOT NULL, `num_depto` int(11) NOT NULL, PRIMARY KEY (`clave_carrera`), KEY `num_depto` (`num_depto`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `departamento` ( `num_departamento` int(11) NOT NULL,`nombre_dept` varchar(20) NOT NULL, `jefe_num_tarjet` int(11) NOT NULL, PRIMARY KEY (`num_departamento`), KEY `jefe_num_tarjet` (`jefe_num_tarjet`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `maestros` (`num_tarjeta` int(11) NOT NULL DEFAULT ’0′,`nombre` varchar(50) DEFAULT NULL, PRIMARY KEY (`num_tarjeta`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
La estructura de la tabla bitácora sería la siguiente:
CREATE TABLE IF NOT EXISTS `bitacora` (`id` int(11) NOT NULL AUTO_INCREMENT, `operacion` varchar(10) DEFAULT NULL, `usuario` varchar(40) DEFAULT NULL, `host` varchar(30) NOT NULL, `modificado` datetime DEFAULT NULL, `tabla` varchar(40) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
La bitácora debe registrar todos los movimientos (insertar, eliminar y modificar) que se realicen en las tablas de la base de datos. Para lograr lo anterior es necesario crear un trigger para que se ejecute después de la operación de insertar, otro para después de eliminar y el último para después de modificar para cada una de las 3 tablas de la base de datos. Los nueve triggers necesarios para que funcione la bitácora son los siguientes:
DROP TRIGGER IF EXISTS `bit_carr_ins`;
DELIMITER //
CREATE TRIGGER `bitacora` AFTER INSERT ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_carr_upd`;
CREATE TRIGGER `bit_carr_upd` AFTER UPDATE ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_carr_del`;
CREATE TRIGGER `bit_carr_del` AFTER DELETE ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_depto_ins`;
CREATE TRIGGER `bit_depto_ins` AFTER INSERT ON `departamento`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “DEPARTAMENTO”)
//
DROP TRIGGER IF EXISTS `bit_depto_upd`;
CREATE TRIGGER `bit_depto_upd` AFTER UPDATE ON `departamento`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “DEPARTAMENTO”)
//
DROP TRIGGER IF EXISTS `bit_depto_del`;
CREATE TRIGGER `bit_depto_del` AFTER DELETE ON `departamento`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “DEPARTAMENTO”)
//
DROP TRIGGER IF EXISTS `bit_mae_ins`;
CREATE TRIGGER `bit_mae_ins` AFTER INSERT ON `maestros`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “MAESTROS”)
//
DROP TRIGGER IF EXISTS `bit_mae_upd`;
CREATE TRIGGER `bit_mae_upd` AFTER UPDATE ON `maestros`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “MAESTROS”)
//
DROP TRIGGER IF EXISTS `bit_mae_del`;
CREATE TRIGGER `bit_mae_del` AFTER DELETE ON `maestros`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “MAESTROS”)


Comparacion entre Particion y Sistema de archivos


¿Que es una partición de disco?


Una partición podríamos decir que es un espacio de uso que asignamos en un disco duro. En cada disco duro podremos hacer varias particiones, de tal modo que todas ellas son en cierto modoindependientes entre sí y podemos trabajar de manera individual sobre cada una, es decir, los datos que introduzcamos en una de ellas no afectan al espacio de las otras, si borramos los datos de una las demás no sufren variaciones, etc.
A efectos de empleo en un ordenador con un solo disco duro, si desde windows abrimos Mi PC y solo vemos una letra de disco (generalmente C), podemos entender que “para nuestro uso”, ese disco solo cuenta con una partición, si contásemos por ejemplo con dos letras (C yD) tendríamos dos particiones en ese disco.
Las particiones son un detalle importante a tener en cuenta en nuestros ordenadores, pues nos van a permitir por ejemplo:
·         Tener instalado el sistema operativo, drivers, programas, etc., en la primera partición.
·         Guardar archivos personales, música, películas, fotografías, etc., en la segunda partición.
Además de permitirnos tener organizada nuestra información, si llegado el caso tenemos que formatear el equipo (borrar y volver a instalar todo), solo borraríamos C y No perderíamos lo que se encuentre en D, que en este caso sería la segunda partición.

¿Qué son los sistemas de archivos?


Un sistema de archivos son los métodos y estructuras de datos que un sistema operativo utiliza para seguir la pista de los archivos de un disco o partición; es decir, es la manera en la que se organizan los archivos en el disco. El término también es utilizado para referirse a una partición o disco que se está utilizando para almacenamiento, o el tipo del sistema de archivos que utiliza. Así uno puede decir “tengo dos sistemas de archivo” refiriéndose a que tiene dos particiones en las que almacenar archivos, o que uno utiliza el sistema de “archivos extendido”, refiriéndose al tipo del sistema de archivos.

Diferencia entre Partición y Sistema de archivos

La diferencia entre un disco o partición y el sistema de archivos que contiene es importante. Unos pocos programas (incluyendo, razonablemente, aquellos que crean sistemas de archivos) trabajan directamente en los sectores crudos del disco o partición; si hay un archivo de sistema existente allí será destruido o corrompido severamente. La mayoría de programas trabajan sobre un sistema de archivos, y por lo tanto no utilizarán una partición que no contenga uno (o que contenga uno del tipo equivocado).
Antes de que una partición o disco sea utilizada como un sistema de archivos, necesita ser iniciada, y las estructura de datos necesitan escribirse al disco. Este proceso se denomina construir un sistema de archivos.
La mayoría de los sistema de archivos UNIX tienen una estructura general parecida, aunque los detalles exactos pueden variar un poco. Los conceptos centrales son superbloquenodo-ibloque de datosbloque de directorio, y bloque de indirección. El superbloque tiene información del sistema de archivos en conjunto, como su tamaño (la información precisa aquí depende del sistema de archivos). Un nodo-i tiene toda la información de un archivo, salvo su nombre. El nombre se almacena en el directorio, junto con el número de nodo-i. Una entrada de directorio consiste en un nombre de archivo y el número de nodo-i que representa al archivo. El nodo-i contiene los números de varios bloques de datos, que se utilizan para almacenar los datos en el archivo. Sólo hay espacio para unos pocos números de bloques de datos en el nodo-i; en cualquier caso, si se necesitan más, más espacio para punteros a los bloques de datos son colocados de forma dinámica. Estos bloques colocados dinámicamente son bloques indirectos; el nombre indica que para encontrar el bloque de datos, primero hay que encontrar su número en un bloque indirecto.
Los sistemas de archivos UNIX generalmente nos permiten crear un agujero en un archivo (esto se realiza con la llamada al sistema lseek(); compruebe su página de manual), lo que significa que el sistema de archivos simplemente intenta que en un lugar determinado en el archivo haya justamente cero bytes, pero no existan sectores del disco reservados para ese lugar en el archivo (esto significa que el archivo utilizará un poco menos de espacio en disco). Esto ocurre frecuentemente en especial para pequeños binarios, librerías compartidas de Linux, algunas bases de datos, y algunos pocos casos especiales. (los agujeros se implementan almacenando un valor especial en la dirección del bloque de datos en el bloque indirecto o en el nodo-i. Esta dirección especial indica que ningún bloque de datos está localizado para esa parte del archivo, y por lo tanto, existe un agujero en el archivo).

Comparación de los sistemas de archivos NTFS y FAT
Un sistema de archivos es la estructura subyacente que un equipo usa para organizar los datos de un disco duro. Si está instalando un disco duro nuevo, tiene que realizar las particiones y formatearlo empleando un sistema de archivos para poder comenzar a almacenar datos o programas. En Windows, las tres opciones del sistema de archivos que tiene para elegir son NTFS, FAT32 y la anterior y poco usada FAT (también conocida como FAT16).
NTFS
NTFS es el sistema de archivos preferido para esta versión de Windows. Tiene muchos beneficios respecto al sistema de archivos FAT32, entre los que se incluye:
·         La capacidad de recuperarse a partir de algunos errores relacionados con el disco automáticamente, lo que FAT32 no puede hacer.
·         Compatibilidad mejorada para discos duros más grandes.
·         Mejor seguridad porque puede utilizar permisos y cifrado para restringir el acceso a archivos específicos para usuarios aprobados.
FAT32
FAT32, y el menos usado FAT, se usan en versiones anteriores de sistemas operativos de Windows, incluyendo Windows 95,Windows 98 y Windows Millennium Edition. FAT32 no tiene la seguridad que NTFS proporciona, por lo que si tiene una partición FAT32 o volumen en el equipo, cualquier usuario que tenga acceso al equipo puede leer el archivo incluido. FAT32 también tiene limitaciones de tamaño. No puede crear una partición FAT32 mayor que 32GB en esta versión de Windows y no puede almacenan un archivo mayor que 4GB en una partición FAT32.
La razón principal de utilizar FAT32 es que tiene un equipo que a veces ejecutará Windows 95, Windows 98 oWindows Millennium Edition y en otras ocasiones ejecutará esta versión de Windows, conocida como configuración de arranque múltiple. Si éste es el caso, tendrá que instalar el sistema operativo anterior en una partición FAT32 o FAT y asegurarse de que es una partición primaria (una que puede alojar un sistema operativo). Las particiones adicionales a las que tendrá acceso cuando use estas versiones anteriores de Windows también estarán formateadas con FAT32. Estas versiones anteriores de Windows pueden tener acceso a volúmenes o particiones NTFS en una red pero no en el equipo.

miércoles, 6 de marzo de 2013

Particiones en el Disco


1.1 - ¿Para que particionar el disco duro?

Hay varias razones por las que podemos tener interés en particionar el disco duro, por ejemplo para:
  • Instalar un sistema operativo adicional.
  • Separar los datos: en una partición el sistema operativo y los programas, en otra partición los archivos personales, con la ventaja que en adelante se podrá formatear sólo la particón donde se encuentran el sistema operativo y los programas.
  • Crear una imagen del sistema (llamada también imagen Ghost), ya que esta operación requiere que tengamos otra partición.
  • Reducir el tiempo de desfragmentación (total) sólo al tamaño de la partición.

1.2 - Recomendaciones previas

Para particionar el disco debes tener mucho cuidado, asi es que si decides hacerlos debes tener en cuenta que lo harás bajo tu entera responsabilidad! Si lo haces mal sólo tu será el responsable. Para evitar cualquier desastre, te recomiendo que leas el capítulo n°4. 

No se recomienda particionar un disco en un PC bajo Windows en el caso de un equipo de producción. En el caso de un equipo para uso privado, no hay ningún problema. 

2 - Las particiones y los sistema de archivos

2.1 - Las particiones

En un disco duro pueden haber hasta cuatro particiones principales o tres particiones principales y una partición extendida. Pero en una partición extendida, podemos definir tantas particiones como deseemos. Las particiones contenidas en la partición extendida se llaman particiones lógicas. 

Para instalar un sistema operativo necesitamos tener una partición principal mientras que para guardar archivos una partición lógica será suficiente. 

En el caso de que no se nos permita crear una partición lógica, quizás es porque ya alcanzamos el limite (4 particiones principales), o porque no hay espacio libre en la partición extendida o alrededor de ésta. 

Ver también:

2.2 - Sistema de archivos

Existen varios tipos de Sistema de archivos:
FAT, utilizado por MS-DOS, Windows 3.x y Windows 95 pero reconocido perfectamente por los sistemas operativos actuales (Windows XP y Linux). Este sistema no acepta los discos duros de más de 2 Go. El tamaño de los clusters es enorme razón por la que hay una perdida de espacio en disco.
  • FAT32: Una evolución del Fat, reconocido por todos los sistemas excepto por MS-DOS, Windows 3.x, Windows 95 Primera Edición, Windows NT 3.5 y 4. Los discos pueden llegar hasta los 2 TB (1 Terabyte equivale a 1024 Go). Los clusters son ya más pequeños.
  • NTFS, utilizado por Windows NT, 2000 y XP. Linux reconoce este sistema a título experimental pero más valdrá limitarse al modo lectura sin escribir en él, para evitar la perdida de datos. Este sistema no es factible en discos de menos de 400 Mo ya que requiere mucho espacio para la estructura del sistema. El tamaño de los clusters no depende del tamaño del disco (o de la partición) y lo puedes elegir libremente. Finalmente, este sistema repara automáticamente los sectores defectuosos. Por otro lado, los derechos de administración son tomados en cuenta.
  • Linux Ext2 (Ext2FS), utilizado por el sistema Linux, no es reconocido por MS-DOS ni por los sistemas Windows. Los discos pueden llegar hasta los 2 Go y los nombres de los archivo pueden tener hasta 255 caracteres. Los derechos de administración son tomados en cuenta.
  • Linux Ext3 (Ext3FS), utilizado por el sistema Linux, no es reconocido por MS-DOS ni por los sistemas Windows. Los discos pueden llegar hasta los 4 To. Es una mejora del Ext2FS al que se le ha añadido un archivo de log (bitácora) a fin de permitir una rápida reparación en caso de problemas.
  • Reiser (ReiserFS), utilizado por Linux, este sistema tiene un archivo log para recuperarse en caso de problemas; no es reconocido por MS-Dos ni Windows.
  • Linux Swap, utilizado por el sistema Linux, no es reconocido por MS-DOS ni por los sistemas Windows. Permite administrar el archivo de paginación de Linux (el Swap).
  • No formateado: Es una partición virgen, sin ningún sistema de archivos.



Tutorial para Realizar Particiones 












Aplicacion de las instancias


Instancias de Oracle


Una base de datos Oracle es una estructura compleja compuesta por numerosos archivos, procesos y estructuras de memoria interactuando para formar un completo y robusto sistema de base de datos.
Muchas veces se utiliza en forma indistinta los terminos “base de datos oracle” o “instancia oracle”. Sin embargo, esto se debe a una falta de conocimiento acerca de como opera un sistema de base de datos Oracle. Una base de datos Oracle esta compuesta por todos los items almacenados en disco; mientras que una instancia Oracle esta formada por memoria y procesos que operan en el servidor. En otras palabras; una instancia Oracle es logica, mientras que una base de datos Oracle es fisica. ¿Como se relacionan? Los usuarios no acceden a la base de datos directamente, lo hacen a traves de la instancia. En otras palabras, un usuario no puede leer o escribir directamente los archivos de la base de datos que estan en disco, sino que accede a los datos a traves de la instancia.
Una base de datos Oracle puede ser abierta por varias instancias Oracle en forma concurrente. Este esquema de una base Oracle con multiples intancias Oracle se conoce como Real Application Clusters. Una instancia puede abrir solo una base por vez.


registro, monitorización...

Instancia o Servidor de BD: Conjunto de estructuras de memoria y procesos que acceden a los archivos de una BD. Distintas instancias pueden acceder a la misma BD.
        – System Global Area (SGA): Es una área de memoria con la información de la BD que                                      pueden compartir los usuarios. Se crea cuando se empieza a usar una BD                concreta. Puede verse  alguna información desde SQL*PLUS, usando el comando SHOW SGA. Esta compuesta por:
• Caché de BD: Con los bloques de BD más recientemente accedidos,
para reducir los accesos a disco.
• Buffer del Registro de Rehacer, para el fichero de redo log.
• Memoria compartida: Para consultas SQL y otros procesos.
– Program Global Area (PGA): Buffer de memoria con información sobre
los procesos.
– Procesos de Usuario: Aplicaciones que ejecuta el usuario.
– Procesos de Oracle: Procesos del servidor (para atender a los
usuarios...) y procesos de segundo plano (background), para tareas de




Instancia de Oracle



Instancias


Para permitir el acceso a los datos, Oracle utiliza un conjunto de procesos que son compartidos por todos los usuarios. Además, existen estructuras de memoria que son utilizadas para almacenar los datos más recientemente solicitados a la BD.

Una instancia de BD es el conjunto de estructuras de memoria y de procesos que acceden a los ficheros de datos.

Los parámetros que determinan el tamaño y composición de una instancia están almacenados en un fichero llamado init.ora. Este fichero es leido durante el arranque de la BD y puede ser modificado por el DBA. Cualquier modificación de este fichero no tiene efecto hasta la siguiente vez que se arranque la BD.

Las estructuras de la BD Oracle pueden ser divididas en tres clases:
  • aquellas que son internas a la BD,
  • aquellas que son internas a las áreas de memoria (incluidas la memoria compartida y procesos),
  • aquellas que son externas a la BD.
Cada servidor Oracle esta compuesto por: Una Base de Datos: donde se almacenan los datos físicos 
(ficheros de datos y otros componentes)
Una instancia: constituye el mecanismo que permite su manipulación.
Puede haber múltiples instancias para una única base de datos, por ejemplo con clusters de base de 
datos con Oracle Real Application Cluster (RAC)
Un fichero de parámetros, conocido como init.ora, sirve para configurar la instancia
El fichero init.ora establece el tamaño y configuración de la instancia.

Características


    ✓ Una instancia de Oracle solo puede abrir una sola base de datos a la vez.

    ✓ Una instancia de Oracle está conformada por varios procesos y espacios de memoria compartida que son necesarios para acceder a la información contenida en la base de datos.

    ✓ La instancia está conformada por procesos del usuario, procesos que se ejecutan en el background de Oracle y los espacios de memoria que comparten estos procesos.

Fichero de Parámetros – init.ora

El fichero se lee durante el arranque de la instancia
Se utiliza para configurar por ejemplo el tamaño de los buffer que conforman la SGA
Los cambios realizados en el fichero init.ora no tienen efecto hasta el próximo reinicio de la instancia
Oracle 9i y posteriores implementa una nueva versión del fichero init.ora que permite realizar cambios permanentes sin necesidad de reiniciar la instancia

   • Ficheros SPFILE
         Entre otros parámetros en el init.ora se establece el nombre de la instancia
     
     Nombre de la instancia (SID): Identificador de la Instancia  (System Identification)
        • Es único en un servidor: No puede haber dos instancias con el mismo nombre en el mismo servidor