martes, 19 de marzo de 2013

soluciones en la nube existen para manejo de bases de datos


SOLUCIONES CON LA NUBE EN BASE DE DATOS

Las soluciones de Microsoft para nubes privadas te otorgan toda la flexibilidad y control que necesitas para aprovechar la eficacia de la nube según tus propias necesidades. Las nubes privadas de Microsoft te proporcionan una gestión integral de servicios con la que podrás obtener información detallada acerca de sus aplicaciones y cargas de trabajo, de tal forma que podrás concentrar tu atención en ofrecer un mayor valor empresarial. Además, gracias a la posibilidad de elegir entre nuestras soluciones personalizadas, preconfiguradas u hospedadas, podrás encontrar la nube privada que se ajuste a tus necesidades empresariales específicas.
Muchas soluciones de código libre se basan en este tipo de solución con lo cual casi cualquier tipo de software es posible encontrarlo bajo este modelo y cada día son más los desarrollos que utilizan esta fórmula. En la nube no nos sirve cualquier software para instalar, sino que debemos buscar un programa que se gestione desde el navegador web, admita la creación de usuarios para poder gestionarlo con un mínimo de seguridad y a ser posible admita la opción de trabajar de forma colaborativa.
 Tenemos otra opción que es crear nuestro propio servidor web, para lo cual tendremos que tener una serie de servicios extra si no los tenemos ya contratados, tanto a nivel de redes como de software instalado en el servidor.
A nivel de redes lo fundamental es tener una buena velocidad de subida. El problema con el que nos encontramos aquí es que el principal operador del país ofrece una paupérrima velocidad de subidade 320 kb teóricos, con lo cual habría que buscar otras soluciones, del tipo SDSL, con igual ancho de banda de subida que de bajada. Hay soluciones que puede complementar correctamente a nuestraADSL y no son demasiado costosas, con lo cual configurado la salida con las dos líneas podemos tener una velocidad de subida medianamente decente.
La otra cuestión importante a nivel de redes es pedir una dirección IP fija, para que se establezcan correctamente las comunicaciones, aunque esta opción no es del todo imprescindible si que es muy recomendable para no tener problemas. 

Por último a nivel de software debemos tener instalados en el servidor y administrar los servicios de Apache, MySQL o cualquier otra base de datos similar que nos demande el software que llevaremos a la nube y PHP. Estos programas son gratuitos pero tienen unos gastos de administración que no podemos desdeñar. Por otro lado está la cuestión del tiempo que estamos dedicando a estos menesteres y que sustraemos a la administración de nuestro negocio.
La parte positiva de montar nuestro propio servidor web para alojar tanto nuestra página corporativa como nuestras aplicaciones en la nube la tenemos en el espacio prácticamente ilimitado para nuestros archivos y el control sobre los mismos siempre en nuestras instalaciones. 


martes, 12 de marzo de 2013

Crear particiones utilizando diferentes plataformas Mysql y Oracle

Se puede particionar una tabla de 5 maneras diferentes: MY SQL
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

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.
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)
 
Particionado de Tablas en Oracle
La definición de las particiones se indica en la sentencia de creación de las tablas, con la sintaxis oportuna para cada uno de los tipos.
  • Particionado Range: la clave de particionado viene determinada por un rango de valores, que determina la partición donde se almacenara un valor.
  • Particionado Hash: la clave de particionado es una función hash, aplicada sobre una columna, que tiene como objetivo realizar una distribución equitativa de los registros sobre las diferentes particiones. Es útil para particionar tablas donde no hay unos criterios de particionado claros, pero en la que se quiere mejor el rendimiento.
  • Particionado List: la clave de particionado es una lista de valores, que determina cada una de las particiones.
  • Particionado Composite: los particionados anteriores eran del tipo simples (single o one-level), pues utilizamos un unico método de particionado sobre una o mas columnas. Oracle nos permite utilizar metodos de particionado compuestos, utilizando un primer particionado de un tipo determinado, y luego para cada particion, realizar un segundo nivel de particionado utilizando otro metodo. Las combinaciones son las siguientes (se han ido ampliando conforme han ido avanzando las versiones): range-hash, range-list, range-range, list-range, list-list, list-hash y hash-hash (introducido en la versión 11g).
  • Particionado Interval: tipo de particionado introducido igualmente en la versión 11g. En lugar de indicar los rangos de valores que van a determinar como se realiza el particionado, el sistema automáticamente creara las particiones cuando se inserte un nuevo registro en la b.d. Las técnicas de este tipo disponible son Interval, Interval List, Interval Range e Interval Hash (por lo que el particionado Interval es complementario a las técnicas de particionado vistas anteriormente).
  • Particionado System: se define la tabla particionada indicando las particiones deseadas, pero no se indica una clave de particionamiento. En este tipo de particionado, se delega la gestión del particionado a las aplicaciones que utilicen la base de datos (por ejemplo, en las sentencias sql de inserción deberemos de indicar en que partición insertamos los datos).
