Gerenciamiento de Datos II
Dashboard interactivo de repaso de las semanas 1 a 5: arquitectura de Oracle Database, gestión de la instancia, SQL DDL y seguridad.
Mapa de temas
Instancia Oracle
La parte viva del servidor: estructuras de memoria y procesos background que dan acceso a la base de datos.
Oracle Server = instancia + base de datos
Un servidor Oracle tiene dos partes que no deben confundirse. La instancia es el medio para acceder a los datos: estructuras de memoria y procesos background que viven mientras el servicio está arriba. La base de datos es una colección de archivos en disco que se tratan como una unidad.
Instancia
Memoria (SGA y PGA) más procesos background. Se crea en cada STARTUP y desaparece en cada SHUTDOWN.
Lógica · volátilBase de datos
Datafiles, control files y online redo log files. Persisten aunque el servidor se apague.
Física · persistenteEstructuras de memoria
| Estructura | Ámbito | Qué guarda |
|---|---|---|
| Database Buffer Cache | SGA | Copias en memoria de los bloques leídos de los datafiles. Los bloques modificados y aún no escritos se llaman dirty buffers. |
| Redo Log Buffer | SGA | Registro de cada cambio realizado, antes de que LGWR lo lleve a disco. |
| Shared Pool | SGA | Sentencias SQL ya analizadas (library cache) y la caché del diccionario de datos. |
| Large Pool | SGA | Área opcional para operaciones que consumen mucha memoria, como respaldos. |
| PGA | Privada | Memoria exclusiva de cada proceso servidor: variables de sesión y áreas de ordenamiento. |
Procesos background
Escribe los bloques modificados del Database Buffer Cache a los datafiles. No escribe en cada COMMIT, sino cuando ocurre alguno de estos eventos:
- Un checkpoint.
- No quedan buffers libres.
- Un tablespace pasa a OFFLINE, READ ONLY o BEGIN BACKUP.
- Se ejecuta DROP o TRUNCATE sobre una tabla.
Escribe de forma secuencial el Redo Log Buffer en los online redo log files, con fines de recuperación. Se activa cuando:
- Hay un COMMIT.
- El buffer está lleno en un tercio o más.
- Pasan 3 segundos (timeout).
- Antes de que DBWn escriba un bloque modificado.
Genera un SCN y actualiza los control files y las cabeceras de los datafiles con la información del punto de control. Es clave para la recuperación porque marca hasta dónde los datos en disco están al día.
Ejecuta la recuperación de la instancia tras una caída: aplica los cambios registrados en el redo, abre la base de datos y revierte las transacciones no confirmadas, dejándola en un estado estable.
Vigila los procesos de usuario. Si una sesión pierde la conexión, deshace su transacción, libera los bloqueos de tablas o filas y otros recursos. También supervisa a otros procesos background.
Proceso opcional. Copia automáticamente los redo logs llenos a archive logs cuando la base de datos está en modo ARCHIVELOG, conservando el historial completo de cambios.
Consultar la instancia
Estas consultas confirman qué instancia está arriba y cómo está repartida su memoria.
sqlplus sys/oracle as sysdba SQL> show sga SQL> show user SQL> select instance_name, status from v$instance; SQL> select name, open_mode from v$database;
show sga devuelve valores, pero select name from v$database responde ORA-01507.La instancia sí está iniciada (hay SGA), pero la base de datos no está montada. El problema no es de memoria ni de procesos, sino de la fase MOUNT: hay que revisar el control file y el alert log.
Clasifica los componentes
Ubica cada componente en la parte de la arquitectura a la que pertenece.
Arquitectura de Oracle Server
Clasificación de memoria, procesos y archivos
¿Quién escribe y cuándo?
| Evento | Proceso que actúa | Destino en disco |
|---|---|---|
| COMMIT de una transacción | LGWR | Online redo log files |
| Checkpoint | CKPT y DBWn | Cabeceras, control file y datafiles |
| Buffer cache sin espacio libre | DBWn | Datafiles |
| Redo log lleno en modo ARCHIVELOG | ARCn | Archive log files |
| Sesión de usuario caída | PMON | No escribe: libera recursos |
| Inicio tras SHUTDOWN ABORT | SMON | Aplica redo y revierte con UNDO |
La planilla que no se perdió
Análisis- ¿Qué proceso garantizó que el cambio sobreviviera al corte?
- ¿Estaban los bloques modificados necesariamente en los datafiles?
- ¿Qué proceso reconstruyó el estado al iniciar?
1. LGWR: al hacer COMMIT escribió el Redo Log Buffer en los online redo log files.
2. No. DBWn escribe de forma diferida; es muy probable que los bloques siguieran solo en el Database Buffer Cache, que se perdió con la memoria.
3. SMON, durante la recuperación de la instancia, reaplicó los cambios desde el redo y revirtió lo que no tenía COMMIT.
La sesión colgada
Diagnóstico- ¿Qué recurso quedó retenido?
- ¿Qué proceso lo liberó?
- ¿Se guardó el cambio del operador?
1. Un bloqueo de fila perteneciente a la transacción no confirmada.
2. PMON detectó la sesión fallida, deshizo la transacción y liberó los bloqueos.
3. No: al no existir COMMIT, la transacción se revirtió.
Memoria compartida o privada
Clasificación- ¿Dónde se reutiliza el plan de la consulta repetida?
- ¿Dónde se realiza el ordenamiento de cada reporte?
- ¿Qué estructura evita leer del disco los mismos bloques una y otra vez?
1. En el Shared Pool, que guarda el SQL ya analizado para compartirlo entre sesiones.
2. En la PGA de cada proceso servidor; si no alcanza, se usa el tablespace temporal.
3. El Database Buffer Cache.
Control file y redo log
Los archivos que sostienen la integridad y la recuperación: cómo se consultan, se multiplexan y se protegen.
Control file
Es un archivo binario, no editable, que registra toda la estructura física de la base de datos y mantiene su integridad. Está vinculado a una sola base de datos, se lee al pasar al estado MOUNT y se necesita durante toda la operación.
Identidad
Nombre e identificador de la base de datos, fecha y hora de creación.
Mapa físico
Tablespaces, nombre y ubicación de datafiles y redo log files.
Estado
Número de secuencia actual del redo, información de checkpoint y de undo.
Historial
Información de archive logs y de respaldos.
Online redo log
Los redo log files graban todos los cambios realizados en la base de datos y son el mecanismo de recuperación. Se organizan en grupos; cada grupo tiene uno o más miembros idénticos, idealmente en discos diferentes.
| STATUS en V$LOG | Significado |
|---|---|
| CURRENT | Grupo en el que LGWR está escribiendo ahora. |
| ACTIVE | Ya no se escribe en él, pero aún se necesita para recuperar la instancia. |
| INACTIVE | Ya no se necesita para la recuperación de instancia; puede reutilizarse o eliminarse. |
| UNUSED | Grupo recién creado en el que todavía no se ha escrito. |
Modo ARCHIVELOG
Por defecto la base de datos se crea en NOARCHIVELOG: al reutilizar un grupo, su contenido anterior se pierde. En ARCHIVELOG, ARCn copia cada redo log lleno a un archive log antes de que pueda reutilizarse.
| Aspecto | NOARCHIVELOG | ARCHIVELOG |
|---|---|---|
| Recuperación | Solo hasta el último respaldo completo | De todas las transacciones confirmadas |
| Respaldo | Con la base de datos cerrada | Con la base de datos abierta |
| Espacio en disco | No genera archivos extra | Requiere administrar los archive logs |
| Reutilizar un redo lleno | Inmediato | Solo después de archivarlo |
Control files
SQL> select status, name from v$controlfile;
SQL> select name, value from v$parameter where name = 'control_files';
SQL> show parameter control_files
-- Multiplexar: agregar una tercera copia
SQL> alter system set control_files =
'C:\ORADATA\CDB\CONTROL01.CTL',
'C:\FRA\CDB\CONTROL02.CTL',
'D:\ORADATA\CONTROL03.CTL' scope=spfile;
SQL> shutdown immediate
-- copiar CONTROL01.CTL como D:\ORADATA\CONTROL03.CTL en el sistema operativo
SQL> startupOrdena el procedimiento
Constructor de secuencia · tres escenarios
Redo log
SQL> select group#, status, member from v$logfile;
SQL> select group#, sequence#, status from v$log;
SQL> alter system switch logfile;
SQL> alter database add logfile group 4 ('D:\ORADATA\REDO04A.LOG') size 50M;
SQL> alter database add logfile member 'E:\ORADATA\REDO01B.LOG' to group 1;
SQL> alter database drop logfile member 'E:\ORADATA\REDO01B.LOG';
SQL> alter database drop logfile group 4;Log switch en vivo
Observa CURRENT, ACTIVE e INACTIVE
La operación normal de la instancia no se ve afectada porque el grupo aún tiene un miembro válido; el alert log registra que no encuentra el archivo. Para corregirlo: alter database drop logfile member del miembro perdido y luego add logfile member … to group 2 para volver a multiplexar.
ARCHIVELOG
SQL> select name, log_mode from v$database; SQL> select dest_name, status, destination from v$archive_dest where status = 'VALID'; SQL> shutdown immediate SQL> startup mount SQL> alter database archivelog; -- o: alter database noarchivelog; SQL> alter database open; SQL> alter system switch logfile;
El arranque que se quedó a medias
Diagnóstico- ¿En qué estado quedó la instancia y por qué?
- ¿Dónde se confirma qué archivo falta?
- ¿Cómo se recupera si existe otra copia del control file?
1. En NOMOUNT: la instancia inició, pero no pudo abrir todas las copias del control file indicadas en CONTROL_FILES, así que no pasó a MOUNT.
2. En el alert log (carpeta trace del directorio diag), que muestra ORA-00202 con la ruta del archivo y el error del sistema operativo.
3. SHUTDOWN IMMEDIATE, copiar la copia válida con el nombre y ruta del archivo faltante, y STARTUP. Luego verificar OPEN y READ WRITE.
Respaldos sin apagar la tienda
Decisión- ¿Qué modo de log necesita?
- ¿Qué proceso entra en juego?
- Escribe la secuencia para activarlo.
1. ARCHIVELOG: permite respaldar con la base abierta y recuperar todas las transacciones confirmadas.
2. ARCn, que archiva cada redo log lleno antes de que se reutilice.
3.
shutdown immediate startup mount alter database archivelog; alter database open;
No me deja borrar el grupo
Interpretación- ¿Puede eliminarlo de inmediato?
- ¿Qué debe hacer primero?
- ¿Qué ocurriría si solo existieran dos grupos?
1. No: el grupo CURRENT no puede eliminarse.
2. Forzar un log switch con alter system switch logfile y esperar a que el grupo 2 quede INACTIVE (tras el checkpoint). Recién entonces drop logfile group 2 y borrar el archivo del disco.
3. Tampoco podría: la instancia exige un mínimo de dos grupos. Tendría que agregar primero el grupo nuevo.
Tablespaces y datafiles
De la tabla al disco: tablespace, segmento, extent y bloque, y cómo administrar los archivos que los respaldan.
Estructura lógica y física
Oracle separa cómo se organizan los datos (estructura lógica) de dónde se guardan en disco (estructura física). El punto de unión es el tablespace, que agrupa lógicamente los datos y está respaldado por uno o más datafiles.
| Elemento | Tipo | Reglas clave |
|---|---|---|
| Tablespace | Lógico | Pertenece a una sola base de datos; contiene uno o más segmentos; puede ponerse OFFLINE o READ ONLY. |
| Datafile | Físico | Pertenece a un solo tablespace; puede redimensionarse o crecer automáticamente. |
| Segmento | Lógico | Espacio asignado a una tabla o índice. No abarca varios tablespaces, pero sí varios datafiles del mismo tablespace. |
| Extent | Lógico | Conjunto de bloques contiguos; el segmento crece agregando extents. |
| Bloque de datos | Lógico | Unidad más pequeña que Oracle asigna, lee o escribe. Su tamaño estándar lo fija DB_BLOCK_SIZE al crear la base. |
Tipos de tablespace
SYSTEM
Contiene el diccionario de datos. No puede ponerse offline.
SYSAUX
Tablespace auxiliar para componentes de la base de datos.
UNDO
Guarda la imagen previa de los datos: rollback, lectura consistente y flashback.
TEMP
Usado para operaciones de ordenamiento que no caben en memoria.
USERS
Tablespace por defecto para los usuarios creados después de la instalación.
De aplicación
Creados a demanda para separar los datos de cada sistema.
Crear tablespaces
SQL> select tablespace_name, status from dba_tablespaces;
SQL> select tablespace_name, file_name, bytes from dba_data_files;
SQL> create tablespace datos_app
datafile 'D:\ORADATA\PDB1\datos_app01.dbf' size 100M
extent management local uniform size 1M;
SQL> create undo tablespace undo02
datafile 'D:\ORADATA\undo02.dbf' size 50M;
SQL> create temporary tablespace temp02
tempfile 'D:\ORADATA\PDB1\temp02.dbf' size 50M
extent management local uniform size 1M;Administrar datafiles
SQL> alter database datafile 'D:\ORADATA\PDB1\datos_app01.dbf' resize 250M;
SQL> alter tablespace datos_app add datafile 'D:\ORADATA\PDB1\datos_app02.dbf' size 100M;
-- mover un datafile
SQL> alter tablespace datos_app offline normal;
-- (mover el archivo en el sistema operativo)
SQL> alter tablespace datos_app rename datafile
'D:\ORADATA\PDB1\datos_app02.dbf' to 'E:\ORADATA\datos_app02.dbf';
SQL> alter tablespace datos_app online;
SQL> alter tablespace datos_app drop datafile 'E:\ORADATA\datos_app02.dbf';
SQL> drop tablespace datos_app including contents and datafiles;Ordena el procedimiento
Constructor de secuencia · dos escenarios
Calculadora de capacidad
Estima cuántos extents y bloques ofrece un tablespace con extents uniformes y si alcanza para el volumen de datos previsto.
Capacidad de un tablespace
Datafiles × tamaño, extents uniformes y ocupación
Con 2 MB y extents de 100 KB solo hay unos 20 extents. Opciones: alter database datafile … resize para ampliar el archivo, o alter tablespace historias add datafile para sumar otro. Ambas se ejecutan con el tablespace en línea.
El disco D se llenó
Procedimientonotas02.dbf del tablespace NOTAS está en el disco D, que alcanzó el 98 % de uso. Hay espacio libre en el disco E y el sistema de matrícula puede detenerse 10 minutos.- ¿Qué estado debe tener el tablespace antes de mover el archivo?
- Escribe la secuencia de comandos.
- ¿Qué vista confirma el resultado?
1. OFFLINE. La base de datos sigue abierta; solo ese tablespace queda inaccesible.
2.
alter tablespace notas offline normal; -- mover notas02.dbf de D: a E: desde el sistema operativo alter tablespace notas rename datafile 'D:\ORADATA\notas02.dbf' to 'E:\ORADATA\notas02.dbf'; alter tablespace notas online;
3. DBA_DATA_FILES muestra la nueva ruta y DBA_TABLESPACES el estado ONLINE.
¿Lógico o físico?
Conceptual- ¿Qué estructura representa a la tabla dentro del almacenamiento?
- ¿Cómo crece esa estructura?
- ¿Puede la tabla ocupar dos datafiles? ¿Y dos tablespaces?
1. Un segmento, almacenado dentro de un tablespace. El .dbf es el datafile, que puede contener muchos segmentos.
2. Agregando extents, cada uno formado por bloques contiguos.
3. Sí puede abarcar varios datafiles siempre que sean del mismo tablespace; un segmento no puede abarcar varios tablespaces.
Sin espacio para ordenar
Diagnóstico- ¿Qué tipo de tablespace está involucrado?
- ¿Qué sentencia crearía uno adicional?
- ¿En qué vista se consultan sus archivos?
1. El tablespace temporal (TEMP), que se usa cuando el ordenamiento no cabe en la PGA.
2. create temporary tablespace temp02 tempfile '…' size 500M;
3. En DBA_TEMP_FILES.
Multitenant: CDB y PDB
Una instancia, muchos inquilinos: contenedores, estados de las PDBs y vistas del diccionario.
De la arquitectura tradicional a la multitenant
En la arquitectura tradicional cada base de datos tiene su propia instancia: su memoria, sus procesos y sus archivos. En la arquitectura multitenant, una sola instancia atiende a una base de datos contenedora (CDB) que aloja varias bases de datos conectables (PDB).
CDB$ROOT
Contenedor raíz. Hay exactamente uno por CDB; guarda los metadatos y usuarios comunes.
CON_ID 1PDB$SEED
Plantilla de solo lectura a partir de la cual se crean nuevas PDBs.
CON_ID 2PDBs de usuario
Cero o más. Cada una es una colección de esquemas y objetos, vista por la aplicación como una base de datos independiente.
CON_ID 3 en adelanteVentajas
- Aumenta la escalabilidad y el aprovechamiento del servidor.
- Permite administrar varias bases de datos como si fueran una.
- Mantiene separadas las bases de datos sin cambiar las aplicaciones ni los accesos.
- Facilita el mantenimiento, la clonación y el respaldo.
- Gestión de recursos integrada para cumplir niveles de servicio.
Qué se comparte y qué no
| Elemento | Ámbito |
|---|---|
| SGA y procesos background | Compartidos por toda la CDB |
| Control files y online redo logs | De la CDB, comunes a todas las PDBs |
| UNDO | En el root (o local por PDB, según configuración) |
| Datafiles SYSTEM, SYSAUX y de aplicación | Propios de cada PDB |
| Tablespace temporal | Cada PDB puede tener el suyo |
| Sesión conectada a una PDB | Solo ve esa PDB |
Conectarse y ubicarse
C:\> sqlplus /nolog C:\> sqlplus sys/oracle@cdb as sysdba SQL> connect sys/oracle@pdb_ventas as sysdba SQL> show con_name SQL> show con_id SQL> show user SQL> desc dba_tables
Estados de las PDBs
SQL> show pdbs SQL> select name, open_mode, con_id from v$pdbs; SQL> alter pluggable database pdb_ventas open; SQL> alter pluggable database pdb_ventas close; SQL> alter pluggable database all open; SQL> alter pluggable database all close; SQL> alter pluggable database pdb_ventas save state;
Consola de PDBs
Abre, cierra, guarda estado y reinicia la CDB
La PDB queda MOUNTED después de cada reinicio y alguien la abre manualmente. Solución permanente: abrirla y ejecutar alter pluggable database pdb_almacen save state; para que se abra automáticamente.
Diccionario en CDB y PDB
SQL> select instance_name, con_id from v$instance; SQL> select file_name, tablespace_name, con_id from cdb_data_files order by tablespace_name; SQL> select file_name, tablespace_name from dba_data_files; SQL> select file_name, tablespace_name from dba_temp_files; SQL> select group#, member, con_id from v$logfile; SQL> select count(*) from cdb_objects; SQL> select count(*) from dba_objects;
| Prefijo | Alcance |
|---|---|
| CDB_ | Todos los contenedores; incluye la columna CON_ID. Desde el root muestra la CDB completa. |
| DBA_ | Todo el contenedor al que se está conectado. |
| USER_ | Solo los objetos del esquema conectado. |
| V$ | Vistas dinámicas de rendimiento, alimentadas por la instancia y el control file. |
Tres sedes, un servidor
Diseño- ¿Qué arquitectura propondrías?
- ¿Qué comparten y qué mantienen separado las tres sedes?
- ¿Qué riesgo debes advertir?
1. Una CDB con tres PDBs: PDB_LIMA, PDB_CUSCO y PDB_PIURA.
2. Comparten instancia (SGA y procesos background), control files y redo logs. Mantienen separados sus datafiles, esquemas y usuarios locales; cada aplicación sigue conectándose a su propio servicio.
3. El dimensionamiento: al compartir memoria y CPU, una PDB con carga excesiva puede afectar a las demás; además, una caída de la instancia afecta a las tres.
La consulta que devuelve distinto
Interpretaciónselect count(*) from cdb_data_files conectado al root y obtiene 14. Luego se conecta a PDB_CUSCO, ejecuta select count(*) from dba_data_files y obtiene 4.- ¿Por qué difieren los resultados?
- ¿Qué columna permite saber a qué contenedor pertenece cada archivo?
- ¿Qué mostraría
show con_nameen cada conexión?
1. CDB_DATA_FILES desde el root lista los datafiles de todos los contenedores abiertos; DBA_DATA_FILES solo los del contenedor actual.
2. CON_ID.
3. CDB$ROOT en la primera y PDB_CUSCO en la segunda.
Crear una PDB nueva
Conceptual- ¿De qué contenedor se copia la estructura inicial?
- ¿En qué estado conviene dejarla para que el equipo trabaje?
- ¿Qué archivo del cliente debe actualizarse para conectarse por nombre?
1. De PDB$SEED, la plantilla de solo lectura.
2. READ WRITE, con SAVE STATE para que se abra tras cada reinicio.
3. TNSNAMES.ORA, agregando una entrada con el nombre de servicio de la nueva PDB.
Inicio y apagado
Las etapas NOMOUNT, MOUNT y OPEN, y los cuatro modos de SHUTDOWN con sus consecuencias.
Estados de inicio
Abrir una base de datos Oracle es un proceso de tres etapas. En cada una se lee un tipo de archivo distinto, y solo es posible avanzar hacia adelante.
| Estado | Qué ocurre | Para qué se usa |
|---|---|---|
| NOMOUNT | Se lee el archivo de parámetros, se asigna la SGA y arrancan los procesos background. | Crear una base de datos o recrear control files. |
| MOUNT | Se abre el control file indicado en CONTROL_FILES. | Cambiar el modo ARCHIVELOG, renombrar archivos, recuperar. |
| OPEN | Se abren todos los archivos descritos en el control file. | Operación normal de los usuarios. |
Modos de apagado
| Comportamiento | ABORT | IMMEDIATE | TRANSACTIONAL | NORMAL |
|---|---|---|---|---|
| Permite nuevas conexiones | No | No | No | No |
| Espera a que las sesiones terminen | No | No | No | Sí |
| Espera a que las transacciones terminen | No | No | Sí | Sí |
| Fuerza checkpoint y cierra archivos | No | Sí | Sí | Sí |
Cierre consistente
NORMAL, TRANSACTIONAL e IMMEDIATE: se escriben los dirty buffers, se revierte lo no confirmado y no se requiere recuperación al iniciar.
Base limpiaCierre inconsistente
ABORT, falla de instancia o STARTUP FORCE: no se escriben los buffers ni se revierte nada. Al iniciar, SMON usa redo y UNDO para recuperar.
Base suciaIniciar por etapas
SQL> startup nomount SQL> alter database mount; SQL> alter database open; SQL> startup mount -- llega directo a MOUNT SQL> startup -- llega directo a OPEN SQL> select instance_name, status from v$instance; SQL> select name, open_mode from v$database;
Máquina de estados de la instancia
Ejecuta comandos y observa el estado y los errores
Apagar la instancia
SQL> shutdown normal SQL> shutdown transactional SQL> shutdown immediate SQL> shutdown abort
Completa la matriz marcando SÍ o NO en cada celda y luego presiona Verificar.
Matriz de modos de apagado
Selecciona el modo de marcado y haz clic en las celdas
SHUTDOWN NORMAL esperaría indefinidamente a que las 40 sesiones se desconecten. La opción adecuada es SHUTDOWN IMMEDIATE: revierte las transacciones sin confirmar, desconecta las sesiones, hace checkpoint y deja la base consistente.
Mantenimiento en MOUNT
Procedimiento- ¿En qué estado debe estar la base de datos para ejecutar el cambio?
- ¿Puede pasar de OPEN a MOUNT con ALTER DATABASE?
- Indica la secuencia completa.
1. En MOUNT.
2. No. Solo se avanza hacia adelante; para retroceder hay que apagar la instancia.
3. SHUTDOWN IMMEDIATE, STARTUP MOUNT, ALTER DATABASE ARCHIVELOG y ALTER DATABASE OPEN.
El apagado que no termina
Diagnóstico- ¿Qué modo se aplicó al no indicar opción?
- ¿Por qué no termina?
- ¿Qué habría sido mejor?
1. NORMAL, que es el modo por defecto.
2. Porque espera a que todas las sesiones conectadas se desconecten por sí mismas.
3. SHUTDOWN IMMEDIATE, o TRANSACTIONAL si se quería dejar terminar las transacciones en curso.
Después del ABORT
Análisis- ¿En qué condición quedó la base de datos tras el ABORT?
- ¿Qué hace Oracle durante ese tiempo adicional?
- ¿Se pierden las transacciones confirmadas?
1. Inconsistente: los buffers modificados no se escribieron y las transacciones pendientes no se revirtieron.
2. SMON recupera la instancia: reaplica los cambios desde los online redo logs y deshace lo no confirmado usando los segmentos UNDO.
3. No. Todo lo que tuvo COMMIT está en los redo logs y se reaplica.
Quiz 1 · Arquitectura y gestión
Diez preguntas sobre los temas 01 a 05. Cada respuesta trae su explicación.
Objetos y tablas (DDL)
Los objetos de un esquema Oracle y las sentencias para crearlos, documentarlos y eliminarlos.
Objetos de base de datos
Tabla
Unidad básica de almacenamiento, compuesta por filas y columnas.
Vista
Representación lógica de datos de una o más tablas. Se guarda su definición, no los datos.
Secuencia
Genera valores únicos, por ejemplo para llaves primarias.
Índice
Estructura opcional que acelera el acceso a las filas.
Sinónimo
Alias de otro objeto: tabla, vista, procedimiento, función o paquete.
Esquema y nombres
Un esquema es la colección de objetos que pertenecen a un usuario; por eso un objeto de otro esquema se referencia como esquema.objeto. Dos objetos no pueden tener el mismo nombre dentro del mismo esquema.
- Los nombres sin comillas deben comenzar con una letra.
- Pueden contener letras, números, guion bajo (_), signo dólar ($) y numeral (#).
- No pueden ser palabras reservadas de Oracle.
- No se recomienda usar nombres entre comillas.
Tipos de datos más usados
| Tipo | Descripción | Ejemplo |
|---|---|---|
| CHAR(n) | Cadena de longitud fija; rellena con espacios. | sexo CHAR(1) |
| VARCHAR2(n) | Cadena de longitud variable hasta n. | nombre VARCHAR2(50) |
| NUMBER(p,s) | Número con precisión p y escala s (decimales). | precio NUMBER(8,2) |
| DATE | Fecha y hora con precisión de segundos. | fec_registro DATE DEFAULT SYSDATE |
| CLOB / BLOB | Objetos grandes de texto o binarios. | contrato CLOB |
DROP, TRUNCATE y DELETE
| Aspecto | DELETE | TRUNCATE | DROP TABLE |
|---|---|---|---|
| Categoría | DML | DDL | DDL |
| Elimina | Filas (con o sin WHERE) | Todas las filas | Filas, estructura, índices, triggers y privilegios |
| Genera UNDO | Sí | No | No |
| ROLLBACK posible | Sí | No: COMMIT implícito | No (salvo papelera, si no se usó PURGE) |
| Con FK que la referencia | Valida fila por fila | No permitido si la FK está activa | Requiere CASCADE CONSTRAINTS |
Crear y documentar tablas
CREATE TABLE almacen.producto ( id_producto NUMBER(6), descripcion VARCHAR2(80) NOT NULL, precio_lista NUMBER(8,2), estado CHAR(1) DEFAULT 'A', fec_registro DATE DEFAULT SYSDATE ) TABLESPACE datos_app; COMMENT ON TABLE almacen.producto IS 'Catálogo de productos'; COMMENT ON COLUMN almacen.producto.id_producto IS 'Llave primaria'; DESC producto DROP TABLE producto CASCADE CONSTRAINTS PURGE; TRUNCATE TABLE producto;
Vistas, secuencias y sinónimos
CREATE OR REPLACE VIEW v_producto_activo AS SELECT id_producto, descripcion, precio_lista FROM producto WHERE estado = 'A'; CREATE SEQUENCE seq_producto START WITH 1 INCREMENT BY 1 NOCACHE; INSERT INTO producto (id_producto, descripcion) VALUES (seq_producto.NEXTVAL, 'Taladro percutor'); SELECT seq_producto.CURRVAL FROM dual; CREATE SYNONYM prod FOR almacen.producto;
Se crea una vista que selecciona solo las columnas permitidas y se otorga SELECT sobre la vista, no sobre la tabla. La vista no duplica datos: guarda únicamente la consulta.
Diccionario de datos
| Vista | Información |
|---|---|
| USER_TABLES / DBA_TABLES | Tablas del esquema o de toda la base |
| DBA_OBJECTS | Todos los objetos y su tipo |
| USER_TAB_COLUMNS | Columnas, tipo y longitud |
| USER_TAB_COMMENTS / USER_COL_COMMENTS | Comentarios de tablas y columnas |
| DBA_EXTENTS | Extents asignados a un segmento |
SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name = 'PRODUCTO'; SELECT file_id, block_id, blocks FROM dba_extents WHERE owner = 'ALMACEN' AND segment_name = 'PRODUCTO' AND segment_type = 'TABLE';
Clasifica las sentencias
¿DDL, DML, DCL o TCL?
Arrastra cada sentencia a su categoría
El borrado que no se pudo deshacer
Análisis- ¿Por qué el ROLLBACK no recuperó los datos?
- ¿Qué sentencia debió usar?
- ¿Qué más se truncó junto con la tabla?
1. TRUNCATE es DDL: no genera UNDO y ejecuta un COMMIT implícito.
2. DELETE FROM cotizacion WHERE …, que es DML y puede revertirse antes del COMMIT.
3. Los índices de la tabla.
Diseña la tabla
Construcción- Escribe el CREATE TABLE.
- Agrega un comentario a la tabla.
- ¿Qué vista confirma los tipos de las columnas?
CREATE TABLE mascota ( id_mascota NUMBER(6), nombre VARCHAR2(40) NOT NULL, especie CHAR(3), peso NUMBER(5,2), fec_registro DATE DEFAULT SYSDATE ); COMMENT ON TABLE mascota IS 'Pacientes de la veterinaria';
La vista USER_TAB_COLUMNS, o el comando DESC mascota.
No me deja eliminar la tabla
Diagnóstico- ¿Qué está impidiendo el borrado?
- ¿Qué cláusula lo permite?
- ¿Qué pasa con la tabla hija?
1. Otra tabla (por ejemplo LIBRO) tiene una FOREIGN KEY que referencia a CATEGORIA.
2. DROP TABLE categoria CASCADE CONSTRAINTS;
3. La tabla hija y sus filas permanecen; solo se elimina su restricción de llave foránea.
Constraints
Las cinco restricciones que convierten las reglas del negocio en garantías de la base de datos.
Integridad de datos
Integridad de datos significa que los datos de una base de datos se adhieren a las reglas del negocio. Puede imponerse con código de aplicación, con triggers o con restricciones (constraints); estas últimas son la forma declarativa y la preferida, porque la regla vive junto a la tabla.
| Restricción | Qué garantiza | Tipo en USER_CONSTRAINTS |
|---|---|---|
| NOT NULL | La columna no puede contener valores nulos. | C |
| UNIQUE | La columna o combinación de columnas no repite valores. | U |
| PRIMARY KEY | Identifica cada fila: única y no nula. Una por tabla. | P |
| FOREIGN KEY | El valor debe existir en la tabla padre (integridad referencial). | R |
| CHECK | Cada fila debe cumplir una condición. | C |
Reglas generales
- Si no se nombra la restricción, Oracle genera un nombre con el formato SYS_Cn.
- Puede crearse junto con la tabla o después, con ALTER TABLE.
- Puede definirse a nivel de columna o a nivel de tabla.
- Las restricciones impiden eliminar una tabla si hay dependencias.
Nivel de columna
Se escribe junto a la definición de la columna y afecta solo a esa columna. NOT NULL únicamente puede declararse así.
Nivel de tabla
Se escribe después de las columnas. Es obligatorio para restricciones que involucran varias columnas, como una llave compuesta.
Llave foránea y borrado
| Cláusula | Efecto al borrar la fila padre |
|---|---|
| Sin cláusula | El borrado se rechaza si existen filas hijas. |
| ON DELETE CASCADE | Se eliminan también las filas dependientes de la tabla hija. |
| ON DELETE SET NULL | Las filas hijas se conservan con la llave foránea en nulo. |
Definir restricciones
CREATE TABLE socio ( id_socio NUMBER(6) CONSTRAINT pk_socio PRIMARY KEY, -- nivel de columna nombre VARCHAR2(40) CONSTRAINT socio_nom_nn NOT NULL, dni CHAR(8), fec_inscripcion DATE CONSTRAINT socio_fins_nn NOT NULL, CONSTRAINT uk_socio_dni UNIQUE (dni) -- nivel de tabla ); CREATE TABLE reserva ( id_reserva NUMBER(6), id_socio NUMBER(6) NOT NULL, hora_inicio NUMBER(2), hora_fin NUMBER(2), monto NUMBER(6,2), CONSTRAINT pk_reserva PRIMARY KEY (id_reserva), CONSTRAINT fk_reserva_socio FOREIGN KEY (id_socio) REFERENCES socio (id_socio), CONSTRAINT ck_reserva_horas CHECK (hora_fin > hora_inicio) );
Agregar, eliminar y consultar
ALTER TABLE reserva ADD CONSTRAINT ck_reserva_monto CHECK (monto >= 0); ALTER TABLE reserva ADD CONSTRAINT fk_reserva_cancha FOREIGN KEY (id_cancha) REFERENCES cancha (id_cancha) ON DELETE CASCADE; ALTER TABLE reserva DROP CONSTRAINT ck_reserva_monto; SELECT table_name, constraint_name, constraint_type, r_constraint_name FROM user_constraints WHERE table_name = 'RESERVA'; SELECT constraint_name, column_name, position FROM user_cons_columns WHERE table_name = 'RESERVA'; SELECT index_name, index_type, uniqueness FROM user_indexes;
¿Qué restricción se viola?
Sistema de reservas de canchas con las tablas SOCIO, CANCHA y RESERVA. Predice el resultado de cada sentencia.
Validador de restricciones
Cinco pasos con puntaje acumulado
Esa fila referencia un socio que no existe en la tabla padre. Hay que cargar primero los padres faltantes o corregir el dato; desactivar la llave foránea solo trasladaría el problema, dejando datos sin integridad.
La data que no entra
Corrección de datos- ¿Qué filas se rechazan y por qué restricción?
- ¿Qué corrección aplicarías a cada una?
- ¿En qué orden deben cargarse las tablas?
1. Plan (2, Anual): viola PK_PLAN por duplicar el 2. Matrícula 11: viola la FK porque el plan 3 no existe. Matrícula 12: viola NOT NULL en FEC_INICIO.
2. Registrar el plan Anual con código 3 (lo que además resuelve la matrícula 11) y asignar una fecha a la matrícula 12.
3. Primero la tabla padre PLAN y luego MATRICULA.
Reglas del negocio a restricciones
Diseño- Asigna la restricción adecuada a cada regla.
- ¿Cuáles deben ir obligatoriamente a nivel de tabla?
- Propón nombres para dos de ellas.
1. Número único de contrato: PRIMARY KEY. Contrato sin cliente: NOT NULL más FOREIGN KEY hacia CLIENTE. Fechas: CHECK (fec_devolucion > fec_entrega). RUC: UNIQUE. Tarifa: CHECK (tarifa_diaria >= 0).
2. El CHECK de fechas, porque compara dos columnas.
3. Por ejemplo PK_CONTRATO y CK_CONTRATO_FECHAS.
Leer el diccionario
Interpretación- ¿Qué son las dos primeras?
- ¿Qué indica el tipo R?
- ¿Qué índice existe con seguridad?
1. Restricciones NOT NULL o CHECK que no fueron nombradas, por lo que Oracle les asignó SYS_Cn.
2. Integridad referencial: una llave foránea que apunta a la llave primaria PK_CLIENTE.
3. El índice único PK_FACTURA, creado implícitamente con la llave primaria.
Índices
Estructuras opcionales que aceleran las consultas: cuándo elegir B-Tree, cuándo Bitmap y cuándo ninguno.
¿Qué es un índice?
Un índice es una estructura opcional asociada a una tabla que puede acelerar el acceso a los datos al reducir las lecturas de disco. Es independiente de la tabla: puede crearse o eliminarse sin afectar las filas.
B-Tree frente a Bitmap
| Criterio | B-Tree | Bitmap |
|---|---|---|
| Cardinalidad recomendada | Alta: muchos valores distintos | Baja: pocos valores distintos |
| Actualizaciones sobre la columna | No son costosas | Son costosas |
| Consultas con OR | Ineficiente | Efectivo |
| Entorno típico | OLTP | Data warehousing |
| Sintaxis | CREATE INDEX | CREATE BITMAP INDEX |
Oracle ofrece además índices basados en función, que indexan el resultado de una expresión.
Cuándo no indexar
Costo en DML
Cada INSERT, UPDATE o DELETE debe mantener también los índices. Indexar todas las columnas degrada las operaciones de escritura.
Indexar con criterio
Se crean índices según la cantidad de valores distintos de la columna y las consultas reales que la usan en el WHERE.
Índices implícitos
PRIMARY KEY y UNIQUE ya crean su propio índice único: no hace falta crear otro.
Crear, mover y eliminar
CREATE INDEX cli_dni_ix ON cliente (dni) TABLESPACE indices01; CREATE BITMAP INDEX vta_region_bx ON venta (region); ALTER INDEX cli_dni_ix REBUILD TABLESPACE indices02; DROP INDEX vta_region_bx; SET TIMING ON SELECT COUNT(1) FROM venta WHERE region = 'SUR'; SELECT table_name, index_name, index_type, uniqueness FROM user_indexes WHERE table_name = 'VENTA';
| Vista | Contenido |
|---|---|
| DBA_INDEXES / USER_INDEXES | Índices, tipo (NORMAL, BITMAP) y unicidad |
| DBA_IND_COLUMNS | Columnas que componen cada índice |
| V$OBJECT_USAGE | Seguimiento del uso de los índices |
¿B-Tree o Bitmap?
Ajusta las características de la columna y observa la recomendación. El gráfico es un modelo didáctico de afinidad, no una medición real del optimizador.
Selector de tipo de índice
Tabla de referencia: 1 000 000 de filas
El país tiene pocos valores distintos frente al total de filas: baja cardinalidad. El B-Tree casi no ayuda porque cada valor apunta a miles de filas; el Bitmap resuelve el conteo operando directamente sobre los mapas de bits.
Dos columnas, dos índices
Decisión- ¿Qué tipo de índice corresponde a cada columna?
- Escribe las sentencias.
- ¿Cambiaría tu respuesta si la tabla fuera OLTP con actualizaciones constantes?
1. NOMBRE_COMPLETO: B-Tree, por alta cardinalidad. DEPARTAMENTO: Bitmap, por baja cardinalidad en un entorno analítico.
CREATE INDEX cli_nombre_ix ON cliente (nombre_completo); CREATE BITMAP INDEX cli_depto_bx ON cliente (departamento);
3. Sí: en OLTP las actualizaciones sobre una columna con bitmap son costosas, así que se evitaría el Bitmap.
El sistema se volvió lento al grabar
Diagnóstico- ¿Qué explica la degradación?
- ¿Qué criterio debió aplicarse?
- ¿Cómo se revisa qué índices existen?
1. Cada INSERT debe actualizar la tabla y los 14 índices; el costo de mantenimiento supera el beneficio.
2. Indexar solo las columnas usadas para filtrar o unir y con cardinalidad adecuada.
3. Consultando USER_INDEXES y DBA_IND_COLUMNS; V$OBJECT_USAGE ayuda a detectar los que no se usan.
Reorganizar el almacenamiento
Procedimiento- ¿Qué sentencia mueve un índice sin recrearlo manualmente?
- ¿Se pierden los datos de la tabla?
- ¿Qué cláusula habría evitado el problema al crearlo?
1. ALTER INDEX nombre REBUILD TABLESPACE idx_data;
2. No. El índice es una estructura separada; la tabla no se toca.
3. La cláusula TABLESPACE en CREATE INDEX.
Usuarios y privilegios
Quién puede entrar y qué puede hacer: cuentas, privilegios de sistema y de objeto, y su revocación.
La cuenta de usuario
Cada cuenta de usuario de base de datos tiene: un nombre único, un método de autenticación, un tablespace por defecto, un tablespace temporal, un perfil, un grupo consumidor y un estado de bloqueo.
SYS y SYSTEM
| Cuenta | Características |
|---|---|
| SYS | Dueña del diccionario de datos. Tiene todos los privilegios con ADMIN OPTION. Se requiere para iniciar, apagar y ejecutar mantenimiento. |
| SYSTEM | Tiene el rol DBA, pero no accede a las tablas internas X$ ni realiza backup, recovery o upgrade. |
Dos tipos de privilegios
De sistema
Habilitan a ejecutar acciones en la base de datos: CREATE SESSION, CREATE TABLE, CREATE USER. Existen más de 180.
WITH ADMIN OPTIONDe objeto
Habilitan a acceder y manipular un objeto específico: SELECT, INSERT, UPDATE, DELETE, EXECUTE sobre un objeto.
WITH GRANT OPTIONEl propietario de un objeto tiene todos los privilegios sobre él y puede otorgar privilegios específicos a otros usuarios, a roles o a PUBLIC.
Revocar: la gran diferencia
| Tipo de privilegio | Opción para delegar | Efecto de REVOKE |
|---|---|---|
| De sistema | WITH ADMIN OPTION | Sin cascada: quienes lo recibieron del usuario revocado lo conservan. |
| De objeto | WITH GRANT OPTION | Con cascada: quienes lo recibieron del usuario revocado también lo pierden. |
Administrar cuentas
CREATE USER caja01 IDENTIFIED BY Clave#2026 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 50M ON users PASSWORD EXPIRE; ALTER USER caja01 IDENTIFIED BY NuevaClave1; ALTER USER caja01 QUOTA UNLIMITED ON users; ALTER USER caja01 ACCOUNT LOCK; ALTER USER caja01 ACCOUNT UNLOCK; DROP USER caja01 CASCADE; SELECT username, account_status, profile FROM dba_users;
Otorgar y revocar
-- privilegios de sistema GRANT CREATE SESSION TO caja01; GRANT CREATE TABLE TO supervisor WITH ADMIN OPTION; REVOKE CREATE TABLE FROM supervisor; -- privilegios de objeto GRANT SELECT ON ventas.pedido TO caja01, caja02; GRANT UPDATE (estado, fec_entrega) ON ventas.pedido TO supervisor; GRANT SELECT, INSERT ON ventas.pedido TO supervisor WITH GRANT OPTION; GRANT SELECT ON ventas.producto TO PUBLIC; REVOKE SELECT, INSERT ON ventas.pedido FROM supervisor;
Clasifica privilegios y roles
Arrastra cada ítem a su tipo
Analizador de sentencias
Escribe una sentencia de seguridad y el analizador identificará su tipo, sus opciones y sus consecuencias.
Analizador de GRANT, REVOKE y cuentas
Clasificación por palabras clave
Por tratarse de un privilegio de objeto, la revocación es en cascada: los dos vendedores también pierden el acceso y verán ORA-00942. Si deben conservarlo, el propietario tiene que otorgárselo directamente o mediante un rol.
Tres errores seguidos
Diagnóstico- Identifica el error ORA de cada situación.
- Escribe la sentencia que lo corrige y quién la ejecuta.
(a) ORA-01045, falta CREATE SESSION. El DBA ejecuta GRANT CONNECT TO digitador;
(b) ORA-01950, sin cuota. El DBA ejecuta ALTER USER digitador QUOTA 100M ON users;
(c) ORA-00942, falta el privilegio de objeto. DIGITADOR, como propietario, ejecuta GRANT SELECT ON escritura TO revisor;
La cadena de permisos
Análisis- ¿Puede DIEGO seguir creando vistas?
- ¿Puede PAOLA seguir consultando RUTA?
- Explica la regla detrás de cada respuesta.
1. Sí. La revocación de privilegios de sistema no tiene efecto en cascada.
2. No. La revocación de privilegios de objeto sí es en cascada: PAOLA lo recibió a través de DIEGO.
3. ADMIN OPTION delega privilegios de sistema sin dependencia posterior; GRANT OPTION delega privilegios de objeto manteniendo la cadena.
Mínimo privilegio
Diseño- Escribe las sentencias necesarias.
- ¿Necesita cuota en algún tablespace?
CREATE USER asistente IDENTIFIED BY Temporal#1 PASSWORD EXPIRE; GRANT CREATE SESSION TO asistente; GRANT SELECT ON conta.asiento TO asistente; GRANT UPDATE (glosa) ON conta.asiento TO asistente;
No necesita cuota: no es dueño de ningún segmento. Los datos que modifica pertenecen al esquema CONTA.
Roles, perfiles y auditoría
Agrupar privilegios, limitar contraseñas y recursos, y dejar rastro de lo que ocurre.
Roles
Un rol es un conjunto de privilegios con nombre. Los privilegios se asignan al rol y el rol se asigna a los usuarios.
- Facilitan la administración de privilegios.
- Permiten una administración dinámica: al cambiar el rol, cambian todos sus usuarios.
- Ofrecen disponibilidad selectiva de privilegios.
| Rol predefinido | Privilegios incluidos |
|---|---|
| CONNECT | CREATE SESSION |
| RESOURCE | CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE, CREATE TRIGGER, CREATE TYPE, CREATE CLUSTER, entre otros |
| DBA | La mayoría de los privilegios de sistema. No debe otorgarse a no administradores. |
| SELECT_CATALOG_ROLE | Privilegios de objeto sobre el diccionario de datos |
| SCHEDULER_ADMIN | Administración de trabajos programados |
Perfiles
Un perfil es un conjunto de directivas que limita el uso de contraseñas y de recursos. Se asigna con CREATE USER o ALTER USER, solo a usuarios (no a roles). Todo usuario sin perfil explícito usa el perfil DEFAULT.
| Parámetro | Controla |
|---|---|
| FAILED_LOGIN_ATTEMPTS | Intentos fallidos consecutivos antes de bloquear la cuenta. |
| PASSWORD_LOCK_TIME | Días que la cuenta permanece bloqueada. |
| PASSWORD_LIFE_TIME | Días de vigencia de la contraseña. |
| PASSWORD_GRACE_TIME | Días de gracia con advertencia antes de que expire. |
| PASSWORD_REUSE_TIME | Días que deben pasar antes de reutilizar una contraseña. |
| PASSWORD_REUSE_MAX | Cambios requeridos antes de reutilizar una contraseña. |
| PASSWORD_VERIFY_FUNCTION | Función PL/SQL que valida la complejidad. |
| Parámetro | Controla |
|---|---|
| SESSIONS_PER_USER | Sesiones simultáneas por usuario. |
| CPU_PER_SESSION / CPU_PER_CALL | Tiempo de CPU en centésimas de segundo. |
| CONNECT_TIME | Duración total de la sesión, en minutos. |
| IDLE_TIME | Tiempo de inactividad continua, en minutos. |
| LOGICAL_READS_PER_SESSION / _PER_CALL | Bloques de datos leídos. |
| PRIVATE_SGA | Espacio privado en la SGA. |
| COMPOSITE_LIMIT | Costo total ponderado de recursos. |
Auditoría
Auditar es monitorizar y registrar los cambios realizados en los datos o en la estructura de los objetos. El parámetro AUDIT_TRAIL define dónde se guardan los registros: NONE (deshabilitada), DB, DB,EXTENDED (incluye el SQL y las variables bind), XML u OS.
| Tipo | Descripción |
|---|---|
| Obligatoria | Siempre activa: inicio y apagado de la base de datos y conexiones como SYSDBA, SYSOPER o SYSASM. |
| Estándar | Se habilita con el comando AUDIT sobre sentencias, privilegios y objetos. |
| Basada en valores | Captura los valores reales modificados por DML, usando triggers. |
| De grano fino | Audita según el contenido accedido o modificado. |
| Al usuario SYS | Registra en un archivo del sistema operativo; se activa con AUDIT_SYS_OPERATIONS. |
| Mixta | Por defecto en 12c: combina la auditoría tradicional con la unificada. |
Roles
CREATE ROLE rol_cajero; GRANT CREATE SESSION TO rol_cajero; GRANT SELECT, INSERT ON ventas.comprobante TO rol_cajero; GRANT rol_cajero TO caja01, caja02; REVOKE rol_cajero FROM caja02; SELECT * FROM role_sys_privs WHERE role = 'ROL_CAJERO'; SELECT * FROM role_tab_privs WHERE role = 'ROL_CAJERO'; SELECT * FROM user_role_privs;
| Vista | Muestra |
|---|---|
| ROLE_SYS_PRIVS | Privilegios de sistema concedidos a roles |
| ROLE_TAB_PRIVS | Privilegios sobre tablas concedidos a roles |
| USER_ROLE_PRIVS | Roles accesibles por el usuario |
| USER_SYS_PRIVS | Privilegios de sistema del usuario |
| USER_TAB_PRIVS_MADE / _RECD | Privilegios de objeto otorgados y recibidos |
Perfiles
CREATE PROFILE prf_soporte LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 PASSWORD_LIFE_TIME 30 PASSWORD_GRACE_TIME 5 SESSIONS_PER_USER 2 IDLE_TIME 60; ALTER USER soporte01 PROFILE prf_soporte; ALTER SYSTEM SET resource_limit = TRUE; SHOW PARAMETER resource SELECT * FROM dba_profiles WHERE profile = 'PRF_SOPORTE'; SELECT username, account_status, profile FROM dba_users WHERE username = 'SOPORTE01';
Bloqueo de cuenta por intentos fallidos
Configura el perfil y prueba conexiones
No se modifica DEFAULT, que afecta a todos. Se crea un perfil específico con FAILED_LOGIN_ATTEMPTS 3 y PASSWORD_LOCK_TIME UNLIMITED, y se asigna a esos usuarios con ALTER USER … PROFILE. El desbloqueo requerirá ALTER USER … ACCOUNT UNLOCK.
Diagnóstico de errores ORA
Ocho situaciones reales de administración. Elige la mejor acción antes de que se acabe el tiempo.
Guardia de DBA
20 segundos por situación · mejor, aceptable o incorrecta
Veinte cajeros, un solo cambio
Diseño- ¿Qué objeto simplifica esta administración?
- Escribe las sentencias para implementarlo.
- ¿Qué pasa con los cajeros cuando luego se agrega un privilegio al rol?
CREATE ROLE rol_cajero; GRANT CREATE SESSION TO rol_cajero; GRANT SELECT, INSERT ON ventas.comprobante TO rol_cajero; GRANT UPDATE (estado) ON ventas.comprobante TO rol_cajero; GRANT rol_cajero TO cajero01, cajero02; -- y los demás
Todos los usuarios que tienen el rol reciben el nuevo privilegio sin más sentencias: es la administración dinámica de privilegios.
El límite que no limitaba
Diagnóstico- ¿Qué explica la diferencia?
- ¿Qué sentencia lo corrige?
- ¿Qué error aparecerá en la tercera sesión?
1. Los límites de recursos requieren RESOURCE_LIMIT = TRUE; los de contraseña se aplican siempre.
2. ALTER SYSTEM SET resource_limit = TRUE;
3. ORA-02391: ha excedido el límite de SESSIONS_PER_USER simultáneas.
¿Quién cambió los precios?
Decisión- ¿Qué tipo de auditoría registra quién ejecutó el UPDATE?
- ¿Cuál captura el valor anterior y el nuevo?
- Menciona dos recomendaciones al activar auditoría.
1. La auditoría estándar (o una política de auditoría unificada) sobre UPDATE en esa tabla.
2. La auditoría basada en valores, implementada con triggers.
3. Ser específico en la acción y el objeto auditados en lugar de auditar todo de todos, y considerar activarla de forma temporal; además, registrar en modo base de datos.
Quiz 2 · DDL y seguridad
Diez preguntas sobre los temas 06 a 10 y el cierre del repaso.