PRACTICAS TEMA 3. ESTRUCTURAS DE ALMACENAMIENTO.

Documentos relacionados
Lo primero que se llevó a cabo fue la creación del entorno. Esto se llevó a cabo por medio de un usuario con privilegios DBA:

Administración Básica de Oracle9i

Oracle: parámetros de configuración. Facultad de Informática - UCM

Triggers 24/12/2016. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Herramientas de Gestión de Base de Datos Oracle. Lamine Delgado / NOSi Departamento de Base de Dados Lamine.delgado@nosi.cv

Grandes volúmenes de datos Particionamiento. bases de datos

Diseño de bases de datos

PL/SQL avanzado: Secuencias, triggers, cursores y subprogramas

Creación de Servicios de Bases de Datos Oracle ORACLE ACS

Base de datos Oracle: Arquitectura Oracle. Arquitectura. Marzo Luis Vinuesa Martínez

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: DML. Ing. Alfonso Vicente, PMP

A. Introducción. B. Los DATABASES TRIGGERS. PL/SQL en objetos de la base de datos. Oracle 11g - SQL, PL/SQL, SQL*Plus 271

Administración Básica de Oracle9i.

Tema: Introducción a Oracle

Diseño de bases de datos

Examen de Ficheros y bases de datos (cód. 520) Ingeniería Técnica en Informática de Gestión Convocatoria de septiembre. II Parcial

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

Diseño de bases de datos Práctica-1 Definición de datos

Tablas -SQL Curso Bases de Datos. Por Elizabeth León Guzmán, Ph.D. Profesora Ingeniería de Sistemas Grupo de Investigación MIDAS

EJERCICIOS GESTIÓN INSTANCIA ORACLE

E16 - Diseño de Sistemas de Bases de Datos Boletín 3

Triggers. BASES DE DATOS Mercedes García Merayo

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

LEA ATENTAMENTE LAS PREGUNTAS Y RESUELVA CADA EJERCICIO COMO SE INDIQUE (EN CASO CONTRARIO EL EJERCICIO NO PUNTUARÁ) CADA EJERCICIO VALE UN PUNTO

Tutorial MySql - 1 -

Administración Básica de Oracle9i 1ªEdición Noviembre 2004.

Manual de Sentencias Básicas en SQL

Administración Básica de Oracle 10g. Prácticas sobre trabajos.

Modelo Relacional Larry Ellison:

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

1. Se usará la Base de Datos llamada. 2. Borrar la tabla CtasBanc anterior y crearla: 5.1 Procedimientos y Funciones Almacenados SQL Server

Administración Avanzada de Oracle 10g. Prácticas de archivado.

Para procesar instrucciones SELECT que devuelvan más de una fila, son necesarios cursores explicitos combinados con un estructura de bloque.

5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

Examen de Ficheros y bases de datos ITIS Convocatoria de junio II PARCIAL

Interacción con el Servidor Oracle8. Copyright Oracle Corporation, All rights reserved.

Administración Básica de Oracle9i

Estructura de una BD Oracle. datafiles redo log controlfiles tablespace objetos Estructura lógica. Tablespaces tablespace SYSTEM

T07 Opciones de integridad referencial

Cadena de caracteres Numéricas Fecha y hora Booleanas Tipo registro Tipo cursor

SQL Sintaxis. Ejemplo de Alumno, Curso, Profesor. Esquemas de Alumno, Curso, Profesor. Andrés Moreno S.

Tema: DISPARADORES (TRIGGERS)

Introducción a SQL (DDL)

1. Primero abrimos el aplicativo pgadmin con el cual manejaremos la base de datos de Postgres.

1. OBJETIVO Definir los estándares que permitan la configuración y administración de objetos en la Base de Datos.

PRACTICAS TEMA 2. DISEÑO Y CREACION DE UNA BASE DE DATOS.

GUÍA DE TRABAJO N 5 GRADO 11 Programación y Diseño de Articulación SENA Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

Instituto Profesional DuocUC Escuela de Ingeniería Componentes Arquitectura Oracle

GUÍA DE TRABAJO N 7 GRADO 11. Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6 GUIA N 7 COMANDOS MYSQL II. CREAR UNA TABLA

PROGRAMA ACADÉMICO DE TECNOLOGÍAS DE LA INFORMACIÓN. actividad Transacciones en MySQL. como requerimiento parcial para acreditar la asignatura de

Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

ÍNDICE INTRODUCCIÓN...17

Administración de Oracle 9i. Existen alrededor de 126 privilegios del sistema, a continuación vemos los más destacados

