You are on page 1of 121

AdministracindeOracle10g(Parte2)

Estedocumentoelectrnicopuedeserdescargadolibrey gratuitamentedesdeInternetparasuejecucine impresin,sloparafineseducativosy/opersonales, respetandosuintegridadymanteniendoloscrditosde losautoresenelpiedepgina. Quedaportantoprohibidasuventa. Administraci ndeOracle10g(Parte2)

FranciscoFernndezMartnez(pacof@um.es) JuanLuisSerradillaAmarilla(juanlu@um.es)

UniversidaddeMurcia

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

TEMARIO
InstalacindeOracle10g. Diseoycreacindeunabasededatos. Estructurasdealmacenamiento(bloque,fila,segmento). NuevasfuncionalidadesdemonitorizacinyajustedeOracle10g. MonitorizacinyajustetradicionaldeOracleenversionesanteriores. OracleNet. MTS. Configuracindelarchivado. Backup. Recovery.
2

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

OBJETIVOS
SaberinstalarOracle10g(servidoryBD)sobreLinux. Disear(memoria,CPUydisco)ycrearunabasededatos. Conocerelformatodelbloqueoracle,estructuradelafila,tiposdesegmentos ytiposdendices(BtreevsIOT). Conocer la nueva infraestructura, as como las nuevas herramientas de monitorizacinyajustedeOracle10g. Conocer la infraestructura tradicional de Oracle para el ajuste y la monitorizacin:vistasdinmicasderendimiento,ajustedesharedpool,buffer cache,redolog,rollback,temporal(sort),checkpoints,sql,cpu. Configurarelsoftwaredered(OracleNet)enelservidoryenelcliente. SaberactivaryconfigurarMTS. ConfigurarelarchivadodeunaBDOracle10g. ConocerlascuestionesavanzadasdelbackupdeunaBD. ConocerlascuestionesavanzadasdelrecoverydeunaBD.
3

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

TEMA1 INSTALACINDEORACLE10g

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

TEMA1. INSTALACINDEORACLE10g
Esquemadelprocesodeinstalacin. TiposdeBasesdeDatos. AsistentesdeConfiguracin. RequerimientosHWySW. ParmetrosdelKernelLINUX.EjemploconFC3. Paquetesnecesarios.EjemploconFC3. Preinstalacin. Instalacin. Postinstalacin. Revisindeseguridadycomprobacinfinal.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

ESQUEMADELPROCESODE INSTALACIN
DescargarSWdeOracle:
http://www.oracle.com/technology/software/products/database/oracle10g/index.html

Manualdeinstalacin(primeroverReleaseNotes): Mtododeinstalacin Bsico.Parainstalacinrpida:SWypermitecrearBDdepropsitogeneral (enbaseaunaprecreada).Mtododeinstalacinpordefecto. Avanzado:paraunainstalacionpersonalizadadelswy/odelaBD. Tipodeinstalacin EnterpriseEdition StandardEdition Personalizada Directorioraz(ORACLE_HOME) Listadeproductosainstalar ComprobacinautomticadelosrequisitosdelSO GruposdelSOconprivilegios(dbay/ooper) CreacindelaBD:crearBD(verDBCA)oConfigurarASMoInstalarsloSW Asistentesdeconfiguracin(redconnetca,BDcondbca,etc) Scriptsaejecutarcomoroot
INSTALACINDEORACLE10g

http://www.oracle.com/pls/db102/homepage

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

TIPODEBASEDEDATOS
UsoGeneral: transaccionescortas(OLTP)ytambinlargas(procesosbatch).
LaBDcreadaincluye: ParmetrosdeinicializacinusandospfileygestinautomticadeUNDO. OracleOptionseinterMedia AdvancedReplication ServidoresDedicados(nousaMTS) NOARCHIVELOG

Procesamiento de Transacciones (OLTP: Online Transaction Processing): muchas transacciones cortas concurrentes, consistentes en
consultassencillassobrepocosdatos(tambinactualizaciones). AlmacndeDatos(DataWarehouse): consultascomplejassobremuchos datos(OnLineAnalyticalProcessing).

Personalizada. SloSoftware:nocreaBDniconfigurasqlnet.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

INSTALACINDEORACLE10g

ASISTENTESDECONFIGURACIN
DatabaseConfigurationAssistant(dbca).

PermitecopiarunaBDpreconfiguradaocrearunapersonalizada. ArrancaautomticamenteunavezquesehainstaladoelswOracle. Oracle Net Configuration Assistant (netca): configura la red C/S de Oracle en $ORACLE_HOME/network/admin. Opciones Enterprise y Standard: configura listener.ora, sqlnet.ora y tnsnames.ora. Personalizada:permiteconfigurarunserviciodedirectorio(LDAP),crearlisteners para conectar a la BD y seleccionar el mtodo de resolucin de nombres. Configura,ademsdelosanteriores,elficheroldap.ora. Cliente:permiteconfigurartnsnames.ora,sqlnet.orayldap.ora. Database Upgrade Assistant (dbua): para actualizar una BD >= 8.1.7.4/9.0.1.4/9.2.0.4/10.1.0.2,despusdeinstalarelswdeOracle10g. Oracle Enterprise Manager Configuration Assistant: configura OMS y crea (o actualiza)surepositorio(necesitaBD). Oracle Internet Directory Configuration Assistant: configura OID, arrancando OIDServer(necesitaBD).
INSTALACINDEORACLE10g

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

REQUERIMIENTOSHWYSW (Linux)
HW:
RAM1G(256Mparaelcliente):grepMem/proc/meminfo HDentre1.5y3.5Gbparaelsw,1.2Gbparalabdyalmenos400Mbde /tmp:df Swap1.5RAM(si<=2G),eigualalaRAM(si>2G):/sbin/swapons.

SW:

EnLinux,sitenemosmuchaRAM,podemosconfigurarpocoswap;ej: RAM=4GbySwap=1Gb.

Certificacin: http://www.oracle.com/technology/support/metalink/content.html Ejemplo(Linuxx86+DatabaseServer+Enterprise+10gR2)


Suse9y10 RedHatEnterpriseAS/ES3y4(CentOSesclnico) EnterpriseLinux4 Asianux2

Entornogrfico(Xwin):xclock Accesoalosejecutables:make,ar,ld,nm. Parmetrosdelkernel(/etc/sysctl.conf)


Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

INSTALACINDEORACLE10g

