Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PRACTICAS TEMA 1.
ARQUITECTURA DE LA BASE DE DATOS.
1.1. Comprobar las variables de entorno necesarias para conectarnos a la BD. 1.2. Identificar los procesos que componen instancia. 1.3. Ver el tamao de la SGA de la BD (v$sgainfo). 1.4. Comprobar valores de parmetros del init relacionados con el tamao de la memoria (SGA y PGA). 1.5. Comprobar ficheros que componen la BD y ubicarlos en la estructura OFA. 1.6. Identificar la estructura lgica de la BD: tablespaces, segmentos, extensiones. 1.7. Consultar informacin sobre la base de datos (v$database) y la instancia (v$instance). 1.8. Localizar el proceso servidor asociado a mi sesin (v$process y v$session). Es un servidor dedicado o compartido? 1.9. Ver la actividad de la Library Cache (v$librarycache). 1.10. Ver las sentencias SQL que guarda la Shared-Pool (v$sqlarea). 1.11. Crear un fichero de autenticacin y activar su uso. 1.12. Asignar la variable NLS_LANG para nuestro pas y comprobar el cambio en las respuestas de Oracle desde sqlplus. 1.13. Subir el tamao de la shared-pool un grnulo ms y comprobar cmo aumenta el espacio libre. 1.14. Comprobar el funcionamiento de la cach de redolog, como protectora del contenido de la cach de datos. Para ello iniciaremos una transaccin y provocaremos una cada de la BD, comprobando que al arrancarla de nuevo, se mantendr la integridad de la misma. 1.15. Comprobar el funcionamiento de la cach de datos, en lo que se refiere a la mejora del rendimiento cuando se repite una consulta. Por qu la segunda vez que se lanza la misma consulta tarda menos? 1.16. Comprobar el funcionamiento de la Result Cache.
Administracin Bsica de Oracle11g En primer lugar, si ya no lo est, hay que arrancar la base de datos. En el ejemplo vemos el arranque de la base de datos CURSOxy (siempre que se haga referencia a la BD CURSOxy, sustituye xy por los nmeros que incluya el nombre de tu usuario linux):
/home/CURSO/cursoXY (CURSOxy)> sqlplus SQL*Plus: Release 11.2.0.1.0 Production on Dom Ene 27 21:35:45 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Introduzca el nombre de usuario: / as sysdba Conectado a una instancia inactiva.
SQL> startup ORA-01081: no se puede iniciar ORACLE cuando ya se est ejecutando - cirrelo primero
Si no lo est:
SQL> startup Instancia ORACLE iniciada. Total System Global Area 167387136 Fixed Size 1298640 Variable Size 104861488 Database Buffers 58720256 Redo Buffers 2506752 Base de datos montada. Base de datos abierta. bytes bytes bytes bytes bytes
El nombre de usuario a utilizar es SYS que debe escribirse como sys as sysdba o / as sysdba.
Si no sucede el error es posible que no se haya compilado con libreras compartidas, o que el sistema tenga acceso a dichas libreras de otro modo, como /etc/ld.so.conf o un enlace en /usr/lib, etc.
Solucin:
/home/CURSO/cursoXY (CURSOxy)> echo $ORACLE_HOME /u01/app/oracle/product/11.1 /home/CURSO/cursoXY (CURSOxy)> echo $ORACLE_SID CURSOxy /home/CURSO/cursoXY (CURSOxy)> echo $PATH /u01/app/oracle/product/11.1/bin:...:/usr/bin:/usr/X11R6/bin:/home/CURSO/cursoXY/bin
Solucin:
/home/CURSO/cursoXY (CURSOxy)> ps -ef|grep CURSOxy|grep -v grep oracle 13483 1 0 10:52 ? 00:00:01 ora_pmon_CURSOxy oracle 13485 1 0 10:52 ? 00:00:00 ora_vktm_CURSOxy oracle 13489 1 0 10:52 ? 00:00:00 ora_gen0_CURSOxy oracle 13491 1 0 10:52 ? 00:00:00 ora_diag_CURSOxy oracle 13493 1 0 10:52 ? 00:00:00 ora_dbrm_CURSOxy oracle 13495 1 0 10:52 ? 00:00:00 ora_psp0_CURSOxy oracle 13497 1 0 10:52 ? 00:00:00 ora_dia0_CURSOxy oracle 13499 1 0 10:52 ? 00:00:00 ora_mman_CURSOxy oracle 13501 1 0 10:52 ? 00:00:00 ora_dbw0_CURSOxy oracle 13503 1 0 10:52 ? 00:00:00 ora_lgwr_CURSOxy oracle 13505 1 0 10:52 ? 00:00:02 ora_ckpt_CURSOxy oracle 13507 1 0 10:52 ? 00:00:01 ora_smon_CURSOxy oracle 13509 1 0 10:52 ? 00:00:00 ora_reco_CURSOxy oracle 13511 1 0 10:52 ? 00:00:03 ora_mmon_CURSOxy oracle 13513 1 0 10:52 ? 00:00:02 ora_mmnl_CURSOxy oracle 13578 1 0 10:52 ? 00:00:00 ora_qmnc_CURSOxy oracle 13663 1 0 10:52 ? 00:00:02 ora_cjq0_CURSOxy oracle 13666 1 0 10:52 ? 00:00:00 ora_vkrm_CURSOxy oracle 13681 1 0 10:52 ? 00:00:00 ora_q000_CURSOxy oracle 13685 1 0 10:52 ? 00:00:00 ora_q001_CURSOxy oracle 15170 1 0 10:57 ? 00:00:00 ora_smco_CURSOxy oracle 25577 1 0 21:41 ? 00:00:00 ora_w000_CURSOxy SQL> select username,program from v$process where background is not null; USERNAME PROGRAM --------------- -----------------------------------------------oracle oracle@cursos.atica.um.es (PMON) oracle oracle@cursos.atica.um.es (VKTM) oracle oracle@cursos.atica.um.es (GEN0) oracle oracle@cursos.atica.um.es (DIAG) oracle oracle@cursos.atica.um.es (DBRM)
SQL> select name,description from v$process a, v$bgprocess b where a.ADDR=b.PADDR; NAME DESCRIPTION ----- ---------------------------------------------------------------PMON process cleanup VKTM Virtual Keeper of TiMe process GEN0 generic0 DIAG diagnosibility process DBRM DataBase Resource Manager PSP0 process spawner 0 DIA0 diagnosibility process 0 MMAN Memory Manager DBW0 db writer process 0 LGWR Redo etc. CKPT checkpoint SMON System Monitor Process RECO distributed recovery MMON Manageability Monitor Process MMNL Manageability Monitor Process 2 VKRM Virtual sKeduler for Resource Manager QMNC AQ Coordinator CJQ0 Job Queue Coordinator SMCO Space Manager Process 19 filas seleccionadas.
Solucin:
(Con Oracle 10g, en V$SGAINFO podemos ver cmo Oracle reparte el espacio de la SGA
1.4. Comprobar valores de parmetros del init relacionados con el tamao de la memoria (SGA y PGA).
En Oracle 11g se puede configurar toda la memoria que Oracle necesita (SGA y PGA), con el parmetro memory_target (se puede tambin indicar un lmite mximo para el mismo con memory_max_target). Los parmetros que dimensionan la SGA (sga_target) y la PGA (pga_aggregate_target) se pueden dejar a cero o con un valor mnimo. Adems hay que definir el tamao del buffer de redo (log_buffer). Con Oracle 9i, la configuracin de la SGA era manual, y haba que asignar los parmetros de inicializacin que dimensionan cada una de sus partes: shared_pool_size, db_cache_size, large_pool_size y java_pool_size. La PGA se configuraba con pga_aggregate_target. Juan Luis Serradilla Amarilla y Francisco Fernndez Martnez 5
Administracin Bsica de Oracle11g Con Oracle 10g se introduce la configuracin automtica de la SGA, con el parmetro sga_target (adems de sga_max_size si se le quera poner una valor mximo). Por tanto, con 10g, bastara asignar sga_target, sga_max_size y log_buffer (y los dems a cero, o con un valor mnimo). La PGA se configuraba como en 9i, con pga_aggregate_target.
Solucin:
SQL> show parameter memory_target NAME TYPE VALUE ------------------------------------ ----------- -----------------------------memory_target big integer 200M SQL> show parameter memory_max_target NAME TYPE VALUE ------------------------------------ ----------- -----------------------------memory_max_target big integer 200M SQL> show parameter log_buffer NAME TYPE VALUE ------------------------------------ ----------- -----------------------------log_buffer integer 1703936 SQL> show parameter pga_aggregate_target NAME TYPE VALUE ------------------------------------ ----------- -----------------------------pga_aggregate_target big integer 0 SQL> show parameter sga_target NAME TYPE VALUE ------------------------------------ ----------- -----------------------------sga_target big integer 0 SQL> show parameter sga_max_size NAME TYPE VALUE ------------------------------------ ----------- -----------------------------sga_max_size big integer 160M SQL> show parameter shared_pool_size NAME TYPE VALUE ------------------------------------ ----------- -----------------------------shared_pool_size big integer 52M SQL> show parameter db_cache_size NAME TYPE VALUE ------------------------------------ ----------- -----------------------------db_cache_size big integer 0 SQL> show parameter large_pool_size NAME TYPE VALUE ------------------------------------ ----------- -----------------------------large_pool_size big integer 0 SQL> show parameter java_pool_size NAME TYPE VALUE ------------------------------------ ----------- -----------------------------java_pool_size big integer 0 (Si comprobamos los tamaos que Oracle realmente ha asignado a las cachs, veremos
Otra opcin, y la ms correcta, es acceder a la informacin de los ficheros de control desde la propia BD, consultando las vistas dinmicas V$DATAFILE, V$TEMPFILE, V$CONTROLFILE y V$LOGFILE: select * from v$datafile; select * from v$tempfile; select * from v$logfile; select * from v$controlfile;
Solucin:
(Podemos ver los ficheros de la BD desde el S.O.) /home/CURSO/cursoXY (CURSOxy)> ls -l /u0?/oradata/$ORACLE_SID /u02/oradata/CURSOxy: total 285632 -rw-rw---- 1 oracle dba 9060352 feb 27 13:28 control1.ctl -rw-rw---- 1 oracle dba 272631808 feb 27 13:27 system01.dbf -rw-rw---- 1 oracle dba 10487808 feb 27 13:13 users01.dbf /u03/oradata/CURSOxy: total 90676 -rw-rw---- 1 oracle dba 9060352 feb 27 -rw-rw---- 1 oracle dba 52430848 feb 27 -rw-rw---- 1 oracle dba 10487808 feb 26 -rw-rw---- 1 oracle dba 20973568 feb 27 /u04/oradata/CURSOxy:
Solucin:
(Para ver los tablespaces) SQL> select tablespace_name from dba_tablespaces order by tablespace_name; TABLESPACE_NAME -----------------------------SYSAUX
10
Solucin:
SQL> select name, created, log_mode, checkpoint_change#, open_mode, platform_name, current_scn from v$database; NAME CREATED LOG_MODE CHECKPOINT_CHANGE# OPEN_MODE --------- -------- ------------ ------------------ -------------------PLATFORM_NAME -------------------------------------------------------------------------------CURRENT_SCN ----------CURSOxy 24/01/13 NOARCHIVELOG 398341 READ WRITE Linux x86 64-bit 404456 SQL> select instance_name,host_name,version,startup_time, status,archiver,logins,database_status from v$instance; INSTANCE_NAME ---------------HOST_NAME ---------------------------------------------------------------VERSION STARTUP_ STATUS ARCHIVE LOGINS DATABASE_STATUS ----------------- -------- ------------ ------- ---------- ----------------CURSOxy cursos.atica.um.es 11.2.0.1.0 27/01/13 OPEN STOPPED ALLOWED ACTIVE
1.8. Localizar el proceso servidor asociado a mi sesin (v$process y v$session). Es un servidor dedicado o compartido?
Toda sesin contra la BD tiene dos procesos asociados: cliente y servidor. En el cliente Juan Luis Serradilla Amarilla y Francisco Fernndez Martnez 11
Administracin Bsica de Oracle11g tenemos el proceso de usuario que inicia la sesin y en el servidor de base de datos tendremos el proceso que sirve las peticiones de dicha sesin; que puede ser un servidor dedicado o compartido. En las vistas V$SESSION y V$PROCESS tenemos toda la informacin relativa a sesiones y procesos, respectivamente.
Solucin:
SQL> connect SYSTEM SQL> select a.SERVER, a.username dbuser,a.OSUSER, a.PROCESS user_process, a.machine, a.terminal, a.program user_program, b.spid server_process, b.program server_program from v$session a, v$process b where a.username=USER and a.PADDR=b.ADDR; SERVER DBUSER OSUSER --------- ------------------------------ -----------------------------USER_PROCESS MACHINE ------------ ---------------------------------------------------------------TERMINAL USER_PROGRAM ------------------------------ -----------------------------------------------SERVER_PROCE SERVER_PROGRAM ------------ -----------------------------------------------DEDICATED SYSTEM cursoXY 30580 cursos.atica.um.es pts/11 sqlplus@cursos.atica.um.es (TNS V1-V3) 30581 oracle@cursos.atica.um.es (TNS V1-V3) SQL> !ps -fp 30581 UID PID PPID C STIME TTY TIME CMD oracle 30581 30580 0 13:36 ? 00:00:01 oracleCURSOxy (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))
Solucin:
SQL> select namespace,pinhitratio from v$librarycache; NAMESPACE PINHITRATIO --------------- ----------SQL AREA ,878383629 TABLE/PROCEDURE ,511005966 BODY ,368421053 TRIGGER 1 INDEX 0 CLUSTER ,956521739 ...
12
Solucin:
SQL> SET PAUSE ON SQL> SET PAGESIZE 37 SQL> select SQL_TEXT, PERSISTENT_MEM, EXECUTIONS, LOADS, DISK_READS, CPU_TIME, ELAPSED_TIME from v$sqlarea order by DISK_READS desc; SQL_TEXT -------------------------------------------------------------------------------PERSISTENT_MEM EXECUTIONS LOADS DISK_READS CPU_TIME ELAPSED_TIME -------------- ---------- ---------- ---------- ---------- -----------select tablespace_name,segment_type,count(*) from dba_extents group by tablesp ace_name,segment_type 85108 1 1 1793 785150 6289684 select /*+ index(idl_ub2$ i_idl_ub21) +*/ piece#,length,piece from idl_ub2$ wher e obj#=:1 and part=:2 and version=:3 order by piece# 3516 42 1 293 75551 202647 select tablespace_name,segment_type,count(*) segmentos from dba_segments by tablespace_name,segment_type 40548 1 1 219 127155 210013 ... group
Solucin:
$ ls -l $ORACLE_HOME/dbs/orapw$ORACLE_SID -rw-rw---- 1 oracle dba 1536 mar 3 23:02 /u01/app/oracle/product/11.1/dbs/orapwCURSOxy $ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=miclave entries=5 force=y (La opcin force=y es para machacarlo si ya existe) (El siguiente paso slo es necesario si el fichero no es propiedad del usuario q est ejecutando el sw Oracle, y dicho usuario no tuviera permiso de escritura sobre el fichero de claves creado) $ chmod g+w $ORACLE_HOME/dbs/orapwCURSOxy
13
1.12. Asignar la variable NLS_LANG para nuestro pas y comprobar el cambio en las
respuestas de Oracle desde sqlplus.
Comprobar el valor de NLS_LANG y ver la fecha del sistema desde sqlplus. Salir de sqlplus y asignar spanish_spain a NLS _LANG. Ejecutar sqlplus y comprobar que pide usuario y no username. Comprobar de nuevo la fecha del sistema desde sqlplus y verificar el cambio de formato.
Solucin:
$ echo $NLS_LANG spanish_spain $ sqlplus Introduzca el nombre de usuario: / as sysdba SQL> exit $ export NLS_LANG=american_america $ sqlplus Enter user-name: / as sysdba SQL> exit $ export NLS_LANG=spanish_spain
1.13. Subir el tamao de la shared-pool un grnulo ms (p.e. si tena 52M subirlo a 56M, si el grnulo es de 4M) y comprobar cmo aumenta el espacio libre en dicha cach .
Comprobar el valor de shared_pool_size, as como el espacio libre en la shared_pool. Asignarle 56M y volver a comprobar el valor del parmetro, as como el espacio libre que tiene ahora la shared-pool. Finalmente, volver a dejar la shared-pool como estaba inicialmente (0) y comprobar de nuevo los valores anteriores.
Solucin:
(shared_pool_size vale 52M porque aunque se est usando la gestin automtica de memoria de Oracle 11g, se ha definido un tamao mnimo de 52M para la Shared Pool; de modo q se ir ajustando el tamao automticamente segn las necesidades)
14
15
Crear la tabla BORRAME del usuario SCOTT. Insertar una fila sin hacer commit y forzar la cada de la BD. Arrancar de nuevo la BD y comprobar que la fila insertada no est (pues no se hizo commit). Repetir la insercin de la fila, esta vez haciendo commit; y forzar la cada de la BD otra vez. Arrancar la BD una vez ms y comprobar que ahora la fila si est (ya que se valid la transaccin con commit).
Solucin:
SQL> connect / as sysdba Connected. SQL> create table SCOTT.borrame (c1 varchar2(10)) tablespace users; Table created. SQL> desc SCOTT.borrame Name
Null?
Type
16
17
Activar la medicin de tiempos en sqlplus con SET TIMING ON. Lanzar la consulta SELECT COUNT(*) FROM DBA_SOURCE. Volver a lanzar la misma consulta. Comprobar que la segunda ejecucin tarda mucho menos, ya que los datos ya se cargaron en la cach de datos al lanzarla la primera vez; y por tanto se acceden directamente en memoria y no en disco.
Solucin:
(Primero vamos a vaciar la cach de datos (buffer cache), para asegurarnos que los datos no estn en ella) SQL> alter system flush buffer_cache; Sistema modificado. SQL> set timing on SQL> select count(*) from dba_source; COUNT(*) ---------126122 Elapsed: 00:00:00.66 SQL> r COUNT(*) ---------126122 Elapsed: 00:00:00.17
Comprobar el estado de la Result Cache. Hacer una consulta sobre una tabla con muchas filas que no cambie. Repetir la consulta sobre la Result Cache, usando el hint /*+ result_cache */ Volver a comprobar el estado de la Result Cache.
Solucin:
(Primero vamos a vaciar la Result Cach) SQL> execute dbms_result_cache.flush Procedimiento PL/SQL terminado correctamente. (Ahora comprobamos el estado de la Result Cache) SQL> set serveroutput on
18
19
Plan de Ejecucin ---------------------------------------------------------Plan hash value: 3439829060 -------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 17 | 3 (34)| 00:00:01 | | 1 | RESULT CACHE | a3a1qzgcng7xugzq1krabxx2k5 | | | | | | 2 | HASH GROUP BY | | 1 | 17 | 3 (34)| 00:00:01 | | 3 | TABLE ACCESS FULL| PRUEBARC | 1 | 17 | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------Result Cache Information (identified by operation id): -----------------------------------------------------1 - column-count=2; dependencies=(scott.BORRAME); parameters=(nls); name="se lect /*+ result_cache */ owner,count(*) from scott.pruebarc group by owner" Estadsticas ---------------------------------------------------------320 recursive calls 0 db block gets 3563 consistent gets 3503 physical reads ... (Ahora los datos estn en la Result Cache, y vamos a repetir la consulta para comprabar que la E/S va a ser cero (consistents gets y physical reads) SQL> select /*+ result_cache */ owner,count(*) from scott.pruebarc group by owner; OWNER COUNT(*) ------------------------------ ---------OUTLN 9 SYSTEM 26 ORACLE_OCM 95 SYS 99870 Plan de Ejecucin ---------------------------------------------------------Plan hash value: 3439829060 -------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 17 | 3 (34)| 00:00:01 | | 1 | RESULT CACHE | a3a1qzgcng7xugzq1krabxx2k5 | | | | | | 2 | HASH GROUP BY | | 1 | 17 | 3 (34)| 00:00:01 | | 3 | TABLE ACCESS FULL| PRUEBARC | 1 | 17 | 2 (0)| 00:00:01 |
20
21