Manejo de Tablas y Llaves Foráneas

Tipos de datos en SQL. SQL. DDL (Data Definition Language) CREATE DOMAIN CREATE TABLE CREATE TABLE. CREATE TABLE con restricciones de atributo

Bases de Datos (Ingeniería Técnica en Informática de Sistemas)

Administración de usuarios en Oracle - Administración de Oracle - Orasite.com

Hybrid Columnar Compression HCC en Oracle Exadata

Universidad Nacional de Costa Rica Administración de Bases de Datos

SQL Sintaxis. OpenOffice. Ejemplo de Alumno, Curso, Profesor. Ejemplo de Alumno, Curso, Profesor. Andrés Moreno S. Nombre. Apellido. RutAlumno.

INTRODUCCIÓN A LAS BASES DE DATOS. L.I Gerardo Benavides Pérez

Diseño físico y Optimización

DISEÑO FÍSICO. Tema 14. Diseño Físico

Bases de Datos Ejercicio Número 2 Bogotá, Diciembre 5 de 2013

Python desde Cero: Bases de Datos

CREATE USER ADMINISTRADOR IDENTIFIED BY ADMIN DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA 500K ON USERS;

La sintaxis de un trigger a nivel de registro es:

Administración Básica de Oracle9i

VISUALIZACIÓN DE DATOS A PARTIR DE VARIAS TABLAS

Es necesario que el Servidor Unix a disponibilizar los siguientes programas instalados:

Oracle Database 11g: Ajuste de Rendimiento Versión 2 (Español)

BEST PRACTICES EL USO INDICES EN BASE DE DE COMPRESIÓN DE DATOS ORACLE.

PRÁCTICA T2. El lenguaje procedural PL/SQL de Oracle

Tema II: El modelo relacional de datos. (2.7) Automatización

PRACTICAS TEMA 2. DISEÑO Y CREACION DE UNA BASE DE DATOS.

Oracle Database 11g: Performance Tuning DBA Release 2

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Unidad6. Diseño físico de datos

Sistemas de Bases de Datos II ITS / ITSB EMT CETP

Tema: Auditoria de Base de atos. Parte II

Bases de Datos Relacionales y SQL: Una Introducción

Examen de Ficheros y bases de datos Convocatoria de junio II PARCIAL

Los procedimientos almacenados son nuevas funcionalidades de la versión de MySQL 5.0. Un procedimiento

CONTROL DE ACCESO. curso 2008

Insertar Datos en Tablas

Unidad 1: Oracle. MODULO V: Base de datos en Oracle

Estructura general. Fundamentos. Comentarios. Tipos de datos. Funciones de conversión

Obj O eti vos eti E pl p icar los o us u os o de d l fiche h ro o de d con o t n rol E u n me

Declaración de Variables. Copyright Oracle Corporation, All rights reserved.

Administración Básica de Oracle9i

Administración Básica de Oracle9i

Administración Básica de Oracle9i.

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

BASES DE DATOS AVANZADAS Transacciones en MYSQL

Tema 5. Lenguaje de Definición de Datos

Lic. Vladimir Cotaquispe Gutierrez PROGRAMACIÓN PL/SQL I - 1. Copyright 2008, Oracle. All rights reserved.

Transcripción:

PRACTICAS TEMA 3. ESTRUCTURAS DE ALMACENAMIENTO. 3.1. Comprobar el tamaño del bloque de la BD. Cuántas cachés de datos hay definidas?. Definir la caché keep con 1M. Definir también una caché para bloques de 4Kb, con 1M. 3.2. Crear un tablespace SEGAUTO con gestión automática de segmentos. 3.3. Crear una tabla TABLA01 en el tablespace anterior, con una columna VARCHAR2(1000). Insertar tres filas de forma que ocupe varias extensiones. Borrar todas las filas con delete y comprobar las extensiones de la tabla. Hacer truncate table y comprobar de nuevo el espacio ocupado por la tabla. 3.4. Crear una tabla TABLA02 con una sola columna varchar2(100); y otra llamada TABLA02COMPRI igual que la anterior, pero con compresión de datos. Insertar 1000 filas en TABLA02 y, luego, esas mismas 1000 en TABLA02COMPRI. Cuántos bloques necesita cada tabla para almacenar las mismas filas? 3.5. Crear tablespace TSP4K con tamaño de bloque de 4Kb. Crear una tabla TABLA03, igual que TABLA01, y comprobar cuantos bloques ocupan las dos y comparar los datos. 3.6. Comprobar los parámetros pga_aggregate_target, workarea_size_policy y sort_area_size. Se puede poner pga_aggregate_target=0? cómo desactivar pga_aggregate_target? 3.7. Crear una TABLA04 en el tablespace SEGAUTO, con cuatro columnas: c1 char(2), c2 varchar2(10), c3 date y c4 number(10,2). Estimar el tamaño medio de la fila, y el número medio de filas por bloque. Insertar 100 filas en la tabla, calcular las estadísticas y comprobar los datos calculados (número de filas, número de bloques y longitud media de la fila). Recursos. Máquina: cursos.atica.um.es Usuario unix: curso51 a curso70 Conexión máquina unix: ssh con Secure Shell Bases de datos: CURSO51 a CURSO70 Conexión a bd: sqlplus desde sesión unix, usuario / as sysdba Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 1