PARMETROSDELKERNEL Valoresmnimos(Linux)
SEMMNI=100(#mximodeconjuntosdesemforos). SEMMNS=256(#mximodesemforos,sloparalainstalacininicial). SEMMNS=sum(processes)+max(processes)+10*count(BBDD) processeseselparmetrodelinitdecadaBD. SEMOPM=100(#mximodeoperacionesporsemopcall). SEMMSL=100(valormnimorecomendado,sloparalainstalacininicial). SHMMAX=2147483648(tamaomximodelsegmentodememoriacompartidayportanto delaSGA). 2GBparakernelSMP.SerecomiendalamitaddelaRAM. SiqueremostenerunaSGAdemsde2Gbtendremosqsubirestevalor. SHMMIN=1(tamaomnimodeunsegmentodememoriacompartida). SHMMNI=4096(#mximodesegmentosdememoriacompartida). SHMSEG=4096(#mximodesegmentosdememoriaporproceso). SHMVMX=32767(valormximodeunsemforo).

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

INSTALACINDEORACLE10g

10

PARMETROSDELKERNEL EjemploconLinuxFC3
(http://www.oraclebase.com/articles/10g/OracleDB10gR2InstallationOnFedora3.php)

Aadirlassiguienteslneasalfichero/etc/sysctl.conf: kernel.shmall=2097152 kernel.shmmax=2147483648 kernel.shmmni=4096 #semaphores:semmsl,semmns,semopm,semmni kernel.sem=25032000100128 fs.filemax=65536 net.ipv4.ip_local_port_range=102465000 net.core.rmem_default=262144 net.core.rmem_max=262144 net.core.wmem_default=262144 net.core.wmem_max=262144 Actualizarlosparmetrosenmemoriacon #/sbin/sysctlp
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g

11

Paquetesnecesarios FEDORACORE3Linux
#DeFedoraCore3Disk1 cd/media/cdrom/Fedora/RPMS rpmUvhsetarch1* rpmUvhtcl8* rpmUvhcompatlibstdc++8* #DeFedoraCore3Disk2 cd/media/cdrom/Fedora/RPMS rpmUvhxorgx11deprecatedlibs6* rpmUvhopenmotif2* rpmUvhcompatdb4* #DeFedoraCore3Disk3 cd/media/cdrom/Fedora/RPMS rpmUvhcompatlibstdc++devel8* rpmUvhcompatgcc8* rpmUvhcompatgccc++8* rpmUvhlibaio0*
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g

12

PREINSTALACIN(Linux)
Crearpuntosdemontaje:unoparaelswyhastaseisparalasbasesdedatos: Creargrupodba:groupadddba. Creargrupooinstall:groupaddoinstall. Crearusuariooraclecongrupoprimariodbaysecundariooinstall:useraddg dbaGoinstalloracle. Creardirectorio/u01/app/oracle(ORACLE_BASE)y/u02/oradata,/u03/oradata, etc. Variablesdeentornodelusuariooraclejustoantesdeinstalar:
DISPLAY=workstation_name:0.0(servidorXwin) ORACLE_BASE=/u01/app/oracle(elrestoesopcional) PATHdebeincluir$ORACLE_HOME/bin,/usr/bin,/bin, /usr/bin/X11/y/usr/local/bin ORACLE_HOME=$ORACLE_BASE/product/10.2.0.1 ORACLE_SID /u01(sw) /u02(datos),/u03(ndices),/u04(redo),/u05(system),/u06(temp)y/u07(rollback)

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

INSTALACINDEORACLE10g

13

INSTALACIN
ArtculodeOTNsobreinstalacindeOracle10gsobreLinux:
http://www.oracle.com/technology/pub/articles/smiley_10gdb_install.html

MontarCDdesdeelroot: #mount/mnt/cdrom Comousuariooracle,lanzarscriptdeinstalacindesdefueradelpunto demontajedelCD(porejemplo,desdeelHOMEdelusuariooracle). ComprobarvariablesDISPLAYyORACLE_BASE. $/mnt/cdrom/runInstaller Nota.Sepodraejecutarenmodonointeractivocon: $/mnt/cdrom/runInstallerresponsefilemirespfilesilent Cambiar CD: eject o umount /mnt/cdrom y luego mount /mnt/cdrom.

Nota:elpuntodemontajedelCDROMnotieneporquser/mnt/cdrom,puede serotro(/media/cdrom,etc).
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g

14

POSTINSTALACIN
Incluirvariablesen.bash_profiledelusuariooracle: exportORACLE_BASE=/u01/app/oracle exportORACLE_HOME=$ORACLE_BASE/product/10.2.0.1 exportLD_LIBRARY_PATH=$ORACLE_HOME/lib exportPATH=$ORACLE_HOME/bin:$PATH exportORACLE_SID=mibd ActivarE/Sasncrona: ElswdeOracle10gR2yalallevaactivada.Sepuedecomprobarcon:
#psfe|grepdbw|grepicurso50 oracle2254010Jan08?00:00:08ora_dbw0_CURSO50 #lsofp22540|greplibaio oracle22540oraclememREG253,026281966157/usr/lib/libaio.so.1.0.1

ParaactivarlaaniveldeunaBD,asignarelparmetrodelinit: filesystemio_options=setall Ejecutar,siesnecesario,elsiguientecomandode $ORACLE_HOME/rdbms/lib: $makefins_rdbms.mkasynch_on ComprobarseguridaddelaBD: Comprobarparchesdeseguridad: http://www.oracle.com/technology/deploy/security/index.html

http://www.oracle.com/technology/deploy/security/pdf/twp_security_checklist_db_database.pdf

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

INSTALACINDEORACLE10g

15

REVISIONDESEGURIDAD
Instalarsloaquellasopcionesqueseannecesarias(Java,Intermedia,etc). Bloquearcuentasdeusuarioscreadospordefectoquenovayamosautilizar. DBCAbloqueatodasmenosSYS,SYSTEM,SCOTTyDBSNMP,porejemplo: outln,mdsys,wksys,ctxsys,ordsys,etc. Cambiarclavesdeusuarioscreadospordefecto:SYS,SYSTEM,etc. ProtegerelDDconO7_DICTIONARY_ACCESSIBILITY=FALSE,impidiendo acceso al DD a travs de privilegios ANY. As, por ejemplo, usuarios con DROPANYnopodrnborrarelDD Practicarelprincipiodelosprivilegiosjustos.Porejemplo,paraconectarala BDdarCREATESESSIONynoCONNECT. RestringirlosusuariosunixconaccesoalservidorOracle. RestringirelaccesoalservidorOracleatravsdeydesdelared. Aplicartodoslosparchesdeseguridadquevayansaliendo. http://otn.oracle.com/deploy/security/alerts.html

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

INSTALACINDEORACLE10g

16

COMPROBACINFINAL
Eneldirectorio$ORACLE_BASE/oraInventory/logspodemosrevisarlo ocurridodurantelainstalacin. ComprobarqueelSWylaBD(sihemosinstaladouna)funcionan. ConectaralaBDusandoSql*Plus
$sqlplus/nolog
SQL*Plus:Release10.2.0.2.0ProductiononTueJan212:59:462007 Copyright(c)1982,2005,Oracle.AllRightsReserved.

ComprobarelListenerSql*Net
$lsnrctlstatus
LSNRCTLforLinux:Version10.2.0.2.0Productionon02JAN200713:00:42 Copyright(c)1991,2005,Oracle.Allrightsreserved.

SQL>connect/assysdba Connected.

OracleEnterpriseManger: ArrancarelservidorwebdeOEM:
$emctlstartdbconsole

... Instance"MNCS",statusREADY,has1handler(s)forthisservice... ... Thecommandcompletedsuccessfully

Accederahttp://host:1158/em
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g

17

PRACTICASTEMA1
1.1. Comprobar los requerimientos HW y SW para la instalacin de Oracle10gsobreLinux. 1.2.Comprobarlastareasdepreinstalacin. 1.3.ComprobarcuntoocupaelswdeOracle10g. 1.4.Buscarelficherodelogdelainstalacinyecharleunvistazo. 1.5.Comprobartareasdepostinstalacinrelacionadasconlaseguridad delaBD. 1.6.ConsultaelSimuladordeInstalacindeOracle10g. 1.7.RevisaralertasdeseguridadenOTN. 1.8.RevisarelmanualdeinstalacindeOracle10gparaLinux.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

INSTALACINDEORACLE10g

18

TEMA2 DISEOYCREACINDEUNABASEDE DATOS

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

19

TEMA2. DISEOYCREACINDEUNABD
ContiendasdeE/S DiccionariodeDatos(tablespaceSYSTEM). UtilidadesOracle(tablespaceSYSAUXen10g,yantesTOOLS). Procesos(DBWR,LGWR,ARCH). Tiposdesegmentos(tablas,ndices,temp,rollback). Datosestticosydinmicos. Dimensionarmemoria:SGA(SharedPool,BufferCache,RedoLog). DimensionarCPU. DimensionarficherosdelaBD(RedoLog,System,Sysaux,Temp, Rollback). CreacindelaBDconCREATEDATABASEyOMF. DataBaseConfigurationAssistant(DBCA).
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

20

DISEODELABASEDEDATOS ContiendasenlaE/S

EsmuyimportantetenerencuentalasposiblescontiendasenlaE/S: Contienda entre el DD y los datos en s. En el tablespace SYSTEM slo deberesidirelDDyelsegmentoderollbackSYSTEM. Entre las utilidades del tablespace SYSAUX (>=10g) y las aplicaciones, o conelDD.PuedesernecesarioundiscoparaelSYSAUX. Contiendaentreprocesos:DBWR,LGWRyARCH.Discosdiferentespara redologonlineyarchivado;yelrestodelaBD. Contiendaentretiposdesegmentos:datos,ndices,rollback,temp.Separar segmentosdedatos,ndices,rollbackytemp. Contiendaentredatosestticosydinmicos.Identificarlosdatosestticos (tablaspequeas:pases,provincias,tiposdeva,letrasdelnif,sexos,etc). Seaccedernconmuchafrecuenciaysloenlectura.Sinosedetectana priori, se pueden identificar usando la auditora (p.e. las que no tengan insert/update/deleteduranteundarepresentativo,ovariosdas). Untablespaceparacada reafuncionalocadaaplicacin(gestineconmica, gestindepersonal,gestinacadmica,gestindeinvestigacin,etc).
DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

21

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DISEODELABASEDEDATOS Organizacindelostablespaces

Utilizartablespaceslocales(>=8i)congestinautomticadesegmentos(>=9i). Separar los ndices de los datos: se puede mover un ndice con "alter index rebuildtablespacetsp_indices;". Separar el UNDO (segmentos de rollback si <9i). Desde 9i, mejor la gestin automtica de UNDO. Podemos tener un tablespace de UNDO aparte, ms grande,paralastransaccioneslargasdeprocesosnocturnos.Siseoptaporla manual,creartablespaceespecialderollbackparalastransaccionesgrandes. Separar los segmentos temporales en un tablespace temporal. Adems, crear tablespaces temporales adicionales para cada usuario que genere muchos segmentos temporales. Si las aplicaciones usan tablas temporales globales, tambindebenresidirenuntablespacetemporalindependiente.Desde10g,se puededefinirungrupodetablespacesparaeltablespacetemporalpordefecto delaBD. Separarlasvistasmaterializadasenuntablespaceindependiente. Separar las tablas temporales de trabajo, como pueden ser las usadas para cargarinformacindesdeficheros(nohacerlodirectamenteenlastablasalas quevadirigidafinalmentelainformacin). Enlastablasparticionadas,separarlasparticionesendiferentestablespaces,al menoslosdatosvigentesdeloshistricos.
DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

22

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DIMENSIONARMEMORIAEN10G

LaRAMdebealbergarnoslolaSGAdenuestraBD,sinotodoslosprocesosde la misma (PGAs), ms aquellos procesos necesarios en nuestro sistema (que no sondelaBD).AscomoelncleodeOracle. La SGA la dimensionamos con SGA_TARGET (nuevo en 10g, activa ASMM si statistics_levelvaleALLoTYPICAL),fijandoelmximoconSGA_MAX_SIZE. http://cursos.atica.um.es/oradoc102/server.102/b14231/create.htm#sthref383 Desde9ipodemosusarunpoolcompartidoparalasPGAs,dimensionndolocon PGA_AGGREGATE_TARGET(mnimo10M). Memoria Oracle 10g = Ncleo Oracle + PGA_AGGREGATE_TARGET + SGA_MAX_SIZE. MemoriamximaparaOracle:80%delaRAM(RAM*0.8): Mnimode40Mparaelncleo: 20%paraPGA_AGGREGATE_TARGET:(RAM*0.8ncleo)*0.2 80%paraSGA_MAX_SIZE:(RAM*0.8ncleo)*0.8 Ejemplo:supongamosRAM=1024Myncleo=70M PGA_AGGREGATE_TARGET=(1024*0.870)*0.2=149M SGA_MAX_SIZE=(1024*0.870)*0.8=599M
Env$pga_target_advice,buscar1filaconESTD_OVERALLOC_COUNT=0.
DISEOYCREACINDEUNABD

$size$ORACLE_HOME/bin/oracle textdatabssdechexfilename 7409796828830812130474507580470e53c/u01/app/oracle/product/10.2.0.1/bin/oracle

Administraci ndeOracle10g(Parte2)

23

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

VERMEMORIAENLINUX

Lamemorialibre(ylausada)lapodemosverconfreem.
$freem totalusedfreesharedbufferscached Mem:404139924901522487 /+buffers/cache:1353 13532688 Swap:20473731673 $ipcsm Segmentosmemoriacompartida keyshmidpropietariopermsbytesnattchestado 0x6abd8a345537793oracle66010276044813 ...

Lossegmentosdememoriacompartida(SGAs)sevenconipcsm.

La memoria necesaria para el ejecutable de oracle, la podemos ver con el comandounixsize. Lamemoriaasociadaacadaservidordedicado(unoporsesin):
$size$ORACLE_HOME/bin/oracle textdatabssdechexfilename 7409796828830812130474507580470e53c/u01/app/oracle/product/10.2.0.1/bin/oracle

psvpid_procesoopsuusuariov RSS>Tamaodelaparteresidentedelprocesoenmemoriareal(enKb). %MEM>Porcentajedelamemoriareal(RAM)queocupalaparteresidente. $psuoraclev|grepilocal PIDTTYSTATTIMEMAJFLTRSDRSRSS%MEMCOMMAND 14560?Ss0:00072361116542134920.3oracleCURSO70(DESCRIPTION=(LOCAL=YES) 14594?Ss0:00072361117034258320.6oracleCURSO70(DESCRIPTION=(LOCAL=YES) 14626?Ss0:00172361116510151680.3oracleCURSO70(DESCRIPTION=(LOCAL=YES) DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

24

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DIMENSIONARLASGA SharedPoolyBufferCach

DB_CACHE_SIZE+[DB_KEEP_CACHE_SIZE+DB_RECYCLE_CACHE_SIZE+DB_nk_CACHE_SIZE] + SHARED_POOL_SIZE + [LARGE_POOL_SIZE + JAVA_POOL_SIZE + STREAMS_POOL_SIZE] + LOG_BUFFERS+1MB Nota: streams_pool_sizeslo >=10g. Puede haber hastacuatro DB_nk_CACHE_SIZE, con n= 2, 4,8, 16,32k(unodelostamaosdebloqueeselqueusaDB_CACHE_SIZE.)

EltamaoaproximadodelaSGA(SGA_TARGETsi>=10g)eselsiguiente:

En 10g se simplifica mucho: SGA_MAX_SIZE y SGA_TARGET. Si dejamos los demsacero(db_cache_size,shared_pool_size,large_pool_size,java_pool_size ystreams_pool_size),Oraclerepartesga_targetautomticamenteentreellos. Siqueremosfijarmanualmenteshared_pool_sizey/odb_cache_size(<=9i): MemoriarecomendadaparatodaslasSGAsdeunservidor: ParaservidoresconRAM<=1Gb:RAM*0.55 ParaservidoresconRAM>1Gb:RAM*(0.60a0.75) Memoriarecomendadaporinstancia:(RAM*0.55)/ninstancias. Sharedpool=memporinstancia*0.45 Buffercache=memporinstancia*0.45 Se puede ver el overhead necesario en shared pool para el arranque en V$SGAINFO(>=10g).En10geloverheadrestadeshared_pool_size(en9ino). Recomendacionesdeespacioparasharedpoolybuffercach(>=9i): V$SHARED_POOL_ADVICE V$DB_CACHE_ADVICE(parmetrodb_cache_advice=ON) Nota:STATISTICS_LEVELdebevalerALLoTYPICAL
DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

25

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DIMENSIONARLASGA SharedPoolyLogBuffer

V$SHARED_POOL_ADVICE.VersiinteresaredimensionarSharedPool.
SELECT shared_pool_size_for_estimate "Size of Shared Pool in MB", shared_pool_size_factor"SizeFactor",estd_lc_time_saved"TimeSavedin sec"FROMv$shared_pool_advice; SizeofSharedPoolinMBSizeFactorTimeSavedinsec 24.5525 481525 721.5525 962526 selectcomponent,current_size,min_size,user_specified_sizefrom v$sga_dynamic_components; RPAD(COMPONENT,30)CURRENT_SIZEMIN_SIZEUSER_SPECIFIED_SIZE sharedpool50331648251658240 largepool419430400 selectrpad(component,28),oper_type,initial_size/1024/1024"INITIAL", FINAL_SIZE/1024/1024"FINAL",statusfromv$sga_resize_ops; RPAD(COMPONENT,28)OPER_TYPEINITIALFINALSTATUS DEFAULTbuffercacheSTATIC4440COMPLETE sharedpoolGROW4044COMPLETE

V$SGA_DYNAMIC_COMPONENTSyV$SGA_RESIZE_OPS.Vergestindinmica.

ElparmetrodelinitLOCK_SGA=trueevitaquesehagaswappingdelaSGA. LOG_BUFFERnonecesitamsdepocoscientosdeKb,inclusoenunsistema con mucha carga, 1MB posiblemente sea suficiente. Asignar ms de 3Mb es intilyaqueelLGWRescribecuandoelbuffersellena1/3o1Mb.
DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

26

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DIMENSIONARLACPU
SipartimosdeunasolaCPU,podemosdetectarquellegaasulmitedeusosi:
PorcentajemximodeocupacindeCPU=90%. PorcentajemximodeprocesamientoOS/usuario=40/60%. Nota:podemosusarloscomandosLinuxtopysar.
$sar 18:20:00CPU%user%nice%system%iowait%idle 18:30:00all0,200,000,060,2099,54 18:40:00all0,160,000,170,1299,54 Media:all0,080,000,050,3399,54

SihayvariasCPUs,lacargadebeestarbalanceada.ParaunaBDmedianacon unacargarazonable,loidealseradisponeralmenosde2CPUs. Paraunainstanciaconservidoresdedicados(sinMTS),tendremosunproceso servidorporcadasesin,ademsdelosprocesosbackground.Porejemplo,para 100 usuarios simultneos tendremos un mnimo de 100 procesos nuevos en nuestro sistema. Probar con MTS si se degrada el uso de CPU por muchas sesionesconcurrentes(MTSesmejorsihaymuchasconexionesalaBD). Parmetrosquelimitanelnmerodeprocesosydesesiones:
PROCESSES.Nmeromximodeprocesosenlainstancia. SESSIONS.Pordefecto1.1*PROCESSES;sinembargosiusamosMTShabrque subirlo(conMTSsepuedeusarshared_server_sessionsparalimitaresassesiones).

Administraci ndeOracle10g(Parte2)

DISEOYCREACINDEUNABD

27

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DIMENSIONARFICHEROS RedoLog
Redo=50a100M(cadafichero). EltamaoptimosepuedesacardelacolumnaOPTIMAL_LOGFILE_SIZE delavistaV$INSTANCE_RECOVERY. Al menos tres grupos y, si disponemos de discos, los multiplexaremos en dos discos(dosmiembrosporgrupo). Empezaremosconficherosde50100M,intentandoqueloslogswitchsucedan cada2030minutos. Siqueremosqueloscheckpointscoincidanconloslogswitch(ycomomximo cada30minutos),asignaremoslosparmetros:
log_checkpoint_interval=0 log_checkpoint_timeout=1800(30minutos,pondremos0siqueremosquecoincidan conellogswitch,independientementedeltiempotranscurrido). FAST_START_MTTR_TARGET=0(desactivafastrecoveryinstance). Nota:log_checkpoint_to_alert=truemuestracheckpointsenficheroalert.log.

FAST_START_MTTR_TARGETesnuevodesde9i,ypermiteindicarelndesegundos queesperamosque(comomucho)tardelarecuperacindelainstancia(despusdeuna cada).Elvalormximoson3600segundos(1h).


DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

28

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DIMENSIONARFICHEROS System,Sysaux,TempyRollback
SYSTEM>=260M.Activaremoselautoextendconnext=10M. SYSAUX.Estimartamaocon$ORACLE_HOME/rdbms/admin/utlsyxsz.sql,o: 500M,BDpequea(2cpu,10sesionesactivas,500objetos(tablas/ndices). 2GparaBDmediana(8cpu,20sesiones,5000objetos). 5GparaBDgrande(32cpu,100sesiones,50000objetos). TEMP>=100M.Tablespaceslocalesconuniformsize1M(simuchassesiones simultneas,256K).Conpga_aggregate_targetseignora*_area_size. Lossegmentostemporalesocupanespacioigualqueunatabla:paraordenar unatablade100M,portodassuscolumnas,necesitar100M. Operaciones que necesitan segmentos temporales: SELECT ORDER BY, GROUPBY,DISTINCT,UNION,INTERSECTorMINUS,nonindexedjoins, CREATE INDEX, CREATE/ENABLE PRIMARY/UNIQUE KEY CONSTRAINT,temporarytables,TemporaryLOBs,Statisticscollection. RBS>=100M.Usarmodoauto(nopermitesettransaction).Siusamosmodo manual,crearunRSporcada4sesiones,y20extensionesinicialescadauno. Optimaldebesersuficientepara90%detransacciones. V$UNDOSTAT.EstadsticasdeUNDOcada10minutos,incluyendobloques deundoylaconsultamslarga(ensegundos).
SELECTTO_CHAR(BEGIN_TIME,'DD/MM/YYYYHH24:MI')"TIME",UNDOTSN,UNDOBLKS, TXNCOUNT,MAXQUERYLENFROMV$UNDOSTAT; TIMEUNDOTSNUNDOBLKSTXNCOUNTMAXQUERYLEN 18/01/200710:40368163385166
DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

29

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

FICHERODEPARMETROS

Para arrancar la instancia, el servidor Oracle tiene que leer el fichero de parmetros de inicializacin (spfile o init), cuya ubicacin predeterminada es $ORACLE_HOME/dbs. Elficherodeparmetrosdeinicializacinpuedeserdedostipos: Init: se trata de un fichero de texto, editable, cuyo nombre sigue el patrn init$ORACLE_SID.ora. Spfile: es un fichero binario, no editable pero visualizable, cuyo nombre sigueelpatrnspfile$ORACLE_SID.ora. Secrea,apartirdeuninit,con:
CREATESPFILE[='nombre']FROMPFILE[='nombre'];
Nota1.Siseomitenlosnombres,tomalosvalorespordefecto. Nota2.LaBDnopodrabrirelnuevospfilehastaelsiguientearranque. Nota2.Sepuedecrearuninitapartirdeunspfile,invirtiendolasintaxis.

Losparmetrosdelspfilesemodificancon:

ALTER SYSTEM SET parmetro = valor [SCOPE = MEMORY | SPFILE|BOTH]


Nota.Siqueremosmodificarelparmetrosloenelspfile,indicaremosSPFILE.

Administraci ndeOracle10g(Parte2)

DISEOYCREACINDEUNABD

30

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

EJEMPLODEINIT.ORA
SuponemosRAM=1Gb,unmximode50sesionessimultneas,checkpointscada30min,gestin automticadePGAs(RAM*0.80*0.20,restoSGA): db_name=CURSOxy #NombredelaBD. compatible=10.2.0 background_dump_dest=/u01/app/oracle/admin/CURSOxy/bdump core_dump_dest=/u01/app/oracle/admin/CURSOxy/cdump user_dump_dest=/u01/app/oracle/admin/CURSOxy/udump max_dump_file_size=10240#tamaomximoficherotrazade5M control_files=(/u02/oradata/CURSOxy/control1.ctl, /u03/oradata/CURSOxy/control2.ctl) undo_management=auto #GestinautomticadeRollback undo_tablespace=undo_rbs #Tablespacedeundo pga_aggregate_target=160M#EspaciomxtodaslasPGAs(fueradeSGA) sga_max_size=640M #TamaomximodelaSGA(RAM*0.8*0.8) sga_target=512M#GestinautomticadelrepartodelespaciodeSGA db_cache_size=0#Oracleasignareltamaoautomticamente shared_pool_size=0#Oracleasignareltamaoautomticamente large_pool_size=0 java_pool_size=0 log_buffer=3145728 #Tamao,enbytes,delacachderedo(3Mb) log_checkpoint_interval=0#desactivacheckpointinterval log_checkpoint_timeout=1800#checkpointcomomuchocada30minutos. processes=50 #Nmx.deprocesos(background+sesiones) remote_login_passwordfile=EXCLUSIVE nls_territory=spain nls_language=spanish
Administraci ndeOracle10g(Parte2) DISEOYCREACINDEUNABD

31

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

CREARLABASEDEDATOS
ParacrearunaBDnecesitamos:

ParaubicarlosficherosquecomponenlaBD:

ConectarnosalservidorOraclecomoSYSASSYSDBA,autenticndonoscontra elS.O.ousandounficherodeclaves. SuficientememoriaparaarrancarlainstanciayespacioendiscoparacrearlaBD. Guardaremos,almenos,doscopiasdelficherodecontrol,endiscosseparados. Multiplexaremoslosredologendiscosdiferentes. Separaremos los ficheros de datos que provoquen contencin en disco; por ejemplo:datos,ndices,tempyrollback.

La BD la podemos crear con el asistente grfico (en Linux dbca) o con el comandoCREATEDATABASE:
Crearemosunficheroinit.ora,ysiqueremos,unspfile.ora. ArrancaremoslasinstanciaconSTARTUPNOMOUNT. CrearemoslaBDconelcomandoCREATEDATABASE. Ejecutaremos los scripts catalog.sql, catproc.sql y catexp.sql que estn en $ORACLE_HOME/rdbms/admin.

Desde10gsepuedeborrarconDROPDATABASE;(slomontada).
DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2)

32

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

EJEMPLOCONCREATE DATABASE
connect/assysdba startupnomount

CREATEDATABASE"CURSOxy" maxdatafiles254 maxinstances1 maxlogfiles32 charactersetWE8ISO8859P15 DATAFILE'/u02/oradata/CURSOxy/system01.dbf'SIZE260M AUTOEXTENDONNEXT10M EXTENTMANAGEMENTLOCAL SYSAUXDATAFILE'/u02/oaradata/CURSOxy/sysaux01.dbf'size100M EXTENTMANAGEMENTLOCALSEGMENTSPACEMANAGEMENTAUTO UNDOTABLESPACEUNDO_RBS DATAFILE'/u03/oradata/CURSOxy/rbs01.dbf'SIZE10M DEFAULTTABLESPACEUSERS DATAFILE'/u02/oradata/CURSOxy/users01.dbf'SIZE10M DEFAULTTEMPORARYTABLESPACETEMP TEMPFILE'/u03/oradata/CURSOxy/temp01.dbf'SIZE10M EXTENTMANAGEMENTLOCALUNIFORMSIZE64K logfile'/u04/oradata/CURSOxy/redo01.log'SIZE10M, '/u04/oradata/CURSOxy/redo02.log'SIZE10M, '/u04/oradata/CURSOxy/redo03.log'SIZE10M;
rem***CREACIONDELASVISTASDELDD*** @$ORACLE_HOME/rdbms/admin/catalog.sql @$ORACLE_HOME/rdbms/admin/catproc.sql Administraci ndeOracle10g(Parte2)

DISEOYCREACINDEUNABD

33

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

ORACLEMANAGEDFILES(OMF)
OMF permite que Oracle se encargue de la creacin de los ficheros que componenlaBD,simplificandolaadministracindelamisma. OMFseactivamediantedosparmetrosdeinicializacin:
DB_CREATE_FILE_DEST.Defineeldirectoriodondeseubicarnlosficheros. DB_CREATE_ONLINE_LOG_DEST_N. Establece los directorios donde se guardarn(multiplexados)losficherosredolog;dondeNpuedevalerde1a5.
Nota.Sepuedenactivarambosparmetrososlounoellos.

EjemploparacrearunaBD,usandoOMF,separandolosficherosredologyde controldelresto:
Parmetrosdeinicializacin(indicandodoscopiasderedologycontrol):
DB_CREATE_FILE_DEST='/u02/oradata/CURSOxy' DB_CREATE_ONLINE_LOG_DEST_1='/u03/oradata/CURSOxy' DB_CREATE_ONLINE_LOG_DEST_2='/u04/oradata/CURSOxy'

CreacindelaBD:
CREATEDATABASEDEFAULTTABLESPACEUSERS DEFAULTTEMPORARYTABLESPACETEMP UNDOTABLESPACEUNDO_RBS;
Administraci ndeOracle10g(Parte2) DISEOYCREACINDEUNABD

34

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DBCA(DataBaseConfiguration Assistant)

En Unix/Linux se ejecuta con dbca. Se trata de un asistente grfico que permite: CrearunaBD.Apartirdeplantillaspredefinidas,quecontienen: Slolaestructura.Sepuedencambiartodoslosparmetrosdelinit. Tambinconficheros:nosepuedecambiarnada. AadiropcionesaunaBDexistente(Java,Intermedia,Spatial,OLAP,etc). BorrarunaBD. GestionarplantillasdeBD:crearunaplantillaapartirdeotra,oapartirde slolaestructuradeunaBD,otambinincluyendolosdatosdelamisma.

Administraci ndeOracle10g(Parte2)

DISEOYCREACINDEUNABD

35

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

VISTASDELDD
V$DATABASE(Basededatos). V$INSTANCE(Instancia). V$SGAINFO(SGA).Nuevoen10gesV$SGAINFO. V$SGA_DYNAMIC_COMPONENTS(ZonasdinmicasdelaSGA). V$SGASTAT(SGAdetallada). V$SHARED_POOL_ADVICE(EstimacionesdetamaodelaSharedPool) V$BUFFER_POOL(Buffersenlacachdedatos) V$DB_CACHE_ADVICE(Estimacionesdb_cache_size) V$PGA_TARGET_ADVICE(Estimacionespga_aggregate_target) V$SQLAREA(SentenciasSQL). V$PROCESS(Procesos). V$BGPROCESS(Procesosbackground). V$DATAFILE(FicherosdedatosdelaBD). V$CONTROLFILE(FicherosdecontroldelaBD). V$LOGFILE(FicherosredologdelaBD).
DISEOYCREACINDEUNABD

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

36

PRACTICASTEMA2
2.1.DisearunaBDteniendoencuentalascontiendasdeE/Sylaorganizacin delostablespacesbsicos.Suponer4discos:/u01(SW)y/u02,/u03,/u04(BD). 2.2. Crear un init.ora, diseando requerimientos de memoria, suponiendo 4Gb de RAM y 21 instancias con 10 usuarios cada una. Se puede usar un mximo del64%delaRAMparalasSGAsdetodaslasbasesdedatos.Loscheckpoints sucederncuandoselleneelficheroredology,comomximo,cada30minutos. La gestin de rollback ser automtica. Tendremos dos copias del fichero de controlen/u02y/u03. 2.3. Crear la BD que hemos diseado anteriormente, y para la que tambin hemos creado un init.ora. Hacerlo manualmente con CREATE DATABASE. El nombredelaBDserALUxy.Antesdelanzarelcomandodecreacin,pontede acuerdoconuncompaeroparaquenolohagaisalavez. 2.4.CrearlamismaBDusandoOMF,ycambiandoelnombreporOMFxy. 2.5.ConsultarelSimuladordeDBCA.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DISEOYCREACINDEUNABD

37

TEMA3 ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

38

TEMA3. ESTRUCTURASDE ALMACENAMIENTO


Bloques,extensionesysegmentos. VariostamaosdebloqueenlamismaBD. Formatodelbloque. Generacindelespaciolibreenunbloque. Estructuradelafila. Extensionesysuasignacin. Segmentos. Gestinautomticadelespaciodelossegmentos. Comprimirlosdatosdeunsegmento. Mtodosdeaccesoadatos:ndicesBtreeyBitmap. RECYCLEBINydroptable. EnvodecorreoconUTL_MAIL. Encolary/osuspenderlaBD.
39

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

BLOQUES,EXTENSIONESY SEGMENTOS
Launidadmnimadeasignacindeespacioesel bloque de datos (mltiplo del bloque del S.O.: 2, 4, 8, 16 y 32Kb); de modo que un conjunto contiguodebloquesformanunaextensin.Ylas extensiones forman segmentos de una determinada estructura de datos (tablas, ndices, rollback,temporal,etc). Oracle asigna espacio a un segmento en unidades de una extensin. Todas las extensionesdeunmismosegmentoresidenenel mismotablespace. Oracle pide espacio en mltiplos del bloque de datos, cuyo tamao se indica con el parmetro db_block_size.

Administraci ndeOracle10g(Parte2)

ESTRUCTURASDEALMACENAMIENTO

40

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

DIFERENTESTAMAOSDE BLOQUEENLAMISMABD
Aunqueelparmetrodb_block_sizedefineeltamaodelbloqueestandardelaBD,se pueden usar otros tamaos (>=9i) indicndolo a nivel de tablespace, y definiendo la correspondientecachdedatosconelnuevotamaodebloque. LaDatabaseBufferCacheconstadetrescachsindependientes: DB_CACHE_SIZE. Dimensiona la cach por defecto, que siempre existe y cuyo tamaonopuedevalercero. DB_KEEP_CACHE_SIZE.Dimensionalacachdondeseguardarnlosbloquesde tablasqueseusanconmuchafrecuencia. DB_RECYCLE_CACHE_SIZE. Dimensiona la cach que almacena los bloques de lastablasqueseusanmuypoco. ElusodeunauotracachloindicaremosconelparmetroBUFFER_POOL,dela clausulaSTORAGEdelatabla(aniveldeparticinno):keep,recycleodefault. DB_nK_CACHE_SIZE(>=9i).Dimensionahasta4cachscontamaodebloqueno estandar,conn=2,4,8,16,32. Alcrearuntablespace,conlaclausulaBLOCKSIZE,sepuedeespecificarunatamaode bloquenoestandar.ParaellodebeestardefinidoelparmetroDB_CACHE_SIZEy,al menos,unDB_nK_CACHE_SIZE;deformaquencoincidaconelvalorqueacompaaa BLOCKSIZE. No se pueden indicar tamao de bloque no estandar para tablespaces temporales.
ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

41

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

FORMATODELBLOQUE
Cabecera: informacin general del bloque (direccin del bloque, tipo de segmento,etc).4bytes. Directoriodetabla:informacinsobrela tabla.4bytes. Directoriodefilas:informacinsobrelas filasqueactualmentecontieneelbloque (direcciones,etc).2bytesporfila. Overhead (es el conjunto de los tres anteriores). Como media, su tamao oscilaentre84y107bytes. Datos

Espacio libre: se usa para inserts y updates, y tambin para registrar las transacciones(transactionentries,unos23bytesporcadauna).
ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

42

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

GENERACIONDEESPACIOLIBRE ENUNBLOQUE
Oraclerecomiendaelusodelagestinautomticadelespaciolibre(>=9i). Sentencias que generan espacio libre en un bloque: delete y update. Dicho espacioquedardisponibleparalosinsertsposterioressi: Elespaciolibrenotieneporquestarcontiguo.Slosecompactarsialhacer uninsert/updatehaysuficienteespaciolibre,peronoestcontiguo. Row Chaining (y Migration). Si una nueva fila no cabe en un bloque, ser almacenada en una cadena de bloques (dos o ms). Si se trata de una fila queaumentadetamaoporunupdate,ynocabeenelbloque,sucontenido sermigradoaotrobloque,manteniendounpunteroenelbloqueoriginal. Se reservar, al menos, el espacio libre indicado por PCTFREE (%) para actualizaciones. Cuando el espacio libre baje a pctfree, no se permitirn ms inserciones(hastaqueelespacioocupadonobajedePCUSED). Nota:lostablespacescongestinautomticadesegmentos(>=9i)no necesitanPCTUSED.
ESTRUCTURASDEALMACENAMIENTO

SehacealcrearuntablespaceconSEGMENTSPACEMANAGEMENTAUTO.

Elinsertsucedeenlamismatransaccinqueliberaespacio. Sucedeenotratransaccindespusdelcommitdelaprimera.

Administraci ndeOracle10g(Parte2)

43

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

ESTRUCTURADELAFILA
Estructuradelafila: Cabecera:3bytes(deellosunbyteparancolumnas). Rowid:6bytes(1paraelfichero,4paraelbloquey1parafiladentrodel bloque). Cabeceradecolumna:1byte(o3bytessicolumna>250bytes). Columna:datos(sinull,noocupaespacio). Cabeceradecolumna. Columna... Longituddelascolumnas: char(n):nbytes. varchar2(n):hastanbytes. Date:8bytesdesde9i(antes7bytes) number(n,m):n/2(enteromayor),ms1byte.Porejemplo:number(9,2), 9/2=4.5,5+1=6.

Administraci ndeOracle10g(Parte2)

ESTRUCTURASDEALMACENAMIENTO

44

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

EXTENSIONESYSUASIGNACIN
Una extensin es una unidad lgica de almacenamiento compuesta por un conjuntodebloquescontiguos.Unaomsextensionescomponenunsegmento. Oracle recomienda usar tablespaces manejados localmente (>=8i), con extensiones de tamao uniforme (uniform size) o variable (autoallocate), donde yanosirvenlosparmetrosinitial,next,pctincrease,minextents,maxextentsdel defaultstorage:
UniformSize.Puedesindicareltamaodelaextensin(almenos5bloques)ousarel valor por defecto (1M). Los tablespaces temporales locales slo pueden usar este tipodeasignacindeextensiones. Autoallocate.PuedesdefinirlaextensininicialyOracledeterminaeltamao ptimo para las siguientes (tamao mnimo 64Kb). Es el defecto para tablespaces permanentes. Sieltablespacesecreacongestinautomticadesegmentosy db_block_size>=16K,eltamaomnimodelaextensinser1M.

Paraasignarunaextensinaunsegmento,enuntablespacelocal,Oraclebusca enelbitmapdelficheroelnmerorequeridodebloqueslibrescontiguos. Las extensiones vacas no se devuelven al tablespace hasta que se borra el objeto (drop table/cluster), a no ser que hagamos TRUNCATE ... DROP STORAGE;oALTERTABLE...DEALLOCATEUNUSED;.
ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

45

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

SEGMENTOS
Un segmento es un conjunto de extensiones que contienen todos los datos de una estructura lgica de almacenamiento especfica, dentro de un tablespace (segmentosdedatos,segmentosdendice,segmentostemporales,etc). El primer bloque de un segmento (Header) contiene un directorio de las extensionesquelointegran. Segmentodedatos:esunatablanormal,ounaparticindeunaparticionada,o unclusterdetablas. Segmentode ndices: ndicenoparticionado,oparticindeunoparticionado.No tienenqueestarenelmismotablespacequelastablascorrespondientes. Segmentos temporales: Oracle los usa para hacer ordenaciones, que no caben en memoria: create index, select ... order by, select distinct, select ... group by, select...union,select...intersect,select...minus.Tambinseusanparacrear tablastemporalesysusndices(sontablasquecontienendatossloduranteuna transaccin o una sesin). Se puede mejorar su rendimiento ajustando el parmetro sort_area_size. Sin MTS, usar pga_aggregate_target para todas las reasdesortdetodaslassesiones(todaslasPGAs).
ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

46

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

GESTIONAUTOMATICADEL ESPACIODELOSSEGMENTOS
Desde la versin 9i se incluye la posibilidad de gestionar el espacio de los segmentosautomticamente,siendomsfcil,conmejorutilizacindelespacio, ytambinmejorrendimientoenlasoperacionesconcurrentesdeinsercin. Cadasegmentocontieneunbitmapquedescribeelestadodeocupacindecada bloque,yqueseguardaenunconjuntoindependientedebloques. Sepuedeactivarsloparalostablespacespermanentesmanejadoslocalmente, exceptoelSYSTEM:
CREATETABLESPACETSP_CURSO DATAFILE'/u02/oradata/CURSO/tsp_curso01.dbf'SIZE10M EXTENTMANAGEMENTLOCALUNIFORMSIZE64K SEGMENTSPACEMANAGEMENTAUTO; SeignoranlasclausulasPCTUSED,FREELISTSyFREELISTSGROUPS.

Una vez creado un tablespace local con gestin automtica del espacio de los segmentos,notienevueltaatrs. Oraclerecomiendalagestinautomticaporqueobtienemayorrendimientoyes muchomsfcildemantener. YanohacefaltaPCTUSED.
ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

47

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

COMPRESIONDELOS SEGMENTOSDEDATOS
Podemos indicar la clausula COMPRESS al crear una tabla (por defecto ser NOCOMPRESS),paraqueOracleintentecomprimirlosdatos(exceptoparatipos LOB y tablas IOT). Esto es muy til en entornos con muy pocas actualizaciones (insert/update),comodatawarehouse. Sereduceelusodediscoymemoria(cachdedatos)yserecomiendaparalas operacionesdeslolectura. Losdatossecomprimen,encadabloque,eliminandolosvaloresrepetidosdeuna mismacolumna,queseguardanenunatabla.Elfactordecompresinsermayor en bloques con valores repetidos. Se pueden reorganizar las filas agrupando valores repetidos de una columna en el mismo bloque: create table as select orderby,ordenandoporcolumnasconbajacardinalidad. Al crear un tablespace, podemos indicar COMPRESS en la clausula DEFAULT; paraquepordefecto,secomprimanlosdatosenlastablasquecontenga.

Administraci ndeOracle10g(Parte2)

ESTRUCTURASDEALMACENAMIENTO

48

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

METODOSDEACCESOADATOS INDICESBTREEYBITMAP
Usaremos ndices Btree, en general, cuando vayamos a hacer consultas que accedenfrecuentementeanomsdel1015%delasfilasdelatabla. Comprobarsiunndiceseusa(>=9i): Vistasdondeverestadsticasdendices: dba_indexes:dbms_stats.gather_index_stats('owner','indice'); index_stats:analyzeindexi_nombrevalidatestructure; v$segment_statistics(statistics_level=typicaluall) Falsosmitossobredegradacindendices: Coneltiempoelarbolbtreepuedeperderelbalanceo.NUNCA. Conlosborradossevaperdiendoespacio.NO,elespaciosereutiliza. Silosnivelesdelrbolllegana'x',elndicesevuelveineficiente.NO. Engeneralnosernecesario,peropodemosreconstruirunndice: alterindexi_nombrerebuild; IndicesBitmap;muytilesparaaccesosenslolecturasobrecolumnasdebaja cardinalidad, en tablas muy grandes (aplicaciones DSS). Muy eficientes para predicados OR. No usarlos si se hacen updates con frecuencia (aplicaciones OLTP).Bloqueosaniveldesegmentodebitmap(nodefila). Las IOT son tablas almacenadas en un ndice Btree. Son tiles para tablas estaticas que se acceden con frecuencia por la clave primaria (casi todas sus columnasformapartedelaPK),yquenovanatenerningnotrondice.
ESTRUCTURASDEALMACENAMIENTO

ALTERINDEXnombreMONITORINGUSAGE;(activaseguimiento) SELECT*FROMV$OBJECT_USAGE;(compruebauso) ALTERINDEXnombreMONITORINGUSAGE;(desactivaseguimiento)

createbitmapindexi_b_nombreont_tabla(cols)tablespacetsp_nombre;

Administraci ndeOracle10g(Parte2)

49

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

RECYCLEBINYDROPTABLE
RECYCLEBIN(>=10g).ContenedordondeOracleguardalastablas borradas(anoserqseborreconlaopcinPURGE). DBA_RECYCLEBIN.Vertodaslastablasborradas.En USER_RECYCLEBINoRECYCLEBIN,slolasmas.TbconSHOW RECYCLEBIN(desdesql*plus). Sepuededesactivarconparmetrodelinitrecyclebin=off(pordefecto on).TbconALTERSYSTEM|SESSION.... Recuperartablaborrada: FLASHBACKTABLEtablaBorradaTOBEFOREDROP; Borrardefinitivamente: PURGETABLEtabla;(tbPURGEINDEX)
SlovanaRECYCLEBINlosndicesdelastablasborradas(noconDROP INDEX)

PURGERECYCLEBIN|DBA_RECYCLEBIN; PURGETABLESPACEnomtsp[USERusuario]; BorrardirectamentesinpasarporRECYCLEBIN: DROPTABLEtablaPURGE;


ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

50

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

ENVIARCORREODESDEORACLE PaqueteUTL_MAIL
El paquete UTL_MAIL (>=10g) no se instala por defecto por razones de seguridad. InstalarUTL_MAILdesdeelSYS: SQL>@$ORACLE_HOME/rdbms/admin/utlmail.sql SQL>@$ORACLE_HOME/rdbms/admin/prvtmail.plb ParapoderusarUTL_MAILhayquedefinirelparmetroSMTP_OUT_SERVER, enelinit: smtp_out_server='miServidorDeCorreo.miDominio' UnavezarrancadalaBDconelnuevoparmetro,podremosenviarunmensaje conutl_mail.send: SQL>exec utl_mail.send('remitente@dominio','destinatario@um.es',nu ll,null,'PruebadesdeOracle10g','Lafechaactuales'|| to_char(sysdate,'dd/mm/yyyyhh24:mi:ss')) PL/SQLproceduresuccessfullycompleted.
ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

51

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

ENCOLARYSUSPENDERLABD QuiesceySuspend

Encolar la BD (>=9i). Util si el DBA necesita que no haya transacciones ni consultasconcurrentesalasuya.Esperaaqueterminentransacciones/consultas (se pueden ver en V$BLOCKING_QUIESCE) e impide nuevas (excepto de SYS/SYSTEM).SlodesdeSYS/SYSTEM.V$INSTANCE.ACTIVE_STATE: ALTERSYSTEMQUIESCERESTRICTED; ALTERSYSTEMUNQUIESCE; Suspender la BD (>=9i). Util para copias de seguridad en caliente. Suspende E/S a ficheros de datos y control (los tablespaces deben estar en modo hot backup con ALTER TABLESPACE BEGIN BACKUP). Slo SYS/SYSTEM. V$INSTANCE.DATABASE_STATUS. Ojo !!!, no cerrar la sesin que hace el SUSPENDpueseslanicaquepuedehacerRESUME:
ALTERTABLESPACEnomtspBEGINBACKUP; ... ALTERSYSTEMSUSPEND; //CopiamosficherosdelaBD(necesitarrecuperarla instancia,puesnosehacecheckpoint). ALTERSYSTEMRESUME; ALTERTABLESPACEnomtspENDBACKUP; ...
Administraci ndeOracle10g(Parte2) ESTRUCTURASDEALMACENAMIENTO

52

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

VISTASDELDD
DBA_TABLESPACES(TablespacesdelaBD). DBA_SEGMENTS(Segmentosquehayenlostablespaces). DBA_EXTENTS(Extensionesquecomponenlossegmentos). DBA_FREE_SPACE(Extensioneslibresencadatablespace). DBA_INDEXES(IndicescreadossobretablasdelaBD,conestadsticas). INDEX_STATS(estadsticasdendices) V$SEGMENT_STISTICS(estadsticasdesegmentos) DBA_RECYCLEBIN(objetosborradosconDROP,sinindicarPURGE) V$INSTANCE(Datosdelainstancia,incluyendosiestencoladay/o suspendida) SELECTDBMS_METADATA.GET_DDL('TABLE','T1')FROMDUAL;(muestrala sentenciaDDLparacrearlatablaT1). SELECTDBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', USUARIO');(muestralassentenciasGRANTqotorganalusuariolosprivilegios quetiene.AdemsdeOBJECT_GRANT,sepuedeindicarSYSTEM_GRANTy ROLE_GRANT).
ESTRUCTURASDEALMACENAMIENTO

Administraci ndeOracle10g(Parte2)

53

JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

PRACTICASTEMA3

3.1.ComprobareltamaodelbloquedelaBD.Cuntascachsdedatos haydefinidas?. Definirla cachkeepcon1M.Definirtambin una cach parabloquesde4Kb,con1M. 3.2. Crear un tablespace SEGAUTO con gestin automtica de segmentos. 3.3.CrearunatablaTABLA01eneltablespaceanterior,conunacolumna 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 espacioocupadoporlatabla. 3.4.CrearunatablaTABLA02conunasolacolumnavarchar2(100);yotra llamadaTABLA02COMPRIigualquelaanterior,peroconcompresinde datos. Insertar 1000 filas en TABLA02 y, luego, esas mismas 1000 en TABLA02COMPRI.Cuntosbloquesnecesitacadatablaparaalmacenar lasmismasfilas?

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

ESTRUCTURASDEALMACENAMIENTO

54

PRACTICASTEMA3

3.5. Crear tablespace TSP4K con tamao de bloque de 4Kb. Crear una tablaTABLA03,igualqueTABLA01,ycomprobarcuantosbloquesocupan lasdosycompararlosdatos. 3.6. Comprobar los parmetros pga_aggregate_target, workarea_size_policy y sort_area_size. Se puede poner pga_aggregate_target=0?cmodesactivarpga_aggregate_target? 3.7. Crear una TABLA04 en el tablespace SEGAUTO, con cuatro columnas:c1char(2),c2varchar2(10),c3dateyc4number(10,2).Estimar eltamaomediodelafila,yelnmeromediodefilasporbloque.insertar 100 filas en la tabla , calcular las estadsticas y comprobar los datos calculados (nmero de filas, nmero de bloques y longitud media de la fila). 3.8. Instalar el paquete UTL_MAIL y configurar el parmetro del init smtp_out_server.Hacerunapruebadeenvodecorreoconutl_mail.send.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

ESTRUCTURASDEALMACENAMIENTO

55

TEMA4 NUEVASFUNCIONALIDADESDE MONITORIZACINYAJUSTE

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

56

TEMA4. NUEVASFUNCIONALIDADESDE MONITORIZACINYAJUSTE.

Nuevainfraestructura. AWR(AutomaticWorkloadRepository). VistasAWR. ADDM(AutomaticDatabaseDiagnosticMonitor). DBMS_ADVISOR. SQLTuningAdvisor. SegmentShrink. SegmentAdvisor. UNDOAdvisor.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

57

NUEVAINFRAESTRUCTURA
Nueva infraestructura = AWR + Time Model + ASH (El parmetro STATISTICS_LEVELdebevalerTYPICALuALL). AutomaticWorkloadRepository(AWR).Vistasv$+volcadoadisco,pordefecto cada60minymx7das(procesosMMON,MMNL).MejorqSTATSPACK. EXECUTEdbms_workload_repository.create_snapshot(); ActiveSessionHistory(ASH).Recopilamuestrascadasegundodelassesiones activas de V$SESSION: V$ACTIVE_SESSION_HISTORY, DBA_HIST_ACTIVE_SESS_HISTORY. Nuevo Time Model: estadsticas y mtricas relativas al tiempo consumido por lassesionesactivasenllamadasalaBD(consultas/actualizaciones). TimeModel(DBtime,DBCPU,etc):V$SYS_TIME_MODEL, V$SESS_TIME_MODEL. WaitClasses:V$SYSTEM_WAIT_CLASS,V$SESSION_WAIT_CLASS. Metrics(cada60seg):V$SYSMETRIC,V$SESSMETRIC,V$FILEMETRIC, V$EVENTMETRIC,V$WAITCLASSMETRIC,V$METRICNAME. OSstatistics.V$OSSTAT. AutomaticDatabaseDiagnosticMonitor(ADDM).Enbasealosdatosrecopilados por AWR y ASH, identifica problemas y sus posibles causas, proporcionando recomendacioneseindicandolosbeneficiosqseobtendrn. $ORACLE_HOME/rdbms/admin/addmrpt.sql
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

58

AUTOMATICWORKLOAD REPOSITORY(AWR)
Snapshots.ConfigenDBA_HIST_WR_CONTROL.Ejdecambioaintervalode30dascada 30min(expresadoenminutosysiintervalo=0nosecalculanmssnapshots): DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(43200,30); DBMS_WORKLOAD_REPOSITORY.drop_snapshot_range(22,32);Borrarango Baselines.Parejadesnapshots(qyanoseborrarn). DBMS_WORKLOAD_REPOSITORY.create_baseline(210,220,'batchbaseline'); Snapshotsinicialyfinal,ynombreparaelbaseline DBMS_WORKLOAD_REPOSITORY.drop_baseline('batchbaseline','FALSE);Si TRUE,borralossnaphostsasociados InformesAWRen$ORACLE_HOME/rdbms/admin(consalidaenHTMLoTEXTO): awrrpt.sql,pedirformatosalida(textohtml),lossnapshotsinicialyfinal,yelnombre delficherodelinforme.Existeawrrpti.sqlqpermiteseleccionarunainstancia. awrsqrpt.sql,muestraestadsticasdeunasentenciaSQLparaunrangodesnapshots. awrddrpt.sql,comparaatributosdetalladosderendimientoyvaloresdeconfiguracin entredosperodosdetiempo. InformeASH(V$ACTIVE_SESSION_HISTORY): $ORACLE_HOME/rdbms/admin/ashrpt.sql. OEM.IncluyelastareasdeladministracindelAWR.Accesodesdeenlace "Administracin",seguidode"RepositoriodeCargadeTrabajoAutomtica"bajo"Gestin deEstadsticas".PermitiendomodificarlaconfiguracindeAWRygestionarlossnapshots.
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

59

VISTASAWR
Sepuedeforzarlacreacindeunsnapshot,manualmente: EXECUTEDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(); VistasAWR: V$ACTIVE_SESSION_HISTORY.Muestrasdesesionesactivasrecopiladascada segundo(ASH). V$METRIC.Mtricasrecopiladas. V$METRICNAME.Tiposdemtricasyagrupacionesdelasmismas. V$METRIC_HISTORY.Histricodemtricasrecopiladas. V$METRICGROUP.Gruposdemtricas. DBA_HIST_ACTIVE_SESS_HISTORY.HistricodeASH. DBA_HIST_BASELINE.Baselines. DBA_HIST_DATABASE_INSTANCE.ArranquesdelaBD. DBA_HIST_SNAPSHOT.Snapshotsrecopiladas. DBA_HIST_SQL_PLAN.PlanesdeejecucindesentenciasSQL. DBA_HIST_WR_CONTROL.ConfiguracindelAWR.

MsinformacinsobreAWR: http://cursos.atica.um.es/oradoc102/server.102/b14211/autostat.htm#i27008
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

60

AUTOMATICDATABASE DIAGNOSTICMONITOR(ADDM)
Seactivapordefecto(statistics_level=TYPICALuALL;sedesactivaconBASIC). Informes.EntredossnapshotsdelAWR.Darecomendacionesparareducirlaestadstica DBtime(V$SYS_TIME_MODEL)otiempototalacumuladoporlaBDparaatenderlas consultas/actualizacionesdelassesionesactivas( http://download.oracle.com/docs/cd/B19306_01/server.102/b28051/tdppt_method.htm#CIHCDGCI). $ORACLE_HOME/rdbms/admin/addmrpt.sql.Tbusandoelpaquete DBMS_ADVISOR. Anlisisderesultados.Elinformeestructuralosproblemasderendimientoencontradosen FINDINGS,indicandoelporcentajedeimpacto;yparacadaunonosdarecomendaciones, indicandoquhacer(ACTION)yelporqu(RATIONALE). ParaelanlisisdeE/S,pordefecto,setomaunvalorde10000microsegundosparalalectura deunbloquedelaBD.SicalculamoselvalorrealparanuestraBD,podemoscambiarlocon: EXECUTEDBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER( 'ADDM','DBIO_EXPECTED',8000); VistasdelDD: DBA_ADVISOR_TASKS:ejecucionesdeADDM(tareas)consuidentificacin. DBA_ADVISOR_LOG:logdetareasADDM(pareceestarincluidoenelanterior). DBA_ADVISOR_RECOMMENDATIONS.Recomendacionesresultantesdelanlisis. OrdenarporRANK(importancia)yverBENEFIT. DBA_ADVISOR_FINDINGS.Problemasencontradosenelanlisis. MsinformacinsobreADDM: http://cursos.atica.um.es/oradoc102/server.102/b14211/diagnsis.htm#sthref433
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

61

EJECUTARADDMCON DBMS_ADVISOR
CREATEORREPLACEFUNCTIONrun_addm(start_timeINDATE,end_timeINDATE) RETURNVARCHAR2 IS begin_snapNUMBER; end_snapNUMBER; tidNUMBER;TaskID tnameVARCHAR2(30);TaskName tdescVARCHAR2(256);TaskDescription BEGIN Buscalosidsdelossnapshotscorrespondientesalrangodefechas. SELECTmax(snap_id)INTObegin_snapFROMDBA_HIST_SNAPSHOT WHEREtrunc(end_interval_time,'MI')<=start_time; SELECTmin(snap_id)INTOend_snapFROMDBA_HIST_SNAPSHOT WHEREend_interval_time>=end_time; Nombredetarea=NULLygeneradescripcionunicaparalatarea. tname:=''; tdesc:='run_addm('||begin_snap||','||end_snap||')'; Crealatareaylaejecuta. DBMS_ADVISOR.CREATE_TASK('ADDM',tid,tname,tdesc); DBMS_ADVISOR.SET_TASK_PARAMETER(tname,'START_SNAPSHOT',begin_snap); DBMS_ADVISOR.SET_TASK_PARAMETER(tname,'END_SNAPSHOT',end_snap); DBMS_ADVISOR.EXECUTE_TASK(tname); RETURNtname; END;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

62

OBTENERINFORMEADDMCON DBMS_ADVISOR
ConfiguravariablesycolumnasSQL*Plusnecesariasparaelinforme. SETPAGESIZE0LONG1000000LONGCHUNKSIZE1000; COLUMNget_clobFORMATa80; Ejecutarun_addm()conparmetros7pmy9pmdeldia20deOctubre. VARIABLEtask_nameVARCHAR2(30); BEGIN :task_name:=run_addm(TO_DATE('19:00:0020/10','HH24:MI:SSDD/MM'), TO_DATE('21:00:0020/10','HH24:MI:SSDD/MM')); END; / EjecutaGET_TASK_REPORTparaobtenereltextodelinforme. SELECTDBMS_ADVISOR.GET_TASK_REPORT(:task_name) FROMDBA_ADVISOR_TASKSt WHEREt.task_name=:task_name ANDt.owner=SYS_CONTEXT('userenv','session_user'); Nota:lavariableLONGdeSQL*Plusdebeasignarseaunvalorsuficiente paramostrarelinformecompletodeADDM,yaquelafuncin DBMS_ADVISOR.GET_TASK_REPORTdevuelveunCLOB.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

63

SQLTUNINGADVISOR
AsesordeAjustesSQL http://cursos.atica.um.es/oradoc102/server.102/b14211/sql_tune.htm Verificalavalidezdelasestadsticasysiesnecesariogeneraestadsticas auxiliares. Determinasiesnecesariocrearestructurasdeacceso:ndicesy/ovistas materializadas. OEM:EnlacesRelacionados(abajo)>CentraldeAsesores>Asesorde AjustesSQL(bajoAsesores). PaqueteDBMS_SQLTUNE( http://cursos.atica.um.es/oradoc102/appdev.102/b14258/d_sqltun.htm#i1010615). CreartareadeajustedeSQL(DBMS_SQLTUNE.CREATE_TUNING_TASK) EjecutartareadeajustedeSQL(DBSM_SQLTUNE.EXECUTE_TUNING_TASK) Generarinformecorrespondientealatarea (DBMS_SQLTUNE.REPORT_TUNING_TASK). Generarscriptconlasrecomendacionesdelinforme (DBMS_SQLTUNE.SCRIPT_TUNING_TASK). Vistasrelacionadas:
DBA_SQLTUNE_STATISTICS,DBA_SQLTUNE_BINDS,DBA_SQLTUNE_PLANS. V$SQL,V$SQLAREA,V$SQLSTATS,V$SQL_BINDS.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

64

SQLTUNNINGADVISOR DBMS_SQLTUNE
SeleccionarsentenciasSQLqyasehanejecutado:
Sentenciassqlconmsde500buffergets. SELECTsql_id,sql_text FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('buffer_gets>500')) ORDERBYsql_id; SentenciassqldemiUsuarioconmsde500buffergets. SELECTsql_id,sql_text FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('buffer_gets>500and parsing_schema_name=''miUsuario'''))ORDERBYsql_id; Sentenciassqlquetardaronmsde5segundos SELECTsql_id,sql_text FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('elapsed_time>5000000')) ORDERBYsql_id; Datosdeunasentenciaconcreta. SELECT* FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('sql_id= ''4rm4183czbs7j'''));
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

65

SQLTUNNINGADVISOR DBMS_SQLTUNE
DiferentesformasdecreartareasdeajusteSQL.
variablestmt_taskVARCHAR2(64); Coneltextodelasentencia. EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK( sql_text=>'selectquantity_soldfromsaless,timestwhere s.time_id=t.time_idands.time_id=TO_DATE(''29/01/07'')'); Conelidentificador(Sql_idencursorcache) EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id=> 'ay1m3ssvtrh24'); Limitandoeltiempodeajustea10minutos EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id=> 'ay1m3ssvtrh24',time_limit=>600); IndicandounintervalodesnapshotsdelAWR EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK(begin_snap=>1, end_snap=>2,sql_id=>'ay1m3ssvtrh24');

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

