Unidad 3. “Configuración y Administración del espacio en disco”
1. ESTRUCTURA LÓGICA DE ALMACENAMIENTO Estructura de una BD Oracle.
Una BD Oracle tiene una estructura física y una estructura lógica que se mantienen separadamente. • La estructura física se corresponde a los ficheros del sistema
operativo: de datos (datafiles), de redo log y de control (controlfiles). • La estructura lógica está formada por los tablespace y los objetos de
un esquema de BD (tablas, vistas, índices,...).
Estructura lógica.
Una BD se divide en unidades de almacenamiento lógicas: Tablespaces. Contienen distintos objetos relacionados (p.ej. todas las tablas de una aplicación).
Figura 1. Estructura 1. Estructura lógica del gestor.
1
Unidad 3. “Configuración y Administración del espacio en disco”
Cada BD estará formada por uno o más tablespaces (al menos existe el tablespace SYSTEM catálogo del sistema ).
Cada tablespace tablespace se corresponde con
uno o más ficheros de datos. Objetos: tablas, vistas, índices asociados a una tabla, clústeres,... Oracle define esquema como la colección de objetos o estructuras lógicas que corresponden directamente a los datos almacenados, y crea un nuevo esquema por cada usuario que crea objetos en la base de datos. No hay ninguna relación directa entre tablespace y esquema,
objetos del mismo esquema pueden estar en diferentes
tablespaces y un mismo tablespace puede almacenar distintos esquemas.
Figura 2. Fichero 2. Fichero de datos del sistema. El control del uso del espacio del disco se obtiene mediante las estructuras lógicas de almacenamiento: almacenamiento: bloque de datos, extensión y segmento. El nivel más pequeño de granularidad es el del bloque de datos: número específico de bytes contiguos de espacio físico en el disco. (Tamaño mínimo de 2K, el bloque físico del disco y que depende el sistema operativo no tiene por qué coincidir con éste). El siguiente nivel es el de extensión, que es un número específico de bloques de datos contiguos en el disco. Por último el segmento es un conjunto de extensiones utilizadas para almacenar alguna estructura lógica. Tendremos segmentos de datos para tablas o clúster, segmentos de índices para índices, segmentos de rollback para poder deshacer / rehacer cambios por transacciones y segmentos temporales. temporale s.
2
Unidad 3. “Configuración y Administración del espacio en disco”
Hay varios tipos de sentencias en las que Oracle se ve en la obligación de utilizar los segmentos temporales: ordenaciones.
SELECT ... ORDER BY...
CREATE INDEX.
SELECT ... GROUP BY...
SELECT ... UNION ...
SELECT DISTINCT ...
SELECT … INSERSEC ...
SELECT ... MINUS ...
Oracle va incrementando el espacio para los segmentos mediante extensiones. Cuando una extensión está llena y necesita más espacio el sistema busca otra extensión, que podrá estar o no estar contigua a la anterior en el disco (dependerá simplemente del estado de éste). 2. DEFINICIÓN DE ESPACIO DE ALMACENAMIENTO Concepto de Tablespace (espacio de tablas)
Una base de datos se divide en unidades lógicas denominadas TABLESPACES. Un tablespace no es un fichero físico en el disco, simplemente es el nombre que tiene un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas, secuencias…) que se van a crear en la base de datos d atos bajo el tablespace indicado (tablas, secuencias…). Un objeto en base de datos debe estar almacenado
obligatoriamente dentro de un tablespace.
3
Unidad 3. “Configuración y Administración del espacio en disco”
Las propiedades que se asocian a un tablespace son:
Localización de los ficheros de datos.
Especificación de máximas cuotas de consumo de disco.
Control de la disponibilidad de los datos (en línea o fuera de línea).
Backup de datos.
Cuando un objeto se crea dentro de un cierto tablespace, este objeto adquiere todas las propiedades antes descritas del tablespace utilizado.
Figura 3. Ejemplo 3. Ejemplo del Tablespace. En este esquema podemos ver que, por ejemplo, la tabla ARTÍCULO se almacena dentro del tablespace A, y que por lo tanto tendrá todas las propiedades del tablespace A que pueden ser:
Sus
ficheros
de
datos
están
en
$ORACLE_HOME/datos/datos_tablespace_A.
Los objetos no pueden ocupar más de 10Mb de espacio de base de datos.
4
Unidad 3. “Configuración y Administración del espacio en disco”
En cualquier momento se puede poner fuera de línea todos los objetos de un cierto tablespace. -Se pueden hacer copiar de seguridad sólo de ciertos tablespaces.
Si nos fijamos, se puede apreciar que es posible tener una tabla en un tablespace, y los índices de esa tabla en otro. Esto es debido a que los índices no son más que objetos independientes dentro de la base de datos, como lo son las tablas. Y al ser objetos independientes, pueden ir en tablespaces independientes. El tablespace SYSTEM es uno de los que se crear por defecto en todas las bases de datos Oracle. En él se almacenan todos los datos de sistema, el catálogo y todo el código fuente y compilado de procedimientos PL/SQL. También es posible utilizar el mismo tablespace para guardar datos de usuario. En el esquema también vemos que hay un tablespace Temporal (en gris oscuro). Este representa las propiedades que tendrán los objetos que la base de datos cree temporalmente para sus cálculos internos (normalmente para ordenaciones y agrupaciones). Su creación difiere en una de sus cláusulas de creación. El tablespace RO (en gris claro) difiere de los demás en que es de solo lectura (Read Only), y que por lo tanto todos los objetos en él contenidos con tenidos pueden p ueden recibir r ecibir órdenes ó rdenes de consulta de datos, pero no de modificación de datos. Estos puede residir en soportes de sólo lectura, como pueden ser CDROMs, DVDs, etc. Cuando se crea un tablespace, éste se crea de lectura/escritura. Después se puede modificar para que sea de solo lectura. Un tablespace puede estar en línea o fuera de ella (Online o OffLine), esto es que todos los objetos contenidos en él están a disposición de los usuarios o están inhabilitados para restringir su uso. Cualquier objeto almacenado dentro de un tablespace no podrá ser accedido si este está fuera de línea.
5
Unidad 3. “Configuración y Administración del espacio en disco”
Concepto de Datafile (fichero de datos)
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á ocu pará tanto espacio es pacio 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 1-N, maestro-detalle.
FIGURA 4. Esquema 4. Esquema físico de cómo está divido Tablespace.
6
Unidad 3. “Configuración y Administración del espacio en disco”
En el esquema podemos ver como el “Tablespace A” está compuesto
(físicamente)
por
tres
datafiles
(DATOS_1.ORA,
DATOS_2.ORA
y
DATOS_3.ORA). Estos tres datafiles son los ficheros físicos que soportan los objetos contenidos dentro del tablespace A. Aunque siempre se dice que los objetos están dentro del tablespace, en realidad las tablas están dentro del datafile, pero tienen las propiedades asociadas al tablespace. tablespa ce. Cada uno de los datafiles utilizados está ocupando su tamaño en disco (50 Mb los dos primeros y 25 Mb el último) aunque en realidad sólo contengan dos objetos y estos objetos no llenen el espacio que está asignado para los datafiles. 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 pueden estar en línea o fuera de ella.
Concepto de Segment (segmento, trozo, sección)
Un segment es aquel espacio reservado por la base de datos, dentro de un datafile, para ser utilizado por un solo objeto. Así una tabla (o cualquier otro objeto) está dentro de su segmento, y nunca podrá salir de él, ya que si la tabla crece, el segmento también crece con ella. Físicamente, todo objeto en base de datos no es más que un segmento (segmento, trozo, sección) dentro de un datafile. Se puede decir que, un segmento es a un objeto de base de datos, lo que un datafile a un tablespace: el segmento es la representación física del objeto en base de datos (el objeto no es más que una definición lógica).
7
Unidad 3. “Configuración y Administración del espacio en disco”
Figura 5. Representación 5. Representación de los segmentos como objetos o bjetos en ORACLE.
Podemos ver cómo el espacio que realmente se ocupa dentro del datafile es el segment y que cada segmento pertenece a un objeto.
Existen cuatro tipos de segmentos (principalmente):
Segmentos de TABLE: aquellos que contienen tablas
Segmentos de INDEX: aquellos que contienen índices
Segmentos de ROLLBACK: aquellos se usan para almacenar
información de la transacción activa.
Segmentos TEMPORALES: aquellos que se usan para realizar
operaciones temporales que no pueden realizarse en memoria, tales como ordenaciones o agrupaciones de conjuntos grandes de datos.
8
Unidad 3. “Configuración y Administración del espacio en disco”
Concepto de Extent (extensión)
Para cualquier objeto de base de datos que tenga cierta ocupación en disco, es decir, cualquier objeto que tenga un segment relacionado, existe el concepto de extent. Extent es un espacio de disco que se reserva de una sola vez, un segmento que se reserva en un momento determinado de tiempo. El concepto de extent es un concepto físico, unos están separados de otros dentro del disco. Ya dijimos que todo objeto tiene su segmento asociado, pero lo que no dijimos es que este segmento, a su vez, se compone de distintas extensiones. Un segmento, puede ser reservado de una sola vez (10 Mb de golpe), o de varias veces (5 Mb hoy y 5 Mb mañana). Cada una de las veces que se reserva espacio se denomina “extensión”.
FIGURA 6. Reservaciones de espacio.
En el esquema vemos como el objeto (tabla) FACTURA tiene un segmento en el datafile A-1, y este segmento está compuesto de 3 extensiones. Una de estas extensiones tiene un color distinto. Esto es porque existen dos tipos de extensiones:
INITIAL (extensiones iniciales): estas son las extensiones que se
reservan durante la creación del objeto. Una vez que un objeto está creado, no se puede modificar su extensión inicial.
9
Unidad 3. “Configuración y Administración del espacio en disco”
NEXT (siguientes o subsiguientes extensiones): toda extensión
reservada después de la creación del objeto. Si el INITIAL EXTENT de una tabla está llena y se está intentando insertar más filas, se intentará crear un NEXT EXTENT (siempre y cuando el datafile tenga espacio libre y tengamos cuota de ocupación suficiente).
Sabiendo que las extensiones se crean en momentos distintos de tiempo, es lógico pensar que unas extensiones pueden estar fragmentadas de otras. Un objeto de base de datos no reside todo junto dentro del bloque, sino que residirá en tantos bloque como extensiones tenga. Por eso es crítico definir un buen tamaño de extensión inicial, ya que, si es lo suficientemente grande, el objeto nunca estará fragmentado. Si el objeto tiene muchas extensiones y éstas están muy separadas en disco, las consultas pueden retardarse considerablemente, ya que las cabezas lectoras tienes que dar saltos constantemente.
El tamaño de las extensiones (tanto las INITIAL como las NEXT), se definen
durante la creación del objeto y no puede ser modificado después de la creación. Oracle recomienda que el tamaño del INITIAL EXTENT sea igual al tamaño del NEXT EXTENT. La mejor solución es calcular el tamaño que tendrá el objeto (tabla o índice), multiplicando el tamaño de cada fila por una estimación del número de filas. Cuando hemos hecho este cálculo, debemos utilizar este tamaño como extensión INITIAL y NEXT, y tendremos prácticamente la certeza de que no se va a producir fragmentación en ese objeto. En caso de detectar más de 10 extensiones en un objeto (consultando el catálogo de Oracle, como veremos), debemos recrear r ecrear el objeto desde cero (aplicando el cálculo anterior) e importar de nuevo los datos. Ciertas operaciones, necesitan de espacio en disco para poder realizarse. El espacio reservado se denomina “segmentos temporales”. Se pueden cre ar segmentos temporales cuando:
10
Unidad 3. “Configuración y Administración del espacio en disco”
Se crea un índice
Se utiliza ORDER BY, DISTINTC o GROUP BY en un SELECT.
Se utilizan los operadores UNION, INTERSECT o MINUS.
Se utilizan joins entre tablas.
Se utilizan subconsultas.
Concepto de Data block (bloque de datos)
Un data block es es el último eslabón dentro de la cadena de almacenamiento. El concepto de Data de Data block es es un concepto físico, ya que representa la mínima unidad de almacenamiento que es capaz de manejar Oracle. Igual que la mínima unidad de almacenamiento de un disco duro es la unidad de asignación, la mínima unidad de almacenamiento de Oracle es el data block . En un disco duro no es posible que un fichero pequeño ocupe menos de lo que indique la unidad de asignación, así si la unidad de asignación es de 4 Kb, un fichero que ocupe 1 Kb, en realidad ocupa 4 Kb. Siguiendo con la cadena, cada segmento (o cada extensión) se almacena en uno o varios bloques de datos, dependiendo del tamaño definido para el extensión, y del tamaño definido para el data block .
Figura 7. Almacenamiento 7. Almacenamiento en bloques de datos.
11
Unidad 3. “Configuración y Administración del espacio en disco”
(*) Espacio ocupado en el data block por la primera NEXT EXTENSION. (#) Espacio ocupado en unidades de asignación del sistema operativo por los data blocks anteriores. El esquema muestra toda la cadena de almacenamiento de Oracle. Desde el nivel más físico al más lógico:
Unidades de asignación del sistema operativo (El más físico. No depende de Oracle)
Data blocks de Oracle
Extents
Segments
DataFiles
Tablespaces (El más lógico)
El tamaño de las unidades de asignación del sistema operativo se define durante el particionado del disco duro (FDISK, FIPS…), y el espacio de los data
blocks de Oracle se define durante la instalación ins talación y no puede ser cambiado. Como es lógico, el tamaño de un data block tiene que ser múltiplo del tamaño de una unidad de asignación, es decir, si cada unidad de asignación ocupa 4 K, los data blocks pueden ser de 4K, 8K, 12K… para que en el sistema operativo ocupen 1, 2, 3… unidades de
asignación.
Figura 8. Unidades de asignación en los bloques de datos.
12
Unidad 3. “Configuración y Administración del espacio en disco”
Estructuras de memoria
Todas las estructuras que hemos visto se refieren a cómo se almacenan los datos en el disco. Sin embargo, y como es lógico, Oracle también utiliza la memoria del servidor para su funcionamiento. Oracle utiliza dos tipos de memoria:
Memoria local y privada para cada uno de los procesos: PGA (Process Global Area o Program Global Area).
Memoria común y compartida por todos los procesos SGA (System Global Area o Shared Global Area).
Cada vez que se conecta un cliente al servidor, se ejecuta un subproceso que atenderá sus peticiones (a través del fork en Unix o con CreateThread en el mundo Windows), y este subproceso creará un nuevo bloque de memoria de tipo PGA. El tamaño de este bloque de memoria dependerá del sistema operativo, y permanece invariable, aunque se puede configurar cambiando el valor de la variable SORT_AREA_SIZE del archivo de inicialización INIT.ORA. Por cada instancia de base de datos, tendremos una zona de memoria global, el SGA, donde se almacenan aquellos datos y estructuras que deben se compartidos entre distintos procesos de la base de datos, como los procesos propios de Oracle y cada uno de los subprocesos que gestionan la conexión. El tamaño del SGA es uno de los puntos más críticos a la hora de mejorar el rendimiento de una base de datos, ya que, cuanto mayor memoria se reserve (mientras no sea memoria virtual), más rápidas se realizarán ciertas operaciones. Por ejemplo, las ordenaciones (una de las operaciones que más rápido deben hacerse) se realizan en el SGA si hay espacio suficiente. En caso contrario, se realizarán directamente en el disco, utilizando segmentos temporales.
13
Unidad 3. “Configuración y Administración del espacio en disco”
El SGA se divide en cuatro grandes zonas:
Database buffer cache: cache: almacena los bloques que se han leído de los datafiles. Cada vez que es necesario acceder a un bloque, se busca el bloque en esta zona, y en caso de no existir, se lee de nuevo del datafile correspondiente. Cuantos más bloques quepan en esta zona de memoria, mejor será el rendimiento.
SQL Area: Area: es la zona de memoria se almacenan compiladas las últimas sentencias SQL (y bloques PL/SQL) ejecutadas. Además se almacenan las variables acopladas (bind), el árbol de parsing, los buffer de ejecución y el plan de ejecución. Es importante que siempre que se utilice la misma sentencia, sea exactamente igual, para poder aprovechar sentencias previas almacenadas en el SQL Area. Es decir, las siguientes sentencias: “SELECT * FROM TABLA”
“SELECT * FROM TABLA” “SELECT * FROM TABLA” “SELECT * FROM TABLA”
Se consideran distintas y no se aprovecha el SQL Area. Debe coincidir el texto exactamente, considerando mayúsculas y minúsculas, espacios, retornos de carro, nombre de parámetros, etc. Esto es debido a que se buscan dentro del SQL Area utilizando un hash de la sentencia, y un simple espacio (o cambiar una letra a mayúsculas) hace que el hash resultante sea distinto, por lo que no encontrará la sentencia dentro del SQL Area. Cuanto mayor sea el espacio del SQL Area, se realizarán menos compilaciones, planes de ejecución y
14
Unidad 3. “Configuración y Administración del espacio en disco”
análisis léxicos, por lo que la ejecución de las consultas será más rápida.
Redo cache cach e: almacena los registros de redo de las últimas operaciones realizadas. Estos registros se almacenan en los archivos de redo, que sirven para recomponer la base de datos en caso de error.
Dictionary cache: cache: almacena datos del diccionario de Oracle, para utilizarlos en los planes de ejecución, optimización de consultas, etc. Cuantos más datos quepan en esta zona, mayor probabilidad habrá de que el dato que necesitamos ya esté en memoria, y no sea necesario acceder a las tablas del diccionario para leerlo.
Archivos de inicialización
Además de estructuras de disco y de memoria, un servidor Oracle necesita ciertos archivos para poder ejecutarse. Estos archivos se establecen durante la creación de la base de datos, y se consultarán cada vez que se arranque la base de datos, por lo que deben estar disponibles. Básicamente podemos diferencias los tipos de archivos:
Control files: son archivos de control que se consultan cada vez que se arranca la base de datos. Indica datos como la localización de los datafiles, nombre de la base de datos.
Init file: es el archivo que contiene el parámetro de inicio de la base de datos (tamaño del bloque, tamaño del SGA, etc.)). Normalmente tiene el nombre INIT.ORA.
15
Unidad 3. “Configuración y Administración del espacio en disco”
Redo logs: estos archivos contienen un historial de todas las instrucciones que han sido lanzadas a la base de datos, para poder recuperarla en caso de fallo. No se utilizan durante la inicialización, sino durante toda la ejecución de la base de datos.
3. DEFINICIÓN Y CREACIÓN DEL ESPACIO ASIGNADO PARA CADA BASE DE DATOS Creación de una nueva cuenta de usuario.
Cree un usuario de base de datos con la sentencia CREATE USER. Para crear un usuario, debe tener el privilegio del sistema CREATE USER. Debido a que es un privilegio de gran alcance, un administrador de base de datos o administrador de seguridad suele ser el único usuario que tiene el privilegio CREATE sistema USUARIO. Ejemplo: Creación de una cuenta de usuario con los privilegios CREATE SESSION
CREATE USER jward IDENTIFIED BY password DEFAULT TABLESPACE data_ts QUOTA 100M ON test_ts QUOTA 500K ON data_ts TEMPORARY TABLESPACE temp_ts PROFILE clerk; GRANT CREATE SESSION TO jward;
16
Unidad 3. “Configuración y Administración del espacio en disco”
Un usuario recién creado no se puede conectar a la base de datos hasta que se le conceda al usuario los privilegios del sistema CREATE SESSION. SESSION. Así, inmediatamente después de crear la cuenta de usuario, use la instrucción SQL GRANT para otorgar al usuario estos privilegios. Si el usuario debe acceder a Oracle Enterprise Manager, también se debe otorgar al usuario el privilegio SELECT ANY DICTIONARY.
Especificar un nombre de usuario.
Dentro de cada base de datos, el nombre de usuario debe ser único con respecto a otros nombres de usuario y funciones. El usuario y el esquema no pueden tener el mismo nombre. Además, cada usuario tiene un esquema asociado. Dentro de un esquema, cada objeto de esquema debe tener un nombre único. A continuación, el texto
en
negrita
se
muestra
cómo
crear
el
nombre
de
usuario.
El usuario Jward se almacena en la base de datos con letras mayúsculas. Por ejemplo: CREATE USER jward IDENTIFIED BY password DEFAULT TABLESPACE data_ts QUOTA 100M ON test_ts QUOTA 500K ON data_ts TEMPORARY TABLESPACE temp_ts PROFILE clerk CONTAINER = CURRENT; SELECT USERNAME FROM ALL_USERS;
17
Unidad 3. “Configuración y Administración del espacio en disco”
Asignación de una contraseña al usuario.
El nuevo usuario debe autenticarse utilizando la base de datos. En este caso, el usuario que se conecta debe proporcionar la contraseña correcta a la base de datos para conectar con éxito. Para especificar una contraseña para el usuario, utilice la cláusula IDENTIFIED BY en la sentencia CREATE USER. CREATE USER jward IDENTIFIED BY password DEFAULT TABLESPACE data_ts QUOTA 100M ON test_ts QUOTA 500K ON data_ts TEMPORARY TABLESPACE temp_ts PROFILE clerk; Asignación de un espacio de tabla predeterminado del usuario.
Cada usuario debe tener un espacio de tabla por defecto. Cuando se crea un objeto esquema en el esquema del usuario y la declaración DDL no especifica un espacio de tablas para contener el objeto, Oracle Database almacena el objeto en el espacio de tablas de usuario por defecto. La configuración predeterminada para los espacios de tabla por defecto de todos los usuarios es el espacio de tablas SYSTEM. Si un usuario no crear objetos, y no tiene privilegios para hacerlo, entonces este ajuste por defecto estária bien. Sin embargo, si existe la posibilidad de crear cualquier tipo de objeto de un usuario, debe asignar específicamente al usuario un espacio de tabla predeterminado, como el espacio de tabla USERS. El uso de un espacio de tabla que no sea SYSTEM reduce la contención entre los objetos del diccionario de datos y objetos de usuario para los mismos archivos de datos. En general, no se debe almacenar datos de usuario en el tablespace SYSTEM.
18
Unidad 3. “Configuración y Administración del espacio en disco”
Al separar los datos de usuario de los datos del sistema, se reduce la probabilidad de problemas con el espacio de tablas SYSTEM, que puede en algunos casos provocar que toda la base de datos deje de funcional. Este espacio de tabla permanente por defecto no es utilizado por los usuarios del sistema, es decir, SYS, SYSTEM, y OUTLN, cuyo valor predeterminado tablas permanentes es SYSTEM. Un espacio de tablas designado como el espacio de tablas permanentes por defecto no se puede quitar. Para lograr este objetivo, primero debe designar a otro espacio de tabla como el espacio de tabla por defecto permanente. Usted puede utilizar la sentencia ALTER TABLESPACE SQL para modificar el tablespace permanente por defecto por otro espacio de tablas. Tenga en cuenta que esto afectará a todos los usuarios u objetos creados después de la instrucción ALTER DDL. Cuando se especifica el espacio de tabla por defecto para un usuario, especifique también una cuota en ese espacio de tablas.
Asignación de una cuota de espacio de tabla para el usuario.
Ud. puede asignar a cada usuario una cuota de espacio de tabla para cualquier espacio de tabla (excepto un espacio de tabla temporal). La asignación de una cuota se logra de la forma siguiente:
Los usuarios con privilegios al crear cierto tipo de objetos
pueden crear estos objetos en la tablaspace específica.
Oracle Database limita la cantidad de espacio que se puede
asignar para el almacenamiento de objetos de usuario en el espacio de tabla especificando el monto de la cuota.
19
Unidad 3. “Configuración y Administración del espacio en disco”
De forma predeterminada, el usuario no dispone de cuota en cualquier espacio de tablas en la base de datos. Si el usuario tiene el privilegio para crear un objeto de esquema, debe asignar una cuota para permitir al usuario crear objetos. Como mínimo, asignar a los usuarios una cuota para el espacio de tabla por defecto, y las cuotas adicionales para otros espacios de tabla en la que ellos puedan crear objetos. La siguiente sentencia CREATE USER asigna las siguientes cuotas para los test_ts y data_ts espacios de tabla:
CREATE USER jward IDENTIFIED BY password DEFAULT TABLESPACE data_ts QUOTA 100M ON test_ts QUOTA 500K ON data_ts TEMPORARY TABLESPACE temp_ts PROFILE clerk; Puede asignar a un usuario o bien cuotas individuales de una determinada cantidad de espacio en disco en cada espacio de tabla o una cantidad ilimitada de espacio de disco en todos los espacios de tabla. Las cuotas específicas impiden que los objetos de un usuario puedan utilizar demasiado espacio en la base de datos.
La restricción de los límites de cuota para objetos de usuario en un espacio de tabla.
Se puede restringir los límites de cuota para los objetos de usuario en un espacio de tabla mediante la instrucción SQL ALTER USER, para cambiar la cuota actual del usuario a cero. Después de que se le asigna una cuota de cero, los objetos del usuario en el espacio de tablas se mantienen, y el usuario todavía puede crear
20
Unidad 3. “Configuración y Administración del espacio en disco”
nuevos objetos, pero los objetos existentes no se asignarán a cualquier nuevo espacio. Por ejemplo, no se puede insertar datos en una de las tablas existentes de este usuario. La operación fallará enviando el mensaje ORA-1536 error de espacio.
4. BITACORAS EN ORACLE Permite guardar las transacciones realizadas sobre una base de datos en específico, de tal manera que estas transacciones puedan ser auditadas y analizadas posteriormente. Pueden obtenerse datos específicos de la transacción como son la Operación que se realizó, el Usuario de BD y Windows, Fecha, Maquina y Programa.
FIGURA 9. Proceso 9. Proceso de las transacciones en la BD. B D.
21
Unidad 3. “Configuración y Administración del espacio en disco”
Alertas
Registro y envío de notificaciones al momento en que se produzca un evento de modificación de datos en los sistemas de acuerdo a los criterios definidos por el usuario. Envió de las notificaciones al correo electrónico de los usuarios especificados para cada alerta, con posibilidad de envío de mensaje a un teléfono móvil. Diccionarios
Facilita la Documentación de las Tablas y Atributos de los Sistemas. Apoyo en el control de cambios del Sistema, al proporcionar diferencias entre la Base de Datos (BD) y Diccionario de Datos (DD) en relación a estructura de tablas y tablas que existen en el DD pero ya no existen en la BD’s y viceversa. Permite comparar
bases de datos entre diferentes ambientes de Producción, Pruebas y Desarrollo. Generación de los Scripts necesarios para mantener la consistencia entre la Base de Datos y el Diccionario de Datos.
FIGURA 10. Ejemplo 10. Ejemplo de una bitácora con diccionario de d e datos.
22
Unidad 3. “Configuración y Administración del espacio en disco”
La estructura más ampliamente usada para grabar las modificaciones de la base de datos es la Bitácora. Cada registro de la bitácora escribe una única escritura de base de datos y tiene lo siguiente: 1. Nombre de la transacción: transacción: Nombre de la transacción que realizó la operación de escritura. 2. Nombre 2. Nombre del dato: dato: El nombre único del dato escrito. 3. Valor antiguo: antiguo: El valor del dato antes de la escritura. nuevo: El valor que tendrá el dato después de la escritura. 4. Valor nuevo:
Existen otros registros de bitácora especiales para grabar sucesos importantes durante el proceso de transacción, tales como: < T1, inicio > < T1, x, v1, v2 > < T1, commit >
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.
23
Unidad 3. “Configuración y Administración del espacio en disco”
Ejemplo de una bitácora de instrucciones CREATE TABLE [dbo].[Bitacora] ( [BitacoraID] [int] IDENTITY (1, 1) NOT NULL , [EventType] [char] (14) NOT NULL , [Status] [int] NOT NULL , [EventInfo] [varchar] (1000) NOT NULL , [Usuario] [varchar] (20) NOT NULL , [Fecha] [smalldatetime] NOT NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[Bitacora] WITH NOCHECK ADD CONSTRAINT [DF_Bitacora_Usuario] DEFAULT (suser_sname()) FOR [Usuario], CONSTRAINT [DF_Bitacora_Fecha] DEFAULT (getdate()) FOR [Fecha]
Y, por otro lado, el trigger en la tabla lo definiría de la siguiente manera: /* Trigger de Monitoreo */ CREATE TRIGGER trig_tablabitacora ON TABLA FOR DELETE, INSERT, UPDATE AS
24
Unidad 3. “Configuración y Administración del espacio en disco”
BEGIN DECLARE @NUMERO INT INSERT INTO Bitacora (EventType,Status,EventInfo) exec sp_executesql N’DBCC INPUTBUFFER( @i )’, N’@i int’,
@i=@@spid END 5. PARTICIONES Beneficios Del Particionamiento
El particionamiento puede brindar grandes beneficios a una amplia variedad de aplicaciones al mejorar la capacidad de administración, el desempeño y la disponibilidad. No es inusual que el particionamiento mejore mucho más el desempeño de ciertas operaciones de mantenimiento y consultas. Además, el particionamiento puede reducir r educir enormemente el costo total de propiedad de los datos, al utilizar un enfoque de “archivo por niveles” para mantener la información
relevante más antigua aún online en dispositivos de almacenamiento de bajo costo. Oracle Partitioning brinda un enfoque simple, efectivo, e incluso más avanzado al momento de considerar la Administración del Ciclo de Vida de la Información para grandes entornos. El particionamiento también permite a los diseñadores y administradores de base de datos abordar algunos de los problemas más difíciles planteados por las aplicaciones de vanguardia. Es una herramienta clave para crear sistemas de múltiples terabytes o sistemas con requisitos de disponibilidad extremadamente altos.
25
Unidad 3. “Configuración y Administración del espacio en disco”
Fundamentos del Particionamiento
El particionamiento permite subdividir una tabla, un índice o una tabla organizada por índices en partes más pequeñas. Cada parte del objeto de base de datos se denomina partición. Cada partición tiene su propio nombre, y puede, opcionalmente, tener sus propias características de almacenamiento. Desde la perspectiva de un administrador de base de datos, un objeto particionado tiene múltiples partes que pueden administrarse ya sea de manera conjunta o individual. Esto da al administrador una flexibilidad considerable en la administración del objeto particionado. No obstante, desde la perspectiva de la aplicación, una tabla particionada es idéntica a una tabla no particionada; no se necesitan modificaciones cuando se accede a una tabla particionada utilizando comandos SQL DML.
FIGURA 11. Perspectiva 11. Perspectiva del DBA y la aplicación de una tabla particionada. particionada .
Los objetos de base de datos - tablas, índices y tablas organizadas por índices son particionadas utilizando una 'clave de partición', un grupo de columnas que determinan en qué partición residirá una fila determinada. Por ejemplo, la tabla de ventas mostrada en la figura 1 se particiona por fecha de ventas utilizando una estrategia de particionamiento mensual; las tablas aparecen ante la aplicación como tablas únicas y “normales”. No obstante, el DBA puede administrar cada partición
26
Unidad 3. “Configuración y Administración del espacio en disco”
mensual
individualmente,
posiblemente
utilizando
distintos
niveles
de
almacenamiento, aplicando la compresión de la tabla en los datos más antiguos, o almacenar todos los rangos de datos más antiguos en espacios de tabla con modo “solo lectura”.
Independientemente de la estrategia de particionamiento de índices seleccionada, un índice puede acoplarse o no a la estrategia de particionamiento subyacente de la tabla subyacente. La estrategia de particionamiento de índices adecuada es elegida sobre la base de los requisitos comerciales, haciendo que el particionamiento se ajuste perfectamente para soportar cualquier clase de aplicación. Oracle Database 11g distingue tres tipos de índices particionados. • Índices locales: locales: Un índice local es un índice en una tabla particionada que se
acopla con la tabla particionada subyacente, 'heredando' la estrategia de partición de la tabla. Consecuentemente, cada partición de un índice local corresponde a una – y solo una – partición de la tabla subyacente. El acoplamiento permite el mantenimiento optimizado de la partición; por ejemplo, cuando se da de baja una partición de tabla, Oracle simplemente debe dar de baja también la partición del índice correspondiente. No se requiere ningún mantenimiento costoso de índices. Los índices locales son más comunes en los entornos de depósito de datos. • Índices Particionados Globales: Globales: Un índice particionado global es un índice
en una tabla particionada o no particionada que se particiona utilizando una clave de partición o estrategia de partición distinta de la de la tabla. Los índices globales particionados pueden particionarse utilizando un rango de particionamiento o un particionamiento aleatorio y no se acoplan a la tabla subyacente. Por ejemplo, una tabla podría estar particionada por rangos, por mes y tener doce particiones, mientras que un índice en esa tabla puede estar particionado por rangos utilizando una clave de partición diferente y tener una cantidad de d e particiones p articiones distintas. Los índices índic es globales particionados son más comunes para OLTP que para los entornos de depósito de datos.
27
Unidad 3. “Configuración y Administración del espacio en disco”
Índices Globales No Particionados: Un índice global no particionado es esencialmente idéntico a un índice en una tabla no particionada. La estructura del índice no está particionada y no se acopla con la tabla subyacente. En los entornos de depósito de datos, el uso más frecuente de los índices no particionados es imponer restricciones clave primarias. Los entornos OLTP, por otra parte, dependen mayormente de los índices globales no particionados. Asimismo, Oracle brinda un grupo integral de comandos SQL para administrar las tablas de particionamiento. Estos incluyen comandos para incorporar nuevas particiones, extraer, dividir, mover, fusionar, truncar y posiblemente comprimir particiones. Particionamiento para la Capacidad de Administración
Oracle Partitioning permite que las tablas y lo índices se particionen en unidades más pequeñas y administrables, brindando a los administradores de bases de datos la capacidad de focalizarse en el enfoque de "dividir y conquistar " para la administración de datos. Con el particionamiento, las operaciones de mantenimiento pueden focalizarse a partes particulares de tablas. Por ejemplo, un administrador de base de datos podría comprimir una sola partición que contenga los datos de una tabla del año 2006, en lugar de comprimir toda la tabla. Para las operaciones de mantenimiento en todo un objeto de la base de datos, es posible realizar estas operaciones por partición, dividiendo así el proceso de mantenimiento en partes más manejables. Un uso típico del particionamiento para la capacidad de administración es soportar el proceso de carga de 'ventanas rotativas' en el depósito de datos. Supongamos que un DBA carga nuevos datos en una tabla semanalmente. Esa tabla podría ser particionada por rangos de manera m anera que cada partición contenga una u na semana de datos. El proceso de carga consiste simplemente en la incorporación de una nueva
28
Unidad 3. “Configuración y Administración del espacio en disco”
partición. Agregar una sola partición es mucho más efectivo que modificar toda la tabla, ya que el DBA no necesita modificar ninguna otra partición. Otra ventaja de utilizar el particionamiento surge al momento de eliminar datos; se puede extraer una partición completa, lo cual es más efectivo y rápido que eliminar cada fila individualmente. Particionamiento para el Desempeño
Al limitar la cantidad de datos a ser examinados o sobre los cuales se trabajará, el particionamiento ofrece una cantidad de beneficios de desempeño. Estas características incluyen: • Depuración por Particionamiento: La depuración por particionamiento (es
decir, eliminación de particionamiento) es la manera más simple y también la más sustancial de mejorar el desempeño utilizando el particionamiento. La depuración por particionamiento a menudo puede mejorar mucho más el desempeño des empeño de las consultas. Por ejemplo, supongamos que una aplicación contiene una tabla ORDERS con un historial de pedidos, y esta tabla ha sido particionada por semana. Una consulta que solicita los pedidos de una sola semana solo tendría acceso a una sola partición de la tabla ORDERS. Si la tabla tuviera 2 años de datos históricos, esta consulta accedería a solo una partición, en vez de 140 particiones. Esta consulta posiblemente podría ejecutarse 100 veces más rápido debido simplemente a la depuración por particionamiento. La depuración por particionamiento trabaja con todas las demás características de desempeño de Oracle. Oracle utilizará la depuración por particionamiento junto con cualquier técnica de indexación, técnica de unión o método de acceso paralelo. Uniones por partición: El particionamiento también puede mejorar el desempeño de las uniones de múltiples tablas utilizando una técnica conocida como uniones por partición. Las uniones por partición pueden aplicarse en dos tablas que se unirán, y al menos una de estas tablas se particiona con la clave de unión. Las uniones
29
Unidad 3. “Configuración y Administración del espacio en disco”
por partición dividen las uniones más grandes en uniones más pequeñas de grupos de datos 'idénticos’ para las tablas unidas. El término 'idéntico' aquí se utiliza para
definir exactamente el mismo grupo de valores para las claves de particionamiento en ambos lados de la unión, garantizando así que solo la unión de estos grupos de datos 'idénticos' producirá un resultado y que el otro grupo de datos no deberá ser considerado. Oracle utiliza la técnica de tablas (físicas) que ya se encuentran igualmente particionadas para la unión o redistribuye de manera transparente (“repartición”) una sola tabla en tiempo de ejecución para crear grupos de datos
igualmente particionados y relacionar el particionamiento de la otra tabla, completando toda la unión en menos tiempo. Esto ofrece importantes beneficios de desempeño tanto para una ejecución paralela como en serie. Particionamiento para la Disponibilidad
Los objetos de base de datos particionadas ofrecen independencia de particiones. Esta característica de independencia de particiones puede ser una parte importante de una estrategia de alta disponibilidad. Por ejemplo, si una partición de una tabla particionada no está disponible, todas las demás particiones de la tabla permanecen en línea y están disponibles. La aplicación puede continuar ejecutando consultas y realizando transacciones frente a esta tabla particionada, y estas operaciones de base de datos se ejecutarán exitosamente si no necesitan acceder a la partición que no se encuentra disponible. El administrador de base de datos puede especificar que cada partición se almacene en un espacio de tabla separado; esto permitiría al administrador realizar operaciones
de
backup
y
recuperación
en
cada
partición
individual,
independientemente de otras particiones en la tabla. Por consiguiente, en caso de que ocurra un desastre, la base de datos podría recuperarse solo con las particiones que incluyen los datos activos, y luego los datos inactivos de las demás particiones podrían recuperarse a su debido tiempo, reduciendo así el tiempo de baja del sistema.
30
Unidad 3. “Configuración y Administración del espacio en disco”
Asimismo, el particionamiento puede reducir el tiempo de baja programado. Las ventajas de desempeño brindadas por el particionamiento pueden permitir a los administradores de base de datos completar las operaciones de mantenimiento sobre los objetos de grandes bases en ventanas relativamente pequeñas. Particionamiento – Modelo Modelo Para Su Empresa
Oracle Database 11g ofrece el conjunto más completo de estrategias de particionamiento, permitiendo al cliente alinear de manera óptima la subdivisión de datos con los actuales requerimientos de negocio. Todas las estrategias de particionamiento dependen de métodos fundamentales de distribución de datos que pueden ser utilizados para una sola tabla (un solo nivel) o un conjunto de tablas particionadas. Asimismo, Oracle brinda una variedad de extensiones de particionamiento, aumentando la flexibilidad para la selección de la clave de partición, brindando características para la creación de partición automática a medida que sea necesario, y ofreciendo asesoramiento de estrategias de partición para objetos no particionados. 6. ESPACIOS PRIVADOS Un «espacio privado» permite que los administradores y redactores gestionen el conjunto de datos del sitio. Algunas bases de datos tienen estos espacios privados llamados comúnmente paneles de control, que son formularios que aparecen al abrir la base de datos. Los paneles de control sirven de "puerta principal" o "recibidor" de una base de datos en el sentido de que dirigen a las personas hacia determinadas tareas, como introducir o buscar datos. Sirven también para mantener alejados a los usuarios de las tablas que contienen los datos en tiempo real. Cuando reciba una base de datos, debe adentrarse más allá del panel de control para averiguar cómo están estructurados los datos, pero merece la pena echar un vistazo inicial al panel de control. Le puede ofrecer algún indicio sobre las tareas que el diseñador de la base de datos consideró que realizarían los usuarios
31
Unidad 3. “Configuración y Administración del espacio en disco”
habitualmente con los datos. Puede hacer clic en los vínculos del panel de control para ver qué objetos, como formularios e informes, inf ormes, abren. Los DBMS se basan en archivos para almacenar datos, y estos archivos, o conjuntos de datos, residen en medios de almacenamiento, o dispositivos. Una buena parte del trabajo del DBA implicará la planificación para el almacenamiento real de la base de datos. Algunas tecnologías de almacenamiento son más adecuadas que otras. Sin embargo, la naturaleza mecánica de la unidad de disco los hace más vulnerables al fracaso de los componentes de otro equipo. Además, las formas en que las unidades de disco son utilizados por las bases de datos pueden hacer que la gestión del almacenamiento impredecibles, como la barra lateral "Modern DBMS de uso de disco“ Puede usarse RAID para mejorar la se guridad de los datos.
Para aplicaciones de misión crítica la integridad de los datos puede ser más importante que la disponibilidad de datos. Si el soporte es poco fiable y un fallo de las causas de corrupción de datos, los datos perdidos puede ser más de un problema que el tiempo de inactividad. Es imperativo, por tanto, que las soluciones de almacenamiento de base de datos para protegerlos a toda costa. La recuperación de datos desde medios de almacenamiento lleva mucho más tiempo en completarse que la recuperación de datos desde la memoria caché o la memoria. El rendimiento de la base de datos depende de la entrada y salida a disco. La cantidad de datos almacenados es mayor que nunca antes, y los datos se almacenados por más tiempo. Algunos DBMS permiten al tamaño de los archivos temporales de expandirse y contraerse de forma automática. Dependiendo del tipo y la naturaleza de las operaciones de base de datos en proceso, esta fluctuación puede provocar picos de uso del disco El crecimiento de la capacidad de almacenamiento aumenta aún más la complejidad de la gestión de datos y bases de datos. Muchas organizaciones están implementando nuevas tecnologías de almacenamiento, tales como almacenamiento en red (NAS) y redes de área de almacenamiento (SAN), para ayudar a controlar la cantidad cada vez mayor de almacenamiento necesario para los usos modernos. La gestión del almacenamiento en el entorno dinámico de hoy es una tarea difícil DBA.
32
Unidad 3. “Configuración y Administración del espacio en disco”
Hay muchos problemas de almacenamiento que deben ser resueltos antes de que un DBA pueda crear una base de datos. Uno de los temas más importantes es la cantidad de espacio para permitir la base de datos. El cálculo espacial debe tener en cuenta no sólo tablas, índices, sino también, y dependiendo del DBMS, el registro de transacciones. Cada una de estas entidades probablemente requerirá un archivo separado o conjunto de datos, para el almacenamiento persistente. El DBA debe separar en diferentes discos a los archivos para:
7. SEGMENTOS
Descripción de los Segmentos
Un segmento es un conjunto de extensiones que contiene todos los datos para un espacio de tabla., dentro de una estructura de almacenamiento lógico. Por ejemplo, Base de Datos de Oracle asigna una o más extensiones para formar el segmento de datos para una tabla. La base de datos también asigna una o más extensiones para formar
el
segmento
de
índice
de
una
tabla.
Como se explica en "Gestión del espacio lógico", Base de Datos Oracle gestiona el espacio segmento de forma automática o manual. En esta sección se asume
el
uso
de
ASSM.
Segmentos de usuarios
Un segmento de datos individual en una base de datos almacena los datos para un objeto de usuario Hay diferentes tipos de segmentos. Ejemplos de segmentos de usuarios •
Tabla,
incluyen: tabla
de
particiones,
o
clúster
mesa
33
Unidad 3. “Configuración y Administración del espacio en disco”
•
Partición
•
LOB
Partición
de
LOB
índice
o
o
un
índice
Cada objeto sin particiones y partición objeto se almacena en su propio segmento. Por ejemplo, si un índice tiene cinco particiones, luego cinco segmentos contener
los
datos
de
índice.
Creación del Segmento Usuario
De forma predeterminada, la base de datos utiliza la creación de segmentos diferida para actualizar sólo los metadatos de base de datos al crear tablas e índices. A partir de Oracle Database 11g Release 2 (11.2.0.2), la base de datos también remite creación segmento al crear particiones. Cuando un usuario inserta la primera fila en una tabla o partición de la base de datos crea segmentos de la tabla o partición, sus columnas LOB, y sus índices. Creación de segmentos diferido le permite evitar el uso de recursos de base de datos sin necesidad. Por ejemplo, la instalación de una aplicación puede crear miles de objetos, el consumo de espacio en disco. Muchos de estos objetos nunca podrían utilizarse. Usted puede utilizar el paquete DBMS_SPACE_ADMIN para manejar segmentos de objetos vacíos. A partir de Oracle Database 11g Release 2 (11.2.0.2), puede
utilizar
este
paquete
PL
/
SQL
para
hacer
lo
siguiente:
• materializarse manualmente segmentos de mesas vacías o particiones que no tienen
segmentos
creados
• Retir ar ar los segmentos de mesas vacías o particiones que actualmente tienen un
segmento
vacío
asignado
Para ilustrar mejor la relación entre la creación de objetos y la creación de segmentos, se supone que la creación de segmentos diferido está deshabilitada. Se crea una tabla de la siguiente manera:
34
Unidad 3. “Configuración y Administración del espacio en disco”
CREATE TABLE test_table (my_column NUMBER);
Figura 12. Creación de un segmento del usuario.
Cuando se crea una tabla con una clave PRIMARY KEY o UNIQUE, Oracle Database crea automáticamente un índice para esta clave. Una vez más se supone que la creación de segmentos diferido está deshabilitada. Se crea una tabla de la siguiente manera:
CREATE TABLE lob_table (my_column NUMBER PRIMARY KEY, clob_column CLOB);
Figura 13 muestra que los datos para lob_table se almacenan en un segmento, mientras que el índice creado implícitamente está en un segmento diferente. Además, los datos CLOB se almacenan en su propio segmento, al igual que su índice CLOB asociado (consulte "Los LOB internas"). Por lo tanto, la CREATE TABLE sentencia tiene
como
resultado
la
creación
de
cuatro
segmentos
diferentes.
35
Unidad 3. “Configuración y Administración del espacio en disco”
Figura 13. Múltiples 13. Múltiples segmentos.
La base de datos asigna una o más extensiones cuando se crea un segmento. Parámetros de almacenamiento para el objeto de determinar la asignación de las extensiones para cada segmento (ver "Parámetros de almacenamiento de Extensión"). Los parámetros afectan a la eficiencia de recuperación de datos y de almacenamiento para
el
segmento
de
datos
asociado
con
el
objeto.
Los segmentos temporales
Cuando se procesa una consulta, Oracle Database menudo requiere espacio de trabajo temporal para las etapas intermedias de la ejecución de la sentencia SQL. Las operaciones típicas que pueden requerir un segmento temporal incluyen la clasificación, el hash y combinación de mapas de bits. Durante la creación de un índice, de base de datos Oracle también coloca los segmentos de índice en segmentos temporales y luego los convierte en segmentos permanentes cuando el índice es completo.
36
Unidad 3. “Configuración y Administración del espacio en disco”
Base de datos de Oracle no crea un segmento temporal si una operación se puede realizar en la memoria. Sin embargo, si el uso de la memoria no es posible, entonces la base de datos asigna automáticamente un segmento temporal en el disco. La asignación de segmentos temporales para consultas
Base de datos Oracle asigna segmentos temporales para las consultas, según sea necesario durante una sesión de usuario y los deja caer cuando la consulta completa. Los cambios en los segmentos temporales no se registran en el registro de rehacer en línea, a excepción de las operaciones de gestión de espacio en el segmento temporal
(véase
"Visión
general
de
la
Redo
Log
Online").
La base de datos crea segmentos temporales en el espacio de tablas temporal asignado al usuario. Las características de almacenamiento predeterminadas del espacio de tabla determinan las características de las extensiones en el segmento temporal. Debido a la asignación y cancelación de asignación de segmentos temporales se produce con frecuencia, lo mejor es crear por lo menos un espacio de tabla especial para segmentos temporales. La base de datos distribuye E / S en disco y evita la fragmentación del sistema y otros espacios de tabla con segmentos temporales. La asignación de segmentos temporales para pa ra tablas e índices temporales
Base de datos Oracle también puede asignar segmentos temporales para las tablas temporales y sus índices. Las tablas temporales tienen datos que existen sólo para la duración de una transacción o sesión. Cada sesión tiene acceso sólo las extensiones asignadas para la sesión y no se puede acceder a las extensiones asignadas
para
otras
sesiones.
Oracle Database asigna segmentos de una tabla temporal cuando se produce el primer INSERT en la tabla. La inserción se puede producir de forma explícita o por CREATE TABLE COMO SELECT. La primera INSERT en una tabla temporal asigna a los segmentos de la tabla y sus índices, crea la página raíz de los índices, y asigna
los
segmentos
LOB.
37
Unidad 3. “Configuración y Administración del espacio en disco”
Segmentos para una tabla temporal se asignan en un espacio de tablas temporal del usuario actual. Supongamos que la tabla temporal asignado a usuario1 es temp1 y el espacio de tablas temporal para user2 es temp2. En este caso, usuario1 almacena datos temporales en los segmentos Temp1, mientras user2 almacena datos temporales en
los
segmentos
TEMP2.
Deshacer Segmentos
Oracle Database mantiene un registro de las acciones de las transacciones, conocidos colectivamente como datos de deshacer. Oracle Database utiliza deshacer para
hacer
•
Retrotraer
•
una
Recuperar
• •
lo
una
Proporcionar Llevar
a
cabo
algunas
siguiente: transacción
activa
transacción
terminada
coherencia
leer
operaciones
de
flashback
lógicas
Oracle base de datos almacena datos de deshacer el interior de la base de datos en lugar de en los registros externos. Deshacer los datos se almacenan en bloques que se actualizan al igual que los bloques de datos, con los cambios a estos bloques de generación de redo. De esta manera, puede acceder a la base de datos Oracle de manera eficiente datos de deshacer sin necesidad de leer los registros externos. Deshacer los datos se almacenan en un espacio de tabla undo. Oracle Database proporciona un mecanismo completamente automatizado, conocido como automática deshacer modo de gestión, para la gestión de segmentos de deshacer y el espacio
en
un
tablespace
de
deshacer.
38
Unidad 3. “Configuración y Administración del espacio en disco”
Deshacer Segmento y Operaciones
Cuando se inicia una transacción, la base de datos se une (asigna) la transacción a un segmento de deshacer, y por lo tanto a una tabla de transacciones, en el espacio de tablas deshacer actual. En raras ocasiones, si la instancia de base de datos no tiene un espacio de tabla deshacer designado, entonces la transacción se une al sistema de deshacer segmento.
Transacciones activas múltiples pueden escribir al mismo tiempo para el mismo segmento de deshacer o a diferentes segmentos. Por ejemplo, las transacciones T1 y T2 pueden tanto escribir para deshacer segmento U1, T1 o pueden escribir a U1, mientras
que
T2
escribe
deshacer
segmento
de
U2.
Conceptualmente, la extensión de un segmento de deshacer, forma un anillo. Transacciones de escritura a uno deshacer medida, y luego a la siguiente medida en el anillo, y así sucesivamente en forma cíclica. La figura 12-20 muestra dos transacciones T1 y T2, que comienzan por escrito en el tercer grado (E3) de un segmento de deshacer y continuar escribiendo hasta el cuarto grado (E4).
Figura 14. Anillo de extensiones asignadas en un segmento Deshacer.
39
Unidad 3. “Configuración y Administración del espacio en disco”
La memoria compartida contiene todos los datos intervenidos, como: • Grupo de memorias intermedias. • Tabla de bloqueos. • Memoria intermedia del registro, que contiene las entradas del registro que
esperan a ser volcadas en el almacenamiento estable. • Planes de consulta en caché, que se pueden reutilizar si se envía de nuevo la
misma consulta. La exclusión mutua se puede implementar por medio de funciones del sistema operativo
llamadas
semáforos.
Implementaciones
alternativas,
con
menos
sobrecargas, utilizan instrucciones atómicas especiales soportadas por el hardware de la computadora; un tipo de instrucción atómica comprueba una posición de la memoria y la establece a uno automáticamente. Los mecanismos de exclusión mutua también se utilizan para implementar pestillos.
Figura 15. Funcionamiento 15. Funcionamiento de una PGA.
40
Unidad 3. “Configuración y Administración del espacio en disco”
8. MEMORIA COMPARTIDA No toda la memoria RAM en Oracle es de memoria compartida. Cuando se inicia un proceso de usuario, este proceso tiene un área privada de RAM, que se utiliza para ordenar los resultados de SQL y la gestión se une especial llamado "hash" se une. Esta RAM privada que se conoce como el Área de Programa Global (PGA). Cada individuo área de PGA se asigna la memoria cada vez que un nuevo usuario se conecta
a
la
base
de
datos.
Oracle Database 10g se encargará de la PGA para usted si se establece el parámetro pga_aggregate_target. Le recomendamos que permita a Oracle para configurar estas zonas, y sólo configurar el parámetro pga_aggregate_target. El PGA puede ser fundamental para el rendimiento, especialmente si la aplicación está haciendo un gran número de clases. Operaciones de ordenación producirse si utiliza ORDER BY y GROUP BY comandos en las instrucciones SQL.
9. MULTIPLES INSTANCIAS La instancia en Oracle describe varios procesos residentes en la memoria del computador(es) y un área de memoria compartida por aquellos procesos. En arquitecturas de bases de datos tales como, Microsoft SQL Server y IBM BD2, la palabra instancia indica una colección de bases de datos que comparten recursos de memoria en común, o sea, la relación entre instancia y bases de datos es 1 a N. Pero la relación entre la instancia de Oracle y la base de datos es 1 a 1 o n a 1. Cuando hay una relación N a 1, la configuración es llamada RAC (Real Application CLuster), donde la base de datos reside en discos compartidos y las instancias en múltiples computadores anexados a la base de datos.
41
Unidad 3. “Configuración y Administración del espacio en disco”
La instancia de Oracle es el motor que procesa los requerimientos de datos desde la base de datos. Está compuesta por procesos en primer plano, en segundo plano y un área de memoria compartida (SGA). 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. Instancia De Oracle
La integran los procesos “background” y la SGA
Abre una y sólo una BDO, y permite acceder acced er a ella.
Nota: con Oracle Real Application Cluster (RAC), más de una
instancia usarán la misma BD.
En
la
máquina
donde
reside
el
servidor
Oracle,
variable ORACLE_SID identifica a la instancia con la que estamos trabajando. Vistas:
V$DATABASE (Base de datos).
V$INSTANCE (Instancia).
V$SGA (SGA).
V$SGAINFO (Gestión dinámica de la SGA).
V$SGASTAT (SGA detallada).
V$BUFFER_POOL (Buffers en la caché de datos)
V$SQLAREA (Sentencias SQL).
V$PROCESS (Procesos).
V$BGPROCESS (Procesos background).
V$DATAFILE (Ficheros de datos de la BD).
V$CONTROLFILE (Ficheros de control de la BD).
V$LOGFILE (Ficheros redo log de la BD).
DBA_TABLESPACES (Tablespaces de la BD).
la
42
Unidad 3. “Configuración y Administración del espacio en disco”
10. CONCLUSIONES
43
Unidad 3. “Configuración y Administración del espacio en disco”
11. REFERENCIAS
Gómez Mendoza, Angélica (2004). Bitacora. Consultado el 18 de noviembre del 2013. Recuperado de: http://www.estructurayprogramacion.com/ de: http://www.estructurayprogramacion.com/ Serios Gómez, Rodrigo (2008). (2008). Ciencias y tecnologias. tecnologias. Consultado el 17 de noviembre de 2013. Disponible en: http://www.jorgesanchez.net/bd/abd/abd1.pdf en: http://www.jorgesanchez.net/bd/abd/abd1.pdf Sánchez, Jorge (2003). Particionamiento (2003). Particionamiento de Oracle Database 11g. Consultado el 17 de noviembre de 2013. Disponible en: http://www.jorgesanchez.net/bd/arquOracle.pdf A. Sanabria O, John. (2010). Notas sobre la instalación de ORACLE. Consultado el 19 de noviembre del 2013. Recuperado de: ftp://ftp.inf.utfsm.cl/pub/Linux/Docs/LuCaS/Otros/00-CAOS/porrevisar/notasinstalaci%F3n-oracle.html Negrete Sánchez, Claudia (2004). Estructuras y programación. Consultado el 16 de noviembre del 2013. Recuperado de: http://www.estructurayprogramacion.com/ de: http://www.estructurayprogramacion.com/
44