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) (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. dato s. 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_CO 'C:\TEMP\DF_COMPROBANTES_A MPROBANTES_ASIA.DBF' SIA.DBF' SIZE 100M; CREATE TABLESPACE TBS_EUROPA DATAFILE 'C:\TEMP\DF_CO 'C:\TEMP\DF_COMPROBANTES_EU MPROBANTES_EUROPA.DBF' ROPA.DBF' SIZE 100M; CREATE TABLESPACE TBS_AL DATAFILE 'C:\TEMP\DF_CO 'C:\TEMP\DF_COMPROBANTES_A MPROBANTES_AL.DBF' L.DBF' SIZE 100M; CREATE TABLESPACE TBS_OTROS DATAFILE 'C:\TEMP\DF_CO 'C:\TEMP\DF_COMPROBANTES_O MPROBANTES_OTROS.DBF' TROS.DBF' SIZE 100M; ----------------------------------- 2. TABLA PARTICIONADA POR LISTA ----------------------------------
CREATE TABLE Ventas (ID NUMBER(10), ORIGEN VARCHAR2(2 VARCHAR2(20), 0), FECHA DATE default sysdate ) PARTITION BY LIST( ORIGEN) (PARTITION ventas_ASIA VALUES('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 VALUES(DEFAULT)) tablespace TBS_OTROS );
INSTRUCTOR : ALAIN MEJIA AVALOS
[email protected] alain_mejia@talle resoracle.com
Tablas Regulares
Oracle 12c
-------------------------------------------------- 3. INSERTANDO DATOS EN TABLAS PARTICIONADAS -------------------------------------------------
INSERT INTO VENTAS SELECT LEVEL, 'ASIA', SYSDATE FROM DUAL CONNECT BY LEVEL < 100000 100000;; INSERT INTO VENTAS SELECT LEVEL, 'EUROPA', SYSDATE FROM DUAL CONNECT BY LEVEL < 100000 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 ( IDCOMPROBAN IDCOMPROBANTE TE NUMBER(15), FECHA DATE DEFAULT SYSDATE , MONTO NUMBER(15,4) DEFAULT 0, REGION VARCHAR(20) VARCHAR (20) NOT NULL, ESTADO
INTEGER DEFAULT 1 )
PARTITION BY RANGE ( FECHA) ( PARTITION COMPROBANTES_2016 COMPROBANTES_2016 VALUES LESS THAN ( TO_DATE( '2016-12-31 '2016-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' )) TABLESPACE TBS_COMPRO TBS_COMPROBANTES_201 BANTES_2016, 6, PARTITION COMPROBANTES_2017 VALUES LESS THAN ( TO_DATE( '2017-12-31 '2017-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' )) TABLESPACE TBS_COMPRO TBS_COMPROBANTES_201 BANTES_2017, 7, PARTITION COMPROBANTES_2018 VALUES LESS THAN ( TO_DATE( '2018-12-31 '2018-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' )) TABLESPACE TBS_COMPROBANTES_2018 TBS_COMPROBANTES_2018 );
INSTRUCTOR : ALAIN MEJIA AVALOS
[email protected] alain_mejia@talle resoracle.com
Tablas Regulares
Oracle 12c
----------------------------------- 7. INSERTANDO DATOS ----------------------------------
INSERT INTO COMPROBAN COMPROBANTES TES SELECT LEVEL, SYSDATE, 350, 'AMERICA' , 1 FROM DUAL CONNECT BY LEVEL < 1000000; INSERT INTO COMPROBAN COMPROBANTES TES 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 COMPROBAN COMPROBANTES TES 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 (COMPROBANTES_2016 );
----------------------------------- 9. AGREGANDO UNA NUEVA PARTICION ----------------------------------
CREATE TABLESPACE TBS_COMPROBANTES_2019 DATAFILE 'C:\TEMP\DF_CO 'C:\TEMP\DF_COMPROBANTES_2 MPROBANTES_2019.DBF' 019.DBF' SIZE 100M; ALTER TABLE COMPROBANT COMPROBANTES ES ADD PARTITION COMPROBANTES_2019 VALUES LESS THAN ( TO_DATE( '2019-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' HH24:MI:SS' )) TABLESPACE TBS_COMPROBANTES_2019 TBS_COMPROBANTES_2019 ; SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'COMPROBA 'COMPROBANTES' NTES' INSERT INTO COMPROBAN COMPROBANTES TES 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
[email protected] alain_mejia@talle resoracle.com
Tablas Regulares
Oracle 12c
INDEX ORGANIZATION TABLE -------------------------------------------------------- 1. CREANDO ESCENARIO DE TRABAJO - ZONA DE ALMACENAMIENTO --------------------------------------------------------
CREATE TABLESPACE TBS_PRUEBA_ TBS_PRUEBA_IOT IOT DATAFILE 'C:\TBS\DF_PRU 'C:\TBS\DF_PRUEBA_IOT.DBF EBA_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_ TBS_PRUEBA_IOT; IOT; ----INSERTANDO ----INSERTA NDO DATOS
INSERT INTO PERSONA_IOT SELECT LEVEL , 'PAT_'||DBMS_RANDOM.string('x',10) 'PAT_'||DBMS_RANDOM.string('x',10) , 'MAT_'||DBMS_RANDO 'MAT_'|| DBMS_RANDOM.string('x',10) M.string('x',10) , 'NOM_'||DBMS_RANDO 'NOM_'|| DBMS_RANDOM.string('x',10) M.string('x',10) , DBMS_RANDOM.string('x',8) FROM DUAL CONNECT BY LEVEL < 500000 500000;; ----------------------------------- 2.1 Plan de ejecución -INDEX UNIQUE SCAN ----------------------------------
Explain plan For Select * From PERSONA_IO P ERSONA_IOT T Where ID = 1;
Select * from table( dbms_xplan.display )
INSTRUCTOR : ALAIN MEJIA AVALOS
[email protected] alain_mejia@talle resoracle.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 LI STA2.TXT -- CREACION DE DIRECTORIO ORACLE 'C:\TE';; CREATE OR REPLACE DIRECTORY DIR_TE AS 'C:\TE' -- LISTA DE DIRECTORIOS SELECT * FROM DBA_DIRECTORIES -- CREACION DE TABLA EXTERNA CREATE CREATE TABLE TABLE TE_Lista TE_Lista(( clave NUMBER (4), ), 20), ), nombre CHAR (20 10)) )) nacimiento CHAR (10 ORGANIZATION EXTERNAL( ORGANIZATION EXTERNAL( TYPE ORACLE_LOADER TYPE ORACLE_LOADER DEFAULT DEFAULT DIRECTORY DIR_TE DIR_TE ACCESS PARAMETERS ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE NEWLINE ----CADA NUEVA LINEA ES UN REGISTRO SKIP SKIP 0 BADFILE '%a_%p.bad' '%a_%p.bad' ---SI HAY ERROR GENERAR ESTE ARCHIVO LOGFILE '%a_%p.log' LOGFILE '%a_%p.log' ',' ---LOS CAMPOS ESTAN SEPARADOS POR COMAS (,) FIELDS TERMINATED BY ',' '"' LRTRIM ----OPCIONALMENTE PUEDEN HABER DOBLE OPTIONALLY ENCLOSED BY '"' COMILLAS MISSING FIELD VALUES FIELD VALUES ARE ARE NULL NULL ---OPCIONALMENTE HAY CAMPOS NULOS REJECT ROWS WITH WITH ALL ALL NULL FIELDS NULL FIELDS REJECT ROWS EXTERNAL (4), ), (clave INTEGER EXTERNAL nombre CHAR (20 20), ), 10)) DATE_FORMAT DATE MASK DATE MASK "dd/mm/yyyy" "dd/mm/yyyy")) )) nacimiento CHAR (10 LOCATION 'Lista1.txt',,'Lista2.txt' 'Lista2.txt')) )) LOCATION ('Lista1.txt' REJECT LIMIT 0; REJECT LIMIT -- CONSULTA DE TABLAS EXTERNAS SELECT * FROM TE_Lista WHERE CLAVE = 4; -- LISTA DE TABLAS EXTERNAS SELECT * FROM DBA_EXTERNAL_TABLES
INSTRUCTOR : ALAIN MEJIA AVALOS
[email protected] alain_mejia@talle resoracle.com
Tablas Regulares
INSTRUCTOR : ALAIN MEJIA AVALOS
Oracle 12c
[email protected] alain_mejia@talle resoracle.com