SELECT * FROM schema.table PARTITION(part_name);

Particionado Range
Esta forma de particionamiento requiere que los registros estén identificado por un “partition key” relacionado por un predefinido rango de valores. El valor de las columnas “partition key” determina la partición a la cual pertenecerá el registro.

CREATE TABLE sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR(1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy')) TABLESPACE tsa
, PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy')) TABLESPACE tsb
, PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy')) TABLESPACE tsc
, PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy')) TABLESPACE tsd
);


Particionado Hash
Los registros de la tabla tienen su localización física determinada aplicando un valor hash a la columna del partition key. La funcion hash devuelve un valor automatico que determina a que partición irá el registro. Es una forma automática de balancear el particionado. Hay varias formas de construir este particionado. En el ejemplo siguiente vemos una definición sin indicar los nombres de las particiones (solo el número de particiones):

CREATE TABLE dept (deptno NUMBER, deptname VARCHAR(32))
     PARTITION BY HASH(deptno) PARTITIONS 16;
Igualmente, se pueden indicar los nombres de cada particion individual o los tablespaces donde se localizaran cada una de ellas:
CREATE TABLE dept (deptno NUMBER, deptname VARCHAR(32))
     STORAGE (INITIAL 10K)
     PARTITION BY HASH(deptno)
       (PARTITION p1 TABLESPACE ts1, PARTITION p2 TABLESPACE ts2,
        PARTITION p3 TABLESPACE ts1, PARTITION p4 TABLESPACE ts3);
Particionado List
Este tipo de particionado fue añadido por Oracle en la versión 9, permitiendo determinar el particionado según una lista de valores definidos sobre el valor de una columna especifica.

CREATE TABLE sales_list (salesman_id NUMBER(5), salesman_name VARCHAR2(30),
sales_state VARCHAR2(20),
sales_amount NUMBER(10),
sales_date DATE)
PARTITION BY LIST(sales_state)
(
PARTITION sales_west VALUES('California', 'Hawaii'),
PARTITION sales_east VALUES ('New York', 'Virginia', 'Florida'),
PARTITION sales_central VALUES('Texas', 'Illinois')
PARTITION sales_other VALUES(DEFAULT)
);
 