66

SQLTUNNINGADVISOR DBMS_SQLTUNE
Ejecutolatareadeajuste. EXECDBMS_SQLTUNE.EXECUTE_TUNING_TASK(:stmt_task); Compruebosilatareahaterminado. SELECTstatusFROMUSER_ADVISOR_TASKSWHEREtask_name=:stmt_task; Generoelinforme. SETLONG1000000LONGCHUNKSIZE100000LINESIZE100PAGESIZE10000 SELECTDBMS_SQLTUNE.REPORT_TUNING_TASK(:stmt_task)FROMDUAL; Generoelscriptparaaplicarlascorreccionessugeridasporel informeanterior. SELECTDBMS_SQLTUNE.SCRIPT_TUNING_TASK(:stmt_task)FROMDUAL; Nota:Desdesqlplusesnecesariohacersetlong1000000(puedeqcon menosseasuficiente)parapoderverelclobcompletodevueltopor dbms_sqltune.report_tuning_taskydbms_sqltune.script_tuning_task.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

67

SEGMENTADVISOR SegmentSHRINK
Estaoperacincompactaelcontenidodeunsegmentoydevuelveextensioneslibres.
Parapoderreorganizarlasfilasdeunatablahayqpermitirq puedancambiarlosrowids ALTERTABLEmitablaENABLEROWMOVEMENT; Reorganizalasfilasdeunatablaytodossussegmentos(p.e.LOBS) ALTERTABLEmitablaSHRINKSPACECASCADE; ReorganizaslounLOB ALTERTABLEmitablaMODIFYLOB(milob)(SHRINKSPACE); Reorganizaunasolaparticindeunatablaparticionada ALTERTABLEmitablapartMODIFYPARTITIONmipart1SHRINKSPACE; ReorganizaunIOTyelsegmentodeoverflow ALTERTABLEmitablaiotSHRINKSPACECASCADE; ReorganizasloelsegmentodeoverflowdeunIOT ALTERTABLEmitablaiotOVERFLOWSHRINKSPACE; Liberalasextensionesqueestnvacas ALTERTABLEmitablaDEALLOCATEUNUSEDKEEPinteger; ALTERINDEXmiindiceDEALLOCATEUNUSEDKEEPinteger; ALTERCLUSTERmiclusterDEALLOCATEUNUSEDKEEPinteger;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