3.1. Comprobar el tamaño del bloque de la BD. Cuántas cachés de datos hay definidas?. Definir la caché keep con 1M. Definir también una caché para bloques de 4Kb, con 1M. SQL> show parameter db_block_size db_block_size integer 2048 SQL> show parameter cache_size db_16k_cache_size big integer 0 db_2k_cache_size big integer 0 db_32k_cache_size big integer 0 db_4k_cache_size big integer 0 db_8k_cache_size big integer 0 db_cache_size big integer 0 db_keep_cache_size big integer 0 db_recycle_cache_size big integer 0 (Está a cero pq está activada ASMM con sga_target, pero se puede ver su tamaño actual en v$sgainfo o v$sga_dynamic_components) SQL> select rpad(component,30),current_size,min_size,max_size,oper_count from v$sga_dynamic_components where component like '%buffer cache%'; RPAD(COMPONENT,30) CURRENT_SIZE MIN_SIZE MAX_SIZE OPER_COUNT DEFAULT buffer cache 29360128 29360128 0 16 KEEP buffer cache 0 0 0 0 RECYCLE buffer cache 0 0 0 0 DEFAULT 2K buffer cache 0 0 0 0 DEFAULT 4K buffer cache 0 0 0 0 DEFAULT 8K buffer cache 0 0 0 0 DEFAULT 16K buffer cache 0 0 0 0 DEFAULT 32K buffer cache 0 0 0 0 (Sólo está definida la caché por defecto, las demás están desactivadas. Ahora vamos a asignar la caché recycle y la de tamaño de bloque de 4K.) SQL> alter system set db_keep_cache_size=1m; SQL> alter system set db_4k_cache_size=1m; SQL> show parameter cache_size db_16k_cache_size big integer 0 db_2k_cache_size big integer 0 db_32k_cache_size big integer 0 db_4k_cache_size big integer 8M db_8k_cache_size big integer 0 db_cache_size big integer 0 db_keep_cache_size big integer 8M db_recycle_cache_size big integer 0 (Aunque hemos indicado 1M de tamaño para cada una de ellas, Oracle las ha dimensionado con 8M cada una; en este caso pq el tamaño del gránulo es de 4M y hay 2 cpus) Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 2

3.2. Crear un tablespace SEGAUTO con gestión automática de segmentos. SQL> create tablespace SEGAUTO datafile '/u02/oradata/cursoxy/segauto01.dbf' size 1M extent management local uniform size 10K segment space management auto; Tablespace created. ( Ojo!, cambiar xy por el número de tu usuario) SQL> select bytes from dba_free_space where tablespace_name='segauto'; 983040 3.3. Crear una tabla TABLA01 en el tablespace anterior, con una columna VARCHAR2(1000). Insertar tres filas de forma que ocupe varias extensiones. Borrar todas las filas con delete y comprobar las extensiones de la tabla. Hacer truncate table y comprobar de nuevo el espacio ocupado por la tabla. (Vamos a conectarnos como el usuario SYSTEM, y creamos la tabla en el tsp SEGAUTO) SQL> connect system/systcursoxy Connected. SQL> create table TABLA01 (col01 VARCHAR2(1000)) tablespace SEGAUTO; SQL> select bytes from dba_extents where segment_name='tabla01'; (Hemos visto q estando vacía ocupa una extensión. Ahora insertamos 3 filas para provocar la asignación de otra extensión más) SQL> insert into tabla01 values (rpad('a',1000,'a')); 1 row created. SQL> insert into tabla01 values (rpad('a',1000,'a')); 1 row created. SQL> insert into tabla01 values (rpad('a',1000,'a')); 1 row created. SQL> select bytes from dba_extents where segment_name='tabla01'; (Ahora vamos a borrar todas las filas y veremos q el bloque q se asignó para la tercera fila, no se libera sólo con borrar filas) SQL> delete from tabla01; 3 rows deleted. Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 3