Particionado Composite
Este tipo de particionado es compuesto, pues se conjuga el uso de dos particionados a la vez. Veamos un ejemplo utilizando el tipo RANGE y el HASH. En primer lugar, hace un particionado del tipo RANGE utilizando rangos de años. En segundo lugar, para cada partición definida por cada año, hacemos un segundo particionado (subparticion) del tipo aleatorio (HASH) por el valor de otra columna:
  
  CREATE TABLE TAB2 (ord_id     NUMBER(10),
     ord_day    NUMBER(2),
     ord_month  NUMBER(2),
     ord_year   NUMBER(4)
     )
  PARTITION BY RANGE(ord_year)
  SUBPARTITION BY HASH(ord_id)
  SUBPARTITIONS 8
   ( PARTITION q1 VALUES LESS THAN(2001)
     ( SUBPARTITION q1_h1 TABLESPACE TBS1,
       SUBPARTITION q1_h2 TABLESPACE TBS2,
       SUBPARTITION q1_h3 TABLESPACE TBS3,
       SUBPARTITION q1_h4 TABLESPACE TBS4
     ),
     PARTITION q2 VALUES LESS THAN(2002) 
     ( SUBPARTITION q2_h5 TABLESPACE TBS5,
       SUBPARTITION q2_h6 TABLESPACE TBS6,
       SUBPARTITION q2_h7 TABLESPACE TBS7,
       SUBPARTITION q2_h8 TABLESPACE TBS8
     ),
     PARTITION q3 VALUES LESS THAN(2003) 
     ( SUBPARTITION q3_h1 TABLESPACE TBS1,
       SUBPARTITION q3_h2 TABLESPACE TBS2,
       SUBPARTITION q3_h3 TABLESPACE TBS3,
       SUBPARTITION q3_h4 TABLESPACE TBS4
     ),
     PARTITION q4 VALUES LESS THAN(2004)
     ( SUBPARTITION q4_h5 TABLESPACE TBS5,
       SUBPARTITION q4_h6 TABLESPACE TBS6,
       SUBPARTITION q4_h7 TABLESPACE TBS7,
       SUBPARTITION q4_h8 TABLESPACE TBS8
     )
   )
Particionado Interval
El particionado Interval ha sido introducido en la versión 11g para habilitar un mantenimiento de particiones desasistido. Normalmente, cuando realizamos un particionado sobre una tabla, indicamos una lista de valores o rangos para crear de antemano las particiones. Posteriormente, ajustamos la definición de las particiones para incluir nuevas para nuevos rangos o valores. Con las particiones Interval, preparamos para que Oracle cree las particiones de forma automática cuando lo necesite. Básicamente, se define un intervalo y una directiva para decirle a Oracle como se tiene que comportar. Veamos un ejemplo:
 CREATE TABLE T_11G(C1 NUMBER(38,0),
 C2 VARCHAR2(10),
 C3 DATE)
 PARTITION BY RANGE (C3) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
 (PARTITION P0902 VALUES LESS THAN (TO_DATE('2009-03-01 00:00:00','YYYY-MM-DD HH24:MI:SS')));


Particionado System
Una de las nuevas funcionalidades introducida en la version 11g es el denominado partitioning interno o de sistema. En este particionado Oracle no realiza la gestión del lugar donde se almacenaran los registros, sino que seremos nosotros los que tendremos que indicar en que partición se hacen las inserciones.
create table t (c1 int,
                c2 varchar2(10),
                c3 date)
     partition by system
    (partition p1,
     partition p2,
     partition p3);

Uso de columnas virtuales para particionar
En la versión 11g se pueden definir en las tablas columnas virtuales (no existen físicamente). Ademas estas columnas se pueden utilizar para realizar particionado sobre ellas. La forma de crear una tabla con columnas de este tipo sería la siguiente:
create table t (c1 int,
                c2 varchar2(10),
                c3 date,
                c3_v char(1)
                generated always as
                (to_char(c3,'d')) virtual
                )
 partition by list (c3_v)
  (partition p1 values ('1'),
   partition p2 values ('2'),
   partition p3 values ('3'),
   partition p4 values ('4'),
   partition p5 values ('5'),
   partition p6 values ('6'),
   partition p7 values ('7') );

viernes, 8 de marzo de 2013

BITACORA SGBD


QUE  ES UNA BITÁCORA?
Herramienta que permite registrar, analizar, detectar y notificar eventos que suceden en cualquier sistema de información utilizado en las organizaciones.
La estructura más ampliamente usada para grabar las modificaciones de la base de datos.
FUNCIONES
Recuperar información ante incidentes de seguridad, detección de comportamiento inusual. Información para resolver problemas evidencias legales es de gran ayuda en las tareas de cómputo  forense
BENEFICIOS
*No se requiere hacer cambios en los sistemas de producción para la implementación de la bitácora.
* A través de la parametrización se generan las pantallas de consulta y reportes sin necesidad de programar.
* Acceso a la bitácora a través de una aplicación
WEB.
* Control de Acceso a la información de la bitácora a través de Roles.
* Se puede implementar en los sistemas de información que utilicen las principales bases de datos del mercado: ORACLE, SQL SERVER, INFORMIX, SYBASE.
* Permite hacer el seguimiento de todos los cambios que ha tenido un registro.
* Registra información acerca de eventos relacionados con el sistema que la ganará.
                                               LA CREACION