68

SEGMENTADVISOR Ejecucinmanual
ParaejecutarlohacenfaltalosprivilegiosADVISORyCREATEJOBoCREATEANY JOB.DesdeOEM:Enlacesrelacionados(abajo)>CentraldeAsesores> Asesordesegmentos(bajoAsesores).Manualmente:
variableidnumber; declare namevarchar2(100); descrvarchar2(500); obj_idnumber; begin name:='miTablaSegAdv'; descr:='EjemploconSegmentAdvisor'; dbms_advisor.create_task(advisor_name=>'SegmentAdvisor',task_id =>:id,task_name=>name,task_desc=>descr); dbms_advisor.create_object(task_name=>name,object_type=> 'TABLE',attr1=>'miUsuario',attr2=>'miTabla',attr3=>NULL, attr4=>NULL,attr5=>NULL,object_id=>obj_id); dbms_advisor.set_task_parameter(name,'recommend_all','TRUE'); dbms_advisor.set_task_parameter(name,'verbose','TRUE'); dbms_advisor.execute_task(name); end; / SELECTSTATUSFROMDBA_ADVISOR_TASKSWHERETASK_ID=:id;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

69

SEGMENTADVISOR Verresultados
selectaf.task_name,ao.attr2segname,ao.attr3partition,ao.type, af.message,af.more_info fromdba_advisor_findingsaf,dba_advisor_objectsao whereao.task_id=af.task_idandao.object_id=af.object_idand af.task_id=:id; (Generalasiguientesalida) ... Thefreespaceintheobjectislessthan10MB. AllocatedSpace:3145728:UsedSpace:3000902:ReclaimableSpace:144826:

