practicas 11g arquitectura tema1

21
Administración Básica de Oracle11g 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 tamaño de la SGA de la BD (v$sgainfo). 1.4. Comprobar valores de parámetros del init relacionados con el tamaño 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 lógica de la BD: tablespaces, segmentos, extensiones. 1.7. Consultar información sobre la base de datos (v$database) y la instancia (v$instance). 1.8. Localizar el proceso “servidor” asociado a mi sesión (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 autenticación y activar su uso. 1.12. Asignar la variable NLS_LANG para nuestro país y comprobar el cambio en las respuestas de Oracle desde sqlplus. 1.13. Subir el tamaño de la shared-pool un gránulo más y comprobar cómo 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 transacción y provocaremos una caída 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. © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 1

Upload: rene-marcelo-cayo

Post on 26-Oct-2015

222 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

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 tamaño de la SGA de la BD (v$sgainfo).

1.4. Comprobar valores de parámetros del init relacionados con el tamaño 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 lógica de la BD: tablespaces, segmentos, extensiones.

1.7. Consultar información sobre la base de datos (v$database) y la instancia (v$instance).

1.8. Localizar el proceso “servidor” asociado a mi sesión (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 autenticación y activar su uso.

1.12. Asignar la variable NLS_LANG para nuestro país y comprobar el cambio en las respuestas de Oracle desde sqlplus.

1.13. Subir el tamaño de la shared-pool un gránulo más y comprobar cómo 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 transacción y provocaremos una caída 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.

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 1

Page 2: Practicas 11g Arquitectura Tema1

Administración Básica 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 números que incluya el nombre de tu usuario linux):

/home/CURSO/cursoXY (CURSOxy)> sqlplusSQL*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.

Si ya está arrancada nos dará un error:SQL> startupORA-01081: no se puede iniciar ORACLE cuando ya se está ejecutando - ciérrelo primero

Si no lo está:SQL> startupInstancia ORACLE iniciada.Total System Global Area 167387136 bytes Fixed Size 1298640 bytes Variable Size 104861488 bytes Database Buffers 58720256 bytes Redo Buffers 2506752 bytes Base de datos montada.Base de datos abierta.

El nombre de usuario a utilizar es SYS que debe escribirse como “sys as sysdba” o “/ as sysdba”.

1.1. Comprobar la asignación de variables de entorno necesarias para conectarnos a la BD.

Se trata de las variables $ORACLE_HOME, $ORACLE_SID, $LD_LIBRARY_PATH y $PATH. ORACLE_HOME define en qué directorio está instalado Oracle. ORACLE_SID determina con qué instancia queremos trabajar. LD_LIBRARY_PATH permite que Oracle localice las librerías compartidas que no forman parte del núcleo. PATH debe incluir el directorio con los ejecutables de Oracle, para mayor comodidad del administrador.

Nota: si no asignamos LD_LIBRARY_PATH en Linux, es posible que no podamos ejecutar sqlplus, obteniendo un error similar a:sqlplus: error while loading shared libraries: libclntsh.so: cannot open shared object file: No such file or directory

Si no sucede el error es posible que no se haya compilado con librerías compartidas, o que el sistema tenga acceso a dichas librerías de otro modo, como /etc/ld.so.conf o un enlace en /usr/lib, etc.

Solución:

/home/CURSO/cursoXY (CURSOxy)> echo $ORACLE_HOME/u01/app/oracle/product/11.1/home/CURSO/cursoXY (CURSOxy)> echo $ORACLE_SIDCURSOxy/home/CURSO/cursoXY (CURSOxy)> echo $PATH/u01/app/oracle/product/11.1/bin:...:/usr/bin:/usr/X11R6/bin:/home/CURSO/cursoXY/bin

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 2

Page 3: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

/home/CURSO/cursoXY (CURSOxy)> echo $LD_LIBRARY_PATH/u01/app/oracle/product/11.1/lib

1.2. Identificar los procesos que componen instancia.

Los podemos identificar desde el S.O., por ejemplo, en Unix con el comando "ps -ef" que permite ver todos los procesos en ejecución en el sistema, filtrando por el nombre de la instancia de BD:

ps -ef|grep CURSOxy

También lo podemos hacer consultando la vista dinámica V$PROCESS (o haciendo join con V$BGPROCESS, que contiene todos los posibles procesos background), en la BD en cuestión:

select * from v$process where background is not null;

o bien

select * from v$process a, v$bgprocess b where a.ADDR=b.PADDR;

Solución:

/home/CURSO/cursoXY (CURSOxy)> ps -ef|grep CURSOxy|grep -v greporacle 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 [email protected] (PMON) oracle [email protected] (VKTM) oracle [email protected] (GEN0) oracle [email protected] (DIAG) oracle [email protected] (DBRM)

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 3

Page 4: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

oracle [email protected] (PSP0) oracle [email protected] (DIA0) oracle [email protected] (MMAN) oracle [email protected] (DBW0) oracle [email protected] (LGWR) oracle [email protected] (CKPT) oracle [email protected] (SMON) oracle [email protected] (RECO) oracle [email protected] (MMON) oracle [email protected] (MMNL) oracle [email protected] (VKRM) oracle [email protected] (QMNC) oracle [email protected] (CJQ0) oracle [email protected] (SMCO) oracle [email protected] (W000) oracle [email protected] (Q002) oracle [email protected] (Q001) 22 filas seleccionadas.

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.

1.3. Ver el tamaño de la SGA de la BD y las cachés que la componen.

Hay varias vistas dinámicas de la BD que nos dan información sobre el tamaño y la estructura de la SGA: V$SGAINFO, V$SGA_DYNAMIC_COMPONENTS, V$MEMORY_DYNAMIC_COMPONENTS. Las tres primeras son nuevas en 10g.

select * from v$sgainfo;select * from v$memory_dynamic_components;

Solución:

(Con Oracle 10g, en V$SGAINFO podemos ver cómo Oracle reparte el espacio de la SGA

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 4

Page 5: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

(sga_target) entre todas las cachés que la componen, así como el tamaño del gránulo y el tamaño máximo al que podría llegar la SGA (sga_max_size))

SQL> select * from v$sgainfo;NAME BYTES RES-------------------------------- ---------- ---Fixed SGA Size 2211528 No Redo Buffers 5419008 No Buffer Cache Size 46137344 Yes Shared Pool Size 88080384 Yes Large Pool Size 4194304 Yes Java Pool Size 4194304 Yes Streams Pool Size 0 Yes Shared IO Pool Size 0 Yes Granule Size 4194304 No Maximum SGA Size 167014400 No Startup overhead in Shared Pool 54525952 No Free SGA Memory Available 16777216 12 filas seleccionadas.

(En Oracle 11g, la vista V$MEMORY_DYNAMIC_COMPONENTS permite ver como Oracle reparte toda la memoria (SGA y PGA), detallando las partes que forman la SGA)

SQL> select COMPONENT, CURRENT_SIZE from v$memory_dynamic_components;

COMPONENT CURRENT_SIZE ------------------------------------------------ ------------ shared pool 88080384 large pool 4194304 java pool 4194304 streams pool 0 SGA Target 150994944 DEFAULT buffer cache 46137344 KEEP buffer cache 0 RECYCLE buffer cache 0 DEFAULT 2K buffer cache 0 DEFAULT 4K buffer cache 0 DEFAULT 8K buffer cache 0 DEFAULT 16K buffer cache 0 DEFAULT 32K buffer cache 0 Shared IO Pool 0 PGA Target 50331648 ASM Buffer Cache 0 16 filas seleccionadas.

1.4. Comprobar valores de parámetros del init relacionados con el tamaño de la memoria (SGA y PGA).

En Oracle 11g se puede configurar toda la memoria que Oracle necesita (SGA y PGA), con el parámetro memory_target (se puede también indicar un límite máximo para el mismo con memory_max_target). Los parámetros que dimensionan la SGA (sga_target) y la PGA (pga_aggregate_target) se pueden dejar a cero o con un valor mínimo. Además hay que definir el tamaño del buffer de redo (log_buffer).Con Oracle 9i, la configuración de la SGA era manual, y había que asignar los parámetros de inicialización 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 Fernández Martínez 5

Page 6: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

Con Oracle 10g se introduce la configuración automática de la SGA, con el parámetro sga_target (además de sga_max_size si se le quería poner una valor máximo). Por tanto, con 10g, bastaría asignar sga_target, sga_max_size y log_buffer (y los demás a cero, o con un valor mínimo). La PGA se configuraba como en 9i, con pga_aggregate_target.

Solución:

SQL> show parameter memory_targetNAME 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_bufferNAME 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_targetNAME TYPE VALUE------------------------------------ ----------- ------------------------------sga_target big integer 0

SQL> show parameter sga_max_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------sga_max_size big integer 160M

SQL> show parameter shared_pool_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------shared_pool_size big integer 52M

SQL> show parameter db_cache_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_cache_size big integer 0

SQL> show parameter large_pool_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------large_pool_size big integer 0

SQL> show parameter java_pool_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------java_pool_size big integer 0

(Si comprobamos los tamaños que Oracle realmente ha asignado a las cachés, veremos

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 6

Page 7: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

algunas diferencias con los parámetros iniciales, relacionadas con los valores mínimos de algunas cachés, así como con el posible ajuste automático que haya hecho el propio Oracle 11g)

SQL> select * from v$sgainfo;NAME BYTES RES-------------------------------- ---------- ---Fixed SGA Size 2211528 No Redo Buffers 5419008 No Buffer Cache Size 46137344 Yes Shared Pool Size 88080384 Yes Large Pool Size 4194304 Yes Java Pool Size 4194304 Yes Streams Pool Size 0 Yes Shared IO Pool Size 0 Yes Granule Size 4194304 No Maximum SGA Size 167014400 No Startup overhead in Shared Pool 54525952 No Free SGA Memory Available 16777216 12 filas seleccionadas.

(La columna RES, de resizeable, vale “Yes” para aquellas partes de la SGA cuyo tamaño es gestionado automáticamente por Oracle)

(Desde Oracle 10g la vistat V$SGA_DYNAMIC_COMPONENTS permite ver como se reparte el espacio de la SGA entre las diferentes partes que la integran)

SQL> column component format a30 SQL> select component,CURRENT_SIZE,USER_SPECIFIED_SIZE,min_size

from V$SGA_DYNAMIC_COMPONENTS;COMPONENT CURRENT_SIZE USER_SPECIFIED_SIZE MIN_SIZE ------------------------------ ------------ ------------------- ---------- shared pool 88080384 54525952 54525952 large pool 4194304 0 0 java pool 4194304 0 4194304 streams pool 0 0 0 DEFAULT buffer cache 46137344 0 46137344 KEEP buffer cache 0 0 0 RECYCLE buffer cache 0 0 0 DEFAULT 2K buffer cache 0 0 0 DEFAULT 4K buffer cache 0 0 0 DEFAULT 8K buffer cache 0 0 0 DEFAULT 16K buffer cache 0 0 0 DEFAULT 32K buffer cache 0 0 0 Shared IO Pool 0 0 0 ASM Buffer Cache 0 0 0 14 filas seleccionadas.

(En Oracle 11g se puede ver la gestión automática de la memoria, que incluye las partes de la SGA, y también la PGA, mediante la vista V$MEMORY_RESIZE_OPS)

SQL> column parameter format a21 SQL> select to_char(start_time,'dd-mm-yyyy hh24:mi:ss') fecha, OPER_TYPE, parameter, INITIAL_SIZE, FINAL_SIZE from V$MEMORY_RESIZE_OPS order by start_time, initial_size, final_size, parameter ;

FECHA OPER_TYPE PARAMETER INITIAL_SIZE FINAL_SIZE ------------------- ------------- --------------------- ------------ ---------- ...

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 7

Page 8: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

27-01-2013 10:52:23 SHRINK db_cache_size 71303168 67108864 27-01-2013 10:52:23 GROW shared_pool_size 71303168 75497472 27-01-2013 10:52:34 SHRINK db_cache_size 67108864 62914560 27-01-2013 10:52:34 GROW shared_pool_size 75497472 79691776 27-01-2013 10:52:41 SHRINK db_cache_size 62914560 58720256 27-01-2013 10:52:41 GROW shared_pool_size 79691776 83886080 27-01-2013 10:52:43 SHRINK db_cache_size 58720256 54525952 27-01-2013 10:52:43 GROW shared_pool_size 83886080 88080384 27-01-2013 10:53:35 SHRINK sga_target 159383552 155189248 27-01-2013 10:53:37 SHRINK db_cache_size 54525952 50331648 27-01-2013 15:02:41 SHRINK db_cache_size 50331648 46137344 27-01-2013 15:02:41 SHRINK sga_target 155189248 150994944 32 filas seleccionadas.

1.5. Comprobar ficheros que componen la BD y ubicarlos en la estructura OFA.

Los ficheros que componen la BD los podemos consultar desde el propio S.O. o desde la BD. Desde el S.O., y teniendo en cuenta la estructura OFA los encontraremos en /u0?/oradata/CURSOxy, dado que nuestros puntos de montaje son /u01, /u02, /u03 y /u04:

ls -l /u0?/oradata/CURSOxy

Podemos localizar cada tipo de fichero (datafile, control y redolog) por la extensión; por ejemplo: dbf, ctl y log.¡¡¡ Ojo !!!, ésto no es más que una convención, las extensiones pueden ser otras, o incluso no existir.

Otra opción, y la más correcta, es acceder a la información de los ficheros de control desde la propia BD, consultando las vistas dinámicas 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;

Solución:

(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 13:28 control2.ctl-rw-rw---- 1 oracle dba 52430848 feb 27 13:13 sysaux01.dbf-rw-rw---- 1 oracle dba 10487808 feb 26 15:38 temp01.dbf-rw-rw---- 1 oracle dba 20973568 feb 27 13:27 undo_rbs01.dbf

/u04/oradata/CURSOxy:

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 8

Page 9: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

total 30780-rw-rw---- 1 oracle dba 10486272 feb 27 13:12 redo01.log-rw-rw---- 1 oracle dba 10486272 feb 27 13:27 redo02.log-rw-rw---- 1 oracle dba 10486272 feb 27 13:12 redo03.log

(También podemos ver qué ficheros componen la BD, desde la propia BD, mediante consultas SQL)

SQL> select name from v$datafile;NAME--------------------------------------------------------------------------------/u02/oradata/CURSOxy/system01.dbf/u03/oradata/CURSOxy/sysaux01.dbf/u03/oradata/CURSOxy/undo_rbs01.dbf/u02/oradata/CURSO22/users01.dbf

SQL> select name from v$tempfile;NAME--------------------------------------------------------------------------------/u03/oradata/CURSOxy/temp01.dbf

SQL> select member from v$logfile;MEMBER--------------------------------------------------------------------------------/u04/oradata/CURSOxy/redo01.log/u04/oradata/CURSOxy/redo02.log/u04/oradata/CURSOxy/redo03.log

SQL> select name from v$controlfile;NAME--------------------------------------------------------------------------------/u02/oradata/CURSOxy/control1.ctl/u03/oradata/CURSOxy/control2.ctl

1.6. Identificar la estructura lógica de la BD: tablespaces, segmentos, extensiones.

En el Diccionario de Datos (DD) de la BD tenemos vistas para comprobar la estructura lógica de la BD: DBA_TABLESPACES, DBA_DATA_FILES, DBA_SEGMENTS y DBA_EXTENTS.

select * from dba_tablespaces;select * from dba_datafiles;select * from dba_tempfiles;select * from dba_segments;select * from dba_extents;

Solución:

(Para ver los tablespaces)SQL> select tablespace_name from dba_tablespaces

order by tablespace_name;TABLESPACE_NAME------------------------------SYSAUX

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 9

Page 10: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

SYSTEMTEMPUNDO_RBSUSERS

(Para ver los ficheros de datos)SQL> column tablespace_name format a15 SQL> column file_name format a40 SQL> select tablespace_name,file_name from dba_data_files

order by tablespace_name, file_name;TABLESPACE_NAME FILE_NAME --------------- ---------------------------------------- SYSAUX /u03/oradata/CURSOxy/sysaux01.dbf SYSTEM /u02/oradata/CURSOxy/system01.dbf UNDO_RBS /u03/oradata/CURSOxy/undo_rbs01.dbf USERS /u02/oradata/CURSOxy/users01.dbf

(Para ver los ficheros de los tablespaces temporales)

SQL> select tablespace_name,file_name from dba_temp_files order by tablespace_name, file_name;TABLESPACE_NAME FILE_NAME --------------- ---------------------------------------- TEMP /u03/oradata/CURSOxy/temp01.dbf

(Para ver cuántos segmentos hay en cada tablespace, agrupados por tipos de segmento)

SQL> select tablespace_name,segment_type,count(*) segmentosfrom dba_segmentsgroup by tablespace_name,segment_type;

TABLESPACE_NAME SEGMENT_TYPE SEGMENTOS------------------------------ ------------------ ----------SYSTEM CLUSTER 9 SYSTEM INDEX 660 SYSTEM TABLE 530 SYSAUX INDEX 346 SYSAUX LOBSEGMENT 61 SYSAUX INDEX PARTITION 102 SYSAUX LOB PARTITION 1 USERS TABLE 5 SYSTEM LOBSEGMENT 93 UNDO_RBS TYPE2 UNDO 10 SYSAUX LOBINDEX 61 SYSAUX TABLE PARTITION 87 SYSAUX TABLE 298 SYSTEM NESTED TABLE 6 SYSTEM ROLLBACK 1 SYSTEM LOBINDEX 93 SYSAUX CLUSTER 1 USERS INDEX 2 18 filas seleccionadas.

(Para ver cuántas extensiones de cada tipo de segmento, hay en cada tablespace)SQL> select tablespace_name,segment_type,count(*)

from dba_extentsgroup by tablespace_name,segment_type;

TABLESPACE_NAME SEGMENT_TYPE EXTENSIONES------------------------------ ------------------ -----------SYSTEM CLUSTER 63

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 10

Page 11: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

SYSTEM TABLE 866 SYSTEM INDEX 943 USERS TABLE 22 SYSAUX INDEX 367 SYSAUX INDEX PARTITION 104 SYSAUX LOBSEGMENT 64 SYSAUX LOB PARTITION 1 SYSTEM LOBSEGMENT 135 UNDO_RBS TYPE2 UNDO 420 SYSAUX TABLE PARTITION 92 SYSAUX LOBINDEX 61 SYSAUX TABLE 335 SYSTEM NESTED TABLE 6 SYSTEM ROLLBACK 7 SYSAUX CLUSTER 3 SYSTEM LOBINDEX 93 USERS INDEX 2 18 filas seleccionadas.

1.7. Consultar información sobre la base de datos (v$database) y la instancia (v$instance).

Podemos obtener información de la base de datos y de la instancia, de las vistas V$DATABASE y V$INSTANCE, respectivamente.

Solución:

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 sesión (v$process y v$session). ¿Es un servidor dedicado o compartido?

Toda sesión contra la BD tiene dos procesos asociados: cliente y servidor. En el cliente

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 11

Page 12: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

tenemos el proceso de usuario que inicia la sesión y en el servidor de base de datos tendremos el proceso que sirve las peticiones de dicha sesión; que puede ser un servidor dedicado o compartido. En las vistas V$SESSION y V$PROCESS tenemos toda la información relativa a sesiones y procesos, respectivamente.

Solución:

SQL> connect SYSTEMSQL> 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_programfrom v$session a, v$process bwhere a.username=USER and a.PADDR=b.ADDR;

SERVER DBUSER OSUSER--------- ------------------------------ ------------------------------USER_PROCESS MACHINE------------ ----------------------------------------------------------------TERMINAL USER_PROGRAM------------------------------ ------------------------------------------------SERVER_PROCE SERVER_PROGRAM------------ ------------------------------------------------DEDICATED SYSTEM cursoXY30580 cursos.atica.um.espts/11 [email protected] (TNS V1-V3)30581 [email protected] (TNS V1-V3)

SQL> !ps -fp 30581UID PID PPID C STIME TTY TIME CMDoracle 30581 30580 0 13:36 ? 00:00:01 oracleCURSOxy (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))

En este caso, el proceso servidor asociado a mi sesión es un servidor DEDICADO.

1.9. Ver la actividad de la Library Cache (v$librarycache).

En la vista V$LIBRARYCACHE podemos ver los ratios de eficiencia de la Library Cache, en “tantos por uno”. El objetivo es que se aproximen los más posible a 1, de lo contrario es posible que haya que aumentar el tamaño de la Shared Pool.

Solución:

SQL> select namespace,pinhitratio from v$librarycache;NAMESPACE PINHITRATIO--------------- -----------SQL AREA ,878383629TABLE/PROCEDURE ,511005966BODY ,368421053TRIGGER 1INDEX 0CLUSTER ,956521739...

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 12

Page 13: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

1.10. Ver las sentencias SQL que guarda la Shared-Pool (v$sqlarea).

En la vista V$SQLAREA podemos ver el contenido del “área SQL” de la Shared Pool, así como información útil para el ajuste de cada una de las sentencias sql (Shared Pool consumida, nº de veces que se ha ejecutado, nº de veces que se ha salido de la caché, lecturas físicas, tiempo de CPU, tiempo total incluyendo compilación, etc).

Solución:

SQL> SET PAUSE ONSQL> SET PAGESIZE 37SQL> 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 tablespace_name,segment_type 85108 1 1 1793 785150 6289684

select /*+ index(idl_ub2$ i_idl_ub21) +*/ piece#,length,piece from idl_ub2$ where 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 group by tablespace_name,segment_type 40548 1 1 219 127155 210013...

1.11. Crear el fichero de autenticación y activarlo (orapwd).

Los pasos a seguir son:• Crear fichero en $ORACLE_HOME/dbs con la utilidad orapwd (si ya existe y queremos

volver a crearlo, usaremos “force=y”). Si creamos el fichero nuevo desde un usuario diferente al que está ejecutando el sw de Oracle, hemos de tener en cuenta que, después de crear el fichero le tendremos que dar permiso de escritura al usuario que está ejecutando el sw de Oracle (p.e. desde linux con “chmod”).

• Añadir el parámetro remote_login_passwordfile al init.ora.• Parar y arrancar la BD.

Solución:

$ 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 opción “force=y” es para machacarlo si ya existe)