SQL> select bytes from dba_extents where segment_name='tabla01'; (Para dejar la tabla con la extensión inicial q tenía después de ser creada, hay q hacer un truncate de la misma, OJO, q truncate borrará todas las filas!!!) SQL> truncate table tabla01; Table truncated. SQL> select bytes from dba_extents where segment_name='tabla01'; 3.4. Crear una tabla TABLA02 con una sola columna varchar2(100); y otra llamada TABLA02COMPRI igual que la anterior, pero con compresión de datos. Insertar 1000 filas en TABLA02 y, luego, esas mismas 1000 en TABLA02COMPRI. Cuántos bloques necesita cada tabla para almacenar las mismas filas? La funcionalidad de compresión de datos está disponible desde la versión 9i, pero debido a un bug, no funciona con versiones < 9.2.0.3 (no da errores al crear la tabla, pero no aparece columna correspondiente en dba_tables, y no comprime datos). Con esta práctica vamos a comprobar como Oracle (>=9i) puede comprimir los datos en cada bloque de una tabla, siempre y cuando haya valores repetidos de una misma columna dentro de un mismo bloque. (Conectamos como usuario SCOTT) SQL> connect scott/tigercursoxy Connected. (Creamos la tabla TABLA02 sin comprimir, y otra igual, llamada TABLA02COMPRI, en este caso con compresión de datos) SQL> create table TABLA02 (c1 varchar2(100)) tablespace users; SQL> create table TABLA02COMPRI (c1 varchar2(100)) tablespace users compress; SQL> select rpad(segment_name,20),blocks,extents from user_segments where segment_name like 'TABLA02%'; RPAD(SEGMENT_NAME,20 BLOCKS EXTENTS TABLA02 32 1 TABLA02COMPRI 32 1 (Cargamos TABLA02 con 1000 filas iguales, rellenado la única columna q tiene con el carácter 'a') SQL> begin for i in 1..1000 loop INSERT INTO TABLA02 VALUES (rpad('a',100)); Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 4

end loop; end; / PL/SQL procedure successfully completed. (Replicamos el contenido de TABLA02 en TABLA02COMPRI) SQL> insert into TABLA02COMPRI select * from TABLA02; 1000 rows created. (Comprobamos los bloques ocupados en cada una de las tablas) SQL> select rpad(segment_name,20),blocks,extents from user_segments where segment_name like 'TABLA02%'; RPAD(SEGMENT_NAME,20 BLOCKS EXTENTS TABLA02 96 3 TABLA02COMPRI 64 2 (Como se observa, la compresión de datos funciona.) 3.5. Crear tablespace TSP4K con tamaño de bloque de 4Kb. Crear una tabla TABLA03, igual que TABLA01, y comprobar cuantos bloques ocupan las dos y comparar los datos. (Nos contectamos como SYSTEM y creamos el tablespace TSP4K con tamaño de bloque de 4K) SQL> connect system/systcursoxy Connected. SQL> create tablespace tsp4k datafile '/u02/oradata/cursoxy/tsp4k01.dbf' size 1M extent management local segment space management auto blocksize 4K; Tablespace created. (Ahora vamos a crear la tabla03 a partir de la tabla01; y vamos a vaciarlas las dos, y a volver a llenarlas con las mismas 100 filas) SQL> create table tabla03 tablespace tsp4k as select * from tabla01; SQL> truncate table tabla01; Table truncated. SQL> truncate table tabla03; Table truncated. SQL> begin for i in 1..100 loop INSERT INTO TABLA01 VALUES (rpad('a',1000,'a')); end loop; end; / PL/SQL procedure successfully completed. SQL> insert into tabla03 select * from tabla01; 100 rows created. SQL> COMMIT; Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 5

(Si ahora comprobamos los bloques que ocupan ambas tablas, veremos q TABLA03 ocupa la mitad pues su tamaño de bloque es el doble de grande.) SQL> select RPAD(SEGMENT_NAME,30),bytes,blocks from dba_segments where segment_name in ('TABLA01','TABLA03'); RPAD(SEGMENT_NAME,30) BLOCKS TABLA01 225280 110 TABLA03 196608 48 3.6. Comprobar los parámetros pga_aggregate_target, workarea_size_policy y sort_area_size. Se puede poner pga_aggregate_target=0? cómo desactivar pga_aggregate_target? Con la versión 9i, Oracle introduce la posibilidad de gestionar de forma compartida las PGAs (área de memoria asociada a cada proceso oracle, fuera de la SGA, y que contiene, por ejemplo, el área de sort). Asignando el parámetro pga_aggregate_target (valor mínimo 10M), se crea una zona de memoria limitada, para todos los procesos oracle; de forma que cada sesión tomará el espacio que necesite, y lo liberará al desconectarse. El parámetro workarea_size_policy=auto determina el uso de dicha funcionalidad. Si lo asignamos a manual, se usará la gestión tradicional basada en el parámetro sort_area_size. Todo ésto, referido sólo a las sesiones con servidor dedicado. SQL> show parameter pga pga_aggregate_target big integer 10485760 SQL> show parameter workarea workarea_size_policy string AUTO SQL> show parameter sort_area_size sort_area_size integer 65536 (Como workarea_size_policy vale AUTO, se activa el uso de pga_aggregate_target; que no podrá valer menos de 10M. De este modo, para las sesiones con servidores dedicados, se ignorará sort_area_size.) SQL> alter system set pga_aggregate_target=9m; ORA 02097: parameter cannot be modified because specified value is invalid ORA 00093: pga_aggregate_target must be between 10M and 4096G 1 SQL> alter system set pga_aggregate_target=11m; SQL> show parameter pga pga_aggregate_target big integer 11534336 (Si queremos desactivar pga_aggregate_target, no lo dejaremos a cero, sino q pondremos work_area_policy a MANUAL.) Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 6

SQL> alter system set pga_aggregate_target=0; ORA 02097: parameter cannot be modified because specified value is invalid ORA 00093: pga_aggregate_target must be between 10M and 4096G 1 SQL> alter system set workarea_size_policy=manual; (Lo volvemos a dejar en AUTO) SQL> alter system set workarea_size_policy=auto; 3.7. Crear una TABLA04 en el tablespace SEGAUTO, con cuatro columnas: c1 char(2), c2 varchar2(10), c3 date y c4 number(10,2). Estimar el tamaño medio de la fila, y el número medio de filas por bloque. insertar 100 filas en la tabla, calcular las estadísticas y comprobar los datos calculados (número de filas, número de bloques y longitud media de la fila). El tamaño del bloque de la BD lo indica el parámetro db_block_size; y el tamaño del bloque concreto para un tablespace lo podemos ver en DBA_TABLESPACES.BLOCK_SIZE. EL tamaño de una fila es cabecera_fila+rowid+cabecera_col1+col1+cabecera_col2+col2+...; donde cabecera_fila=3, rowid=6 y cabera_coli=1 (ó 3 si la columna >= 250bytes). El espacio útil de un bloque es tamaño_bloque overhead transacciones pctfree; donde overhead = 107bytes, y transacciones = 23 (23 bytes por cada transacción, mínimo habrá una); y pctfree es el porcentaje de espacio libre que dejamos en cada bloque para updates (en este caso vale 10). SQL> connect system/systcursoxy Connected. SQL> select BLOCK_SIZE from dba_tablespaces where tablespace_name='segauto'; BLOCK_SIZE 2048 SQL> create table tabla04 (c1 char(2), c2 varchar2(10), c3 date, c4 number(10,2)) tablespace segauto; SQL> select PCT_FREE,INI_TRANS,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,AVG_ROW_LEN from dba_tables where table_name='tabla04'; PCT_FREE INI_TRANS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE AVG_ROW_LEN 10 1 Qué ocupa cada fila? Fila=cabecera_fila+rowid+cabecer_col+long_col+... Fila_mas_corta=3+6+1+2+1+1+1+8+1+6=29 Fila_mas_larga=3+6+1+2+1+10+1+8+1+6=38 Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 7

Fila_media=33bytes Espacio útil en cada bloque? Bloque=2048bytes. Util=2048 overhead 23 pctfree Util=2048 107 23 205=1713bytes Cuántas filas caben en un bloque? 1713/33=51 filas Ahora vamos a insertar 100 filas en tabla04 y comprobaremos los datos estimados con los datos calculados por Oracle. SQL> begin for i in 1..100 loop INSERT INTO TABLA04 VALUES ('01','12345',SYSDATE,12345678.12); end loop; end; / PL/SQL procedure successfully completed. SQL> analyze table tabla04 compute statistics; Table analyzed. SQL> select PCT_FREE,INI_TRANS,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,AVG_ROW_LEN from dba_tables where table_name='tabla04'; PCT_FREE INI_TRANS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE AVG_ROW_LEN 10 1 100 2 3 476 27 Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 8