AUTOMATICSEGMENTADVISOR(ASA).Identificasegmentoscandidatosa shrink.NoanalizatodoslosobjetosdelaBD.ExaminalasestadsticasdelaBD ymuestrasdesegmentos,paraseleccionar:tablespacesqueseacercanalos nivelescrticosodealerta,segmentosconmsactiviidadysegmentosquehan crecidoms. IntervalodeejecucindeASA:MAINTENANCE_WINDOW_GROUP(LVunavez apartirdelas22hyhasta6h;ySunavezapartirdelas0hhasta0hdelL) VistasdelASA: DBA_AUTO_SEGADV_SUMMARY:ejecucionesdeASA. DBA_AUTO_SEGADV_CTL:objetosseleccionadosparaseranalizados.
Msinfo:http://cursos.atica.um.es/oradoc102/server.102/b14231/schema.htm#CHDHBHAB
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

70

UNDOADVISOR DBMS_UNDO_ADV
AlgunasfuncionesdelpaqueteDBMS_UNDO_ADV: FUNCTIONBEST_POSSIBLE_RETENTIONRETURNSNUMBERConundosizeactual FUNCTIONLONGEST_QUERYRETURNSNUMBERQueryqmashatardado,ens. FUNCTIONREQUIRED_RETENTIONRETURNSNUMBERParaqueryqmastard FUNCTIONREQUIRED_UNDO_SIZERETURNSNUMBERParaactualundo_retention ArgumentNameTypeIn/OutDefault? RETENTIONNUMBERIN FUNCTIONUNDO_HEALTHRETURNSNUMBER PROBLEMVARCHAR2OUT RECOMMENDATIONVARCHAR2OUT RATIONALEVARCHAR2OUT RETENTIONNUMBEROUT UTBSIZENUMBEROUT FUNCTIONUNDO_INFORETURNSBOOLEAN TABLE_SPACE_NAMEVARCHAR2OUT TABLE_SPACE_SIZENUMBEROUT AUTO_EXTENDBOOLEANOUT UNDO_RETENTIONNUMBEROUT RETENTION_GUARANTEEBOOLEANOUT Nota:lainfoobtenidasecalculacondatosdesdeltimoarranque. Muchasfuncionestienenversionesconparmetrosfechainiyfin.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

71