Enseguida se plantea 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”)
 BITACORA EN ORACLE

Miramos que actualmente no está activada la auditoria en la base de datos.

SQL> select name , value from v$parameter where name like 'audit_trail';
audit_trail NONE

Activamos la auditoría de la base de datos

SQL> alter system set audit_trail = DB scope = spfile;

Reiniciamos la base de datos ( shutdown immediate, startup ) y comprobamos que la auditoría se ha activado.

SQL> select name , value from v$parameter where name like 'audit_trail';
audit_trail DB

Activamos la auditoría para ver la conexión y desconexión de los usuarios a la base de datos, se hace con la siguiente sentencia

SQL> audit connect;

jueves, 7 de marzo de 2013

PARTICION DEL DISCO


PARTICION DEL DISCO

Una partición de disco, en mantenimiento, es el nombre genérico que recibe cada división presente en una sola unidad física de almacenamiento de datos. Toda partición tiene su propio sistema de archivos (formato); generalmente, casi cualquier sistema operativo interpreta, utiliza y manipula cada partición como un disco físico independiente, a pesar de que dichas particiones estén en un solo disco físico.

Una partición de un disco duro es una división lógica en una unidad de almacenamiento (por ejemplo un disco duro o unidad flash), en la cual se alojan y organizan los archivos mediante un sistema de archivos. Existen distintos esquemas de particiones para la distribución de particiones en un disco. Los más conocidos y difundidos son MBR (Master Boot Record) y GPT (GUID Partition Table). Las particiones, para poder contener datos tienen que poseer un sistema de archivos. El espacio no asignado en un disco no es una particion, por lo tanto no puede tener un sistema de archivos. Existen múltiples sistemas de archivos con diferentes capacidades: como FAT, NTFS, FAT32, EXT2, EXT3, EXT4, Btrfs, FedFS, ReiserFS, Reiser4 u otros.
Tipos de particiones
El formato o sistema de archivos de las particiones (p. ej. NTFS) no debe ser confundido con el tipo de partición (p. ej. partición primaria), ya que en realidad no tienen directamente mucho que ver. Independientemente del sistema de archivos de una partición (FAT, ext3, NTFS, etc.), existen 3 tipos diferentes de particiones:
  • Partición primaria: Son las divisiones crudas o primarias del disco, solo puede haber 4 de éstas o 3 primarias y una extendida. Depende de una tabla de particiones. Un disco físico completamente formateado consiste, en realidad, de una partición primaria que ocupa todo el espacio del disco y posee un sistema de archivos. A este tipo de particiones, prácticamente cualquier sistema operativo puede detectarlas y asignarles una unidad, siempre y cuando el sistema operativo reconozca su formato (sistema de archivos).
  • Partición extendida: También conocida como partición secundaria es otro tipo de partición que actúa como una partición primaria; sirve para contener múltiples unidades lógicas en su interior. Fue ideada para romper la limitación de 4 particiones primarias en un solo disco físico. Solo puede existir una partición de este tipo por disco, y solo sirve para contener particiones lógicas. Por lo tanto, es el único tipo de partición que no soporta un sistema de archivos directamente.
  • Partición lógica: Ocupa una porción de la partición extendida o la totalidad de la misma, la cual se ha formateado con un tipo específico de sistema de archivos (FAT32, NTFS, ext2,...) y se le ha asignado una unidad, así el sistema operativo reconoce las particiones lógicas o su sistema de archivos. Puede haber un máximo de 23 particiones lógicas en una partición extendida. Linux impone un máximo de 15, incluyendo las 4 primarias, en discos SCSI y en discos IDE 8963.
