Upload
vanthien
View
215
Download
0
Embed Size (px)
Citation preview
Gestión de Segmentos TemporalesGestión de Segmentos Temporales
11
11-2
ObjetivosObjetivos
• Entender los distintos tipos desegmentos temporales
• Dar espacio a segmentos temporales enla base de datos
• Obtener información de segmentostemporales desde una base de datos odesde una instancia
• Entender los distintos tipos desegmentos temporales
• Dar espacio a segmentos temporales enla base de datos
• Obtener información de segmentostemporales desde una base de datos odesde una instancia
11-3
Segmentos TemporalesSegmentos Temporales
Data file
Memoria
SORT_AREA_SIZE
11-4
Tipos de Segmentos TemporalesTipos de Segmentos Temporales
Temporaltablespace
Permanentetablespace
Memoria
11-5
Segmentos Temporalesen un Tablespace Permanente
Segmentos Temporalesen un Tablespace Permanente
• Creado cuando se necesitantransacciones con necesidades deordenación
• Reclamada por SMON cuando lasentencia SQL completa la ejecución
• Creado cuando se necesitantransacciones con necesidades deordenación
• Reclamada por SMON cuando lasentencia SQL completa la ejecución
11-6
Segmentos Temporales enun Tablespace Temporal
Segmentos Temporales enun Tablespace Temporal
• Conocidos como segmentos sort• Sólo un segmento por tablespace de
cada instancia• Creado cuando sucede la primera
llamada a sort en la instancia despuésdel startup (arranque)
• Reusado por distintas transaccionesbasadas en la información del SortExtent Pool
• Se libera la instancia al shutdown
• Conocidos como segmentos sort• Sólo un segmento por tablespace de
cada instancia• Creado cuando sucede la primera
llamada a sort en la instancia despuésdel startup (arranque)
• Reusado por distintas transaccionesbasadas en la información del SortExtent Pool
• Se libera la instancia al shutdown
11-7
Guías de uso para SegmentosTemporales
Guías de uso para SegmentosTemporales
• Activar distintos tablespaces TEMPORARYsegún las necesidades de sort
• Especificar DEFAULT STORAGE para lostablespaces según se muestra:– INITIAL= NEXT = (múltiplo de
SORT_AREA_SIZE) + DB_BLOCK_SIZE– PCTINCREASE = 0
• Activar distintos tablespaces TEMPORARYsegún las necesidades de sort
• Especificar DEFAULT STORAGE para lostablespaces según se muestra:– INITIAL= NEXT = (múltiplo de
SORT_AREA_SIZE) + DB_BLOCK_SIZE– PCTINCREASE = 0
11-8
Obtener Información de unaInstancia
Obtener Información de unaInstancia
DBA_SEGMENTS
V$SORT_SEGMENT
V$SORT_USAGE
11-9
Estadísticas del Segmento SortEstadísticas del Segmento Sort
V$SORT_SEGMENT• TABLESPACE_NAME• EXTENT_SIZE• TOTAL_EXTENTS• TOTAL_BLOCKS• USED_EXTENTS• USED_BLOCKS• FREE_EXTENTS• FREE_BLOCKS• MAX_SORT_SIZE
• MAX_SORT_BLOCKS
V$SORT_SEGMENT• TABLESPACE_NAME• EXTENT_SIZE• TOTAL_EXTENTS• TOTAL_BLOCKS• USED_EXTENTS• USED_BLOCKS• FREE_EXTENTS• FREE_BLOCKS• MAX_SORT_SIZE
• MAX_SORT_BLOCKS
11-10
Actividad de los SegmentosTemporales
Actividad de los SegmentosTemporales
V$SESSIONSADDRUSERNAMESID
V$SORT_USAGESESSION_ADDRTABLESPACECONTENTSEXTENTSBLOCKS
11-11
ResumenResumen
• Segmentos de clasificación temporalesen tablespaces permanentes
• Parámetros de almacenamiento parasegmentos temporales
• Segmentos de clasificación temporalesen tablespaces permanentes
• Parámetros de almacenamiento parasegmentos temporales
Gestión de TablasGestión de Tablas
12
11-13
ObjetivosObjetivos• Diferencias entre los tipos de tablas
Oracle• Crear tablas usando valores apropiados
de almacenamiento• Control del espacio utilizado por las
tablas• Análisis de tablas para comprobar la
integridad y migración• Recuperar información de las tablas
desde el diccionario de datos• Conversión de distintos formatos de
ROWID
• Diferencias entre los tipos de tablasOracle
• Crear tablas usando valores apropiadosde almacenamiento
• Control del espacio utilizado por lastablas
• Análisis de tablas para comprobar laintegridad y migración
• Recuperar información de las tablasdesde el diccionario de datos
• Conversión de distintos formatos deROWID
11-14
Almacenamiento de Datos de UsuarioAlmacenamiento de Datos de Usuario
Regulartable
Cluster
Partitionedtable
Index-organizedtable
11-15
Estructura de una filaEstructura de una fila
Databaseblock
Row headerColumn lengthColumn value
11-16
Tipos de datos OracleTipos de datos Oracle
CHAR(N), NCHAR(N)VARCHAR2(N),NVARCHAR2(N)NUMBER(P,S)DATERAW(N)BLOB, CLOB,NCLOB, BFILELONG, LONG RAWROWID
VARRAY
TABLE
REF
Data typeData type
Built-inBuilt-inUser-definedUser-defined
ScalarScalar RelationshipRelationshipCollectionCollection
11-17
Tipos de Datos para almacenarobjetos grandes
Tipos de Datos para almacenarobjetos grandes
LONG, LONG RAW
Una columna por tabla
Hasta 2 gigabytes
SELECT devuelve datos
Datos almacenados en línea
No soporta tipo de objeto
Acceso secuencial a partes
LOB
Múltiples columnas por tabla
Hasta 4 gigabytes
SELECT devuelve puntero
Datos almacenados il o ol
Soporta tipo de objeto
Acceso aleatorio a partes
11-18
Tipo de datos ROWIDTipo de datos ROWID
OOOOOO BBBBBBFFF RRR
Data objectnumber
Relative filenumber
Row numberBlock number
Formato ROWID
• identificador único para una fila• Usado para encontrar una fila• identificador único para una fila• Usado para encontrar una fila
11-19
ROWID RestringidoROWID Restringido
• Puede identificar filas dentro de unsegmento
• Necesita menos espacio
• Puede identificar filas dentro de unsegmento
• Necesita menos espacio
BBBBBBBB FFFFRRRR
Block number Row number File number
. .
11-20
Recolecciones y otrosRecolecciones y otros
• ‘Collections’ son objetos que contienen objetos.• VARRAYs son conjuntos ordenados de
elementos que contienen un contador y unlimite.
• Las tablas anidadas son tablas con unacolumna o variable de tipos de datos TABLE.
• ‘Collections’ son objetos que contienen objetos.• VARRAYs son conjuntos ordenados de
elementos que contienen un contador y unlimite.
• Las tablas anidadas son tablas con unacolumna o variable de tipos de datos TABLE.
VARRAY Nestedtable
11-21
Crear una tablaCrear una tabla
CREATE TABLE empleados(
empno NUMBER(4),
apellido VARCHAR2(30)
deptno NUMBER(2))
PCTFREE 20 PCTUSED 50
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE data01;
CREATE TABLE empleados(
empno NUMBER(4),
apellido VARCHAR2(30)
deptno NUMBER(2))
PCTFREE 20 PCTUSED 50
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE data01;
• Ojo: el comando OPTIMAL sólo se puede usar al crear segmentos rollback• Ojo: el comando OPTIMAL sólo se puede usar al crear segmentos rollback
11-22
Crear Tablas: GuíaCrear Tablas: Guía
• Use una cantidad apropiada deextensiones para para reducir lafragmentación del tablespace.• Use la cláusula CACHE para tablasusadas de forma muy frecuente y quesean pequeñas.
• Use una cantidad apropiada deextensiones para para reducir lafragmentación del tablespace.• Use la cláusula CACHE para tablasusadas de forma muy frecuente y quesean pequeñas.
11-23
Valores PCTFREE y PCTUSEDValores PCTFREE y PCTUSED• Cálculo de PCTFREE• Cálculo de PCTFREE
Depende de lo que pensemos que puedecambiar un dato. Es lo que dejamos en elcontenedor para posibles actualizaciones
de datos
• Cálculo de PCTUSED• Cálculo de PCTUSEDAverage Row Size * 100
100-PCTFREE-Available Data Space
11-24
Migración de filas y encadenamientoMigración de filas y encadenamiento
Antes deactualizar
Después deactualizar
11-25
Copiar una tabla existenteCopiar una tabla existente
CREATE TABLE nuevos_empleados
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
NOLOGGING
TABLESPACE data01
AS
SELECT * FROM scott.employees;
CREATE TABLE nuevos_empleados
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
NOLOGGING
TABLESPACE data01
AS
SELECT * FROM scott.employees;
11-26
Cambiar parámetros dealmacenamiento y de bloques
Cambiar parámetros dealmacenamiento y de bloques
ALTER TABLE scott.employees
PCTFREE 30
PCTUSED 50
STORAGE(NEXT 500K
MINEXTENTS 2
MAXEXTENTS 100);
ALTER TABLE scott.employees
PCTFREE 30
PCTUSED 50
STORAGE(NEXT 500K
MINEXTENTS 2
MAXEXTENTS 100);
11-27
Alojamiento manual de extensionesAlojamiento manual de extensiones
ALTER TABLE scott.employees
ALLOCATE EXTENT(SIZE 500K
DATAFILE ‘/DISK3/DATA01.DBF’);
ALTER TABLE scott.employees
ALLOCATE EXTENT(SIZE 500K
DATAFILE ‘/DISK3/DATA01.DBF’);
11-28
Free space after deleteUnused block
High water mark
Extent ID 0 1 2 3 4
Extent ID 0 1 2 3 4
Used block
High Water MarkHigh Water MarkDespués de insertar
Después de borrar
11-29
Búsqueda del High Water Mark:DBMS_SPACE.UNUSED_SPACEBúsqueda del High Water Mark:DBMS_SPACE.UNUSED_SPACE
Extent ID 0 1 2 3 4
High water markLAST_USED_EXTENT_FILE_ID,LAST_USED_EXTENT_BLOCK_ID
TOTAL_BLOCKS
UNUSED_BLOCKS
11-30
Free space after deleteUnused block
High water mark
Antes deldesalojamiento
Used block
Desalojar el espacio no utilizadoDesalojar el espacio no utilizado
ALTER TABLE scott.employees
DEALLOCATE UNUSED;
ALTER TABLE scott.employees
DEALLOCATE UNUSED;
Después deldesalojamiento
11-31
Truncar una TablaTruncar una Tabla
TRUNCATE TABLE scott.employees;TRUNCATE TABLE scott.employees;
Extent ID 0 1
High water mark
Free space
11-32
Borrar TablasBorrar Tablas
DROP TABLE scott.departments
CASCADE CONSTRAINTS;
DROP TABLE scott.departments
CASCADE CONSTRAINTS;
11-33
Validar estructuras de la tablaValidar estructuras de la tabla
• El servidor Oracle verifica la integridadde cada bloque de datos.
• Use la opción CASCADE para validar laestructura de todos los índices de lastablas y ejecutar las referenciascruzadas entre las tablas y sus índices.
• El servidor Oracle verifica la integridadde cada bloque de datos.
• Use la opción CASCADE para validar laestructura de todos los índices de lastablas y ejecutar las referenciascruzadas entre las tablas y sus índices.
ANALYZE TABLE scott.employees
VALIDATE STRUCTURE;
ANALYZE TABLE scott.employees
VALIDATE STRUCTURE;
11-34
Detectar cambios de filasDetectar cambios de filas• El servidor Oracle mantiene estadísticas
basadas en datos simples y actualiza-ciones del diccionario de datos.
• Comprobar CHAIN_CNT
• El servidor Oracle mantiene estadísticasbasadas en datos simples y actualiza-ciones del diccionario de datos.
• Comprobar CHAIN_CNT
ANALYZE TABLE scott.employees
ESTIMATE STATISTICS;
ANALYZE TABLE scott.employees
ESTIMATE STATISTICS;
SELECT chain_cnt
FROM DBA_TABLES
WHERE table_name=‘EMPLOYEES’AND owner=‘SCOTT’;
SELECT chain_cnt
FROM DBA_TABLES
WHERE table_name=‘EMPLOYEES’AND owner=‘SCOTT’;
11-35
Recuperación de la Información de TablasRecuperación de la Información de Tablas
DBA_OBJECTS
OWNEROBJECT_NAMEOBJECT_IDDATA_OBJECT_IDCREATED
DBA_SEGMENTS
OWNERSEGMENT_NAMETABLESPACE_NAMEHEADER_FILEHEADER_BLOCK
DBA_TABLES
OWNERTABLE_NAMEPCT_FREEPCT_USEDINITIAL_EXTENTNEXT_EXTENTMIN_EXTENTSMAX_EXTENTSPCT_INCREASECACHEBLOCKSEMPTY_BLOCKSCHAIN_CNT
11-36
DBA_EXTENTS• OWNER• SEGMENT_NAME• EXTENT_ID• FILE_ID• BLOCK_ID• BLOCKS
DBA_EXTENTS• OWNER• SEGMENT_NAME• EXTENT_ID• FILE_ID• BLOCK_ID• BLOCKS
Recuperar Información deextensiones
Recuperar Información deextensiones
11-37
Paquete DBMS_ROWIDPaquete DBMS_ROWID
Function Name
ROWID_CREATE
ROWID_OBJECT
ROWID_RELATIVE_FNO
ROWID_BLOCK_NUMBER
ROWID_ROW_NUMBER
ROWID_TO_ABSOLUTE_FNO
ROWID_TO_EXTENDED
ROWID_TO_RESTRICTED
Descripción
Crea un ROWID desde componentes individuales
Devuelve el identificador de objeto desde un ROWID
Devuelve el número relativo de fila desde un ROWID
Devuelve el número de bloque desde un ROWID
Devuelve el número de columna desde un ROWID
Devuelve el número de fila absoluto desde un ROWID
Convierte un ROWID a extendido desde restringido
Convierte un ROWID a restringido desde extendido
Funciones usadas comúnmente:Funciones usadas comúnmente:
11-38
ResumenResumen
• Crear tablas con parámetrosapropiados de almacenamiento ybloques
• Controlar almacenamiento de tablas• Uso del paquete DBMS_ROWID
• Crear tablas con parámetrosapropiados de almacenamiento ybloques
• Controlar almacenamiento de tablas• Uso del paquete DBMS_ROWID
Manejo de ÍndicesManejo de Índices
13
11-40
ObjetivosObjetivos
• Mostrar los distintos tipos de índices ysus usos
• Crear índices B-tree y de Bitmap• Reorganizar índices• Borrar indexes• Obtener información de los índices
desde el diccionario de datos
• Mostrar los distintos tipos de índices ysus usos
• Crear índices B-tree y de Bitmap• Reorganizar índices• Borrar indexes• Obtener información de los índices
desde el diccionario de datos
11-41
Clasificación de ÍndicesClasificación de Índices
Lógica• De columna simple o concatenados• Únicos o no únicosFísica• Particionados o no particionados• B-tree o bitmap
– Normales o de clave inversa (sólo enB-tree)
Lógica• De columna simple o concatenados• Únicos o no únicosFísica• Particionados o no particionados• B-tree o bitmap
– Normales o de clave inversa (sólo enB-tree)
11-42
Índices B-TreeÍndices B-Tree
Index entry headerKey column lengthKey column valueROWID
Root
Branch
Leaf
Index entry
11-43
KEY ROWID
EMPNO (BLOCK# ROW# FILE#)----- -------------------1257 0000000F.0002.00012877 0000000F.0006.00014567 0000000F.0004.00016657 0000000F.0003.00018967 0000000F.0005.00019637 0000000F.0001.00019947 0000000F.0000.0001... ...... ...
Índices invertidosÍndices invertidosIndex on EMP (EMPNO) EMP table
EMPNO ENAME JOB ...----- ----- --------7499 ALLEN SALESMAN7369 SMITH CLERK7521 WARD SALESMAN ...7566 JONES MANAGER7654 MARTIN SALESMAN7698 BLAKE MANAGER7782 CLARK MANAGER... ... ... ...... ... ... ...
11-44
Índices BitmapÍndices Bitmap
<Blue, 10.0.3, 12.8.3, 1000100100010010100>
<Green, 10.0.3, 12.8.3, 0001010000100100000>
<Red, 10.0.3, 12.8.3, 0100000011000001001>
<Yellow, 10.0.3, 12.8.3, 0010001000001000010>
keystartROWID
endROWID bitmap
Table
Index
Block 10
Block 11
Block 12
File 3
11-45
Comparación entre índicesB-Tree y Bitmap
Comparación entre índicesB-Tree y Bitmap
B-tree
Aconsejable para altacardinalidad de columnas
Actualizaciones en clavesrelativamente económicas
Ineficiente para consultasutilizando el predicado OR
Recomendado para OLTP
Bitmap
Aconsejable para baja cardinalidadde columnas
Actualizaciones en clavescostosas
Eficientes para consultasutilizando el predicado OR
Recomendado para DSS
11-46
Crear índices normales B-TreeCrear índices normales B-Tree
CREATE INDEX scott.emp_lname_idx
ON scott.employees(last_name)
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
CREATE INDEX scott.emp_lname_idx
ON scott.employees(last_name)
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
11-47
Crear Índices: GuíasCrear Índices: Guías• Balancear las necesidades de consultas y de
manejo de datos ( DML)• Ponerlos en distintos tablespaces• Usar extensiones uniformes de tamaño:
múltiplos de cinco bloques o de tamañoMINIMUM EXTENT para el tablespace
• Considerara NOLOGGING para índices muygrandes
• Poner un PCTFREE alto si los valores de lanueva clave son parecidos a los que estándentro del rango actual
• Balancear las necesidades de consultas y demanejo de datos ( DML)
• Ponerlos en distintos tablespaces• Usar extensiones uniformes de tamaño:
múltiplos de cinco bloques o de tamañoMINIMUM EXTENT para el tablespace
• Considerara NOLOGGING para índices muygrandes
• Poner un PCTFREE alto si los valores de lanueva clave son parecidos a los que estándentro del rango actual
11-48
Crear Reverse Key IndexesCrear Reverse Key Indexes
CREATE UNIQUE INDEX scott.ord_ord_no_idx
ON scott.ord(ord_no) REVERSE
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
CREATE UNIQUE INDEX scott.ord_ord_no_idx
ON scott.ord(ord_no) REVERSE
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
11-49
Crear Índices BitmapCrear Índices Bitmap
CREATE BITMAP INDEX scott.ord_region_id_idx
ON scott.ord(region_id)
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
CREATE BITMAP INDEX scott.ord_region_id_idx
ON scott.ord(region_id)
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
11-50
Cambiar parámetros dealmacenamiento para Índices
Cambiar parámetros dealmacenamiento para Índices
ALTER INDEX scott.emp_lname_idx
STORAGE(NEXT 400K
MAXEXTENTS 100);
ALTER INDEX scott.emp_lname_idx
STORAGE(NEXT 400K
MAXEXTENTS 100);
11-51
Alojar y desalojar los espaciosocupados por los Índices
Alojar y desalojar los espaciosocupados por los Índices
ALTER INDEX scott.ord_region_id_idx
ALLOCATE EXTENT (SIZE 200K
DATAFILE ‘/DISK6/indx01.dbf’);
ALTER INDEX scott.ord_region_id_idx
ALLOCATE EXTENT (SIZE 200K
DATAFILE ‘/DISK6/indx01.dbf’);
ALTER INDEX scott.ord_ord_no_idx
DEALLOCATE UNUSED;
ALTER INDEX scott.ord_ord_no_idx
DEALLOCATE UNUSED;
11-52
Regeneración de ÍndicesRegeneración de Índices
ALTER INDEX scott.ord_region_id_idx
REBUILD
TABLESPACE indx02;
ALTER INDEX scott.ord_region_id_idx
REBUILD
TABLESPACE indx02;
Use este comando para:• Mover un índice a un tablespace distinto• Recuperar espacio de datos borrados• Cambiar una clave “reverse” a una clave
normal B-tree y viceversa
Use este comando para:• Mover un índice a un tablespace distinto• Recuperar espacio de datos borrados• Cambiar una clave “reverse” a una clave
normal B-tree y viceversa
11-53
Comprobación de ÍndicesComprobación de Índices
ANALYZE INDEX scott.ord_region_id_idx
VALIDATE STRUCTURE;
ANALYZE INDEX scott.ord_region_id_idx
VALIDATE STRUCTURE;
INDEX_STATS
11-54
Borrado de ÍndicesBorrado de Índices
• Borrar y recrear índices antes de unacarga masiva de datos.
• Borre índices que no sean utilizados deforma frecuente y constrúyalos cuandosea necesario.
• Borre y recree índices individuales.
• Borrar y recrear índices antes de unacarga masiva de datos.
• Borre índices que no sean utilizados deforma frecuente y constrúyalos cuandosea necesario.
• Borre y recree índices individuales.
DROP INDEX scott.dept_dname_idx;DROP INDEX scott.dept_dname_idx;
11-55
Obtener Información de los ÍndicesObtener Información de los Índices
DBA_INDEXESOWNERINDEX_NAMEINDEX_TYPETABLE_OWNERTABLE_NAMEUNIQUENESSTABLESPACE_NAMELOGGINGSTATUS
DBA_INDEXESOWNERINDEX_NAMEINDEX_TYPETABLE_OWNERTABLE_NAMEUNIQUENESSTABLESPACE_NAMELOGGINGSTATUS
DBA_IND_COLUMNSINDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTH
DBA_IND_COLUMNSINDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTH
11-56
ResumenResumen
• Crear diferentes tipos de índices• Reorganizar índices• Crear diferentes tipos de índices• Reorganizar índices
Mantener la integridad de los datosMantener la integridad de los datos
14
11-58
ObjetivosObjetivos
• Implementar la integridad de datos ydisparadores.
• Mantener la integridad de constraints yde triggers
• Obtener información de constraint y detrigger a partir del diccionario de datos
• Implementar la integridad de datos ydisparadores.
• Mantener la integridad de constraints yde triggers
• Obtener información de constraint y detrigger a partir del diccionario de datos
11-59
Integridad de datosIntegridad de datos
Applicationcode
Integrityconstraint
Databasetrigger
Table
Data
11-60
Tipos de restriccionesTipos de restriccionesConstraintNOT NULL
UNIQUE
PRIMARYKEY
FOREIGNKEY
CHECK
DescripciónEspecifica que una columna no puedecontener valores nulosDesigna una columna o combinación decolumnas como únicasDesigna una columna o combinación decolumnas como clave primariaDesigna una columna o combinación decolumnas como clave ajena en unarestricción de integridad referencial
Especifica una condición que debecumplir cada fila de la tabla
11-61
Estados de las restricciones(Constraints)
Estados de las restricciones(Constraints)
DisabledDisabled EnablednovalidateEnablednovalidate
EnabledvalidateEnabledvalidate
Existing dataNew data
11-62
Constraints DiferidasConstraints Diferidas
DML statementDML statement
Check nondeferredconstraintsCheck nondeferredconstraints
COMMITCOMMIT
Check deferredconstraintsCheck deferredconstraints
11-63
Forzado de claves primaria oúnica
Forzado de claves primaria oúnica
No use índices Crear claveúnica
Use el índiceexistente
¿Hay algúníndiceactivado?
Si
No No
Si
Constraintdiferible?
Crear claveno única
Si
No
¿Claves activadas?
11-64
Consideraciones de las Foreign KeyConsideraciones de las Foreign Key
ParaDrop parent tableTruncate parent tableDrop tablespacecontaining parenttableAvoid locks on childtable while performingDML on parent tablePerform DML on childtable
EjecutarCascade constraintsDisable/drop foreign keyUse CASCADE CONSTRAINTSclause
Create index on foreign key
Ensure tablespace containingparent key index online
11-65
Disparadores de la Base de DatosDisparadores de la Base de Datos
Table
Trigger
DML action
Tipos de Triggers• INSERT o UPDATE o DELETE• BEFORE o AFTER• ROW o STATEMENT
Tipos de Triggers• INSERT o UPDATE o DELETE• BEFORE o AFTER• ROW o STATEMENT
11-66
Definir Constraints cuando secrea una tabla
Definir Constraints cuando secrea una tabla
CREATE TABLE nominas.empleados(
empno NUMBER(4)
CONSTRAINT emp_pk PRIMARY KEY
DEFERRABLE
USING INDEX
STORAGE(INITIAL 100K NEXT 100K)
TABLESPACE indx01,
apellido VARCHAR2(30)
CONSTRAINT emp_ln_nn NOT NULL,
departamento NUMBER(2))
TABLESPACE data01;
CREATE TABLE nominas.empleados(
empno NUMBER(4)
CONSTRAINT emp_pk PRIMARY KEY
DEFERRABLE
USING INDEX
STORAGE(INITIAL 100K NEXT 100K)
TABLESPACE indx01,
apellido VARCHAR2(30)
CONSTRAINT emp_ln_nn NOT NULL,
departamento NUMBER(2))
TABLESPACE data01;
11-67
Guías para definir ConstraintsGuías para definir Constraints
• Restricciones únicas y primarias:– Poner los índices en distintos
tablespaces (sugerencia)– Usar índices nonunique si las cargas
de datos son frecuentes• Claves ajenas autoreferenciadas:
– Definir o activar las claves ajenasdespués de la carga inicial
– Diferir la comprobación del constraint
• Restricciones únicas y primarias:– Poner los índices en distintos
tablespaces (sugerencia)– Usar índices nonunique si las cargas
de datos son frecuentes• Claves ajenas autoreferenciadas:
– Definir o activar las claves ajenasdespués de la carga inicial
– Diferir la comprobación del constraint
11-68
Desactivar ConstraintsDesactivar Constraints• Desactivar antes de la carga masiva,
especialmente las FKautoreferenciadas.
• Desactivar las FK antes de desactivarlas claves ajenas referenciadas.
• Los índices únicos se borrar pero losno únicos se mantienen.
• Desactivar antes de la carga masiva,especialmente las FKautoreferenciadas.
• Desactivar las FK antes de desactivarlas claves ajenas referenciadas.
• Los índices únicos se borrar pero losno únicos se mantienen.
ALTER TABLE nomina.departamentos
DISABLE CONSTRAINT dept_pk CASCADE;
ALTER TABLE nomina.departamentos
DISABLE CONSTRAINT dept_pk CASCADE;
11-69
Activación de ConstraintsActivación de Constraints
EnableNOVALIDATE
• No puede haberbloqueos en la tabla• Las clavesprimary/unique puedenusar índices no únicos
• No puede haberbloqueos en la tabla• Las clavesprimary/unique puedenusar índices no únicos
ALTER TABLE scott.departments
ENABLE NOVALIDATE CONSTRAINT dept_pk;
ALTER TABLE scott.departments
ENABLE NOVALIDATE CONSTRAINT dept_pk;
11-70
Activación de ConstraintsActivación de Constraints
EnableVALIDATE
• Bloquear la tabla• Se pueden usar
índices únicos o noúnicos
• Necesita validar losdatos de la tabla
• Bloquear la tabla• Se pueden usar
índices únicos o noúnicos
• Necesita validar losdatos de la tabla
ALTER TABLE nomina.empleados
ENABLE VALIDATE CONSTRAINT emp_dept_fk;
ALTER TABLE nomina.empleados
ENABLE VALIDATE CONSTRAINT emp_dept_fk;
11-71
Usar la tabla EXCEPTIONSUsar la tabla EXCEPTIONS
1. Crear la tabla EXCEPTIONS(utlexcpt.sql).
2. Executar ALTER TABLE con laclaúsula EXCEPTIONS.
3. Usar subconsultas ON EXCEPTIONSpara localizar filas con datos inválidos.
4. Rectificar los errores.5. Reejecutar ALTER TABLE para activar
las constraints.
1. Crear la tabla EXCEPTIONS(utlexcpt.sql).
2. Executar ALTER TABLE con laclaúsula EXCEPTIONS.
3. Usar subconsultas ON EXCEPTIONSpara localizar filas con datos inválidos.
4. Rectificar los errores.5. Reejecutar ALTER TABLE para activar
las constraints.
11-72
Desactivación y activación deTriggers
Desactivación y activación deTriggers
• Use ALTER TRIGGER para desactivar oactivar un trigger.
• Use ALTER TABLE para desactivar oactivar todos los triggers.
• Use ALTER TRIGGER para desactivar oactivar un trigger.
• Use ALTER TABLE para desactivar oactivar todos los triggers.
ALTER TRIGGER nomina.emp_conv_ln
DISABLE;
ALTER TRIGGER nomina.emp_conv_ln
DISABLE;
ALTER TABLE nomina.empleados
ENABLE ALL TRIGGERS;
ALTER TABLE nomina.empleados
ENABLE ALL TRIGGERS;
11-73
Borrar ConstraintsBorrar Constraints
• Usando el comando:
• Borra una tabla y su FK referenciada:
• Usando el comando:
• Borra una tabla y su FK referenciada:
ALTER TABLE scott.employees
DROP CONSTRAINT emp_ln_uk;
ALTER TABLE scott.employees
DROP CONSTRAINT emp_ln_uk;
DROP TABLE departments
CASCADE CONSTRAINTS;
DROP TABLE departments
CASCADE CONSTRAINTS;
11-74
Borrar TriggersBorrar Triggers
DROP TRIGGER scott.audit_dept;DROP TRIGGER scott.audit_dept;
11-75
Obtener Información de ConstraintsObtener Información de ConstraintsDBA_CONSTRAINTSOWNERCONSTRAINT_NAMECONSTRAINT_TYPETABLE_NAMESEARCH_CONDITIONR_OWNERR_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEDEFERREDVALIDATEDGENERATEDBADLAST_CHANGE
DBA_CONS_COLUMNSOWNERCONSTRAINT_NAMETABLE_NAMECOLUMN_NAMEPOSITION
11-76
Obtener Información de TriggersObtener Información de Triggers
DBA_TRIGGERSOWNERTRIGGER_NAMETRIGGER_TYPETRIGGERING_EVENTTABLE_OWNERTABLE_NAMESTATUSDESCRIPTIONTRIGGER_BODY
DBA_TRIGGER_COLSTRIGGER_OWNERTRIGGER_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAME
DBA_OBJECTSOWNEROBJECT_NAMEOBJECT_TYPESTATUS
11-77
ResumenResumen
• Implementación de constraints y detriggers
• Uso de estrategias apropiadas paracrear y mantener constraints
• Implementación de constraints y detriggers
• Uso de estrategias apropiadas paracrear y mantener constraints
Usar Clusters y TablasOrganizadas por ÍndicesUsar Clusters y Tablas
Organizadas por Índices(no entra)(no entra)
15
11-79
ObjetivosObjetivos
• Crear y mantener clusters• Usar tablas organizadas por índices• Recuperar información de clusters y
tablas desde el diccionario de datos
• Crear y mantener clusters• Usar tablas organizadas por índices• Recuperar información de clusters y
tablas desde el diccionario de datos
11-80
Distribución de Rows dentro delas Tablas
Distribución de Rows dentro delas Tablas
Cluster Index-organizedtable
Table
Random
Ordering of Rows
Grouped Ordered
11-81
ClustersClusters
Clustered ORDand ITEM tables
Cluster Key(ORD_NO)101 ORD_DT CUST_CD
05-JAN-97 R01
PROD QTYA4102 20A5675 19
W0824 10102 ORD_DT CUST_CD
07-JAN-97 N45PROD QTYA2091 11G7830 20
N9587 26
Unclustered ORDand ITEM tables
ORD_NO PROD QTY ...----- ------ ------
101 A4102 20102 A2091 11102 G7830 20102 N9587 26101 A5675 19101 W0824 10
ORD_NO ORD_DT CUST_CD------ ------ ------
101 05-JAN-97R01102 07-JAN-97N45
11-82
Tipos de ClustersTipos de ClustersIndex cluster Hash cluster
Hash function
11-83
1 . Crear un cluster.
2 . Crear un índice de cluster.
1 . Crear un cluster.
2 . Crear un índice de cluster.
Crear Índices de ClustersCrear Índices de Clusters
CREATE CLUSTER scott.ord_clu
(ord_no NUMBER(3))
SIZE 200 TABLESPACE DATA01
STORAGE(INITIAL 5M NEXT 5M PCTINCREASE 0);
CREATE CLUSTER scott.ord_clu
(ord_no NUMBER(3))
SIZE 200 TABLESPACE DATA01
STORAGE(INITIAL 5M NEXT 5M PCTINCREASE 0);
CREATE INDEX scott.ord_clu_idx
ON CLUSTER scott.ord_clu
TABLESPACE INDX01
STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0);
CREATE INDEX scott.ord_clu_idx
ON CLUSTER scott.ord_clu
TABLESPACE INDX01
STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0);
11-84
Crear Índices de ClustersCrear Índices de Clusters
CREATE TABLE scott.ord
(ord_no NUMBER(3)
CONSTRAINT ord_pk PRIMARY KEY,
ord_dt DATE, cust_cd VARCHAR2(3))
CLUSTER scott.ord_clu(ord_no);
CREATE TABLE scott.ord
(ord_no NUMBER(3)
CONSTRAINT ord_pk PRIMARY KEY,
ord_dt DATE, cust_cd VARCHAR2(3))
CLUSTER scott.ord_clu(ord_no);
3 . Crear tablas en el cluster.3 . Crear tablas en el cluster.
CREATE TABLE scott.item
(ord_no NUMBER(3) CONSTRAINT item_ord_fk
REFERENCES scott.ord,
prod VARCHAR2(5), qty NUMBER(3),
CONSTRAINT item_pk PRIMARY KEY(ord_no,prod))
CLUSTER scott.ord_clu(ord_no);
CREATE TABLE scott.item
(ord_no NUMBER(3) CONSTRAINT item_ord_fk
REFERENCES scott.ord,
prod VARCHAR2(5), qty NUMBER(3),
CONSTRAINT item_pk PRIMARY KEY(ord_no,prod))
CLUSTER scott.ord_clu(ord_no);
11-85
1 . Crear a cluster.
2 . Crear tablas en un cluster.
1 . Crear a cluster.
2 . Crear tablas en un cluster.
Crear Clusters HashCrear Clusters Hash
CREATE CLUSTER scott.off_clu
(country VARCHAR2(2),postcode VARCHAR2(8))
SIZE 500 HASHKEYS 1000
TABLESPACE DATA01
STORAGE(INITIAL 5M NEXT 5M PCTINCREASE 0);
CREATE CLUSTER scott.off_clu
(country VARCHAR2(2),postcode VARCHAR2(8))
SIZE 500 HASHKEYS 1000
TABLESPACE DATA01
STORAGE(INITIAL 5M NEXT 5M PCTINCREASE 0);
CREATE TABLE scott.office(
office_cd NUMBER(3), cost_ctr NUMBER(3),
country VARCHAR2(2), postcode VARCHAR2(8))
CLUSTER scott.off_clu(country,postcode);
CREATE TABLE scott.office(
office_cd NUMBER(3), cost_ctr NUMBER(3),
country VARCHAR2(2), postcode VARCHAR2(8))
CLUSTER scott.off_clu(country,postcode);
11-86
Definir SIZE para los ClustersDefinir SIZE para los Clusters
• Define el espacio usado por todas lascolumnas para una clave dada.
• Usada en ambos tipos de clusters paraestimar:– El máximo número de valores de
claves por bloque para un índice decluster
– El número exacto de valores de laclave para cada bloque hash
• Define el espacio usado por todas lascolumnas para una clave dada.
• Usada en ambos tipos de clusters paraestimar:– El máximo número de valores de
claves por bloque para un índice decluster
– El número exacto de valores de laclave para cada bloque hash
11-87
Parámetros específicos paraClusters Hash
Parámetros específicos paraClusters Hash
• HASHKEYS: Número de valores de clave• HASH IS: Función hash opcional definida
por el usuario
• HASHKEYS: Número de valores de clave• HASH IS: Función hash opcional definida
por el usuario
Preallocated blocks
Key 2Key 1
Key 12Key 11
Key 3
Overflow block
Key 22
Key 21
11-88
Cambiar parámetros de almacenamientoCambiar SIZE de los índices de clustersAlojar y desalojar espacio
SIZE, HASH IS o HASHKEYS no puedenser modificadas en cluster hash
Cambiar parámetros de almacenamientoCambiar SIZE de los índices de clustersAlojar y desalojar espacio
SIZE, HASH IS o HASHKEYS no puedenser modificadas en cluster hash
ALTER CLUSTER scott.ord_clu
SIZE 300 STORAGE (NEXT 2M);
ALTER CLUSTER scott.ord_clu
SIZE 300 STORAGE (NEXT 2M);
Modificar ClustersModificar Clusters
11-89
Usar INCLUDING TABLES para borrartablas y clusters
o borrar las tablas después de borrar loscluster.
Usar INCLUDING TABLES para borrartablas y clusters
o borrar las tablas después de borrar loscluster.
DROP CLUSTER scott.ord_clu
INCLUDING TABLES;
DROP CLUSTER scott.ord_clu
INCLUDING TABLES;
DROP TABLE scott.ord;
DROP TABLE scott.item;
DROP CLUSTER scott.ord_clu;
DROP TABLE scott.ord;
DROP TABLE scott.item;
DROP CLUSTER scott.ord_clu;
Borrar ClustersBorrar Clusters
11-90
Situaciones donde los clustersson convenientes
Situaciones donde los clustersson convenientes
Criterion
Uniform key distribution
Evenly spread key values
Rarely updated key
Often joined master-detail tables
Predictable number of key values
Queries using equality predicate on key
HashIndex
11-91
Recuperar Información del ClusterRecuperar Información del Cluster
DBA_CLU_COLUMNSOWNERCLUSTER_NAMECLU_COLUMN_NAMETABLE_NAMETAB_COLUMN_NAME
DBA_CLUSTER_HASH_EXPRESSIONSOWNERCLUSTER_NAMEHASH_EXPRESSION
DBA_CLUSTERSOWNERCLUSTER_NAMETABLESPACE_NAMEKEY_SIZECLUSTER_TYPEFUNCTIONHASHKEYS
DBA_TAB_COLUMNSOWNERTABLE_NAMECOLUMN_NAMEDATA_TYPEDATA_LENGTHDATA_PRECISIONDATA_SCALE
11-92
Indexed accesson table
ROWID
Tablas Index-OrganizedTablas Index-OrganizedAccessing index-organized table
Non-key columnsKey column
Row header
11-93
Tablas Organizadas por Índice
Identificadas por clave primaria
No ROWIDNo admiten índices secundarios
Busca en todo el índice y devuelvefilas en el orden de la PK
No soporta la restricciónunique
No se soporta distribución,replicación y particionado
Tablas organizadas por índicescomparadas con tablas regularesTablas organizadas por índices
comparadas con tablas regularesTablas Regulares
identificador único—ROWID
ROWID implícitoSoportan distintos índices
FTS devuelve columnas sinorden específico
Permiten la restricción UNIQUE
Se soporta distribución,replicación y particionado
11-94
Crear Tablas con ÍndicesCrear Tablas con Índices
CREATE TABLE scott.sales
( office_cd NUMBER(3),
qtr_end DATE,
revenue NUMBER(10,2),
review VARCHAR2(1000),
CONSTRAINT sales_pk
PRIMARY KEY(office_code, qtr_end))
ORGANIZATION INDEX TABLESPACE data01
PCTTHRESHOLD 20
OVERFLOW TABLESPACE data02;
CREATE TABLE scott.sales
( office_cd NUMBER(3),
qtr_end DATE,
revenue NUMBER(10,2),
review VARCHAR2(1000),
CONSTRAINT sales_pk
PRIMARY KEY(office_code, qtr_end))
ORGANIZATION INDEX TABLESPACE data01
PCTTHRESHOLD 20
OVERFLOW TABLESPACE data02;
11-95
Row OverflowRow Overflow
Segment = PK NameType = Index
Segment = SYS_IOT_OVER_nType=Table
Row bigger thanPCTTHRESHOLDBlock
Rows within PCTTHRESHOLD
IOT tablespace Overflow tablespace
11-96
Recuperar Información IOTdesde el diccionario de datos
Recuperar Información IOTdesde el diccionario de datos
DBA_INDEXESOWNERTABLE_NAMEINDEX_NAMEINDEX_TYPEPCT_THRESHOLDINCLUDE_COLUMN
DBA_TABLESOWNERTABLE_NAMEIOT_TYPEIOT_NAMETABLESPACE_NAME
11-97
ResumenResumen
• Identificar situaciones donde losclusters sean necesarios• Usar tablas organizadas con índices
• Identificar situaciones donde losclusters sean necesarios• Usar tablas organizadas con índices