PRACTICASTEMA4

4.1.Consultarlasprincipalesvistasdinmicasdela10grelacionadasconel AWR: V$OSSTAT, V$SYS_TIME_MODEL, V$SES_TIME_MODEL, V$SYSMETRIC, V$SESSMETRIC, V$FILEMETRIC, V$EVENTMETRIC, V$SYSTEM_WAIT_CLASS, V$SESSION_WAIT_CLASS, V$WAITCLASSMETRIC. 4.2.ProbarAWR. 4.3.ProbarASH. 4.4.ProbarADDM. 4.5.ProbarSQLTUNING 4.6.ProbarSEGMENTADVISOR. 4.7.ProbarUNDOADVISOR.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION

72

TEMA5 MONITORIZACINYAJUSTETRADICIONAL

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

73

TEMA5. MONITORIZACINYAJUSTETRADICIONAL.

Eventosdeespera. Vistasdinmicas:informacindelsistemaydelassesiones. AjustedelaSharedPool. Ajustedelabuffercache. Ajustedelosbuffersredolog. Ajustedelrollback. Ajustedeltablespacetemporal. Ajustedeloscheckpoints. AjustedelassentenciasSQL. AjustedelaCPU. UtilidadSTATSPACK.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

74

EVENTOSDEESPERA
V$EVENT_NAME.Listadeposiblesesperas. V$SYSTEM_EVENT.EsperastotalesporeventodesdearranquedeBD. V$SESSION_EVENT.Lamismainformacinanterior,porsesin. V$SESSION_WAIT.Sesionesqueestnesperandoactualmente. Eventosmscomunes:
PararecibirvaloresenWAIT_TIMEponerTIMED_STATISTICS=TRUE. freebufferwaits:DBWRescribepocoamenudo(subirndecheckpoints). latchfree:contencinenlatches(verificarV$LATCH). bufferbusywaits:haycontencinE/S(ajustarE/Sodistribuirdatos). dbfilesequentialread:haycontencinE/S(ajustarE/Sodistribuirdatos) dbfilescatteredread:igualanterior,peromultibloque(ajustarE/Sodistribuirdatos). dbfileparallelwrite:checkpointsmuyespaciados(subirsunmero). undosegmenttxslot:faltansegmentosderollback(aadirms). undosegmentextension:demasiadasextensionesdinmicas(ampliacionesy reducciones)delossegmentosderollback(ajustartamao). Nota:lalistacompletadeeventosestenelmanualOracle10gDatabaseReference.
http://cursos.atica.um.es/oradoc102/server.102/b14237/waitevents.htm#i968375
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 AJUSTEYMONITORIZACINDELA INSTANCIA

75

VISTASDINAMICAS INFORMACIONDELSISTEMA
AWR(>=10g).Verdiapositivasanteriores,deestemismotema. Basededatos V$SYSTEM_EVENT:esperastotalesporevento. V$SYSSTAT:estadsticasbsicasdelainstancia. V$SGASTAT:estadodeusodelaSGA.VertbV$SGAINFO(>=10g). V$WAITSTAT:estadsticasdecontencin. V$PROCESS:procesosoracle. V$SESSION:sesionesencurso. V$SORT_SEGMENT:estadodeusodelossegmentostemporales. V$PGASTAT:estadsticasdeusodelaPGA. Memoria
V$BUFFER_POOL_STATISTICS:estadsticasdelacachdedatos. V$LIBRARYCACHE:RendimientodelaLibraryCach. V$DB_OBJECT_CACHE:ObjetosquehayenlaLibraryCach. V$SQLAREA:SentenciasSQLyestadsticasasociadas. V$ROWCACHE:RendimientodelaDictionaryCach.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

76

VISTASDINAMICAS INFORMACIONDELSISTEMA

E/S V$FILESTAT:EstadsticasdeE/Sdelosficherosdedatos. V$TEMPSTAT:EstadsticasdeE/Sdelosficherostemporales. Contencin V$LATCH:Estadsticasdelatches. V$WAITSTAT:Estadsticasdecontencin. V$ROLLSTAT:Estadsticasdelossegmentosderollback. V$UNDOSTAT:Estadsticasdeundo.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

77

VISTASDINAMICAS INFORMACIONDESESIONES
Sesin(datosdelassesionesactualmenteencurso) V$SESSION:sesiones. V$SESSTAT:estadsticasdecadasesin. V$SESSION_EVENT:eventosdecadasesin. V$SESSION_WAIT:esperasdecadasesin. V$LOCK:bloqueosactualesypeticionesdebloqueo. V$ACCESS:objetosbloqueadosylassesionesquelosestnusando. V$TRANSACTION:transaccionesencurso. V$OPEN_CURSOR:cursoresabiertosycompilados. V$SORT_USAGE:segmentostemporalesenuso V$SESS_IO:estadsticasdeE/Sdecadasesin.

Nota:lalistacompletadevistasdinmicasestenelmanualOracle10gDatabaseReference. http://cursos.atica.um.es/oradoc102/server.102/b14237/toc.htm
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 AJUSTEYMONITORIZACINDELA INSTANCIA

78

AJUSTEDELASHAREDPOOL INTRODUCCION
OracleguardalassentenciasSQLylospaquetesenlaSharedpool,unacach quepresentalossiguientesproblemas:
Launidaddereservadeespacionoesconstante,variandodesdeunoscuantosbytes hastamuchosKb. Notodalamemoriapuedeserliberadacuandoelusuarioterminaconella;yaquese tratadeunacachquepretendemaximizarlacomparticin. Nodisponedeunazonaendiscoparapaginar.

PosiblessntomasdeproblemasdeajustedelaSharedPool: Contencinenloslatches%librarycache%(V$LATCH). Contencinenellatch%sharedpool%(V$LATCH). AltostiemposdeCPUparacompilar,parsetimecpu(V$SYSSTAT). Muchasrecargas(reloads)enV$LIBRARYCACHE. Muchasllamadasdecompilacin,parsecount%(V$SYSSTAT). FrecuenteserroresORA04031,debidosalafragmentacin.

Nota:loslatchessonmicrobloqueosnecesariosparaprotegerlasoperacionesenlaSGA (SharedPool,LibraryCache,RedoBuffer,etc).Sonpuntospotencialesdecontencin.
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

79

AJUSTEDELASHAREDPOOL SENTENCIASSQL
La ejecucin de una sentencia SQL tiene varias fases: anlisis sintctico y semntico(compilacin),yclculodelplandeejecucin: EnlalibrarycacheseguardanlassenteciasSQLyacompiladas. Enlasqlareaseguardanlosplanesdeejecucindecadaunadeellas. AlcompilarunasentenciaSQL,hayquedistinguirentrehardysoftparse: HardParse:lasentenciaSQLnoexisteenlaSharedPool(LibraryCache).Es costosoentrminosdeCPUylatches. Soft Parse: la sentencia SQL ya existe en la SharedPool y puede usar una versindelamisma. DossentenciasSQLsonigualessitienenelmismotexto(incluyendoespaciosen blancoymaysculas/minsculas);yadems:
Losnombresdeobjetosdebenapuntaralosmismoobjetosreales. Elmododeloptimizador(optimizergoal)debeserelmismo. Losnombres,tiposylongitudesdelasvariablesbinddebenserlosmismos. ElentornoNLS(idiomaypas)debeserelmismo.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

80

AJUSTEDELASHAREDPOOL GENERALIDADES
QuesiemprehayaespaciolibreenlaSharedPool,puedesignificarquesobra;y quehayapocoonadanosuponeunproblemasielrendimientoesbueno:
SELECT*FROMV$SGASTATWHERENAME='freememory'ANDPOOL='sharedpool'; POOLNAMEBYTES sharedpoolfreememory693036

Enlalibrarycache,elpinhitratio>=95%(V$LIBRARYCACHE)ylomscercano a1(100%).Reloadsdebesercasi0. Enlarowcache(V$ROWCACHE)elratiogetmisses/gets<=15%. LasaplicacionesOLTPdebenusarbindvariables(noparaDSS). Usar DBMS_SHARED_POOL.KEEP (dbmspool.sql) para fijar paquetes muy usadosenlaSharedPool(comoSYS.STANDARD). Haciendoflushsepuedeeliminarlafragmentacin(ora4031):
altersystemflushshared_pool;
Nota: puede bajar rendimiento hasta que objetos vuelven a la cach. No usar cuando BD tiene muchacarga.Nodescargapaquetesfijados,nisentenciasyacompiladasdesesionesencurso.

Nota:enDSSesmejordarlemuchainformacinalCBOqcompartirelcdigo.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

81

AJUSTEDELASHAREDPOOL LIBRARYCACHE
V$LIBRARYCACHE.EstadsticasdelaLibraryCach. GETS(peticiones)CadapeticindeejecutarunasentenciaSQL(estel SQLenmemoria?). PINS(ejecuciones)CadapeticindemetadatosdeunSQL(estelSQL yacompilado?,siloestseejecuta).PINHITRATIOdebesercasi1. RELOADS(recompilaciones)Cadapeticindemetadatos(PIN)quenolos encuentra en memoria pq los ha sacado el algoritmo LRU (ejecuciones que requierenrecompilarsentencia).Debesercasi0. LosNAMESPACEquesecorrespondenconsentenciasSQLyPL/SQLson:SQL AREA,TABLE/PROCEDURE,BODYyTRIGGER. Para hacer que RELOADS sea casi 0, podemos subir shared_pool_size, pero adems,paraaprovechardichoincremento,subiremostambinopen_cursors. Si RELOADS es casi 0 y siempre tenemos una cantidad significativa de la SharedPoollibre,bajaremosshared_pool_size.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

82

AJUSTEDELASHAREDPOOL ROWCACHE
V$ROWCACHE.EstadsticasdelaRowCach(DiccionariodeDatos).
PARAMETER:tipodepeticin. GETS:peticionesalacach,deltipoencuestin. GETMISSES:peticionesfallidasquegeneranE/S. MODIFICATIONS:actualizacionesdelacach.

SELECT(SUM(GETSGETMISSESFIXED))/SUM(GETS)"ROWCACHE"FROMV$ROWCACHE; ROWCACHE .982133497


Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

Debemosprocurarqueratios>=85%. Podemosverelratiogeneralcon:

SELECTparameter,sum(gets),sum(getmisses) ,100*sum(getsgetmisses)/sum(gets)pct_succ_gets ,sum(modifications)updates FROMV$ROWCACHEWHEREgets>0GROUPBYparameter; PARAMETERSUM(GETS)SUM(GETMISSES)PCT_SUCC_GETSUPDATES dc_object_ids1694253796.8303624173 dc_objects753496687.1781258414 ...

AJUSTEYMONITORIZACINDELA INSTANCIA

83

AJUSTEDELASHAREDPOOL RESTODEVISTASDINAMICAS

EnV$SHARED_POOL_ADVICEpodemosversinosinteresaredimensionarla SharedPool(elparmetroSTATISTICS_LEVELdebevalerALLoTYPICAL,noBASIC).
selectSHARED_POOL_SIZE_FOR_ESTIMATESIZE_ESTIMATE, SHARED_POOL_SIZE_FACTORSIZE_FACTOR, ESTD_LC_TIME_SAVED_FACTORPARSE_SAVED_FACTOR fromv$shared_pool_advice; SIZE_ESTIMATESIZE_FACTORPARSE_SAVED_FACTOR 4.5.9806 811 1621.0194

V$SGASTAT.DetalledecadaunadelaspartesdelaSharedPool. V$SQLAREA.Estadsticassobretodosloscursorescompartidos,incluyendoel textoinicial(1000caracteres)decadasentencia.Elusodeestavistaconsume muchoslatches(V$SQLno). V$SQLTEXT.Textocompletodelassentencias,envariaslneas(filas). V$DB_OBJECT_CACHE. Objetos en cach, incluyendo paquetes, funciones, procedimientos,tablas,ndices,sinnimos,secuencias,vistas,triggers,etc.
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

84

AJUSTEDELASHAREDPOOL COMPARTIRCODIGOSQL
Nosfijaremoselobjetivocompilarunavezyejecutarmuchas. Detectarsentenciassimilaresqueusanliterales(V$SQLAREA):

Nota: los valores 5, 40 y 30 son ejemplo para detectar sentencias que se ejecutan poco (<5),cuyos40primeroscaracteressonigualesenmuchoscasos(>30).Luegoveramossi esposibleconvertirlasenunaoenunaspocas.

SELECTsubstr(sql_text,1,40)"SQL",count(*),sum(executions)"TotExecs" FROMv$sqlarea WHEREexecutions<5 GROUPBYsubstr(sql_text,1,40)HAVINGcount(*)>30ORDERBY2;

Desde 9i, con CURSOR_SHARING=SIMILAR (antes slo FORCE), Oracle determina qu literales puede sustituir por variables bind sin afectar el plan de ejecucin. Si afectase al plan de ejecucin no se hace el cambio (si se usa FORCEs). Cachprivadasesin(SharedPool):alcompilarunasentenciaprimerosebusca en ella. Empezar con SESSION_CACHED_CURSORS=50 (valor alto puede provocar ora4031, comprobar % de uso). Util con Oracle Forms cuando los formsseabrenycierranconfrecuencia.
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

85

AJUSTEDELASHAREDPOOL LATCHESDELALIBRARYCACHE
Si alguno de los latches est provocando la mayora de sleeps, entonces hay un problema.Hayquetenerencuentaqueestosdatosseacumulandesdeelarranque delaBD,yportantonomuestranproblemasintermitentes.
selectname,gets,misses,sleepsfromv$latch wherenamelike'library%';
NAMEGETSMISSESSLEEPS librarycache971557394290212272 librarycacheloadlock1170500 misses son fallos al intentar coger un latch, y sleeps son aquellos fallos que provocan que la sesin correspondientesepongaadormir(locualimplicaunaespera).

Paradetectarelprocesoencuestin(slosaldralgosilopillamosenelmomento):
selecta.name,pidfromv$latcha,V$latchholderb wherea.addr=b.laddranda.name='librarycache%';
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 AJUSTEYMONITORIZACINDELA INSTANCIA

86

AJUSTEDELASHAREDPOOL ESPERASPORLATCHES
Consultando V$SESSION_WAIT durante un periodo de lentitud, se puede determinarsihayunproblemaconlatchesy,entalcaso,conqulatchconcreto. Sihaymsde34procesosesperando,puedehaberunproblema.
selectcount(*)number_of_waiters fromv$session_waitw,v$latchl wherew.wait_time=0andw.event='latchfree'and w.p2=l.latch#andl.namelike'library%';

Tambin es interesante mirar slo en v$session_wait para ver si hay alguna otra causadelentitud.
select*fromv$session_wait whereevent!='rdbmsipcmessage'and eventnotlike'%Net%'andsid>5;

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

87