Particiones primarias
En los equipos PC, originales de IBM, estas particiones tradicionalmente usan una estructura llamada Tabla de particiones, ubicada al final del registro de arranque maestro (MBR, Master Boot Record). Esta tabla, que no puede contener más de 4 registros de particiones (también llamados ''partition descriptors''), específica para cada una su principio, final y tamaño en los diferentes modo de direccionamiento, así también como un solo número, llamado partition type, y un marcador que indica si la partición está activa o no (sólo puede haber una partición activa a la vez). El marcador se usa durante el arranque; después de que el BIOS cargue el registro de arranque maestro en la memoria y lo ejecute, el MBR de DOS comprueba la tabla de partición a su final y localiza la partición activa. Entonces carga el sector de arranque de esta partición en memoria y la ejecuta. A diferencia del registro de arranque maestro, generalmente independiente del sistema operativo, el sector de arranque está instalado junto con el sistema operativo y sabe cómo cargar el sistema ubicado en ese disco en particular.
Notar que mientras la presencia de un marcador activo se estandariza, no se utiliza en todos los gestores de arranque. Por ejemplo, los gestores LILO, GRUB (muy comunes en el sistema Linux) y XOSL no buscan en la tabla de particiones del MBR la partición activa; simplemente cargan una segunda etapa (que puede ser contenida en el resto del cilindro 0 ó en el sistema de archivos). Después de cargar la segunda etapa se puede cargar el sector de arranque de cualquiera de las particiones del disco (permitiendo al usuario seleccionar la partición), o si el gestor conoce cómo localizar el kernel (núcleo) del sistema operativo en una de las particiones (puede permitir al usuario especificar opciones de kernel adicionales para propósitos de recuperación estratégicos.
Particiones extendidas y lógicas
Cualquier versión del DOS puede leer sólo una partición FAT primaria en el disco duro. Esto unido al deterioro de la FAT con el uso y al aumento de tamaño de los discos movió a Microsoft a crear un esquema mejorado relativamente simple: una de las entradas de la tabla de partición principal pasó a llamarse partición extendida y recibió un número de tipo de partición especial (0x05). El campo inicio de partición tiene la ubicación del primer descriptor de la partición extendida, que a su vez tiene un campo similar con la ubicación de la siguiente; así se crea una lista enlazada de descriptores de partición. Los demás campos de una partición extendida son indefinidos, no tienen espacio asignado y no pueden usarse para almacenar datos. Las particiones iniciales de los elementos de la lista enlazada son las llamadas unidades lógicas; son espacios asignados y pueden almacenar datos. Los sistemas operativos antiguos ignoraban las particiones extendidas con número de tipo 0x05, y la compatibilidad se mantenía. Este esquema reemplaza al antiguo ya que todas las particiones de un disco duro se pueden poner dentro de una sola partición extendida. Por alguna razón, Microsoft no actualizó su sistema operativo DOS para arrancar desde una partición extendida, debido a que la necesidad para particiones primarias se preservaron. Por encima de éstas todavía se habría permitido una partición FAT primaria por unidad, significando todas las otras particiones FAT primarias deben tener sus números de tipo de partición prior cambiando al arranque DOS, para que ésta sea capaz de proceder. Esta técnica, usada por varios administradores de arranque populares, se llama ocultación de la partición. Sin embargo hay que tener en cuenta una quinta partición que se puede comprimir pero no es muy recomendable.

Las ventajas del uso de particiones extendidas

Las particiones extendidas se inventaron para superar el límite de 4 particiones primarias máximas por cada disco duro y poder crear un número ilimitado de unidades lógicas, cada una con un sistema de archivos diferente de la otra. Todos los sistemas modernos (Linux, cualquier Windows basado en NT e incluso OS/2) son capaces de arrancar desde una unidad lógica. Sin embargo, el MBR por defecto utilizado por Windows y DOS sólo es capaz de continuar el proceso de arranque con una partición primaria. Cuando se utiliza este MBR, es necesario que exista por lo menos una partición primaria que contenga un cargador de arranque (por ejemplo el NTLDR de Windows). Otros cargadores de arranque que reemplazan el MBR, como por ejemplo GRUB, no sufren de esta limitación.

INTANCIAS DE UN SGBD Y SUS APLICACIONES