You are on page 1of 8

Tablespaces y Datafiles TALLERES ORACLE

TABLESPACES Y DATAFILES
CONCEPTO

Un Tablespace es una unidad lgica que denota el espacio de almacenamiento de datos


dentro de una base de datos y que estn constituidos por uno o ms Datafiles.

----------------------------------
-- 1. CREACION DE TBS
----------------------------------

CREATE TABLESPACE TB_VENTAS


DATAFILE 'C:\BDORACLE\DF_VENTAS_01.DBF'
SIZE 3M;

----------------------------------
-- 2. CONSULTA ADMINISTRATIVA DE TBS
----------------------------------

SELECT * FROM DBA_TABLESPACES;

----------------------------------
-- 3. CONSULTA ADMINISTRATIVA DE DATAFILES
----------------------------------

SELECT FILE#, NAME FROM V$DATAFILE;

----------------------------------
-- 4. MODIFICANDO TAMAO DE DATAFILES
----------------------------------

ALTER DATABASE
DATAFILE 'C:\BDORACLE\DF_VENTAS_01.DBF'
RESIZE 10M;

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablespaces y Datafiles TALLERES ORACLE

----------------------------------
-- 5. AGREGANDO UN NUEVO DF AL TBS
----------------------------------
ALTER TABLESPACE TB_VENTAS
ADD DATAFILE 'C:\BDORACLE\DF_VENTAS_02.DBF'
SIZE 10M
AUTOEXTEND ON
NEXT 5M
MAXSIZE 20M;

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablespaces y Datafiles TALLERES ORACLE

TABLAS PARTICIONADAS
CONCEPTO

Cuando tenemos tablas con un gran volumen de registros, una de las maneras ms fciles
y eficaces de conseguir mejorar los tiempos de consultas, es particionar las tablas. Esto
significa que, siguiendo un patrn que especifiquemos, Oracle va a dividir la tabla en tablas
ms pequeas, desde el punto de vista fsico, que desde el punto de vista lgico seguir
siendo una nica tabla. Esto mejora considerablemente el tiempo de respuesta de la
consulta, ya que cuando en esta filtra por el patrn especificado, Oracle consultar
(fsicamente) solo la particin correspondiente, y no se recorrer la tabla completa.
Cundo est recomendado usar tablas particionadas? Pues depender un poco del
servidor sobre el que est la base de datos, y del volumen de datos. Pero en principio, de
forma genrica, podramos decir que es recomendable a partir de 1 milln de registros.

----------------------------------
-- 1. CREACION DE TBS
----------------------------------
CREATE TABLESPACE TBS_ASIA
DATAFILE 'C:\TEMP\DF_COMPROBANTES_ASIA.DBF'
SIZE 10M;

CREATE TABLESPACE TBS_EUROPA


DATAFILE 'C:\TEMP\DF_COMPROBANTES_EUROPA.DBF'
SIZE 10M;

CREATE TABLESPACE TBS_AL


DATAFILE 'C:\TEMP\DF_COMPROBANTES_AL.DBF'
SIZE 10M;

CREATE TABLESPACE TBS_OTROS


DATAFILE 'C:\TEMP\DF_COMPROBANTES_OTROS.DBF'
SIZE 10M;

----------------------------------
-- 2. TABLA PARTICIONADA POR LISTA
----------------------------------

CREATE TABLE Ventas


(Ventas_id NUMBER(5),
Ventas_dpto VARCHAR2(20),
Ventas_date DATE default sysdate )
PARTITION BY LIST(Ventas_dpto)
(PARTITION ventas_ASIA VALUES('ASIA') tablespace TBS_ASIA,
PARTITION ventas_EUROPA VALUES ('EUROPA') tablespace TBS_EUROPA,
PARTITION ventas_AL VALUES ('AL') tablespace TBS_AL,
PARTITION ventas_otros VALUES(DEFAULT) tablespace TBS_OTROS );

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablespaces y Datafiles TALLERES ORACLE

----------------------------------
-- 3. CONSULTANDO TABLAS PARTICIONADAS
----------------------------------
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'VENTAS' ;

----------------------------------
-- 4. INSERTANDO DATOS
----------------------------------
INSERT INTO VENTAS
SELECT LEVEL , ASIA , SYSDATE
FROM DUAL CONNECT BY LEVEL<5000;

INSERT INTO VENTAS


SELECT LEVEL , EUROPA , SYSDATE
FROM DUAL CONNECT BY LEVEL<10000;

INSERT INTO VENTAS


SELECT LEVEL , AL , SYSDATE
FROM DUAL CONNECT BY LEVEL<10000;

SELECT * FROM VENTAS;

SELECT * FROM VENTAS PARTITION ( ventas_ASIA );

SELECT * FROM VENTAS PARTITION ( ventas_ASIA ) WHERE ID = 2500;

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablespaces y Datafiles TALLERES ORACLE

INDICES
CONCEPTO

El ndice de una base de datos es una estructura de datos que mejora la velocidad de las
operaciones, permitiendo un rpido acceso a los registros de una tabla. Al aumentar
drsticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se
vayan a realizar bsquedas frecuentes.

