Вы находитесь на странице: 1из 6

Tablas Regulares Oracle 12c

TABLAS PARTICIONADAS

Cuando tenemos tablas con un gran volumen de registros, una de las maneras más fáciles y
eficaces de conseguir mejorar los tiempos de consultas, es particionar las tablas. Esto significa
que, siguiendo un patrón que especifiquemos, Oracle va a dividir la tabla en tablas más
pequeñas, desde el punto de vista físico, que desde el punto de vista lógico seguirá siendo una
única tabla.
Esto mejora considerablemente el tiempo de respuesta de la consulta, ya que cuando en esta
filtra por el patrón especificado, Oracle consultará (físicamente) solo la partición
correspondiente, y no se recorrerá la tabla completa.

¿Cuándo 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
genérica, podríamos decir que es recomendable a partir de 1 millón de registros.

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

CREATE TABLESPACE TBS_EUROPA


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

CREATE TABLESPACE TBS_AL


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

CREATE TABLESPACE TBS_OTROS


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

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

CREATE TABLE Ventas


(ID NUMBER(10),
ORIGEN VARCHAR2(20),
FECHA DATE default sysdate )

PARTITION BY LIST( ORIGEN)

(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


Tablas Regulares Oracle 12c

-------------------------------------------------
-- 3. INSERTANDO DATOS EN TABLAS PARTICIONADAS
-------------------------------------------------
INSERT INTO VENTAS
SELECT LEVEL, 'ASIA', SYSDATE
FROM DUAL CONNECT BY LEVEL < 100000;

INSERT INTO VENTAS


SELECT LEVEL, 'EUROPA', SYSDATE
FROM DUAL CONNECT BY LEVEL < 100000;

-------------------------------------------------
-- 4. QUERY DE TABLAS PARTICIONADAS
-------------------------------------------------
SELECT * FROM VENTAS;

SELECT * FROM VENTAS PARTITION ( ventas_ASIA );

SELECT * FROM VENTAS PARTITION (ventas_EUROPA);

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

------------------------------------------------
-- 6. CREACION DE TABLA PARTICIONADA POR RANGO
------------------------------------------------
CREATE TABLE COMPROBANTES
( IDCOMPROBANTE NUMBER(15),
FECHA DATE DEFAULT SYSDATE ,
MONTO NUMBER(15,4) DEFAULT 0,
REGION VARCHAR(20) NOT NULL,
ESTADO INTEGER DEFAULT 1 )

PARTITION BY RANGE ( FECHA)

( PARTITION COMPROBANTES_2016 VALUES


LESS THAN ( TO_DATE( '2016-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2016,

PARTITION COMPROBANTES_2017 VALUES


LESS THAN ( TO_DATE( '2017-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2017,

PARTITION COMPROBANTES_2018 VALUES


LESS THAN ( TO_DATE( '2018-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2018 );

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablas Regulares Oracle 12c

----------------------------------
-- 7. INSERTANDO DATOS
----------------------------------
INSERT INTO COMPROBANTES
SELECT LEVEL, SYSDATE, 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 1000000;

INSERT INTO COMPROBANTES


SELECT LEVEL, TO_DATE( '2017-2-5 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 1000000;

INSERT INTO COMPROBANTES


SELECT LEVEL, TO_DATE( '2018-2-5 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 2000000;

----------------------------------
-- 8. QUERY DE TABLAS PARTICIONADAS
----------------------------------
SELECT * FROM COMPROBANTES PARTITION (COMPROBANTES_2016 );

----------------------------------
-- 9. AGREGANDO UNA NUEVA PARTICION
----------------------------------
CREATE TABLESPACE TBS_COMPROBANTES_2019
DATAFILE 'C:\TEMP\DF_COMPROBANTES_2019.DBF'
SIZE 100M;

ALTER TABLE COMPROBANTES ADD PARTITION COMPROBANTES_2019


VALUES LESS THAN ( TO_DATE( '2019-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2019 ;

SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE


FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'COMPROBANTES'

INSERT INTO COMPROBANTES


SELECT LEVEL, TO_DATE( '2017-2-5 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 2;

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablas Regulares Oracle 12c

INDEX ORGANIZATION TABLE


-------------------------------------------------------
-- 1. CREANDO ESCENARIO DE TRABAJO - ZONA DE ALMACENAMIENTO
--------------------------------------------------------

CREATE TABLESPACE TBS_PRUEBA_IOT


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

----------------------------------
--- 2. INDEX ORGANIZATION TABLE
----------------------------------
CREATE TABLE PERSONA_IOT
( ID NUMERIC( 15) PRIMARY KEY,
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;

----------------------------------
-- 2.1 Plan de ejecución
-- 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


Tablas Regulares Oracle 12c

TABLAS EXTERNAS
Las tablas externas es una funcionalidad, que proporciona Oracle, para facilitar la lectura de

ficheros formateados, como si fueran tablas. Este tipo de tablas son de sólo lectura y no

permite utilizar manipulación de datos (DML). No admite la creación de índices sobre este tipo

de tablas.

Las tablas externas se utilizan en cargas de ficheros repetitivos y sin tener que acceder al

sistema operativo, para realizar la carga.

NOTA : LISTA1.TXT , LISTA2.TXT

-- CREACION DE DIRECTORIO ORACLE


CREATE OR REPLACE DIRECTORY DIR_TE AS 'C:\TE';

-- LISTA DE DIRECTORIOS
SELECT * FROM DBA_DIRECTORIES

-- CREACION DE TABLA EXTERNA


CREATE TABLE TE_Lista(
clave NUMBER(4),
nombre CHAR(20),
nacimiento CHAR(10))
ORGANIZATION EXTERNAL(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY DIR_TE
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE ----CADA NUEVA LINEA ES UN REGISTRO
SKIP 0
BADFILE '%a_%p.bad' ---SI HAY ERROR GENERAR ESTE ARCHIVO
LOGFILE '%a_%p.log'
FIELDS TERMINATED BY ',' ---LOS CAMPOS ESTAN SEPARADOS POR COMAS (,)
OPTIONALLY ENCLOSED BY '"' LRTRIM ----OPCIONALMENTE PUEDEN HABER DOBLE
COMILLAS
MISSING FIELD VALUES ARE NULL ---OPCIONALMENTE HAY CAMPOS NULOS
REJECT ROWS WITH ALL NULL FIELDS
(clave INTEGER EXTERNAL (4),
nombre CHAR(20),
nacimiento CHAR(10) DATE_FORMAT DATE MASK "dd/mm/yyyy"))
LOCATION ('Lista1.txt','Lista2.txt'))
REJECT LIMIT 0;

-- CONSULTA DE TABLAS EXTERNAS


SELECT * FROM TE_Lista
WHERE CLAVE = 4;

-- LISTA DE TABLAS EXTERNAS


SELECT * FROM DBA_EXTERNAL_TABLES

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com


Tablas Regulares Oracle 12c

INSTRUCTOR : ALAIN MEJIA AVALOS alain_mejia@talleresoracle.com

Вам также может понравиться