AJUSTEDELABUFFERCACHE GENERALIDADES
Oracle guardacopias de losbloquesde datosen labuffercach(cachde datos).Puedehabercopiasdediferentespuntosdeltiempoytambinbloques dirty(modificadosperoquenosehanllevadoadisco). Cuando la cach se llena, Oracle mover parte de sus bloques a disco (usa algoritmo LRU sobre la lista, o listas, de bloques no dirty), de modo que si posteriormentesonaccedidostendrnquevolverarecuperarsedeldisco. Ellatchcachebufferslruchainserializaoperacionessobrela(s)lista(s)LRU. El proceso DBWR es el responsable de llevar los bloques dirty a disco. Cualquiersesinpuedeleerlosbloquesdelacach. Podemos calcular el ratio de eficiencia (hit ratio) de la cach de datos consultando V$SYSSTAT. Se recomienda que sea >80% para aplicaciones OLTP;peroestonoaseguraunbuenrendimiento(tbesmuyimportanteeluso dendicesselectivos). EnaplicacionesDSS(datawarehouse)sepuedentenerratiosmuchomenores.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

88

AJUSTEDELABUFFERCACHE HITRATIO
ConsultandoV$SYSSTAT:
select100*(1(f1f2f3)/(r1+r2f2f3))HitRatio from(selectvaluef1fromv$sysstatwherename='physicalreads'), (selectvaluef2fromv$sysstatwherename='physicalreadsdirect'), (selectvaluef3fromv$sysstatwherename='physicalreadsdirect(lob)'), (selectvaluer1fromv$sysstatwherename='consistentgets'), (selectvaluer2fromv$sysstatwherename='dbblockgets');

Si usamos varias cachs V$BUFFER_POOL_STATISTICS:

(keep,

recycle,

etc),

partir

de

Si activamos DB_CACHE_ADVICE, podremos consultar V$DB_CACHE_ADVICEposiblesestimacionesparalabuffercach.


selectname,size_for_estimate,size_factor,ESTD_PHYSICAL_READ_FACTOR fromv$db_cache_advice;
NAMESIZE_FOR_ESTIMATESIZE_FACTORESTD_PHYSICAL_READ_FACTOR DEFAULT411 DEFAULT82.3228

SELECTname, 100*(1(physical_reads/(consistent_gets+db_block_gets)))HIT_RATIO FROMV$BUFFER_POOL_STATISTICS WHERE(consistent_gets+db_block_gets)!=0;

en

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

89

AJUSTEDELABUFFERCACHE OBJETIVOS
Hayqueevitarlosiguiente:
Bsicamente las lecturas innecesarias, pues llevan bloques a la cach y, por tanto, provocanlasalidadeotros(queluegotendrnqvolveraleersededisco).Cuidadocon losndicespocoonadaselectivosylosfullscandetablas. Contencinenellatch'cachebufferslruchain'(V$LATCH). Mucho tiempo empleado en la espera "write complete waits" (V$BUFFER_POOL_STATISTICS). Mucho tiempo empleado en la espera "free buffer waits" (V$BUFFER_POOL_STATISTICS).

FactoresquepuedemejorarelrendimientodelDBWR: Atributosdelosdiscosfsicos(stripesize,velocidad,etc). RawdevicesvsFileSystems. Distribuirlasescriturassobremsdiscos/ficheros. Usar E/S asncrona cuando est disponible. Adems, si es necesario arrancarvariosprocesosDBWRconDB_WRITER_PROCESSES(almenos unoparacada8cpusogrupodecpus). SinohayE/Sasncrona,paralelizarE/SdelDBWRconDBWR_IO_SLAVES. Usarlasdiferentescachs(keep,recycle,etc).
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

90

AJUSTEDELREDOLOGBUFFER GENERALIDADES
LaCachdeRedo(RedoLogBuffer)esunbuffercircularenlaSGA,queguarda informacin (redo entries) sobre todos los cambios hechos en la BD, que se utilizar slo para recuperar la BD, si es necesario. Las redo entries van ocupandoespaciocontiguo,deformasecuencial,enlaCachdeRedo. ElLGWReselencargadodeescribirlasredoentriesdelacachederedo,enel fichero (o grupo) redo log activo. Una vez hecho sto, el proceso de usuario puedereutilizardichasentradas. Hay determinadas operaciones en las que resulta interesante desactivar el redo,yaquesepuedenreconstruirfcilmente;comosoncrearun ndiceocrear unatablaasselect.LaopcinausarenestoscasosesNOLOGGIN. DimensionarlaCachdeRedo(log_buffer)porencimade3M,nosirvedenada; yaqueelLGWRvuelcalacachadiscocuandostasellena1/3mximo1M. EltamaoptimosepuedesacardelacolumnaOPTIMAL_LOGFILE_SIZEdela vistaV$INSTANCE_RECOVERY.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

91

AJUSTEDELREDOLOGBUFFER DETECTARPROBLEMAS
Contencinenlatches(V$LATCH)deredo.SielratiodeMISSES/GETSoelde IMMEDIATE_MISSES/(IMMEDIATE_GETS+IMMEDIATE_MISSES) > 1% es porquehaycontencin:
SELECTname,gets,misses,immediate_gets,immediate_misses FROMv$latch WHEREnamein('redoallocation','redocopy'); Sihaycontencinenredoallocation,reduciremosusoderedo(NOLOGIN)osubiremos el tamao de la Cach de Redo (log_buffer). Si CPUs>16 se puede subir LOG_PARALLELISM(de2a8). Siesenredocopy,yCPUs>1,sepuedesubir_log_simultaneous_copies(oculto).

Contencinenpeticionesdeespacioderedoendisco.Serefierealaestadstica redologspacerequests"delavistaV$SYSSTAT,quereflejaelndeesperasal escribirel redo a disco, pqse ha llenadoel fichero redolog. Ese valordebeser (casi) cero. Si, por el contrario, dicho n va incrementndose continuamente, habr que comprobar checkpoints y log_switchs. Se debe hacer q los checkpointscoincidanconloslogswitchs(cada1530minutosaprox.).
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

92

AJUSTEDELROLLBACK GENERALIDADES
Si usamos undo automtico (>=9i), podemos consultar V$UNDOSTAT: una fila cada10minutos.LacolumnaSSOLDERRCNTmuestraloserroresORA1555. En los segmentos de rollback (RS) se guardan las imgenes de los datos, anteriores a las actualizaciones, por si esnecesariodeshacer lastransacciones (TR) en cuestin; y para mantener la consistencia en lectura. Oracle va asignandolosRSmedianteroundrobin. CadaTRslopuedeusarunRSparaalmacenarsusregistrosdeundo. VariasTRpuedenescribirenlamismaextensin. Un RS se organiza en forma de anillo, de forma que la cabeza del RS nunca machacarunaextensinocupadaporlacoladelmismo. Las extensiones de un RS se usarn en orden. Si no puede usar la siguiente, reservarunanuevaylainsertarenelanillo(reduceelrendimiento). Son importantes tanto el tamao como la duracin de una TR. Una TR q slo modifica 1 byte durante largo tiempo, puede provocar q un RS se extienda si dichaextensinsenecesitamsadelante.
ParacadaRS,debemosasegurarnosdeqlacabezanoalcancealacolamuyrpido,pues harqelRSseextienda.
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

93

AJUSTEDELROLLBACK OPTIMIZACION
El tamao de los RS depende directamente de la actividad de las TR. Nos debemosfijarenlaactividadnormaldelaBDparaajustar. Calcular un segmento de rollback por cada 4 transacciones concurrentes, con extensionesdelmismotamao(unmnimode20porRS). Fijar optimal de modo q el 90% de las transacciones quepan en un RS sin extenderse. Una vez fijado optimal, dejar espacio libre en el tablespace para que,adems,sepuedaatenderalatransaccinmsgrande. ParaprevenirORA1555Snapshottooold(loprovocanlasgrandesconsultas), cuantosmsRSmejor(ynoslomsgrandes)ydelmismotamao,yquelas transacciones sean lo ms cortas posibles. Si no hay updates a la vez que grandesselects,nohayora1555. ComprobarlacontencinenRSconsultandoV$WAITSTAT. SELECTCLASS,COUNTFROMV$WAITSTAT WHERECLASSlike'%undo%'; Sihayenundoheader,esqnohaybastantesRS(crearms).
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

94

AJUSTEDESEGMENTOSDESORT GENERALIDADES

Cuando ocurre una ordenacin, Oracle reserva tantas extensiones como necesite.Finalizadalaordenacin,lasextensionessemarcancomolibres,pero noseliberan. Unmismosegmentodesortpuedesercompartidoporvariasordenaciones. La primera ordenacin crea el segmento (si no exista) y las dems aadirn extensionessilonecesitan. SeutilizaunazonadelaSGA,fueradelaSharedPool,llamadaSortExtentPool; sincronizada usando el latch sort extent pool (V$LATCH). Si tiene contencin, subireltamaodelaextensinpordefectodeltablespace.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

95

AJUSTEDESEGMENTOSDESORT OPTIMIZACION
Sihaycontencinenellatchsortextentpool(V$LATCH),subiremoseltamao delaextensinpordefectodeltablespace. Si adems, tambin se producen esperas pq hay muchas ordenaciones concurrentes, se debe incrementar el parmetro SORT_AREA_SIZE, de forma queunamayorcantidaddeordenacionessehaganenmemoria. EltamaodelaextensindebeserigualaSORT_AREA_SIZE(omltiplo). Desde Oracle9i, usandoel parmetro PGA_AGGREGATE_TARGET,me olvido de sort_area_size (sesiones con servidores dedicados). PGA_AGGREGATE_TARGETindicaeltamaomximoquesumarnlasPGAs (mnimo10M). Podemosmonitorizarlossegmentosdesortcon:
V$SORT_SEGMENTmuestralossegmentostemporales.Silascolumnas ADDED_EXTENTSyFREED_EXTENTSmuestranmuchaactividad,aadiremosms espacioaltablespace.SiMAX_SORT_SIZEindicaordenacionesdegrantamao,es posibleqnecesitemosuntablespacededicadoparaellas(sloparalasgrandes). V$SORT_USAGEmuestraelusoactualdelossegmentostemporales.
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

96

AJUSTEDELOSCHECKPOINTS

Uncheckpointeseleventoquesincronizalosbloquesdedatosenmemoriacon losficherosdedatosendisco(losescribeelDBWR). Indicacionesdeajuste: ElprocesoCKPTpuedemejorarsignificativamenteelrendimiento. Asignando el parmetro LOG_CHECKPOINTS_TO_ALERT a TRUE podremos ver en el fichero alert.log los tiempos de comienzo y fin de los checkpoints. Si el valor de LOG_CHECKPOINT_INTERVAL es mayor que el tamao del ficheroredolog,loscheckpointsocurrirncuandoOraclehagaunlogswitch. Loidealesqueloscheckpointsslosucedancuandosehacelogswitch:
log_checkpoint_interval=0 log_checkpoint_timeout=0. FAST_START_MTTR_TARGET=0(desactivafastrecoveryinstance).

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

97

AJUSTEDELASCONSULTASSQL
SiobservamosquenuestrasconsultasSQLvanlentas,debemoscomprobar:
ElvalordeOPTIMIZER_MODE.Ej:siCHOOSE,probarRULE. Estnlosndicesdelastablasafectadasenestadovalid? HayalgunaotraconsultaSQLpesadaenejecucin?
ALTERSYSTEMSETOPTIMIZER_MODE=RULE|FIRST_ROWS|ALL_ROWS|CHOOSE; SELECT*FROMDBA_OBJECTSWHEREOBJECT_TYPE='INDEX'ANDSTATUS!='VALID';

Si,adems,estamosusandoeloptimizadorporcostes(CBO):

ParaelajustedesentenciasSQLutilizaremoslassiguientesherramientas:
AUTOTRACEdeSql*Plus: TKPROFsobreunficherodetraza:

Estncalculadaslasestadsticasparalastablasylosndicesencuestin? ANALYZETABLE|INDEXnombreCOMPUTE|ESTIMATESTATISTICS; ParatablasgrandesEstimate30%suelesercasiigualacompute. Sihayestadsticas,segeneraronconcomputeoconestimate?

SQL>SETAUTOT[RACE]{OFF|ON|TRACE[ONLY]}[EXP[LAIN]][STAT[ISTICS]] SQL>altersessionsetsql_trace=true; SQL>Select...; SQL>altersessionsetsql_trace=false; $tkproftracefileoutputfile[explain=usu/pw][sys=no]


AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

98

AJUSTEDELACPU

PorcentajemximodeocupacindeCPU=90%. PorcentajemximodeprocesamientoOS/usuario=40/60%. SihayvariasCPUs,lacargadebeestarbalanceada. ProbarconMTSsisedegradaelusodeCPUpormuchassesionesconcurrentes (MTSesmejorsihaymuchasconexionesalaBD). Parmetrosquelimitanelnmerodeprocesosydesesiones:


PROCESSES.Nmeromximodeprocesosenlainstancia. SESSIONS.Pordefecto1.1*PROCESSES;sinembargosiusamosMTShabrque subirlo.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

99

UTILIDADSTATSPACK

Desde10g,conlaintroduccindelAWRnoesnecesariousarSTATSPACK. STATSPACK es una utilidad para recoger estadsticas que permiten detectar problemas de rendimiento. Adems, mejora la utilidad que haba anteriormente, UTLBSTAT/UTLESTAT. Se trata de un conjunto de scripts SQL y PL/SQL. El script de instalacin de la herramientacreaunusuario,PERFSTAT.Losdatosrecopiladosporstatspackse guardarnentablas. La documentacin de la herramienta estn en $ORACLE_HOME/rdbms/admin/spdoc.txt. STATSPACKtrabajaconelconceptosnapshotparaidentificarunacoleccinde datos recopilados en un momento del tiempo, a los que asocia un identificador nico, snap_id. Es necesario recopilar datos en forma de snapshots antes de poderobteneruninformederendimiento.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

100

INSTALARSTATSPACK
Necesita un tablespace con al menos 100Mb, a ser posible manejado localmente. La instalacin crea un usuario PERFSTAT que ser el propietario de todos los objetosyelcdigopl/sqlquesecree.Debemosasegurarnosqueeltablespace por defecto de este usuario es el que hemos creado, y tener cuidado con su tablespacetemporalpordefecto(noseramalaideaasignarleunoespecial). Para la instalacin debemos conectarnos a la BD como SYSDBA, y lanzar el script$ORACLE_HOME/rdbms/admin/spcreate.sql,quenospedirlaclavepara el nuevo usuario, as como el tablespace por defecto y el tablespace temporal. Este script, de forma automtica, llama a otros tres: spcusr.sql, spctab.sql, spcpkg.sql. Debemos comprobar si se producen errores en los ficheros spcusr.lis,spctab.lis,spcpkg.lis. Sihayerroresytenemosquerepetirlainstalacin,primerodesinstalaremoscon elscriptspdrop.sql.
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

101

RECOGIENDODATOSCON STATSPACK

