Está en la página 1de 16

Traducido del inglés al español - www.onlinedoctranslator.

com

Oracle para principiantes Página : 1

5. CAMBIO DE ESTRUCTURA Y DATOS

Alterar la estructura de una mesa

Dejar caer una mesa

Manipular datos
Transacción
Cierre
Leer consistencia
Resumen
Ejercicios

Alterando la estructura de una mesa


Es posible modificar la estructura de la tabla incluso después de crearla. El comando ALTER TABLE se utiliza
para alterar la estructura de la tabla.

Las siguientes son las posibles alteraciones

Agregar una nueva columna

Agregar una nueva restricción de nivel de tabla

Aumentar y disminuir el ancho de una columna

Cambiar el tipo de datos de la columna

Dejar caer una columna

Eliminar una restricción


Deshabilitar una restricción

Habilitación de una restricción deshabilitada

Srikanthtechnologies.com
Oracle para principiantes Página : 2

La siguiente es la sintaxis del comando ALTER TABLE.

Sintaxis de ALTER TABLE

ALTER TABLE nombre de tabla


[AGREGAR (especificación de columna)]
[MODIFICAR (especificación de columna)] [DROP
nombre-restricción [CASCADE]
| columna [RESTRICCIONES EN CASCADA]
[COLUMNA NO UTILIZADA [COLUMNA]] [COLUMNA
NO UTILIZADA ESTABLECIDA]
[HABILITAR | DISABLE nombre-restricción]

Examinemos ahora varios ejemplos usando el comando ALTER TABLE. Es importante señalar que algunas
posibilidades son aplicables solo cuando se cumplen ciertas condiciones. Estos si y peros deben
recordarse al modificar la estructura de la tabla.

Agregar una nueva columna o restricción


Siempre es posible agregar una nueva columna a una tabla existente. Sin embargo, si se va a agregar
una columna a una tabla que ya contiene filas, algunas opciones no están disponibles.

Para agregar una nueva columna CAT (categoría) a la tabla CURSOS, ingrese lo siguiente:

Cursos ALTER TABLE


AÑADIR (cat varchar2 (5));

No es posible dar ninguna restricción que no se satisfaga con los datos existentes. Por ejemplo, no es
posible agregar CAT como una columna NOT NULL ya que Oracle inicializa la columna CAT en todas las
filas con valor NULL. Vea la siguiente instantánea de la pantalla.

SQL> alterar cursos de tabla


2 add (cat varchar2 (5) no nulo); alterar cursos
de mesa
*
ERROR en la línea 1:
ORA-01758: la tabla debe estar vacía para agregar la columna obligatoria (NO NULA)

Srikanthtechnologies.com
Oracle para principiantes Página : 3

Sin embargo, es posible tener una restricción NOT NULL en los siguientes casos:

Si se usa la opción DEFAULT para especificar el valor predeterminado para la columna

Cuando la tabla está vacía.

El siguiente ejemplo funcionará ya que la opción DEFAULT se utiliza para especificar el valor predeterminado.

modificar cursos de tabla agregar (cat varchar2 (5) predeterminado 'prog' no nulo);

Puede agregar una restricción de tabla. Una vez que se crea la tabla, no es posible agregar restricciones que no
sean NOT NULL a las columnas de la tabla. Sin embargo, es posible agregar cualquier restricción a nivel de tabla
de la siguiente manera:

alterar cursos de mesa


añadir (restricción cursos_cat_chk comprobar (longitud (gato)> = 2))

Veremos más sobre funciones como la longitud más adelante en este libro. La restricción anterior
especifica que la columna CAT debe tener al menos dos caracteres. Se agrega como una restricción
de tabla, ya que no es posible agregar la restricción CHECK en el nivel de columna a la columna que
ya existe.

Modificar atributos de columnas existentes


También es posible modificar ciertos atributos de una columna existente. Las siguientes son posibles
modificaciones.

Aumentando la longitud de la columna


Disminuya la longitud de la columna solo cuando la columna esté vacía.

Cambie el tipo de datos de la columna solo cuando la columna esté vacía.

Añadiendo restricción NOT NULL. No se puede agregar ninguna otra restricción a la columna. Sin embargo, es

posible agregar restricciones a nivel de tabla. Consulte la sección anterior.

Para aumentar el tamaño de la columna CAT, ingrese lo siguiente:

alterar cursos de mesa


modificar (cat varchar2 (10));

Srikanthtechnologies.com
Oracle para principiantes Página : 4
Puede disminuir el ancho e incluso cambiar el tipo de datos de la columna si la columna está vacía. Eso
significa que si ninguna fila tiene ningún valor para la columna que se modifica.

Eliminar una restricción


Se utiliza para eliminar las restricciones definidas en la tabla.

Para eliminar una restricción, se requiere el nombre de la restricción. Puede usar la vista
de diccionario de datos USER_CONSTRAINTS para obtener la lista de restricciones.

alterar los cursos de la tabla dejar de restringir cursos_cat_chk;

Opción CASCADE
No puede eliminar una restricción ÚNICA o CLAVE PRIMARIA que sea parte de una restricción de integridad
referencial sin eliminar también la clave externa correspondiente. Para eliminar la restricción PRIMARY KEY o
UNIQUE junto con la restricción REFERENCES, use la opción CASCADE.

Para eliminar la restricción CLAVE PRIMARIA de ESTUDIANTES junto con la restricción relacionada, haga lo siguiente.

alterar cursos de mesa


eliminar la cascada de claves primarias;

Nota: Puede obtener información sobre todas las restricciones utilizando la vista de diccionario de datos
USER_CONSTRAINTS.

Dejar caer una columna


Por primera vez, Oracle8i ha proporcionado un comando para eliminar una columna de la tabla. Hasta Oracle8,
soltar una columna es una tarea muy larga, ya que no había una forma directa de soltar una columna. Oracle8i
ha proporcionado una nueva opción con el comando ALTER TABLE para eliminar una columna: DROP COLUMN.

Real, tiene dos opciones cuando desea eliminar una columna.

O puede eliminar la columna no deseada de inmediato. Todos los datos relacionados con la
columna que se elimina se eliminarán de inmediato.
O puede marcar la columna para eliminarla y eliminarla en una etapa posterior. Dado que la columna
está marcada para descartarse, se considera descartada. Pero los datos de la columna permanecerán
hasta que la columna se elimine físicamente.

Srikanthtechnologies.com
Oracle para principiantes Página : 5

La segunda opción es especialmente útil considerando el hecho de que la caída de una columna lleva
mucho tiempo y si se hace cuando la carga en el sistema es alta, afectará severamente el rendimiento del
sistema. Por lo tanto, puede marcar una columna para soltarla y luego soltarla cuando la carga del
sistema sea baja.

Para eliminar la columna CAT de la tabla COURSES, ingrese lo siguiente:

alterar los cursos de la tabla quitar el gato de la columna;

Si la columna que se quita es una CLAVE PRIMARIA o una clave ÚNICA a la que hace referencia una
clave externa, entonces no es posible quitar la columna. Pero es posible si se usa la opción
RESTRICCIONES EN CASCADA. La opción CASCADE CONSTRAINTS elimina todas las restricciones que
dependen de la columna que se elimina.

Para eliminar la columna FCODE de la tabla FACULTY junto con todas las restricciones dependientes, ingrese:

alterar las restricciones de cascada de fcode de columna de caída de profesores de tabla;

Nota: Cuando suelta una columna ÚNICA o CLAVE PRIMARIA, Oracle descarta automáticamente el índice
que crea para imponer la singularidad.

La opción SET UNUSED del comando ALTER TABLE se usa para marcar una columna para descartarla. Pero la columna no
se elimina físicamente. Sin embargo, la columna se trata como eliminada. Una vez que una columna está marcada como
SIN UTILIZAR, no se puede acceder a ella.

El siguiente ejemplo marca la columna CAT o la tabla COURSES como no utilizada.

alterar los cursos de la tabla fijar el gato de la columna no utilizado;

Las columnas que están marcadas para su eliminación se pueden eliminar físicamente usando la opción DROP
UNUSED COLUMNS del comando ALTER TABLE de la siguiente manera:

alterar los cursos de la tabla eliminar las columnas no utilizadas;

Nota: Podemos ver la cantidad de columnas que están marcadas para su eliminación usando la vista de diccionario
de datos USER_UNUSED_COL_TABS. USER_TAB_COLUMNS proporciona información sobre las columnas existentes
de una tabla.

Nota: Hasta que una columna se elimine físicamente de la tabla, se cuenta como una columna de la
tabla y se cuenta para el límite absoluto de 1000 columnas por tabla.

Srikanthtechnologies.com
Oracle para principiantes Página : 6

Habilitación y deshabilitación de restricciones


ALTER TABLE se puede utilizar para habilitar y deshabilitar restricciones sin eliminarlas. Cuando una
restricción está deshabilitada, Oracle no aplica la regla definida por restricción. Esto puede resultar útil
cuando necesita insertar una gran cantidad de filas y no desea que Oracle aplique restricciones, ya que lleva
mucho tiempo.

Para deshabilitar PRIMARY KEY en la tabla SUBJECTS:

Cursos ALTER TABLE DESACTIVAR LLAVE PRIMARIA;

O puede eliminar cualquier restricción dando su nombre de la siguiente manera:

alterar los cursos de la tabla deshabilitar la restricción cursos_cat_chk;

Si la restricción tiene restricciones dependientes, entonces debe usar la cláusula CASCADE para deshabilitar las
restricciones dependientes.

Puede habilitar restricciones deshabilitadas usando la cláusula ENABLE de la siguiente manera:

alterar los cursos de la tabla deshabilitar la restricción cursos_cat_chk;

Nota: Puede averiguar el estado de una restricción utilizando la columna ESTADO de la vista del diccionario de datos
USER_CONSTRAINTS.

Dejar caer una mesa


Para eliminar una tabla, use el comando DDL DROP TABLE. Elimina los datos y la estructura de la tabla. La
siguiente es la sintaxis del comando DROP TABLE.

DROP TABLE tablename [RESTRICCIONES EN CASCADA];

La cláusula CASCADE CONSTRAINTS se utiliza para eliminar restricciones que hacen referencia a claves
primarias y únicas en la tabla eliminada. Si no proporciona esta cláusula y si existen restricciones de
integridad referencial (restricción de referencias), Oracle muestra el error y no deja caer la tabla.

Srikanthtechnologies.com
Oracle para principiantes Página : 7

El siguiente comando eliminará la tabla FACULTAD.

Facultad DROP TABLE;

Nota: Cuando se elimina una tabla, las Vistas y los Sinónimos basados en la tabla se invalidan, aunque
permanecen en el sistema. También tenga en cuenta que dejar caer una mesa no se puede deshacer.

Manipular datos
Como hemos visto en el primer capítulo, los comandos SQL se dividen en comandos DML y comandos DDL.
Los comandos DDL como CREATE TABLE, ALTER TABLE y DROP TABLE se ocupan de la definición de la tabla
o estructura de la tabla.

Los comandos DML como INSERT, DELETE y UPDATE se utilizan para manipular los datos de la tabla. Ya
hemos visto cómo usar el comando INSERT para insertar filas en la tabla. Ahora veamos otros dos
comandos DML.

Actualizar filas usando el comando ACTUALIZAR


El comando UPDATE se usa para modificar los datos existentes en las filas. La siguiente es la sintaxis del
comando UPDATE.

ACTUALIZAR tabla SET columna = {expresión | subconsulta}


[, columna = {expresión | subconsulta}] ...
[DONDE condición];

Si no se proporciona la cláusula WHERE, el cambio afectará a todas las filas de la tabla.


De hecho, es más a menudo el resultado de un error que intencional.

El siguiente comando cambiará la tarifa del curso de ASP a 6000.

Actualizar cursos set fee = 6000 Donde


ccode = 'asp';

También es posible cambiar más de una columna a la vez de la siguiente manera:

actualizar la tarifa del conjunto de cursos = 6000, duración =


30 donde ccdoe = 'asp';

Nota: Discutiremos cómo usar la subconsulta en el comando ACTUALIZAR más adelante en este libro.

Srikanthtechnologies.com
Oracle para principiantes Página : 8

Eliminar filas usando el comando DELETE


El comando DELETE se usa para eliminar filas de una tabla. La siguiente es la sintaxis del
comando DELETE.

ELIMINAR DE mesa
[DONDE condición;]

Si no se proporciona la cláusula WHERE, se eliminarán todas las filas de la tabla.

El siguiente comando eliminará la fila donde CCODE es "c".

Eliminar de los cursos


Donde ccode = 'c';

No es posible eliminar una fila principal mientras tenga filas secundarias. Por ejemplo, no es posible
eliminar una fila de la tabla COURSES si la fila tiene filas dependientes en la tabla BATCHES o en la tabla
COURSE_FACULTY.

Sin embargo, es posible eliminar la fila principal junto con sus filas secundarias, siempre que se proporcione la opción ON
DELETE CASCADE en el momento de crear la restricción de clave externa en la tabla secundaria. Consulte el capítulo 4
para obtener más información.

Los cambios realizados mediante INSERT, UPDATE y DELETE no se hacen permanentes hasta que se confirman explícita o
implícitamente. Consulte la siguiente sección para obtener más información.

Transacción
Una transacción es una colección de declaraciones que se utilizan para realizar una sola tarea. Estas declaraciones
están relacionadas lógicamente ya que realizan una sola tarea. Todas estas declaraciones deben ejecutarse para
completar con éxito la tarea. Si alguna de las declaraciones falla, todas las declaraciones que se ejecutaron antes
de la declaración que falló deben deshacerse; de lo contrario, los datos de la base de datos se vuelven inválidos e
inconsistentes.

El siguiente ejemplo ilustrará el proceso.

Suponga que los profesores con el código kl (Kevin Loney) abandonan el instituto. Entonces, todos sus
lotes deben asignarse a jc (Jason Couchman). Para ello, se deben seguir los siguientes pasos.

Cambie FCODE de todos los lotes que actualmente gestiona kl por jc. Elimina filas de
COURSE_FACULTY donde FCODE es kl.

Srikanthtechnologies.com
Oracle para principiantes Página : 9
Elimina la fila de FACULTAD donde FCODE es kl.

Eso significa que los siguientes son los comandos que se ejecutarán para realizar la tarea mencionada
anteriormente.

actualizar lotes set fcode = 'jc' donde fcode = 'kl';

eliminar de course_faculty donde fcode = 'kl';

eliminar de la facultad donde fcode = 'kl';

Es importante asegurarse de que las tres declaraciones se hayan completado correctamente o de que se hayan
revertido todas. Para garantizar esto, Oracle proporciona un mecanismo de transacción.

Si el comando UPDATE en el conjunto de comandos anterior comienza la transacción, solo se da el


comando COMMIT después de que se ejecuta el segundo DELETE, los cambios se confirman. Si se da el
comando ROLLBACK, todos los cambios hasta ACTUALIZAR se revertirán.

Por lo tanto, los comandos COMMIT y ROLLBACK se utilizan para garantizar que todo esté confirmado o
que todo se revierta.

Una transacción es una colección de declaraciones que se deben hacer completamente o no se hacen en
absoluto. En otras palabras, el proceso no debe estar a medias. Eso significa TODO o NADA.

Una transacción comienza cuando finaliza la transacción anterior o cuando comienza la sesión. Una transacción
finaliza cuando se emite COMMIT o ROLLBACK. Ver figura 1.

Una nueva sesión comienza cuando se conecta a Oracle. Por ejemplo, cuando inicia sesión con SQL
* PLUS, inicia una nueva sesión. Cuando sale de SQL * PLUS, la sesión finaliza.

Srikanthtechnologies.com
Oracle para principiantes Página : 10

Figura 1: Una transacción es una colección de comandos entre dos puntos de confirmación.

Comando COMMIT
Se utiliza para confirmar todos los cambios realizados desde el inicio de la transacción. Hace lo
siguiente.

Hace que todos los cambios realizados en la base de datos durante la transacción sean

permanentes. Desbloquea las filas que están bloqueadas durante la transacción.

Finaliza la transacción.
Borra todos los puntos de guardado de la transacción actual (se tratará más adelante).

Los cambios realizados en la base de datos, como insertar filas, eliminar filas y actualizar filas, no se
hacen permanentes hasta que se confirman.

Srikanthtechnologies.com
Oracle para principiantes Página : 11
Compromiso implícito
Oracle implícitamente emite commit en los siguientes casos.

Antes de un comando DDL.

Después de un comando DDL.

En la desconexión normal de la base de datos. Por ejemplo, cuando sale de SQL * PLUS usando el
comando EXIT.

Nota: Es muy importante recordar no mezclar los comandos DML con el comando DDL, ya que los
comandos posteriores emitirán COMMIT, que también podría cometer cambios incompletos.

Comando ROLLBACK
Se utiliza en el procesamiento de transacciones para deshacer los cambios realizados desde el inicio de la transacción.

Deshace los cambios realizados en la base de datos en la transacción actual Libera

los bloqueos retenidos en la transacción de duración de filas.

Finaliza la transacción.
Borra todos los puntos de guardado de la transacción actual (se tratará más adelante).

SEGMENTO DE ROLLBACK
Para revertir los cambios que se realizaron, Oracle tiene que almacenar los datos que existían antes del
cambio para que los datos anteriores se puedan restaurar cuando el usuario revierte los cambios. EL
SEGMENTO DE ROLLBACK es el área donde Oracle almacena los datos que se utilizarán para revertir los
cambios. Cada transacción está asociada con un SEGMENTO ROLLBACK.

Generalmente, se crean algunos SEGMENTOS ROLLBACK al momento de crear la base de datos. El


administrador de la base de datos puede crear algunos segmentos de reversión más según el requisito
mediante el comando CREATE ROLLBACK SEGMENT. Oracle asigna un segmento de reversión a cada
transacción. También es posible asociar una transacción con un segmento de reversión particular usando el
comando SET ROLLBACK SEGMENT. No es relevante discutir más sobre la forma en que funciona el
SEGMENTO ROLLBACK en un libro como este. Consulte Conceptos de Oracle para obtener más información
sobre el SEGMENTO ROLLBACK.

Comando SAVEPOINT
Savepoint se utiliza para marcar una ubicación en la transacción para que podamos retroceder hasta esa
marca y no hasta el comienzo de la transacción.

Srikanthtechnologies.com
Oracle para principiantes Página : 12

La siguiente es la sintaxis de SAVEPOINT.

PUNTO DE GUARDADO savepoint_name;

Una sola transacción también puede tener varios puntos de guardado. El siguiente ejemplo ilustra cómo utilizar
los puntos de rescate.

SQL> actualización. . . SQL>


punto de guardado s1;
Punto de guardado creado.
SQL> insertar ....; SQL>
insertar ....; SQL> punto
de guardado s2;
Punto de guardado creado.
SQL> eliminar. . . ;
SQL> retroceder a s1;
Retroceso completo.
SQL> actualizar…
SQL> confirmar;

En el ejemplo anterior, ROLLBACK TO S1; deshará los cambios realizados desde el punto de guardado S1 hasta el punto
de reversión. Eso significa que deshará INSERT, INSERT e incluso DELETE dado después del segundo punto de guardado.
No deshace la ACTUALIZACIÓN dada antes del primer punto de guardado. El COMMIT dado después de la última
ACTUALIZACIÓN va a confirmar la primera UDPATE y la última ACTUALIZACIÓN. Porque todos los restantes ya se han
revertido mediante el comando ROLLBACK TO S1.

Si hemos dado ROLLBACK TO S2; entonces se habría deshecho solo DELETE dado después de que el segundo
punto de guardado y las declaraciones restantes (actualización, inserción, inserción y actualización) se hubieran
comprometido.

Cierre
Es importante desde el punto de vista del sistema de gestión de bases de datos asegurarse de que dos usuarios
no modifiquen los mismos datos al mismo tiempo de forma destructiva.

Consideremos el siguiente ejemplo para comprender qué sucederá si dos usuarios intentan actualizar
los mismos datos al mismo tiempo.

Supongamos que tenemos una tabla de PRODUCTOS con detalles de los productos. Cada producto tiene
una cantidad disponible (QOH). Transacciones como ventas y compras modificarán la columna QOH de la
tabla.

Los siguientes son los pasos que pueden tener lugar cuando se realizan dos transacciones, una venta y
una compra.

Srikanthtechnologies.com
Oracle para principiantes Página : 13

1. Suponga que QOH del producto 10 es de 20 unidades.

2. A las 10:00, el USUARIO1 vendió 5 unidades y actualizó la QOH de la siguiente manera, pero no comprometió el

cambio. Después del comando ACTUALIZAR, QOH será 15.

actualizar el conjunto de productos qoh = qoh - 5 donde prodid = 10;

3. A las 10:11, el USUARIO2 compró 10 unidades y actualizó la QOH de la siguiente manera y se comprometió. Después

El comando ACTUALIZAR QOH será 25, ya que 10 se agregó a 15.


actualizar el conjunto de productos qoh = qoh + 10 donde prodid = 10;

4. Si a las 10:12 USER1 ha revertido la ACTUALIZACIÓN, entonces los datos que estaban allí antes de la ACTUALIZACIÓN

deben restaurarse, es decir, 20. Pero los datos reales deberían ser 30, ya que le agregamos 10 unidades a las 10:11 y

nos comprometimos.

Como puede ver en el ejemplo anterior, si dos usuarios intentan actualizar la misma fila al mismo
tiempo, los datos pueden estar dañados. Como se muestra en el ejemplo anterior al final del proceso,
QOH debería ser en realidad 30, pero no solo 20.

Es posible asegurarse de que dos transacciones interfieran entre sí bloqueando las filas que se están
modificando para que solo una transacción a la vez pueda realizar el cambio.

Oracle garantiza que solo una transacción pueda modificar una fila a la vez bloqueando la fila una vez
que se actualiza. El bloqueo permanecerá hasta que se complete la transacción.

Oracle también asegura que otros usuarios no verán los cambios que no están comprometidos. Eso
significa que si la transacción T1 ha actualizado una fila, hasta que se confirme la transacción, ninguna otra
transacción en el sistema verá los cambios realizados por T1. En cambio, otras transacciones solo verán los
datos que existían antes de que se realizara el cambio.

El siguiente escenario ilustrará el proceso en detalle.

1. Suponga que QOH del producto 10 es 20.

2. La transacción T1 ha emitido el comando UPDATE para actualizar la QOH del producto 10. Oracle bloquea
la fila que se actualiza y no permite que otras transacciones actualicen la fila. Sin embargo, es posible
leer los datos de la fila.

actualizar el conjunto de productos qoh = qoh + 5 donde prodid = 10;

Srikanthtechnologies.com
Oracle para principiantes Página : 14
3. Si T1 ha emitido SELECT para recuperar datos, obtendrá 25 en QOH del producto 10.
4. Si T2 ha emitido el comando SELECT, verá solo 20 en QOH del producto 10. Esto se debe a que
no habrá cambios no confirmados disponibles para otras transacciones.
5. Si T2 está intentando actualizar el producto 10, Oracle hará que la transacción T2 espere hasta que se

complete la transacción T1 (que mantiene el bloqueo en esta fila). Oracle lamentará que el bloqueo se

libere indefinidamente.

6. Si se confirma la transacción T1, el cambio se hace permanente y se libera el bloqueo. Ahora es posible
que otras transacciones vean los datos actualizados e incluso actualicen la fila si es necesario.

Los siguientes son los puntos importantes que se deben recordar sobre el mecanismo de bloqueo de
Oracle.

El bloqueo en Oracle es automático y transparente. Eso significa que nunca necesitamos pedirle a Oracle

que bloquee la fila que se está modificando. El bloqueo es transparente significa que el usuario no conoce

el proceso de bloqueo. Ocurre de forma automática y en segundo plano.

Oracle bloquea la fila que se actualiza. Eso significa que el bloqueo es a nivel de fila. Otros niveles que se

encuentran en el usuario son: nivel de página y nivel de tabla.

Oracle libera los bloqueos retenidos por una transacción cuando la transacción se
completa con éxito, usando COMMIT, o sin éxito, usando ROLLBACK.
Si una transacción está intentando actualizar una fila y si la fila ya está bloqueada, Oracle esperará a que la

fila bloqueada se desbloquee indefinidamente. Se debe al hecho de que las filas se bloquean durante un

período breve en un sistema de producción típico. Por eso, Oracle prefiere esperar a que se produzca algún

error.

Es posible bloquear la tabla manualmente usando el comando LOCK TABLE.

Bloquear las filas que se actualizan es una parte importante de Oracle. Garantiza que no haya dos transacciones
que puedan actualizar la misma fila al mismo tiempo. Todos los sistemas de gestión de bases de datos siguen el
mecanismo de bloqueo. Pero algunos sistemas de administración de bases de datos más pequeños siguen el
bloqueo a nivel de página donde no se bloquea la fila exacta que se está modificando, sino que se bloquea toda la
página en la que existe la fila.

Srikanthtechnologies.com
Oracle para principiantes Página : 15

Leer consistencia
Cuando un usuario intenta leer datos mientras otro usuario los actualiza, es posible que nos encontremos
con un escenario en el que el escritor ya haya modificado los datos que debe leer el lector. En tales casos,
Oracle proporciona consistencia de lectura al lector.

La coherencia de lectura garantiza que todo lo que lea un usuario sea coherente hasta el punto de iniciar
la consulta. El siguiente ejemplo ilustrará este mecanismo.

USER1 ha emitido una consulta para leer datos de la tabla SALES a las 10:00. La tabla contiene 20000 filas y

puede llevar 4 minutos recuperar los datos por completo. Como el usuario solo está leyendo los datos, no se

obtiene ningún bloqueo en la mesa.

USER2 ha actualizado una fila que está en 15000th fila en la tabla a las 10:01 y confirmó el cambio.

USER1 ha llegado a 15000th fila a las 10:03. Ahora USER1 obtiene los datos que estaban antes del cambio, ya

que cuando comenzó la consulta, el cambio no se llevó a cabo. Eso significa que Oracle tiene que

proporcionar los datos al USUARIO1 que existían en el momento de iniciar la consulta, a las 10:00. Cualquier

cambio, ya sea confirmado o no realizado después de las 10:00, no debe ser recuperado por USER1.

Oracle usa ROLLBACK SEGMENT para almacenar los datos que estaban antes del cambio para proporcionar consistencia
de lectura.

Resumen
El comando ALTER TABLE se utiliza para alterar la estructura de la tabla. Es posible agregar columnas o
restricciones, modificar atributos como el tipo de datos y la longitud de las columnas existentes y eliminar
columnas o restricciones.
Los comandos UPDATE y DELETE se utilizan para actualizar y eliminar filas de la tabla respectivamente. Los
cambios realizados usando comandos DML no se confirman hasta que se confirman explícitamente (usando el
comando COMMIT) o implícitamente. El comando ROLLBACK se usa para revertir los cambios desde el comienzo
de la transacción, que es una colección de declaraciones para realizar una sola tarea. El comando SAVEPOINT se
utiliza para marcar un punto en la transacción de modo que los cambios realizados después del punto de
guardado puedan revertirse.

Oracle bloquea las filas que se actualizan para garantizar que solo una transacción pueda actualizar una fila a la
vez. Oracle también garantiza que los datos recuperados por consulta sean coherentes hasta el punto de iniciar
la consulta: coherencia de lectura.

Srikanthtechnologies.com
Oracle para principiantes Página : dieciséis

Ejercicios
1. ¿Cómo se agrega una restricción de verificación a una columna existente?

2. ¿Cómo eliminas una restricción?

3. ¿Es posible conocer el nombre de la restricción? Si es así, ¿cómo?


4. ¿Cómo da una restricción de clave principal si dos o más columnas son parte de la clave principal?

5. El comando _________ se usa para marcar una ubicación en una transacción.

6. ¿Qué es el segmento ROLLBACK?

7. ¿Cuándo comienza una transacción?

8. Si una fila que se va a actualizar ya está bloqueada, ¿qué sucede? ¿Qué


9. sucede si una fila se actualiza y no se confirma ni se revierte?
10. ¿Qué es la consistencia de lectura?

Srikanthtechnologies.com

También podría gustarte