(El siguiente paso sólo 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

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 13

Page 14: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

$ echo "remote_login_passwordfile=EXCLUSIVE" >> $ORACLE_HOME/dbs/initCURSOxy.ora$ echo >> $ORACLE_HOME/dbs/initCURSOxy.ora

SQL> CONNECT / AS SYSDBASQL> SHUTDOWN IMMEDIATESQL> STARTUP...SQL> exit

SQL> CONNECT SYS@CURSOxy AS SYSDBAEnter password: miclaveSQL> EXIT

1.12. Asignar la variable NLS_LANG para nuestro país 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.

Solución:

$ echo $NLS_LANGspanish_spain

$ sqlplusIntroduzca el nombre de usuario: / as sysdbaSQL> exit

$ export NLS_LANG=american_america$ sqlplusEnter user-name: / as sysdbaSQL> exit

$ export NLS_LANG=spanish_spain

1.13. Subir el tamaño de la shared-pool un gránulo más (p.e. si tenía 52M subirlo a 56M, si el gránulo es de 4M) y comprobar cómo 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 parámetro, 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.

Solución:

(shared_pool_size vale 52M porque aunque se está usando la gestión automática de memoria de Oracle 11g, se ha definido un tamaño mínimo de 52M para la Shared Pool; de modo q se irá ajustando el tamaño automáticamente según las necesidades)

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 14

Page 15: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

SQL> show parameter shared_pool_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------shared_pool_size big integer 52M

SQL> select * from v$sgainfo;NAME BYTES RES-------------------------------- ---------- ---...Buffer Cache Size 75497472 YesShared Pool Size 54525952 Yes...Granule Size 4194304 NoMaximum SGA Size 167387136 No...Free SGA Memory Available 25165824

SQL> select * from v$sga_dynamic_components where component='shared pool';COMPONENT CURRENT_SIZE---------------------------------------------------------------- ------------ MIN_SIZE MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER---------- ---------- ------------------- ---------- ------------- ---------LAST_OPE GRANULE_SIZE-------- ------------shared pool 88080384 54525952 88080384 54525952 5 GROW IMMEDIATE27/01/13 4194304

SQL> select sum(bytes) from v$sgastat where pool='shared pool' and name like '%free%';SUM(BYTES)---------- 14682984

(En este caso la Shared Pool tiene 84Mb, por lo que subirla un gránulo más significa dejarla en 88Mb)

SQL> alter system set shared_pool_size=88M;System altered.

SQL> show parameter shared_pool_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------shared_pool_size big integer 88M

SQL> select * from v$sgainfo;NAME BYTES RES-------------------------------- ---------- ---…Buffer Cache Size 41943040 YesShared Pool Size 92274688 Yes…Granule Size 4194304 No …Free SGA Memory Available 16777216

SQL> select * from v$sga_dynamic_components where component='shared pool';COMPONENT CURRENT_SIZE---------------------------------------------------------------- ------------ MIN_SIZE MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 15

Page 16: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

---------- ---------- ------------------- ---------- ------------- ---------LAST_OPE GRANULE_SIZE-------- ------------shared pool 92274688 54525952 92274688 92274688 6 GROW MANUAL28/01/13 4194304

SQL> select sum(bytes) from v$sgastat where pool='shared pool' and name like '%free%';SUM(BYTES)---------- 18886624

(Volvemos a dejar shared_pool_size a 52M)

SQL> alter system set shared_pool_size=52M;System altered.

SQL> show parameter shared_pool_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------shared_pool_size big integer 52M

SQL> select * from v$sga_dynamic_components where component='shared pool';COMPONENT CURRENT_SIZE---------------------------------------------------------------- ------------ MIN_SIZE MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER---------- ---------- ------------------- ---------- ------------- ---------LAST_OPE GRANULE_SIZE-------- ------------shared pool 92274688 54525952 92274688 54525952 6 GROW MANUAL28/01/13 4194304

1.14. Comprobar el funcionamiento de la caché de redolog, como protectora del contenido de la caché de datos. Para ello iniciaremos una transacción y provocaremos una caída de la BD, comprobando que al arrancarla de nuevo, se mantendrá la integridad de la misma.

• Crear la tabla BORRAME del usuario SCOTT.• Insertar una fila sin hacer commit y forzar la caída de la BD.• Arrancar de nuevo la BD y comprobar que la fila insertada no está (pues no se hizo commit).• Repetir la inserción de la fila, esta vez haciendo commit; y forzar la caída de la BD otra vez.• Arrancar la BD una vez más y comprobar que ahora la fila si está (ya que se validó la

transacción con commit).

Solución:

SQL> connect / as sysdbaConnected.

SQL> create table SCOTT.borrame (c1 varchar2(10)) tablespace users;Table created.

SQL> desc SCOTT.borrame Name Null? Type

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 16

Page 17: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

----------------------------------------- -------- ---------------------------- C1 VARCHAR2(10)

SQL> insert into SCOTT.borrame values ('Primera');1 row created.

SQL> commit;Commit complete.

SQL> select * from SCOTT.borrame;C1----------Primera

SQL> insert into SCOTT.borrame values ('Segunda');1 row created.

SQL> select * from SCOTT.borrame;C1----------PrimeraSegunda

SQL> shutdown abortORACLE instance shut down.

SQL> connect / as sysdbaConnected to an idle instance.

SQL> startup...Database opened.

SQL> select * from SCOTT.borrame;C1----------Primera

SQL> insert into SCOTT.borrame values ('Segunda');1 row created.

SQL> commit;Commit complete.

SQL> select * from SCOTT.borrame;C1----------PrimeraSegunda

SQL> shutdown abortORACLE instance shut down.

SQL> connect / as sysdbaConnected to an idle instance.

SQL> startup...Database opened.

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 17

Page 18: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

SQL> select * from SCOTT.borrame;C1----------PrimeraSegunda

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?

• Activar la medición 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 ejecución 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.

Solución:

(Primero vamos a vaciar la caché de datos (buffer cache), para asegurarnos que los datos no estén en ella)

SQL> alter system flush buffer_cache;Sistema modificado.

SQL> set timing onSQL> select count(*) from dba_source; COUNT(*)---------- 126122Elapsed: 00:00:00.66

SQL> r COUNT(*)---------- 126122Elapsed: 00:00:00.17

1.16. Comprobar el funcionamiento de Result Cache.

• 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.

Solución:

(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

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 18

Page 19: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

SQL> execute dbms_result_cache.memory_report R e s u l t C a c h e M e m o r y R e p o r t [Parameters] Block Size = 1K bytes Maximum Cache Size = 8M bytes (8K blocks) Maximum Result Size = 409K bytes (409 blocks) [Memory] Total Memory = 10696 bytes [0.012% of the Shared Pool] ... Fixed Memory = 10696 bytes [0.012% of the Shared Pool] ... Dynamic Memory = 0 bytes [0.000% of the Shared Pool] Procedimiento PL/SQL terminado correctamente.

(Activamos la traza para ver cómo se van ejecutar las sentencias SQL que probemos)

SQL> SET AUTOT ON EXPLAIN STAT

(Ejecutamos la consulta sobre una tabla estática con muchas filas)SQL> select owner,count(*) from scott.pruebarc group by owner;

OWNER COUNT(*) ------------------------------ ---------- OUTLN 9 SYSTEM 26 ORACLE_OCM 97 SYS 99868

Plan de Ejecuci n �---------------------------------------------------------- Plan hash value: 3439829060

------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 17 | 3 (34)| 00:00:01 | | 1 | HASH GROUP BY | | 1 | 17 | 3 (34)| 00:00:01 | | 2 | TABLE ACCESS FULL| PRUEBARC | 1 | 17 | 2 (0)| 00:00:01 | ------------------------------------------------------------------------------

Estad sticas �----------------------------------------------------------

281 recursive calls 0 db block gets

3557 consistent gets 3503 physical reads ...

(Repetimos la consulta usando la Result Cache)

SQL> select /*+ result_cache */ owner,count(*) from scott.pruebarc group by owner;

OWNER COUNT(*) ------------------------------ ---------- OUTLN 9 SYSTEM 26 ORACLE_OCM 95 SYS 99870

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 19

Page 20: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

Plan de Ejecuci n �---------------------------------------------------------- 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"

Estad sticas �----------------------------------------------------------

320 recursive calls 0 db block gets

3563 consistent gets 3503 physical reads ...

(Ahora los datos están 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 Ejecuci n �---------------------------------------------------------- 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 |

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 20

Page 21: Practicas 11g Arquitectura Tema1

Administración Básica de Oracle11g

--------------------------------------------------------------------------------

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"

Estad sticas �----------------------------------------------------------

0 recursive calls 0 db block gets 0 consistent gets 0 physical reads

...

(Vemos de nuevo el estado de la Result Cache)SQL> execute dbms_result_cache.memory_report R e s u l t C a c h e M e m o r y R e p o r t [Parameters] Block Size = 1K bytes Maximum Cache Size = 8M bytes (8K blocks) Maximum Result Size = 409K bytes (409 blocks) [Memory] Total Memory = 174752 bytes [0.189% of the Shared Pool]... Fixed Memory = 10696 bytes [0.012% of the Shared Pool]... Dynamic Memory = 164056 bytes [0.178% of the Shared Pool]....... Overhead = 131288 bytes....... Cache Memory = 32K bytes (32 blocks) ........... Unused Memory = 30 blocks ........... Used Memory = 2 blocks ............... Dependencies = 1 blocks (1 count) ............... Results = 1 blocks ................... SQL = 1 blocks (1 count)

Procedimiento PL/SQL terminado correctamente.

© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 21