La forma ms sencilla de crear un snapshot es conectando como usuario PERFSTATyejecutandoelprocedimientoSTATSPACK.SNAP.Previamentees conveniente activar el parmetro time_statistics (TRUE). Este primer snapshot nosservirdebasecomparativaparalosprximossnapshotsquetomemos. Al crear un snapshot, con STATSPACK.SNAP, se pueden indicar parmetros para,porejemplo,indicarelniveldedetalledelasestadsticas(i_snap_level),e incluso una sesin sobre la que recabar estadsticas adicionales (i_session_id). Paraestablecerunsnapshotinicial(baseline)serecomiendai_snap_level=10. Podemos borrar un rango de snapshots con sppurge.sql. Si queremos borrar todoslossnapshots,podemoshacerloconsptrunc.sql(ojo!,queloborrartodo, puedeserinteresantehacerunexportpreviodelusuarioPERFSTAT).

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

102

OBTENIENDOINFORMESCON STATSPACK

Podemos obtener un informe sobre el rendimiento general de la instancia con spreport.sql(desdeelusuarioPERFSTAT).Nospedirelintervalodesnapshots (inicialyfinal)yelnombredelficherodesalida. Si localizamos una sentencia SQL por su hash_value (V$SQLAREA.HASH_VALUE), podemos generar un informe sobre ella con el scriptsprepsql.sql;quenospedirelintervalodesnapshotsyelhash_valuedela sentencia.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

103

RESUMENDESCRIPTS STATSPACK
Instalacin(comousuarioSYSDBA):
spcreate.sql>InstalaSTATSPACKejecutandoasuvezlosscripts:
spcusr.sql >CreaelusuarioPERFSTAT spctab.sql >Crealastablas spcpkg.sql>Creaelpaquetestatspack spdtab.sql>Borralastablas spdusr.sql>BorraelusuarioPERFSTAT

spdrop.sql>DesinstalaSTATSPACKejecutandoasuvezlosscripts:

Informes(comousuarioPERFSTAT):

Mantenimiento(comousuarioPERFSTAT):

spreport.sql>Generauninformegeneraldelrendimientodelainstancia sprepins.sql>GenerauninformeparalaBDylainstanciaindicados sprepsql.sql>GenerauninformeparalasentenciaSQLcuyoHashValueseindique spauto.sql>Permiteautomatizarlarecoleccindeestadsticas(usandodbms_job) sppurge.sql>Permiteborrarunrangodesnapshots sptrunc.sql>Vaca(contruncate)todaslastablas,borrandotodoslossnapshots spuexp.par>EsunficherodeparmetrosparaexportarelusuarioPERFSTAT


104

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

VISTASDELDD
V$SYSSTAT:estadsticasgeneralesdelsistema. V$SGASTAT:estadodeusodelasdiferentespartesdelaSGA. V$SYSTEM_EVENT:estadsticasdeeventosdeesperaaniveldesistema. V$SESSION_WAIT:sesionesqueestnenesperaactualmente. V$SESSION_EVENT:estadsticasdeeventosdeesperaporsesin. V$SESSTAT:estadsticasgeneralesporsesin. V$LIBRARYCACHE:ratiosdelaLibraryCach(SentenciasSQLyPL/SQL). V$ROWCACHE:ratiosdelaRowCach(DiccionariodeDatos). V$PGASTAT:estadodelaPGA. V$BUFFER_POOL_STATISTICS:estadsticasdelacachdedatos. V$DB_OBJECT_CACHE:objetosquehayenlaLibraryCach. V$LATCH:latches. V$ROLLSTAT:estadsticasdeusodelossegmentosderollback. V$UNDOSTAT:estadsticasdeusodelossegmentosderollback. V$FILESTAT:estadsticasdeE/Saniveldefichero. V$SESS_IO:estadsticasdeE/Saniveldesesin. V$SORT_SEGMENT:estadsticasdeusodelossegmentostemporales. V$SORT_USAGE:reasdesortactualmenteenuso. ObtenerIP:SelectSYS_CONTEXT('USERENV','IP_ADDRESS')FROMDUAL;
AJUSTEYMONITORIZACINDELA INSTANCIA

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

105

PRACTICASTEMA5

5.1.Revisareventosdelsistemaycomprobarlosmssignificativos.Comprobar eventolatchfreeporsesiones.Comprobarsesionesesperandoporelevento dbfilesequentialread.CompruebaelparmetroTIMED_STATISTICS. 5.2. Revisa las estadsticas del sistema ms significativas. Comprueba el tamaomediodelaPGAdecadasesin.Revisalaslecturaslgicasyfsicasy calculaelratiodeE/S.CompararelusodeCPUparaSQLdelsistema(acceso alDD)sobreeltotal. 5.3. Ver el eatado de ocupacin de las partes ms significativas de la Shared Pool. 5.4.ComprobarlacontencinenlatchesdelaSharedPoolyLibraryCache. 5.5.ComprobarelpinhitratiodelaLibraryCach,asicomolosreloads.Verificar elespaciolibredelaSharedPool,yelvalordeopen_cursors. 5.6.VerelratiodelaRowCache. 5.7.ComprobarsielsistemarecomiendaampliarlaSharedPool.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

106

PRACTICASTEMA5

5.8. Detectar sentencias similares que usan literales. Verificar el parmetros cursor_sharingysession_cached_cursors.Asignarcursor_sharing=similar. 5.9.InstalarelpaqueteDBMS_SHARED_POOL.Comprobarpaquetesquese puedenfijarenlaSharedPoolyhacerlo. 5.10. Comprobar sentencias que ocupan mucha memoria (>=10% de SharedPool). 5.11. Calcular el ratio de eficiencia de la Cach de Datos. Comprobar el parmetro db_cache_advice. Consultar si Oracle recomienda incrementar la Cach de Datos. Comprobar si hay contencin en el latch cache buffers lru chain.Versihayesperasdeltipowritecompletewaitsofreebufferwaits.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

107

PRACTICASTEMA5

5.12.ComprobareltamaodelaCachedeRedo.Versihaycontencinenlos latchesderedo.Verificarlaestadsticaredologspacerequests. 5.13.ComprobarlossegmentosderollbackONLINE.Verificarlasextensiones quetienecadauno,ascomoelespaciototalylibredeltablespacequelos contiene.Versihaycontencinensegmentosderollback. 5.14.InstalarlautilidadSTATSPACK.Crearsnapshotsygenerarinforme.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

AJUSTEYMONITORIZACINDELA INSTANCIA

108

APENDICEA. RecursosOracleenInternet.
www.orafaq.org(UndergroundOracleFAQs) otn.oracle.com(OracleTecnologyNetwork) otn.oracle.com/oramag(OracleMagazine) www.oracle.com(WebdeOracle) metalink.oracle.com(SoporteTcnicoOracle) asktom.oracle.com(GurdeOracle)
PortaloficialdeOracle. Soportetcnicoparausuariosconcontratodemantenimiento. ArtculosypreguntasaunodelosgursdeOracle ArtculosmuyinteresantessobreOracle10g(incluidainstalacin) ArtculosmuybuenossobreinstalacindeOraclesobreLinux RevistaelectrnicamensualespecializadaenOracle ParamejorarelrendimientodeOraclesobreUnix
109

SitionooficialsobreOracle(FAQs,foros,artculos,scripts,etc). Descargasdesw,documentacin,foros,artculos,scripts,etc.Registrogratuito. RevistaOracleMagazine.

www.oraclebase.com(WebdeTimHall)

www.puschitz.com(WebdeWernerPuschitz) www.dbazine.com(Revistaelectrnica) www.ixora.com.au(Otrogur)

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

APENDICEB. ArquitecturaOracle
ServidorOracle
Instancia ProcesosBackground DBWR LGWR SMON PMON CKPT Opcionales:RECO,ARCH,Dispatchers, Servers,etc. Nuevos10g:MMAN,MMON,MMNL, PSP0. SystemGlobalArea(SGA) SharedPool LibraryCache DictionaryCache DatabaseBufferCache RedoLogBuffer JavaPoolyLargePool.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

Basededatos Ficherosdedatos Ficherosredolog Ficherosdecontrol

110

APENDICEB. ArquitecturaOracle

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

111

APENDICEC. EstructuraFsica/LgicadelaBD
EstructuralgicadelaBD
Tablespaces Segmentos Extensiones BloquesOracle

EstructurafsicadelaBD
Ficherosdedatos BloquesdelSO

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

112

APENDICEC. EstructuraFsica/LgicadelaBD

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

113

APENDICED. ConexinalaBDyconsulta
1. El proceso de usuario enva la sentenciaSQLalprocesoservidor. 2. El proceso servidor busca la sentenciaSQLenlaSharedPool.Si no la encuentra, la compila y la guardaenlaSharedPool. 3. El proceso servidor accede a los datos en la Database Buffer Cache. Si no los encuentra, accede directamentealosficherosdedatos, llevando los datos a la Database BufferCache. 4. El proceso servidor devuelve los datos al proceso de usuario q inici laconexin.

3 1 4 2 4

1 3
114

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

APENDICEE. Actualizacindedatos
Enprimerlugarserepitenlasfases1(envode lasentencia),2(compilacin)y3(accesoa losdatos)vistasenelprocesodeconsulta. 4. Se guarda una copia del dato (antes del cambio)enunsegmentodeRollback(porsi sedeshacelatransaccin). 5. Se modifican los bloques de datos en la Database Buffer Cach. El DBWR (de forma asncrona) los llevara a los ficheros dedatoscuandosucedauncheckpoint. 6. Se guardanenlacachdeRedo las"redo entries"(vectordecambiosdecadabloque modificado) necesarias para registrar el cambioqsevaahacer(elLGWRvuelcael buffer al fichero redo log activo, cuando se hacecommitocada3segundos). 7. El proceso servidor devuelve el nmero de filasactualizadasalprocesodeusuario.

4 3 1 7 2 7

1 5 3

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

115

APENDICEF. NovedadesOracle9i
undotablespaceygestinautomticadeundo databasedefaulttemporarytablespace droptablespaceINCLUDINGCONTENTSANDDATAFILES; SGAdinmica:sga_max_size,db_cache_size db_nk_cache_size(cachscontamaodebloquenoestndard) desaparececonnectinternal,ahoraesconnect/assysdba spfile (fichero de parmetros binario, mantenido con alter system set...) OMF tablespaces con gestin automtica de segmentos (create tablespace...segmentspacemanagementauto;) compresindelossegmentosdedatos(createtable...compress;)
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

116

APENDICEG. NovedadesOracle10g
TablespaceSYSAUX(permitedejarenelSYSTEMsloelDD) altertablespacenombre1RENAMETOnombre2; createBIGFILEtablespacetsbig1...size50G;(hasta8Eb) SGA_TARGET(ASMM:gestinautomticadeltamaodelaspartesdelaSGA) altertablet1SHRINKSPACECASCADE;(antesaltertablet1enablerowmovement;) "create temporary tablespace ts1 ... TABLESPACE GROUP g1;" y "alter tablespace t2 TABLESPACEGROUPg1;. DataPump(exp/imptodavaexisten):expdp/impdpmuyeficienteparagrandescantidades dedatos Flashback Database (db_recovery_file_dest, db_recovery_file_dest_size, db_flashback_retention_size).Muy tilparaauditora:ALTERDATABASEFLASHBACKon; ALTER TABLESPACE nombre FLASHBACK ON; FLASHBACK TABLE nombre TO SCN numero;FLASHBACKTABLEnombreTOTIMESTAMP'2006030312:05:00';; DROPDATABASE;(slomontada) ALTERDATABASEDEFAULTTABLESPACEnombre; ALTERSYSTEMFLUSHBUFFER_CACHE; AutomaticStorageManagement(ASM). ALTERSYSTEMQUIESCERESTRICTED|UNQUIESCE(tbSUSPENDyRESUME). DROPTABLEnombrePURGE;(DBA_RECYCLEBIN,recyclebin=on,SHOWRECYCLEBIN, FLASHBACK TABLE nombreTablaBorrada TO BEFORE DROP; PURGE TABLE NombreTabla;) ADDM. DBA_OUTSTANDING_ALERTS, DBA_ALERT_HISTORY, V$ALERT_TYPES. Script$ORACLE_HOME/rdbms/admin/addmrpt.sql.
117

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

APENDICEH. SOPORTEDEGLOBALIZACIN
Conjuntodecaracteresparalabasededatos. Lenguajeyterritorio.VariabledeentornoNLS_LANG. ParmetrosNLS.NLS_SESSION_PARAMETERS. NLS_TERRITORY NLS_LANGUAGE NLS_DATE_LANGUAGE

ElconjuntodecaracteresparalaBDautilizarenEspaa,esel WE8ISO8859P15(queincluyeelsmbolodeleuro). LavariabledeentornoNLS_LANG,permiteindicar(desdelaaplicacin clientequeaccedeaOracle)tantoeljuegodecaracteresautilizar, comoelpasyelidioma: exportNLS_LANG=SPANISH_SPAIN.WE8ISO8859P15

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

118

APENDICEH. NLS_SESSION_PARAMETERS
ParaconsultarlasvariablesNLSasociadasaunasesin: SQL>select*fromnls_session_parameters; PARAMETERVALUE NLS_LANGUAGEAMERICAN NLS_TERRITORYAMERICA NLS_CURRENCY$ NLS_ISO_CURRENCYAMERICA NLS_NUMERIC_CHARACTERSP., NLS_CALENDARGREGORIAN NLS_DATE_FORMATDDMONRR NLS_DATE_LANGUAGEAMERICAN NLS_SORTBINARY NLS_TIME_FORMATHH.MI.SSXFFAM NLS_TIMESTAMP_FORMATDDMONRRHH.MI.SSXFFAM NLS_TIME_TZ_FORMATHH.MI.SSXFFAMTZH:TZM NLS_TIMESTAMP_TZ_FORMATDDMONRRHH.MI.SSXFFAMTZH:TZM NLS_DUAL_CURRENCY$ NLS_COMPBINARY SepuedencambiarconALTERSESSIONSETvariable=valor;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

119

APENDICEH. NLS_TERRITORYYNLS_LANGUAGE
Elpas(NLS_TERRITORY)llevaasociadounformatodefecha,yellenguaje (NLS_LANGUAGE)serefierealidiomaenquenosrespondeOracle. SQL>SELECTSYSDATEFROMDUAL; SYSDATE 30MAR05 SQL>ALTERSESSIONSETNLS_TERRITORY=SPAIN; Sessionaltered. SQL>SELECTSYSDATEFROMDUAL; SYSDATE 30/03/05 SQL>ALTERSESSIONSETNLS_LANGUAGE=SPANISH; Sesionmodificada.

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

120

APENDICEH. NLS_DATE_LANGUAGE
PodemosmodificarelidiomadelafechaconNLS_DATE_LANGUAGE: SQL>SELECTTO_CHAR(SYSDATE, 'DD/MON/YYYY','NLS_DATE_LANGUAGE=SPANISH')FROMDUAL; TO_CHAR(SYS 20/DIC/2004 SQL>SELECT TO_CHAR(SYSDATE,'DD/MON/YYYY','NLS_DATE_LANGUAGE=AMERICAN')FROM DUAL; TO_CHAR(SYS 20/DEC/2004

Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008

121

You might also like