-------------------------------------------------------
-- 1. CREANDO ESCENARIO DE TRABAJO - ZONA DE ALMACENAMIENTO
--------------------------------------------------------
CREATE TABLESPACE TBS_PRUEBA
DATAFILE 'C:\TBS\DF_PRUEBA.DBF'
SIZE 50M;

CREATE TABLESPACE TBS_PRUEBA_IOT


DATAFILE 'C:\TBS\DF_PRUEBA_IOT.DBF'
SIZE 50M;

CREATE TABLESPACE TBS_INDICE_ID


DATAFILE 'C:\TBS\DF_IDX_ID.DBF'
SIZE 50M;

----------------------------------
-- 2. CREACION DE USUARIO USER_10 CON PRIVILEGIOS DE DBA
----------------------------------
CREATE USER USER_10 IDENTIFIED BY 123
DEFAULT TABLESPACE TBS_PRUEBA
QUOTA UNLIMITED ON TBS_PRUEBA;

GRANT DBA TO USER_10;

----------------------------------
-- 3. CONECTARSE COMO USER_10
----------------------------------

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablespaces y Datafiles TALLERES ORACLE

----------------------------------
-- 4. CREANDO TABLA SIN INDICES
----------------------------------
CREATE TABLE PERSONA
( ID NUMERIC( 15) ,
PATERNO VARCHAR(50) ,
MATERNO VARCHAR(50) ,
NOMBRE VARCHAR(50) ,
DNI CHAR(8) )

----------------------------------
-- 5. INSERTANDO 500K Registros
----------------------------------
INSERT INTO PERSONA
SELECT LEVEL , 'PAT_'||DBMS_RANDOM.string('x',10) ,
'MAT_'||DBMS_RANDOM.string('x',10) ,
'NOM_'||DBMS_RANDOM.string('x',10) ,
DBMS_RANDOM.string('x',8)
FROM DUAL CONNECT BY LEVEL < 500000;

----------------------------------
-- 5.1 Plan de ejecucin ( Table Access Full )
----------------------------------
EXPLAIN PLAN
FOR
SELECT *
FROM PERSONA
WHERE ID = 1;

SELECT * FROM TABLE( DBMS_XPLAN.DISPLAY )

----------------------------------
-- 7. CREANDO INDICES ( B-TREE INDEX )
----------------------------------
CREATE INDEX IDX_PERSONA ON PERSONA ( ID )
TABLESPACE TBS_INDICE_ID;

----------------------------------
-- 7.1 Plan de ejecucin
-- INDEX RANGE SCAN ( IDX_PERSONA )
----------------------------------
Explain plan
For
Select ID
From PERSONA
Where ID = 14000;

Select * from table( dbms_xplan.display );

----------------------------------
--- 9. INDEX ORGANIZATION TABLE
----------------------------------
CREATE TABLE PERSONA_IOT
( ID NUMERIC( 15) PRIMARY KEY,

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablespaces y Datafiles TALLERES ORACLE

PATERNO VARCHAR(50) ,
MATERNO VARCHAR(50) ,
NOMBRE VARCHAR(50) ,
DNI CHAR(8) )
ORGANIZATION INDEX
TABLESPACE TBS_PRUEBA_IOT;

----INSERTANDO DATOS
INSERT INTO PERSONA_IOT
SELECT LEVEL , 'PAT_'||DBMS_RANDOM.string('x',10) ,
'MAT_'||DBMS_RANDOM.string('x',10) ,
'NOM_'||DBMS_RANDOM.string('x',10) ,
DBMS_RANDOM.string('x',8)
FROM DUAL CONNECT BY LEVEL < 500000;

----------------------------------
-- 9.1 Plan de ejecucin
-- INDEX UNIQUE SCAN
----------------------------------
Explain plan
For
Select *
From PERSONA_IOT
Where ID = 1;

Select * from table( dbms_xplan.display )

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablespaces y Datafiles TALLERES ORACLE

INDICES OPTIMIZACION

----------------------------------
--- 1. OPTIMIZACION DE INDICES
----------------------------------

--- Nmero de filas en una tabla


SELECT table_name , num_rows FROM user_TABLES;

SELECT table_name , num_rows FROM dba_TABLES


Where table_name in ( 'PERSONA_IOT' , 'PERSONA');

--- Nmero de valores distintos en columnas


select table_name , column_name , num_distinct from dba_tab_columns
where table_name in ( 'PERSONA_IOT' , 'PERSONA');

--- Estadsticas de Tablas


exec DBMS_STATS.GATHER_TABLE_STATS (
OWNNAME => 'USER_10' ,
TABNAME =>'PERSONA,
CASCADE => TRUE );

--- Estadsticas de Indices


exec DBMS_STATS.GATHER_INDEX_STATS ( 'USER_10' , 'IDX_PERSONA');

--- Estadsticas de Schemas


exec DBMS_STATS.GATHER_SCHEMA_STATS ( OWNNAME => 'USER_10' );

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com

You might also like