TestPracticasGABD
|
|
Título del Test:
![]() TestPracticasGABD Descripción: Test propio hecho con IA para las prácticas de GABD |



| Comentarios |
|---|
NO HAY REGISTROS |
|
¿Cuáles de las siguientes opciones describen ventajas de la arquitectura cliente/servidor expuestas en la teoría?. Delegación de responsabilidades. Independencia de la situación física de los datos. Disminución del tráfico en la red gracias a un mejor acceso concurrente. Centralización obligatoria de la interfaz de usuario en el servidor. Respecto a las fases de diseño y desarrollo de una base de datos y su aplicación. El diseño de la base de datos es principalmente una tarea de modelado de procesos, no de datos. El diseño de la aplicación es un proceso iterativo que puede implicar el rediseño de la base de datos. Las restricciones de integridad, procedimientos almacenados y disparadores son herramientas proporcionadas por el servidor de BD. El ajuste de la aplicación abarca únicamente la optimización semántica de sentencias SQL. La independencia física de datos implica directamente que: Si alteramos la organización de los archivos en disco o los índices, el esquema lógico conceptual no se ve modificado. Si modificamos una vista externa, cambia obligatoriamente la implementación física en disco. Las aplicaciones cliente deben recompilarse cada vez que el administrador cambia un fichero de datos de un sector a otro. No existe ningún tipo de correspondencia (mapping) entre el nivel físico y el nivel lógico. La independencia lógica de datos garantiza que: Podemos añadir columnas o reestructurar tablas en el esquema lógico sin obligar a reescribir las aplicaciones que acceden mediante vistas. Si cambiamos el modelo físico del disco, el modelo conceptual se corrompe. Se establece exclusivamente entre la capa física y la capa de almacenamiento interno. El usuario externo percibe los datos exactamente organizados tal y como se distribuyen en los bloques binarios del sistema operativo. En la definición de tablas con la sentencia CREATE TABLE, la cláusula DEFAULT: Debe colocarse obligatoriamente después de la palabra clave CONSTRAINT. Tiene que ser la primera restricción del atributo y no lleva la cláusula CONSTRAINT. Permite definir condiciones complejas que comparen dos columnas distintas. Sirve para asignar un valor predeterminado si en el INSERT no se especifica ese campo. Para programar una restricción declarativa de tipo CHECK que involucre o compare más de un atributo de la misma fila (por ejemplo: CHECK (fecha_reparacion >= fecha_entrada)): Se puede definir indistintamente como restricción de columna o restricción de tabla. Debe especificarse obligatoriamente como una restricción de tabla. No se permiten este tipo de comparaciones en un CREATE TABLE; debe programarse obligatoriamente con un trigger. Es una restricción de clave externa compuesta. Al definir una clave externa o relación en SQL, ¿cuál es la opción de borrado (ON DELETE) que actúa de manera predeterminada (por defecto) si el desarrollador no escribe ninguna opción explícita?. CASCADE (Borrado en cascada). SET NULL (Poner a nulo). DEFAULT (Asignar valor por defecto). Restringir (No permitir el borrado en el padre si existen hijos). En Oracle, si definimos una columna con la cláusula id NUMBER(10) GENERATED AS IDENTITY, ¿qué ocurre si un usuario intenta forzar la inserción de un valor manual (ej: INSERT INTO tabla VALUES (100, 'Nombre'))?. El motor de la BD acepta el valor manual y reajusta automáticamente el contador interno. El motor de la BD ignora el 100 e inserta el número correlativo que tocaba en la secuencia. La sentencia falla en tiempo de ejecución lanzando el error ORA-32795. El script no compila por error sintáctico. En la instrucción CREATE SEQUENCE, si deseamos configurar una secuencia para que sus valores vayan disminuyendo (por ejemplo, restando de 3 en 3), se debe emplear: La cláusula DECREMENT BY 3. La cláusula INCREMENT BY -3. La cláusula MINUS BY 3. Las secuencias de Oracle no admiten decrementos, solo incrementos positivos. ¿Cuál de las siguientes afirmaciones sobre el uso de CACHE en secuencias es verdadera según los apuntes?. Evita la serialización programada y mejora sensiblemente la concurrencia en accesos simultáneos. Almacena temporalmente números en la memoria para un acceso más rápido. Si se produce una caída imprevista del servidor, los números reservados en la caché que no se hayan guardado se perderán, pudiendo generar "huecos" en la numeración. Obliga a la secuencia a ciclar de forma recursiva al llegar al final. Respecto a la estructura de bloques en PL/SQL: La sección DECLARE es absolutamente obligatoria aunque el bloque no use variables ni cursores. Las sentencias ejecutables se encierran estrictamente entre las palabras clave BEGIN y END;. La sección de manejo de excepciones (EXCEPTION) se sitúa opcionalmente justo antes de finalizar el bloque. Tras la palabra clave DECLARE nunca debe colocarse un punto y coma (;). ¿Cuáles de los siguientes tipos son considerados "tipos base" nativos en la declaración de variables PL/SQL según el documento?. DATE. VARCHAR (o VARCHAR2). NUMBER. BOOLEAN (con valores TRUE y FALSE). ¿Cuál es el resultado de ejecutar una sentencia SELECT ... INTO lista_variables en un bloque PL/SQL si la consulta del servidor no devuelve ninguna fila?. Las variables conservan el valor NULL y el programa continúa normalmente. Se interrumpe la ejecución levantando la excepción automática NO_DATA_FOUND. Se levanta de forma inmediata la excepción del sistema TOO_MANY_ROWS. El programa se cuelga en un bucle infinito esperando respuesta del servidor. Analiza el siguiente bucle: FOR i IN REVERSE 1..5 LOOP ... END LOOP;. ¿En qué orden tomará valores la variable contador i?. 1, 2, 3, 4, 5. 5, 4, 3, 2, 1. 1, -1, -2, -3, -4. El bucle dará un error sintáctico. Indica el orden cronológico estricto que debe seguir el ciclo de vida de un cursor explícito tradicional en un bloque procedural: Apertura -->Declaración --> Descarga (Fetch) --> Cierre. Declaración --> Apertura--> Descarga (Fetch) --> Cierre. Declaración --> Descarga (Fetch) --> Apertura --> Cierre. Apertura --> Descarga (Fetch) --> Cierre. La sentencia SQL SELECT vinculada a un cursor explícito se redacta en: La sección BEGIN, al inicializar el bucle LOOP. La sección DECLARE, asociándola a un nombre identificador de cursor. La sección EXCEPTION, para activarse en caso de errores de lectura. Fuera del bloque PL/SQL, en un archivo de configuración de red. ¿Qué efecto produce la opción FOR UPDATE OF lista_atributos al declarar un cursor?. Permite que el cursor modifique directamente los registros sin usar una sentencia UPDATE. Bloquea las tuplas de la base de datos devueltas por la consulta en el momento de abrir el cursor para evitar que otros usuarios las alteren concurrentemente. Hace que el cursor sea de solo lectura para acelerar el procesamiento. Genera un duplicado físico de la tabla en el espacio de intercambio temporal. Si un cursor explícito se encuentra abierto, ¿qué información devuelve el atributo nombre_cursor%ROWCOUNT?. El número total de filas que cumplen la condición de la tabla en toda la BD. Un valor numérico que representa el total de columnas que componen la consulta SELECT. El número de tuplas que han sido descargadas (extraídas) de manera efectiva mediante operaciones FETCH hasta ese instante. Un booleano (TRUE/FALSE) que indica si el cursor ha terminado de recorrer las filas. ¿Cuál es el propósito fundamental de emplear la cláusula WHERE CURRENT OF nombre_cursor dentro de una sentencia UPDATE o DELETE?. Reiniciar el puntero del cursor para que regrese a la primera fila. Modificar o eliminar la fila actual sobre la que se encuentra posicionado el cursor en ese instante, sin necesidad de mapear la clave primaria de forma explícita. Forzar la apertura del cursor en caso de que estuviera cerrado. Ninguna de las opciones es correcta. ¿Cuáles de las siguientes opciones constituyen ventajas reales de la programación de procedimientos y funciones almacenados en el DBMS según los apuntes?. Código precompilado compartible, reduciendo tiempos de parsing y optimizando la ejecución. Ahorro sustancial de memoria, cargándose el objeto una única vez para atender a diferentes usuarios. Centralización de las reglas de negocio en el servidor, potenciando la integridad y la seguridad. Desaparición absoluta de la necesidad de establecer una red de comunicación con el cliente. En PL/SQL, la cabecera sintáctica de una FUNCIÓN almacenada (CREATE FUNCTION) se diferencia de un PROCEDIMIENTO en que la función requiere obligatoriamente: Parámetros de tipo IN OUT. La cláusula RETURN tipo_de_dato antes de la sección IS. Una sección EXCEPTION explícita para capturar errores. No poseer variables locales en su interior. En cuanto a la arquitectura de programación basada en PAQUETES (PACKAGES): La especificación (parte visible) y la implementación (cuerpo o body) se crean y compilan de forma independiente. Las variables declaradas en el cuerpo del paquete (parte oculta) son visibles por cualquier bloque PL/SQL externo del usuario. Los paquetes mejoran el rendimiento general porque el objeto completo se carga en memoria de golpe, disminuyendo las operaciones físicas de entrada/salida (I/O). Las variables públicas inicializadas en un paquete persisten con su valor a lo largo de toda la sesión del usuario. Los disparadores o triggers responden al paradigma de software activo denominado regla ECA, cuyas siglas significan: Estructura, Compilación, Almacenamiento. Evento, Condición, Acción. Excepción, Control, Atributo. Ejecución, Clave, Asignación. Si una sentencia UPDATE modifica simultáneamente 10 filas de una tabla, ¿cuántas veces se ejecutará un disparador definido con la cláusula FOR EACH ROW y cuántas veces uno de nivel de sentencia?. El de fila se ejecuta 10 veces; el de sentencia se ejecuta 1 única vez. Ambos se ejecutarán exactamente 10 veces. El de fila se ejecuta 1 vez; el de sentencia se ejecuta 10 veces. Ninguno se ejecuta, ya que el motor aborta operaciones masivas en tablas con triggers. Dentro del código de un disparador de fila (FOR EACH ROW), los calificadores :new y :old: Permiten consultar los valores nuevos y antiguos de la fila afectada por la operación DML. Llevan obligatoriamente el carácter de dos puntos (:) si se utilizan dentro de la cláusula condicional WHEN. Permiten alterar o modificar el nuevo valor de un atributo (:new.campo := valor) únicamente si el disparador es de tipo BEFORE. Están plenamente disponibles en los disparadores a nivel de sentencia (Statement Triggers). En un disparador multievento (ej: BEFORE INSERT OR UPDATE OR DELETE ON mi_tabla), se pueden usar los predicados condicionales INSERTING, UPDATING y DELETING. Estos predicados: Son funciones externas que requieren importar un paquete del sistema. Son variables booleanas internas del SGBD que devuelven TRUE según la operación que haya activado el disparo. Permiten estructurar la lógica mediante condicionales (IF INSERTING THEN ...). Solo funcionan si el trigger está definido en una vista. Respecto a los disparadores de sustitución (INSTEAD OF): Se pueden asociar indistintamente a tablas físicas y a vistas complejas. Se definen única y exclusivamente sobre Vistas. Deben estar configurados obligatoriamente a nivel de fila (FOR EACH ROW). Se ejecutan en sustitución (en lugar de) de la orden DML original que los provocó. En Oracle, el error de Tabla Mutante surge fundamentalmente cuando: Un disparador de nivel de sentencia intenta vaciar la tabla de forma recursiva. Un disparador de nivel de fila (FOR EACH ROW) intenta consultar (SELECT) o modificar la misma tabla física que en ese instante está sufriendo la operación DML. Dos usuarios intentan borrar registros de tablas sin claves primarias. Se altera el tipo de dato de una columna con sentencias DDL. ¿Cuáles de las siguientes opciones representan soluciones válidas explicadas en la teoría para sortear un problema de tabla mutante?. Utilizar una tabla auxiliar intermedia y desviar lecturas o escrituras a un disparador de sentencia complementario. Implementar un único Disparador Compuesto (COMPOUND TRIGGER), capturando la información agregada en la fase BEFORE STATEMENT y utilizándola en las fases de fila. Eliminar la cláusula FOR EACH ROW si el problema se puede resolver de manera global a nivel de sentencia. Activar el aislamiento transaccional del cliente mediante comandos del sistema operativo. La excepción interna del sistema denominada DUP_VAL_ON_INDEX: Ocurre cuando un bucle FOR intenta ejecutarse dos veces seguidas con el mismo índice. Se activa automáticamente cuando un programa intenta almacenar valores duplicados en una columna protegida por una restricción de índice único o clave primaria. Tiene asociado el código interno de error SQLCODE = -1. Se produce cuando una sentencia SELECT INTO recupera dos filas con valores idénticos. ¿Qué ventajas aportan las restricciones no procedurales (declarativas/constraints) frente a las restricciones procedurales (disparadores/triggers)?. Mayor capacidad expresiva permitiendo establecer fácilmente alternativas ante errores. Son sustancialmente más eficientes en el motor de la base de datos. Son más comprensibles, mantenibles y su semántica es bien conocida por el diccionario de datos. Garantizan la consistencia de transacciones complejas distribuidas en múltiples servidores de manera nativa. |





