fundamentals i sumary

78
1

Upload: yonogy-curi

Post on 21-Mar-2016

237 views

Category:

Documents


0 download

DESCRIPTION

Un Manual Ideal para el aprendizaje basico de los Fundamentos de Oracle

TRANSCRIPT

Page 1: Fundamentals I Sumary

1

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 2: Fundamentals I Sumary

2

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 1: COMPONENTES DE LA ARQUITECTURA ORACLE

Definamos pues cada uno de sus componentes:

Componente Descripción

Oracle Server

Oracle Server Oracle Instance + Oracle Database

Oracle Instance SGA + Background Proccess

Oracle Instance

SGA Estructura de Memoria asignado cuando la Instacia se

levanta.

Background Process Procesos que establecen la comunicación y la relacion entre

el Oracle Instance y el Oracle Database

SGA

Shared Pool Contiene sentencias SQL y Definiciones de Objetos usados

recientemente.

El tamaño del Shared Pool está definido por el parametro

SHARED_POOL_SIZE.

Se usa un algoritmo de LRU para su limpieza.

Esta compuesto de:

Data Dictionary Cache:

Contiene en sí a los SQL y PL/SQL ejecutados

recientemente

Library Cache

Contiene las definiciones, privilegios y toda informacion

referente a los objetos usados recientemente.

Database Buffer

Cache

El DB buffer cache es aquel espacio de memoria donde se

efectuan las modificaciones respectivas de la Data. Antes

estas deben de ser cargadas desde los Datafiles a memoria.

Cuando no se encuentra la Data en el DB Buffer Cache, se

busca en los Datafiles, realizando en sí Phisicals Reads (mas

costosos). Si la data es encontrada solo se produce Logical

reads

En 8i exisitía DB_BLOCK_BUFFER que multiplicado por el

DB_BLOCKSIZE se tenia el tamaño del Database Buffer

Cache.

En 9i se tiene un solo parametro que ajusta su tamaño:

DB_CACHE_SIZE

Redo Log Buffer Registro de DML + DDL.

Con esto se puedo recontruir o rehacer las transacciones.

Su principal objetivo es recovery.

Page 3: Fundamentals I Sumary

3

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

El LOG_BUFFER es el parametro que define su tamaño

Java Pool Memoria para cuando se usa codigo Java

Tamaño definido por JAVA_POOL

Large Pool Alivia carga pesada al Shared Pool. Usado para backups,

recover, procesos batch, etc.

Tamaño definido por LARGE_POOL_SIZE.

Background Proccess

Data Base Writer

(DBWn)

Proceso que se encarga de escribir los bloques modificados

del DB Buffer Cache a los Datafiles.

Este proceso escribe cuando:

Chekpoint ocurre

Tablespace Offline, Read Only

Backup en Caliente

Log Writer (LGWR) Proceso que graba desde el Log Buffer Cache hacia los Redo

Log Files. Este proceso ocurre:

Cada 3 segundos

En cada commit

Cuando se tiene 1M de redo o se alcanzó el 1/3 del

mismo.

Primero es el LGWR, despues el DBWn

CHECKPOINT Proceso supervisor de la ejecución de procesos de Escritura

de Data y Redos. Actualiza la cabecera de los Datafiles y los

Control Files, a ambos con informacion del Checkpoint.

PMON Se encarga de liberar los recursos, bloqueos, etc frente a

una falla de un user process.

SMON Responsable del Instance Recovery: Rollforward y Rollback

También realiza el coalesce a los espacio libres.

Other Background Process (optional)

ARCHIVER (ARCn) Respalda los redos si es que esta en modo ARCHIVE la BD.

RECO Para Recover

LMON Lock Monitor para RAC

Dnnn Proceso de Dispatcher

Oracle Database

Datafiles Archivo Fisico donde reside la data en sí

Control Files Estructura de la BD y ubicaciones de los archivos de BD

Redo Log Files Registro Fisico de los DML y DDL.

Process Structure

User Process Proceso que se levanta en el cliente. No conversa

directamente con el Oracle Server, exite un UPI (User

program interface) el cual es un intermediario para la

comunicacione entre el User Process y el Server process

Server process Proceso que se levanta en el Server donde corre el Oracle

Instance. Es aquel proceso que conversa con el Oracle

Server a través del OPI (Oracle Program Interface)

Other Files

Parameter File Archivo de Configuración del Oracle Instance.

Puede ser: pfile o spfile.

Password File Archivo que contiene los usuarios con privilegio SYSOPER O

SYSDBA

Page 4: Fundamentals I Sumary

4

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 5: Fundamentals I Sumary

5

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 2: HERRAMIENTAS DE ADMINISTRACION

Se tiene las siguientes herramientas para la Administración de Base de Datos:

Page 6: Fundamentals I Sumary

6

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Oracle Universal Installer (OUI)

Usado para instalar, actualizar o desinstalar componentes del Software Oracle.

Corre en toda plataforma pues esta programado en Java. Identifica el lenguaje de

Sistema Operativo que se está usando e instala de acuerdo al mismo.

Para ejecutarlo: ./runInstaller

Antes de correr el instalador, se debe tener para el usuario dueño del software

variables de entorno (.bash_profile) Ejemplo de .bash_profile ORACLE_BASE=/home/oracle ORACLE_HOME=/home/oracle/product/9.2 ORACLE_SID=orcl ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data PATH=$PATH:$ORACLE_HOME/bin:/usr/bin:/bin:/usr/local/bin NLS_LANG=american_america.we8iso8859p1 LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/lib:/home/oracle/oui/bin/linux

export ORACLE_BASE ORACLE_HOME NLS_LANG ORACLE_SID ORA_NLS33 export LD_LIBRARY_PATH PATH Creando usuarios y grupos: useradd oracle passwd oracle groupadd oinstall groupadd dba groupadd oper Modificar usuario Oracle # usermod -g oinstall -G dba oracle

# chown oracle.oinstall /home/oracle -R Parametro de Kernell # cat /proc/sys/kernel/shmmax # echo "536870912" > /proc/sys/kernel/shmmax -- Generalmente la mitad de la RAM -- Copiar bash_profile -- correr instalador

Oracle Database Configuration Assistant (dbca)

Dbca es una Herramienta que se utiliza para crear, configurar, borrar y manejar

plantillas de Base de Datos.

Para ejecutarlo: ./dbca

SQL*Plus

Fue la herramienta mas usada de Oracle. Sirve para dml, ddl, para labores de

mantenimiento de Base de Datos, inclusive para bajar y subir la Base de datos.

Para ejecutarlo: ./sqlplus

Oracle Enterprise Manager (OEM)

OEM es una herramienta que nos permite administrar varias base de datos, locales

o remotas, todas en una sola consola. Tiene opción de 3 capas y dos capas. Para

ejecutarlo: ./oemapp console

Nota.- En Oracle 8i se tenia aplicaciones separadas para la administración de la

Base de datos. En Oracle 9i el OEM integra todas esas aplicaciones, permitiendo

una mejor administración de la Base de Datos.

Page 7: Fundamentals I Sumary

7

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 8: Fundamentals I Sumary

8

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 3: ADMINISTRANDO EL ORACLE INSTANCE

En este capitulo debemos aprender como setear nuestra Instancia, para ello

recurrimos a un Archivo de Parámetros de Inicialización. Este puede ser dinamico

(spfile) o estático (pfile).

El Spfile, es binario, aunque podamos editarlo via editor de texto no debemos

hacerlo pues se vuelve inservible. El spfile lo mantiene el mismo Oracle y logramos

indicarle para que ocurran cambios vía ALTER SYSTEM

Ejemplo: alter system set undo_retention=300 scope=BOTH;

Lo bueno de usar spfile es que no hay necesidad de bajar y subir la Base de Datos,

pues esta toma acción en forma dinámica, cabe recalcar que no todos los

parámetros son dinámicos, hay varios que son estáticos y necesariamente

requieren un shutdown & startup de la BD.

Ejemplo: alter system set audit_trail=DB scope=spfile;

El pfile es nuestro archivo de parámetros tradicional, por ser ASCII, este se puede

editarlo vía editor de textos y para que tome efecto necesita un shutdown & startup

de la Base de Datos.

La ruta por default en donde todo pfile o spfile se guarda es:

En NT: %ORACLE_HOME%\DATABASE

En UNIX: $ORACLE_HOME/dbs

Spfile viene de Server Parameter File

Pfile solo es Parameter File

Podemos ir de un spfile a un pfile (sirve como método de respaldo); así también de

un pfile a un spfile

SQL> create pfile from spfile;

File created.

SQL> create spfile from pfile;

File created.

El orden de precedencia es:

1. SpfileSID.ora

2. Spfile default

3. pfileSID.ora

4. Pfile default

Page 9: Fundamentals I Sumary

9

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Niveles del STARTUP:

Recordar que:

En el NOMOUNT se puede Crear la Base de Datos y también reconstruir los

Control Files.

En el MOUNT uno puede renombrar datafiles y redos, asi tambien como poner

en modo ARCHIVELOG la base de Datos, así también para recover de la BD.

En el OPEN la base de datos está listo para todos los usuarios y es el unico

estado en donde los usuarios pueden realizar todo dml, ddl sobre todo objeto.

También, recordar que existe otros tipos de startup: FORCE, RESTRICT Y RECOVER.

Veamos ahora los niveles y/o modos de SHUTDOWN:

Recordar que existe shutdown limpios y Sucios.

Los Shutdown Limpios son aquellos que realizan un chekpoint antes de bajarse la

Base de Datos, vale decir, IMMEDIATE, TRANSACTIONAL, NORMAL. Cuando se

realiza una bajada limpia ya no se requiere del SMON para el Instance Recovery

Los Shutdown sucios son aquellos que no realizan el checkpoint, el ABORT forma

parte de éste. Un shutdown abort debe ser usada como última instancia. Cuando se

reinicie la BD esta recurre al SMON para realizar el Instance Recovery.

Además:

Ninguna permite nuevas conexiones.

El único que permite que se terminen las transacciones pendiente es el

TRANSACTIONAL.

El shutdown que espera hasta que las sesiones se terminen es el Shutdown

NORMAL.

El IMMEDIATE hace KILL a las sesiones, realiza el chekpoint y después baja la

Base de Datos.

Page 10: Fundamentals I Sumary

10

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 11: Fundamentals I Sumary

11

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 12: Fundamentals I Sumary

12

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 4: CREANDO UNA BASE DE DATOS

Antes de crear una Base de datos, ustedes como DBA deben de planificar la base

de Datos a crear, es decir deben de definir su propósito, el tipo de Base de Datos

así tambien bosquejar el diseño de la BD (ubicaciones de las Database Files)

Hay 3 formas de crear una Base de Datos, cuando uno instalar el software Oracle

hay forma de que automáticamente te cree una Base de Datos, si obvias esta

forma, podrías llamar a una herramienta (dbca), asistente que nos guiará para

poder crear nuestra base de datos. La tercera forma es la Forma manual, en donde

yo tengo que digitar todos los statements y ejecutarlos según la necesidad.

Veamos pues este tercer metodo, el cual nos permitirá tener una visión mas global

de cómo Oracle crea una Base de Datos.

En el ejemplo crearemos una Base de Datos cuyo nombre es: DWORCL

Creando carpetas

mkdir e:\oracle\admin\DWORCL\bdump

mkdir e:\oracle\admin\DWORCL\cdump

mkdir e:\oracle\admin\DWORCL\create

mkdir e:\oracle\admin\DWORCL\pfile

mkdir e:\oracle\admin\DWORCL\udump

mkdir e:\oracle\oradata\DWORCL

Copiar initSID.ora al default path (%ORACLE_HOME%\dbs)

Setear valor a la variable ORACLE_SID

set ORACLE_SID=DWORCL

Creando el Servicio (solo para Windows)

oradim.exe -new -sid DWORCL -startmode m

oradim.exe -edit -sid DWORCL -startmode a

oradim.exe -delete -sid DWORCL

Creando el Password File

orapwd file=e:\oracle\ora92\database\PWDDWORCL.ora password=dworcl

entries=7

Creando la Base de Datos

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\CreateDB.sql

Ejecutando sqls

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\CreateDBFiles.sql

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\CreateDBCatalog.sql

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\JServer.sql

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\ordinst.sql

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\interMedia.sql

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\context.sql

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\xdb_protocol.sql

sqlplus /nolog @e:\oracle\admin\DWORCL\scripts\postDBCreation.sql

Describamos la sentencia create database asi también los otros scripts:

Page 13: Fundamentals I Sumary

13

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

@e:\oracle\admin\DWORCL\scripts\CreateDB.sql

Crea la Base de Datos.

connect SYS/manager as SYSDBA set echo on spool e:\oracle\admin\DWORCL\scripts\CreateDB.log startup NOMOUNT pfile="e:\oracle\ora92\database\initDWORCL.ora";

CREATE DATABASE DWORCL MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 15 MAXLOGMEMBERS 5 MAXDATAFILES 200 DATAFILE 'e:\oracle\oradata\DWORCL\systemDWORCL.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE 'e:\oracle\oradata\DWORCL\temp_01.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED UNDO TABLESPACE "UNDOTBS" DATAFILE 'e:\oracle\oradata\DWORCL\undotbsDWORCL_01.dbf' SIZE 64M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET WE8ISO8859P1 NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('e:\oracle\oradata\DWORCL\redDWORCL1a.log') SIZE 32M, GROUP 2 ('e:\oracle\oradata\DWORCL\redDWORCL2a.log') SIZE 32M, GROUP 3 ('e:\oracle\oradata\DWORCL\redDWORCL3a.log') SIZE 32M; spool off exit;

No es lo ideal, pero se puede crear la base de datos sin UNDO y sin TEMP, el default

para estos trabajos sería el SYSTEM.

@e:\oracle\admin\DWORCL\scripts\CreateDBFiles.sql

Crea otros tablespaces adicionales

@e:\oracle\admin\DWORCL\scripts\CreateDBCatalog.sql

Ejecuta scripts propios del Catalogo del diccionario de la BD.

@e:\oracle\admin\DWORCL\scripts\JServer.sql

Configura la Base de datos para poder ejecutar código Java, así tambien carga

componentes XML.

@e:\oracle\admin\DWORCL\scripts\postDBCreation.sql

Para compilar objetos que se encuentran invalidos.

Los anteriores scripts son de carácter obligatorio, los siguientes son opcionales y se

aplican si es que usa algunos features adicionales y opcionales:

@e:\oracle\admin\DWORCL\scripts\ordinst.sql

Para instalar Oracle Intermedia, el cual permite administrar Data Multimedia.

@e:\oracle\admin\DWORCL\scripts\interMedia.sql

@e:\oracle\admin\DWORCL\scripts\context.sql

Ambos para instalar y administrar Oracle Text

@e:\oracle\admin\DWORCL\scripts\xdb_protocol.sql

Para poder administrar XML y API.

Page 14: Fundamentals I Sumary

14

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 15: Fundamentals I Sumary

15

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 5: VISTAS DINAMICAS Y DEL DICCIONARIO DE DATOS

Tenemos dos tipos de vistas: Las del Diccionario de Datos y las Dinámicas.

Las Vistas del Diccionario de Datos, son aquellas que describen los objetos de la

Base de Datos, éstas se almacenan físicamente y son actualizadas por el Oracle

Server. Tiene tres niveles:

DBA : El gran universo de vistas

ALL : Vistas a los cuales tengo acceso

USER : Vistas propias para mis objetos

Tenemos como ejemplo:

DBA_USERS, ALL_CONSTRAINTS, USER_TABLES

Para obtener toda la lista de las vistas del Diccionario de Datos podemos consultar

de la siguiente manera:

select * from dictionary

o su a su sinónimo:

select * from dict;

Las Vistas Dinámicas o de Performance son tablas virtuales, es decir solo existen en

memoria mientras este corriendo la Base de Datos y no se almacenan en un

datafile en forma física. El nombre de los sinónimos de estas vistas empiezan con

V$.

Tenemos como ejemplo:

V$CONTROLFILE, V$DATAFILE, V$SESSION, V$INSTANCE, etc.

Para obtener la lista de las vistas dinamicas:

select * from v$fixed_table;

De ambas vistas el dueño es el usuario SYS.

Page 16: Fundamentals I Sumary

16

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 17: Fundamentals I Sumary

17

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 6: CONTROL FILES

El control File es un archivo binario que contiene la estructura de Base de Datos y

las ubicaciones de los archivos del Oracle Database. Es actualizado y mantenido por

el Oracle Server. Al inicializar la Base de Datos en el nivel MOUNT se buscan los

control files lo cuales deben de existir o deben de estar en buen estado. Oracle

requiere mínimo un Control File para poder pasar al estado OPEN y poder abrir la

Base de Datos.

El tamaño de un Control file es pequeño y su tamaño depende de los valores

asignados a estos parámetros en el Create Database statement: maxlogfiles,

maxlogmembers, maxloghistory, maxdatafiles y maxinstances, los cuales reservan

espacio para la estructura de la Base de Datos.

Los control files contiene entre otras cosas: El ID y nombre de la BD, nombre de los

Tablespaces, nombre y ubicaciones de los Datafiles, Información de Chekpoint,

Archive Information, etc.

Es recomendable realizar un backup del control file después de cualquier

modificación o adición de una estructura a la base de Datos, es decir después de un

resize a un datafile, después de una adición de un nuevo datafile a un tablespace,

etc. Para ello usar: alter database backup controlfile to trace;

Mulltiplexación de los Control Files:

Los Control files deben ser multiplexados en diferentes discos, por lo menos tener

una copia adicional en otro disco.

Los pasos a seguir para una multiplexación es:

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

-- Para multiplexar control files: (pfile)

--------------------------------------------------- -- Verificar cuales son los control files actuales. select * from v$controlfile; -- Bajando la Base de Datos Shutdown immediate -- Creando pfile create pfile from spfile; -- Copiando el control file via sistema operativo cp control01.ctl ../db2/control02.ctl cp control01.ctl ../db3/control03.ctl --modificar pfilesid.ora vi pfilesid.ora ... -- Creando spfile create from spfile from pfile; -- Subiendo la Base de Datos startup; -- Verificar cuales son los control files actuales. select * from v$controlfile;

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

-- Ejercicio de Aplicación - Perdida de Control Files

-------------------------------------------------------------- ALTER DATABASE BACKUP CONTROLFILE TO TRACE; shutdown immediate; -- Borrar control files, simular perdida. startup; -- Como falla, bajar la instancia -- recreando control file startup nomount; create control file ... alter database open; -- Verificar cuales son los control files actuales. select * from v$controlfile;

Page 18: Fundamentals I Sumary

18

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 19: Fundamentals I Sumary

19

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 7: REDO LOG FILES

Los Redo Log Files son aquellos que registran todas las transacciones realizadas

sobre la Base de Datos. Es decir guardan todos los DML & DDL. Su arquitectura la

comprende a grupos y estos a su vez contienen miembros.

La base de Datos requiere por lo menos 2 grupos con un miembro cada uno como

mínimo. Cuando se multiplexa los miembros, se debe de definir éstos en diferentes

discos para que realmente se tenga una contingencia adecuada. La Base de datos

en un tiempo t escribe a un grupo G1 y por ende a todos los miembros a la vez, es

decir si se cae (failure) uno de los miembros y si se tiene multiplexado, la Base de

Datos sigue operando con por los menos un miembro en buen estado.

Recordar que el número máximo de grupos y miembros son definidos por

MAXLOGFILES y MAZLOGMEMBERS respectivamente, valores seteados inicialmente

en el CREATE DABATABASE statement.

Los redo log files al ocuparse saltan de un grupo a otro, proceso denominando LOG

SWITCH, el cual a su vez produce un checkpoint. El proceso de LOG SWITCH se da

en forma automática o también puede ser en forma manual ejecutando vía

comando: alter system switch logfile;

Una recomendación de Oracle para el tamaño de los Redo Log files es aquel en

donde los LOG SWITCH no ocurran mas de uno por hora.

Debemos de recordar que para poder realizar un redimensionamiento de los Redo

Log Files, éste se da añadiendo nuevos grupos con sus respectivos miembros y

borrando los anteriores grupos.

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

-- Ejemplo de mantenimiento de Redo Log Files:

--------------------------------------------------------------- -- Añadiendo un grupo con un miembro alter database add logfile group 4 ('E:\oracle\oradata\CIBERTEC\redo01a.log') size 20M; -- Se puede omitir el grupo, Oracle automáticamente crea el valor del grupo nuevo. alter database add logfile ('E:\oracle\oradata\CIBERTEC\redo05.log') size 20M; -- Añadiendo un nuevo miembro al grupo 4 alter database add logfile member 'E:\ORACLE\ORADATA\CIBERTEC\REDO01B.LOG' TO group 4; -- Añadiendo un nuevo miembro al grupo 5 alter database add logfile member 'E:\ORACLE\ORADATA\CIBERTEC\REDO02B.LOG' TO group 5; select * from v$logfile; select * from v$log;

Page 20: Fundamentals I Sumary

20

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

alter system switch logfile; select * from v$logfile; select * from v$log; -- En el alert Thread 1 advanced to log sequence 4 Current log# 2 seq# 4 mem# 0: E:\ORACLE\ORADATA\CIBERTEC\REDO02A.LOG Current log# 2 seq# 4 mem# 1: E:\ORACLE\ORADATA\CIBERTEC\REDO02B.LOG alter system switch logfile; select * from v$logfile; select * from v$log; -- En el alert Thread 1 advanced to log sequence 5 Current log# 5 seq# 5 mem# 0: E:\ORACLE\ORADATA\CIBERTEC\REDO05.LOG Current log# 5 seq# 5 mem# 1: E:\ORACLE\ORADATA\CIBERTEC\REDO05B.LOG -- Borrando grupo de redos ALTER DATABASE DROP LOGFILE GROUP 3; ALTER DATABASE DROP LOGFILE GROUP 4; ALTER DATABASE DROP LOGFILE GROUP 5;

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

-- Ejercicio de Aplicación con redos. (Perdida de Redos)

------------------------------------------------------------------ Objetivo: Levantar la Base de Datos despues de perder los Redo Logs. -- Simular la perdida de redos, borrando las mismas. startup -- No se puede levantar la Base de datos -- Verificando el nivel de startup y los redos existentes select * from v$instance; select * from v$logfile; select * from v$log; -- creando nuevos grupos de redos alter database add logfile group 3 ('e:\oracle\redo3a.log') size 10M; alter database add logfile group 4 ('e:\oracle\redo4a.log') size 10M; -- Verificando

select * from v$logfile; select * from v$log; -- Borrando grupos de redos alter database drop logfile group 2; alter database drop logfile group 1; -- Si No se puede borrar, recrear control file -- realizando el backup a ASCCI alter database backup controlfile to trace; -- Bajar la Base de Datos shutdown immediate; -- Levantando solo la instancia STARTUP NOMOUNT; -- Recreando el controlfile, con RESETLOGS y borrando los grupos no existentes CREATE CONTROLFILE DATABASE "Y2KYD" RESETLOGS … NOARCHIVELOG alter database open resetlogs; archive log list; alter system switch logfile; -- Backup Control File -- Backup en frío de la Base de datos

Page 21: Fundamentals I Sumary

21

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

MODO ARCHIVELOG

Como DBA debemos de tomar la decisión de poner en Modo ArchiveLog o

NoArchiveLog nuestras Base de datos. ArchiveLog significa respaldar nuestros Redo

Log Files para que no se sobrescriban. En el NoArchiveLog se sobrescriben los

Redos, dejando así a nuestra Base de Datos desprotegida.

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

-- Configurando a la Base de Datos en modo ARCHIVELOG

-------------------------------------------------------------------- SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination e:\oracle\ora9i2\RDBMS Oldest online log sequence 9

Current log sequence 11 SQL> shutdown immediate; SQL> startup mount SQL> alter database archivelog; SQL> alter database open; SQL> archive log list Database log mode Archive Mode Automatic archival Disabled Archive destination e:\oracle\ora9i2\RDBMS Oldest online log sequence 9 Next log sequence to archive 11 Current log sequence 11 -- Archiving Automático -- ============== -- Modificando parámetros de pfilesid.ora *.log_archive_start=TRUE *.log_archive_dest=e:\oracle\oradata\CIBERTEC\dbarchive *.log_archive_dest_1="LOCATION=e:\oracle\dbarchive MANDATORY REOPEN" *.log_archive_format = %%ORACLE_SID%%%S.%T SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination e:\oracle\dbarchive Oldest online log sequence 9 Next log sequence to archive 11 Current log sequence 11 archive log list; ALTER SYSTEM SWITCH LOGFILE; archive log list; -- Recomendaciones -- Revisar Alert -- Realizar Backup Físico de la Base de Datos

Page 22: Fundamentals I Sumary

22

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 23: Fundamentals I Sumary

23

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 24: Fundamentals I Sumary

24

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 8: TABLESPACES & DATAFILES

En esta oportunidad revisaremos tanto la estructura Lógica (tablespace) como la

estructura física (datafiles). Los tablespaces pueden pertenecer a una sola Base de

Datos mientras que los datafiles pueden pertenecer a un solo tablespace.

Un tablespace puede tener uno o mas datafiles y esta dividido en unidades lógicas

de almacenamiento: B locks

E xtents

S egments

T ablespace

Podemos clasificar a los Tablespaces en SYSTEM & NON-SYSTEM tablespace.

El SYSTEM tablespace es obligatorio en toda base de Datos y se recomienda que

no debe de contener data del usuario. Los NONSYSTEM son opcionales, pero

necesario para almacenar data del usuario, separándolos por clase de objetos.

Se recomienda tener en este último caso:

Nombre_tablespaceTAB (para segmentos tipo Tabla)

Nombre_tablespaceIDX (para segmentos tipo Índice)

Según el Extent los tablespaces pueden dividirse en dos:

LMT (Local Managed Tablespace)

DDT (Data Dictionary Tablespace)

El LMT es el default a partir de Oracle 9i. Este tipo de tablespace son de mayor

performance, pues toda información acerca del tablespace y sus unidades logicas

están y se administran en el mismo tablespace, es por el cual reducen la contención

con las tablas del Data Dictionary. Tampoco necesitan coalesce (autocoalesce)

En un DDT la información del tablespace se administra en el Data Dictionary, estos

provocan contención y es por eso que son de menos performance, requieren

coalesce para juntar extents libres.

Para migrar tablespace de un tipo DDT a uno LMT se requiere de un package:

dbms_space_admin..tablespace_migrate_to_local(nombre_tablespace)

Inclusive se puede migrar el SYSTEM tablespace

Un ejemplo de cómo crear tablespaces: CREATE TABLESPACE WAREHOUSETAB DATAFILE 'C:\WAREHOUSETAB_01.DBF' SIZE 32M EXTENT MANAGEMENT LOCAL;

Existen varios tipos de tablespace: UNDO, TEMP, Y READ ONLY

Los tablespaces UNDO son aquellos q almacenan segmentos UNDO y no otros

tipos de segmentos, puede existir varios en la BD, pero uno es el Default create undo tablespace undodw datafile

'/home/oracle/oradata/db2/undodw_01.dbf' size 512M autoextend on;

Los tablespaces TEMP son usados para operaciones de SORT, almacenan

objetos temporales mas no objetos permanentes, puede existir varios en la BD,

pero uno es el Default. create temporary tablespace temp_backup tempfile 'e:\oracle\oradata\cibertec\temp_backup_01.dbf' size 64M reuse autoextend on maxsize 1024M extent management local uniform size 1024K;

Los tablespace READ ONLY son aquellos tablespaces, cuyos segmentos están

disponible para solo lectura. Es decir no se pueden alterar los datafiles pero si el

Data Dictionary, es por eso que si se permite borrar índices, tablas. Alter tablespace warehousetab read only;

Page 25: Fundamentals I Sumary

25

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Se puede también cambiar de un estado online a uno OFFLINE, esto con el fin

de Backup, Recover en Open, Mover datafiles en estado OPEN, etc. alter tablespace warehouse offline;

Para volverlo online: alter tablespace warehouse offline;

REDIMENSIONANDO UN TABLESPACE

Un tablespace puede ser redimensionado de dos maneras:

Aumentando o disminuyendo el tamaño del datafile alter database 'C:\WAREHOUSETAB_01.DBF' resize 128M;

Añadiendo un nuevo datafile al Tablespace alter tablespace add datafile 'C:\WAREHOUSETAB_02.DBF' size 128M;

Nota.- Se puede tener hasta 1022 datafiles por Tablespace

MOVIENDO DATAFILES

Se puede hacerlo de dos maneras:

Via alter database Shutdown immediate; -- Copiar el (los) archivos a mover Startup mount alter database rename file 'C:\WAREHOUSETAB_01.DBF' TO 'E:\ORACLE\ORADATA\Y2KYD\WAREHOUSETAB_01.DBF'; alter database rename file 'C:\WAREHOUSETAB2_01.DBF' TO 'E:\ORACLE\ORADATA\Y2KYD\WAREHOUSETAB2_01.DBF'; Open Database -- Borrar los archivos antiguos SELECT * FROM DBA_DATA_FILES;

Via alter tablespace alter tablespace WAREHOUSETAB3 offline; -- Copiar el (los) archivos a mover alter tablespace WAREHOUSETAB3 rename datafile 'c:\WAREHOUSETAB3_01.DBF' TO 'E:\ORACLE\ORADATA\Y2KYD\WAREHOUSETAB3_01.DBF'; alter tablespace WAREHOUSETAB3 rename datafile 'c:\WAREHOUSETAB3_02.DBF' TO

'E:\ORACLE\ORADATA\Y2KYD\WAREHOUSETAB3_02.DBF'; alter tablespace WAREHOUSETAB3 ONLINE; -- Borrar los archivos antiguos select * from DBA_TABLESPACES; SELECT * FROM DBA_DATA_FILES;

ELIMINANDO UN TABLESPACE

Un tablespace puede ser eliminado cuando ya no se requiere, podemos inclusive

borrar los objetos que se encuentran en él y hasta el archivo de sistema operativo

asociado con: drop tablespace warehousetab including contents and datafiles;

VISTAS A CONSULTAR

Podemos consultar:

Select * from dba_tablespaces;

Select * from dba_data_files;

Select * from v$tablespace;

Select * from v$datafile

Page 26: Fundamentals I Sumary

26

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Algunos ejercicios de Aplicación:

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

-- Script Para Recrear Tablespace TEMP

-------------------------------------------------------- SET LINE 2000 CREATE TEMPORARY TABLESPACE TEMP_BACKUP TEMPFILE 'E:\oracle\oradata\CIBERTEC\temp_backup_01.dbf' SIZE 64M REUSE AUTOEXTEND ON MAXSIZE 1024M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K; ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_BACKUP; SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; -- Eliminar tablespace TEMP drop tablespace TEMP including contents and datafiles; CREATE TEMPORARY TABLESPACE TEMP TEMPFILE 'E:\oracle\oradata\CIBERTEC\temp_01.dbf' SIZE 64M REUSE AUTOEXTEND ON MAXSIZE 1024M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K; ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP; SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; -- Eliminar tablespace TEMP_BACKUP drop tablespace TEMP_BACKUP including contents and datafiles;

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

-- Script Para Recrear Tablespace UNDO

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

1.- Creando el nuevo TBS UNDO ------------------------------- create undo tablespace undodw datafile '/home/oracle/oradata/db2/undodw_01.dbf' size 512M autoextend on; 2.- Bajar BD ------------------------------- shutdown immediate; 3.- Modificar archivo de parametros - En init.ora ----------------------------------------------------- undo_tablespace=UNDODW 4.- Subir BD ------------------------------- startup 5.- Borrar anterior UNDO tablespace ------------------------------- drop tablespace UNDOTBS including contents and datafiles;

Page 27: Fundamentals I Sumary

27

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 28: Fundamentals I Sumary

28

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 29: Fundamentals I Sumary

29

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 9: STORAGE STRUCTURES

Para poder hablar acerca del Storage Structures recordemos acerca de la Jererquía

de la estructura lógica: (BEST).

Un tablespace está compuesto de segmentos y de éstos existe varios tipos, tales

como:

Cada segmentos está compuesto de extents. Un extent es un pedazo de espacio

usado por un segmento. Asignamos extents cuando realizamos un Create, Alter y

desasignamos extents cuando realizamos drop, truncate, alter … rebuild.

Un extents está compuesto por uno o más Database Blocks. Un Database Block

es la mínima unidad de I/O. Cuando voy a crear la BD debo de considerar el

parámetro DB_BLOCK_SIZE pues ésta definirá el Database Block estándar para la

BD. El Database Block debe ser igual o múltiplo del Operating System Block.

Nota.- En Windows Cabe recalcar que el OS Block es de 4K, mientras que en UNÍS es 8K.

Oracle nos da la facilidad de manejar Múltiple DB Block Size, es decir podemos

manejar hasta 4 no-estándar DB_BLOCK_SIZE y un estándar DB_BLOCK_SIZE.

Los tamaños pueden ser: 2K, 4K, 8K, 16K, 32K. (1 estándar y 4 no-estándar)

Para poder crear Tablespaces con no-estándar DB_BLOCK_SIZE, se debe de

configurar su respectivo parámetro en la Base de Datos (db_nK_cache_size)

Veamos un ejemplo: -- En el pfileSID.ora, asignar valores: *.db_4K_cache_size=16777216 *.db_16K_cache_size=16777216 -- Y luego crear el tablespace incluyendo la cláusula BLOCKSIZE create tablespace tbsoltptab datafile 'e:\oracle\oradata\y2kyd\tbsoltptab_01.dbf' size 10M blocksize 4K; create tablespace tbsddstab datafile 'e:\oracle\oradata\y2kyd\tbsddstab_01.dbf' size 10M blocksize 16K;

Page 30: Fundamentals I Sumary

30

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

PARAMETROS DE UTILIZACION EN EL BLOCK SPACE

Se tiene varios parámetros de utilización para poder administrar el uso de los

espacios en los segmentos tipo data e índice.

Entre ellos tenemos a: INITRANS, MAXTRANS, PCTFREE, PCTUSED.

INITRANS y MAXTRANS son parámetros para configurar el Nivel de Concurrencia

para un objeto de BD. El default es 1 para tablas y 2 para índices.

PCTFREE

Es el porcentaje de espacio que se deja para los futuros updates. El default es 10%

Si a una tabla asignamos un PCTFREE de 20% le estamos diciendo que se pueden

insertar filas hasta que quede 20% libre del bloque, el cual se utilizará para los

updates de tales registros insertados en ese bloque.

PCTUSED

Es el espacio mínimo que debe de existir para que se puedan realizar inserts.

El default es 40%.

El PCTUSED nos indica el límite mínimo por debajo del cual debe de bajar el espacio

para que se puedan dar nuevos inserts.

Eje

Page 31: Fundamentals I Sumary

31

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 32: Fundamentals I Sumary

32

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 10: MANAGING UNDO DATA

Al querer Administrar el UNDO debemos de recordar que éste está compuesto de

segmentos UNDO, quienes guardan el “old image” dado una transacción.

Los segmentos UNDO tienen 3 grandes propósitos:

Transaction Recovery

Nos sirve cuando la instancia falla, es de donde el SMON realiza el Instance

Recovery, específicamente la parte del Rolling back.

Transaction Rollback

Cuando se produce un rollback en una transacción, también se buscan restaurar los

antiguos valores desde los Segmentos UNDO.

Read Consistency

Todo usuarios excepto el que esta realizando la(s) modificación(es) lee de los

segmentos UNDO para evitar lectura no CONSISTENTES.

El UNDO se puede configura de dos maneras: MANUAL o AUTO

En versiones inferiores a 9i solo se podía tener MANUAL. A partir de Oracle 9i

podemos contar con la forma AUTO, es decir Oracle se encarga de la creación,

asignación, afinamiento de los segmentos UNDO.

Caso contrario, es decir en la forma MANUAL, el DBA debe definir tales segmentos y

definir su asignación.

Contamos con dos parámetros de inicialización:

UNDO_MANAGEMENT

Es donde se configura el modo (MANUAL o AUTO), es estático.

UNDO_TABLESPACE

Es donde se especifica el Nombre del Tablespace UNDO a usar, es dinámico.

Opcionalmente tenemos otro parámetro involucrado con los segmentos UNDO, es el

UNDO_RETENTION, el cual nos permite configurar en segundos el tiempo de

permanencia de los segmentos UNDO después de su respectivo fin de transacción

(commit). Este parámetro está vinculado en el feature FLASH BACK QUERY. Es

decir el valor asignado será el tiempo máximo en el cual podríamos regresar la

Base de Datos frente a un error humano (valido para DML).

El tablespace UNDO se puede crear a la hora de crear la Base de Datos (CREATE

DATABASE ...) o después de crear la Base de datos vía CREATE TABLESPACE ...

Page 33: Fundamentals I Sumary

33

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Un error muy común al borrar un antiguo UNDO TABLESPACE, es el ORA-1555

snapshot too old, error que es originado cuando pretendemos borrar tal UNDO

tablespace antes del tiempo configurado en el UNDO_RETENTION

Para poder verificar tambien si existen transacciones activas dentro de un UNDO

tablespace a borrar usar el siguiente query:

select a.name, b.status from v$rollname a, v$rollstat b where a.name in (select segment_name from dba_segments where tablespace_name = 'UNDODW') and a.usn = b.usn;

Por otro lado, restringir el USO del UNDO a los usuarios se puede lograr a traves

de DRM (DataBase Resource Manager)

Veamos ejemplos útiles referentes al UNDO tablespace.

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

-- Script para Recrear un UNDO tablespace:

---------------------------------------------------- 1.- Creando el nuevo TBS UNDO ------------------------------- create undo tablespace UNDOLTP datafile 'e:\oracle\oradata\cibertec\undoltp_01.dbf' size 32M autoextend on; 2.- Setearlo en forma dinámica ----------------------------------------------------- ALTER SYSTEM SET undo_tablespace=UNDOLTP; 3.- Borrar anterior UNDO tablespace ------------------------------- drop tablespace UNDODW including contents and datafiles;

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

-- Undo Data Statistics

--------------------------- select to_char(end_time,'yyyymmdd hh24:mi:ss'), to_char(begin_time,'yyyymmdd hh24:mi:ss'), undoblks from v$undostat; insert into hr.emp select * from hr.employees; delete from hr.emp; insert into hr.emp select * from hr.employees;

delete from hr.emp; insert into hr.emp select * from hr.employees; delete from hr.emp; insert into hr.emp select * from hr.employees; delete from hr.emp; select to_char(end_time,'yyyymmdd hh24:mi:ss'), to_char(begin_time,'yyyymmdd hh24:mi:ss'), undoblks from v$undostat; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees;

Page 34: Fundamentals I Sumary

34

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; insert into hr.emp select * from hr.employees; delete from hr.emp; select to_char(end_time,'yyyymmdd hh24:mi:ss'), to_char(begin_time,'yyyymmdd hh24:mi:ss'), undoblks from v$undostat;

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

-- Sizing UNDO Tablespace

--------------------------------- --UPS SELECT (SUM(undoblks) / SUM(end_time - begin_time) * 86400) "UPS" FROM v$undostat; -- Query for calculate the size of undo. SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes" FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'), (SELECT (SUM(undoblks)/SUM(((end_time - begin_time)*86400))) AS UPS FROM v$undostat), (SELECT value AS DBS FROM v$parameter WHERE name = 'db_block_size');

El valor obtenido en este calculo es el valor ideal para el tiempo transcurrido

durante el calculo.

Se sugiere realizar tal calculo para periodos largos como cierres de mes, de planilla,

de ventas, etc. Y realizar los cambios de tamaño al UNDO según convenga.

Page 35: Fundamentals I Sumary

35

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 36: Fundamentals I Sumary

36

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 11: MANAGING TABLES

En el grafico siguiente podemos apreciar los diferentes segmentos usados para

almacenar la data del usuario.

Veamos un ejemplo de cómo crear una tabla con parámetros de Space.

CREATE TABLE hr.departments

(

department_id NUMBER(4),

department_name VARCHAR2(30),

manager_id NUMBER(6),

location_id NUMBER(4))

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5

)

TABLESPACE data;

Así también revisemos este problema donde involucra a parámetros de

inicialización del Space y de Storage:

Problema:

Se tiene una tabla con parámetros de almacenamiento de 100k para el INITIAL y

100K para el NEXT también. El PCTINCREASE está configuraco a 50%. Cual será el

tamaño de la tabla al 4to extent?

Solución:

INITIAL 100K

NEXT 100K

1ER 2DO 3RO 4TO

100 100 100 * 1.5 =150 150 * 1.5 = 225

Tamaño de la tabla = 100 + 100 + 150 + 225

Tamaño de la tabla = 575 KB

Nota.- El Next siempre se respeta

Page 37: Fundamentals I Sumary

37

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Cuando asignamos en forma incorrecta los parámetros de inicialización provocan o

bien ROW MIGRATION O ROW CHIANG.

ROW MIGRATION

Si el PCTFREE es pequeño y sucede un update y no alcanza espacio, Oracle mueve

toda la fila a un bloque y deja un puntero en el anterior bloque, provocando baja de

performance, pues se hacen retrieve de dos bloques.

La solución a este problema es recreando la tabla con un adecuado PCTFREE.

ROW CHAINING

Este sucede si es que la fila es demasiado larga y no cabe en un bloque. Oracle

divide en 2 o mas boques dicha fila.

La solución a este problema es mover la tabla a otro tablespace con

DB_BLOCK_SIZE más grande.

CALCULANDO UN ADECUADO PCTFREE Y PCTUSED

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

-- CALCULANDO EL PCTFREE

--------------------------------------------- -- Ejecutando estadisticas analyze table employees compute statistics; -- Obteniendo el Initial row size SELECT owner,table_name, avg_row_len FROM DBA_TABLES WHERE OWNER='HR' AND TABLE_NAME ='EMPLOYEES'; -- Realizando cambios en la tabla UPDATE hr.EMPLOYEES set EMAIL=SUBSTR(FIRST_NAME,1,1)||LAST_NAME||'oracle.com.pe'; commit; -- Ejecutando estadisticas analyze table employees compute statistics; -- Obteniendo el Average row size

SELECT owner,table_name, avg_row_len FROM DBA_TABLES WHERE OWNER='HR' AND TABLE_NAME ='EMPLOYEES'; (AVG ROW SIZE - INI ROW SIZE) * 100 PCTFREE= ------------------------------------------- AVG ROW SIZE

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

-- CALCULANDO EL PCTUSED

--------------------------------------------- SELECT owner,table_name, avg_row_len, avg_space FROM DBA_TABLES WHERE OWNER='HR' AND TABLE_NAME ='EMPLOYEES'; AVG ROW SIZE * 100 PCTUSED = 100 - PCTFREE - --------------------- AVAILABLE DATA SPACE SELECT owner,table_name, avg_row_len, avg_space, PCT_FREE, PCT_USED FROM DBA_TABLES WHERE OWNER='HR' AND TABLE_NAME ='EMPLOYEES'; -- cambiando los parámetros de Inicialización de Space: ALTER TABLE HR.EMPLOYEES PCTFREE 15 PCTUSED 80

Page 38: Fundamentals I Sumary

38

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

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

-- Move tablespace

------------------------- select owner, table_name, tablespace_name from dba_tables where table_name='EMPLOYEES'; ALTER TABLE hr.employees MOVE TABLESPACE warehousetab;

select owner, table_name, tablespace_name from dba_tables where table_name='EMPLOYEES'; ALTER TABLE hr.employees MOVE TABLESPACE EXAMPLE;

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

-- TRUNCANDO UNA TABLA

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

CREATE TABLE EMP_BACKUP AS SELECT * FROM EMPLOYEES; TRUNCATE TABLE EMP_BACKUP;

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

-- BORRANDO UNA TABLA

-------------------------------- DROP TABLE EMP_BACKUP;

------------------------------ -- BORRANDO COLUMNAS ------------------------------ CREATE TABLE EMP_BACKUP AS SELECT * FROM EMPLOYEES; ALTER TABLE EMP_BACKUP ADD COMMENTS VARCHAR2(50); ALTER TABLE EMP_BACKUP DROP COLUMN COMMENTS CHECKPOINT 100; -- si se cae la instancia, despues de que se levante la BD: alter table emp_backup drop columns continue; SELECT * FROM DBA_PARTIAL_DROP_TABS; -- Borrando con SET UNUSED ------------------------ ALTER TABLE EMP_BACKUP ADD COMMENTS VARCHAR2(50); -- Marcarlos como columnas que no se pueden usar (UNUSED) ALTER TABLE EMP_BACKUP SET UNUSED COLUMN comments; -- Revisar query: SELECT * FROM DBA_UNUSED_COL_TABS; -- Cuando se tenga - actividad en la BD, borrarlos definitivamente incluido la Data ALTER TABLE EMP_BACKUP DROP UNUSED COLUMNS CHECKPOINT 100; -- Otros Queries: select * from dba_tables where table_name='EMPLOYEES'; select * from dba_OBJECTS where object_name='EMPLOYEES';

Page 39: Fundamentals I Sumary

39

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 40: Fundamentals I Sumary

40

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 41: Fundamentals I Sumary

41

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 12: MANAGING INDEXES

En esta oportunidad hablaremos acerca de los índices, sobre todo enfocaremos los

2 tipos de índices mas usados: B-TREE & BITMAP

B- TREE INDEX BITMAP INDEX

Para tablas con columnas de alta

cardinalidad

Para tablas con columnas con baja

cardinalidad

Los updates no son costosos Son costosos los updates

Ineficientes para queries con OR Eficientes para queries con OR

Util para ambientes OLTPL Util para ambientes Datawarehouse

CREATE INDEX NOMBRE_IDX

ON TABLA(COLUMNA);

CREATE BITMAP INDEX NOMBRE_IDX

ON TABLA(COLUMNA);

En un índice no se puede especificar el PCTUSED, pero si el PCTFREE, éste es

diferente que el de la tabla. El PCTFREE del índice reserva espacio para Index

Entries. Index Entries no se actualizan, lo que sucede es un logical delete y un

logical insert.

Recordar que el default INITRANS para los índices es 2.

Veamos algunos ejemplos con Indices

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

-- INDICES

----------------------------------- -- Indices Single Column create index idx_ventas_monto on VENTA_TICKETS (MONTO); select * from user_indexes order by 1 -- Indices MUlticolumna create index idx_ventas_monto_cantidad on VENTA_TICKETS (MONTO,CANTIDAD); select * from user_indexes order by 1 select * from user_ind_columns order by 1; SELECT ic.index_name, ic.column_name, ic.column_position col_pos,ix.uniqueness FROM user_indexes ix, user_ind_columns ic WHERE ic.index_name = ix.index_name AND ic.table_name = 'EMPLOYEES'; -- Indices con Funciones create index idx_ventas_lower_usuario2 on VENTA_TICKETS(lower(USUARIO)); ---------------------------- -- rebuild in other TBS ---------------------------- ALTER INDEX HR.EMP_BACKUP_IDX REBUILD TABLESPACE WAREHOUSEIDX;

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

-- Online

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

alter index hr.emp_backup_idx rebuild online; ERROR at line 1: ORA-08120: Need to create SYS.IND_ONLINE$ table in order to (re)build index

Page 42: Fundamentals I Sumary

42

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

COMO SYSDBA EJECUTAR: @E:\ORACLE\ORA92\rdbms\ADMIN\catcio.sql SQL> alter index hr.emp_backup_idx rebuild online; ------------------------------------ -- COMPUTE -- Genera estadísticas ------------------------------------ alter index hr.emp_backup_idx rebuild compute statistics; ------------------------------------- -- COALESCE -- Desfragmentar ------------------------------------- alter index hr.emp_backup_idx coalesce; ------------------------------------- -- CHEQUEANDO BLOQUES CORRUPTOS ------------------------------------- SELECT * FROM INDEX_STATS; ANALYZE INDEX hr.emp_backup_idx VALIDATE STRUCTURE; SELECT BLOCKS,PCT_USED, DISTINCT_KEYS, LF_ROWS, DEL_LF_ROWS FROM INDEX_STATS; ------------------------------------- -- BORRANDO INDICES ------------------------------------- drop index hr.emp_backup_idx: --------------------------------------------------- -- PARA MONITOREAR UN INDICE SU USO --------------------------------------------------- alter index hr.emp_backup_idx monitoring usage; SQL> desc v$object_usage; Name Null? Type ----------------------------------------- -------- ---------------------------- INDEX_NAME NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) MONITORING VARCHAR2(3) USED VARCHAR2(3) START_MONITORING VARCHAR2(19) END_MONITORING VARCHAR2(19) select * from v$object_usage;

select * from hr.emp_backup where email='[email protected]'; SQL> select * from v$object_usage; INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITO ------------------------------ ------------------------------ --- --- ------------------- ---------- EMP_BACKUP_IDX EMP_BACKUP YES NO 08/05/2004 17:35:13 alter index hr.emp_backup_idx nomonitoring usage; -- Creando tabla: utlxplan -------------------------- @e:\oracle\ora92\rdbms\admin\utlxplan.sql set autotrace on explain --Si se puede con todo usuario, no necesariamente con el owner del indice. connect system/manager select * from hr.emp_backup where email='[email protected]'; select * from v$object_usage; INDEX_NAME TABLE_NAME MON USE ------------------------------ ------------------------------ --- --- START_MONITORING END_MONITORING ------------------- ------------------- EMP_BACKUP_IDX EMP_BACKUP YES YES 10/05/2004 08:52:08 INDEX_SAL EMPLOYEES YES YES 10/04/2004 17:35:22

Page 43: Fundamentals I Sumary

43

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 44: Fundamentals I Sumary

44

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 13: MANTAINING DATA INTEGRITY

La integridad de la data siempre se ha aplicado, al principio era todo via aplication

code, también via triggers y los CONSTRAINTS, hoy quizas lo mas usados para

mantener la integridad de la data.

Estudiemos a los CONSTAINTS y sus estados:

ESTADO

DEL CONSTRAINT

DESCRIPCIÓN

DEL CONSTRAINT

DISABLE NOVALIDATE Se ignora el Constraint

DISABLE VALIDATE Se mantiene valido el Constraint. Deniega todo DML sobre

las columnas involucradas en el Constraint

ENABLE NOVALIDATE Valida la nueva data, la data antigua no la valida

ENABLE VALIDATE Constraint ideal, valida la nueva y la antigua data

Los defaults para los constraints son:

DISABLE + NOVALIDATE

ENABLE + VALIDATE

Se tiene también una clasificación de los constraints según el tiempo en que el

constraint valida la integridad de la data. Puede ser antes del COMMIT o después

del COMMIT. El default es que sea NONDEFERRED, es decir que se validan antes

del COMMIT, pero también podemos configurar para que el Constraint sea

DEFERRED.

Para que sea deferred, se debe de crear un constraint tipo DEFERRABLE para poder

tener control acerca del tiempo de validación. Si no es DEFERRABLE no se puede

hacer al Constraint tipo DEFERRED. Se puede alterar el constraint a DEFERRED o

IMMEDIATE via SET CONSTRAINTS o ALTER SESSION.

Veamos algunos ejemplos prácticos con CONSTRAINTS:

Page 45: Fundamentals I Sumary

45

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

-------------------------------- -- Estados del Constraint -------------------------------- alter table emp2 disable constraint EMP2_DEPT_FK; select * from user_constraints where table_name ='EMP2'; alter table emp2 enable constraint EMP2_DEPT_FK; select * from user_constraints where table_name ='EMP2'; -- Un script que puede automatizar los disables y los enables select 'alter table &table disable constraint '||constraint_name||' cascade;' from dba_constraints where owner = upper('&owner') and table_name = upper('&table'); select 'alter table &table enable constraint '||constraint_name||';' from dba_constraints where owner = upper('&owner') and table_name = upper('&table'); SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME='EMP2_DEPT_FK'; alter table emp2 disable VALIDATE CONSTRAINT EMP2_DEPT_FK; SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME='EMP2_DEPT_FK'; ------------------------------------------------ -- Definiendo constaints immediate or Deferred ------------------------------------------------ CREATE TABLE CLIENTE (RUC NUMBER(11) CONSTRAINT PK_CLIENTE PRIMARY KEY, NOMBRE VARCHAR2(25)); insert into cliente values (12345678910,'Yonogy Curi'); COMMIT; CREATE TABLE FACTURA (FACTURA_ID NUMBER(10) CONSTRAINT PK_FACTURA PRIMARY KEY, PERIODO NUMBER(6),

FECHA DATE DEFAULT SYSDATE, CLIENTE_ID NUMBER(11), MONTO NUMBER(12,2), CONSTRAINT FK_FACTURA_CLIENTE FOREIGN KEY (CLIENTE_ID) REFERENCES CLIENTE (RUC) DEFERRABLE ); INSERT INTO HR.FACTURA VALUES (1,200405,DEFAULT,12345678910,100.00); INSERT INTO HR.FACTURA VALUES (2,200405,DEFAULT,12345678917,1000.00); ROLLBACK; -- Haciendo DEFERRED al constraint SET CONSTRAINTS FK_FACTURA_CLIENTE DEFERRED; INSERT INTO HR.FACTURA VALUES (1,200405,DEFAULT,12345678910,100.00); INSERT INTO HR.FACTURA VALUES (2,200405,DEFAULT,12345678917,1000.00); -- Revisando la tabla SELECT * FROM HR.FACTURA; commit; SELECT * FROM HR.FACTURA; -- Haciendo IMMEDIATE al constraint SET CONSTRAINTS FK_FACTURA_CLIENTE IMMEDIATE;

Page 46: Fundamentals I Sumary

46

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

INSERT INTO HR.FACTURA VALUES (1,200405,DEFAULT,12345678910,100.00); INSERT INTO HR.FACTURA VALUES (2,200405,DEFAULT,12345678917,1000.00); -- Revisando la tabla SELECT * FROM HR.FACTURA; ROLLBACK; -- Revisando constraint SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME='FK_FACTURA_CLIENTE'; ----------------------------------------------- -- EXCEPTIONS PARA LOS CONSTRAINTS ----------------------------------------------- CONNECT SYSTEM/MANAGER @E:\oracle\ora92\rdbms\admin\utlexcpt.sql DESCRIBE EXCEPTIONS CREATE TABLE CLIENTE (RUC NUMBER(11) CONSTRAINT PK_CLIENTE PRIMARY KEY, NOMBRE VARCHAR2(25)); insert into cliente values (12345678910,'Yonogy Curi'); insert into cliente values (12345678911,'Jenell Curi'); insert into cliente values (12345678912,'Andrea Curi'); insert into cliente values (12345678913,'David Curi'); COMMIT; CREATE TABLE FACTURA (FACTURA_ID NUMBER(10) CONSTRAINT PK_FACTURA PRIMARY KEY, PERIODO NUMBER(6), FECHA DATE DEFAULT SYSDATE, CLIENTE_ID NUMBER(11), MONTO NUMBER(12,2), CONSTRAINT FK_FACTURA_CLIENTE FOREIGN KEY (CLIENTE_ID) REFERENCES CLIENTE (RUC)); -- Antes de cargar debe estar desabilitado el constraint: ALTER TABLE HR.FACTURA disable CONSTRAINT FK_FACTURA_CLIENTE ; INSERT INTO HR.FACTURA VALUES (1,200405,DEFAULT,12345678910,100.00); INSERT INTO HR.FACTURA VALUES (2,200405,DEFAULT,12345678911,1000.00);

INSERT INTO HR.FACTURA VALUES (3,200405,DEFAULT,12345678912,100.00); INSERT INTO HR.FACTURA VALUES (4,200405,DEFAULT,12345678913,1000.00); INSERT INTO HR.FACTURA VALUES (5,200405,DEFAULT,12345678915,1000.00); INSERT INTO HR.FACTURA VALUES (6,200405,DEFAULT,12345678916,1000.00); INSERT INTO HR.FACTURA VALUES (7,200405,DEFAULT,12345678917,1000.00); -- Habilitando el constraint para que genere las expeciones ALTER TABLE HR.FACTURA ENABLE VALIDATE CONSTRAINT FK_FACTURA_CLIENTE EXCEPTIONS INTO EXCEPTIONS; --Revisando las filas que violan el constraint: SELECT ROWID, FACTURA_ID, PERIODO,FECHA,CLIENTE_ID, MONTO FROM HR.FACTURA WHERE ROWID IN (SELECT ROW_ID FROM EXCEPTIONS); -- Corregir la data via UPDATE -- Insertando nueva data INSERT INTO HR.FACTURA VALUES (8,200405,DEFAULT,12345678915,1000.00); INSERT INTO HR.FACTURA VALUES (9,200405,DEFAULT,12345678916,1000.00); INSERT INTO HR.FACTURA VALUES (10,200405,DEFAULT,12345678917,1000.00); ALTER TABLE HR.FACTURA ENABLE VALIDATE CONSTRAINT FK_FACTURA_CLIENTE EXCEPTIONS INTO EXCEPTIONS; SELECT ROWID, FACTURA_ID, PERIODO,FECHA,CLIENTE_ID, MONTO FROM HR.FACTURA WHERE ROWID IN (SELECT ROW_ID FROM EXCEPTIONS);

Page 47: Fundamentals I Sumary

47

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 48: Fundamentals I Sumary

48

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 14: PROFILES

Llamamos Profiles al conjunto de Configuraciones de Passwords y Recursos.

Los Profiles definen directivas para la administración de la Política de Passwords.

Los Profiles obedecen a no permitir en nuestra Base Passwords demasiados

simples, expiracion de cuentas, bloqueo automatico de la cuenta, el no reuso de las

contraseñas, etc. Así también permite la configuración del tiempo de conexión de

una Session a la Base de Datos, sessiones por usuario permitidas, etc.

Al crear la base de Datos se crea un DEFAULT PROFILE. Los siguientes profiles a

crearse pueden estar creados en base al DEFAULT PROFILE.

Los Profiles se definen con CREATE PROFILE ... y se pueden alterar vía ALTER

PROFILE...

Los Profiles se asignan solo a usuarios, no se pueden asignar a ROLES.

Veamos ejemplos del uso de los Profiles. ------------------------------------- -- Creación de Profiles ------------------------------------- CREATE PROFILE ADMINISTRACIONDB LIMIT CPU_PER_SESSION UNLIMITED CPU_PER_CALL UNLIMITED CONNECT_TIME UNLIMITED IDLE_TIME UNLIMITED SESSIONS_PER_USER UNLIMITED LOGICAL_READS_PER_SESSION UNLIMITED LOGICAL_READS_PER_CALL UNLIMITED PRIVATE_SGA UNLIMITED

COMPOSITE_LIMIT UNLIMITED FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LOCK_TIME UNLIMITED PASSWORD_GRACE_TIME UNLIMITED PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME UNLIMITED PASSWORD_VERIFY_FUNCTION NULL; CREATE PROFILE COMPUTO LIMIT CPU_PER_SESSION UNLIMITED CPU_PER_CALL UNLIMITED CONNECT_TIME UNLIMITED IDLE_TIME 60 SESSIONS_PER_USER UNLIMITED LOGICAL_READS_PER_SESSION UNLIMITED LOGICAL_READS_PER_CALL UNLIMITED PRIVATE_SGA UNLIMITED COMPOSITE_LIMIT UNLIMITED FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LOCK_TIME UNLIMITED PASSWORD_GRACE_TIME UNLIMITED PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME UNLIMITED PASSWORD_VERIFY_FUNCTION NULL; CREATE PROFILE DESARROLLO LIMIT CPU_PER_SESSION UNLIMITED CPU_PER_CALL UNLIMITED CONNECT_TIME 480 IDLE_TIME 60 SESSIONS_PER_USER 1 LOGICAL_READS_PER_SESSION UNLIMITED LOGICAL_READS_PER_CALL UNLIMITED PRIVATE_SGA UNLIMITED COMPOSITE_LIMIT UNLIMITED FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LOCK_TIME UNLIMITED PASSWORD_GRACE_TIME UNLIMITED PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME UNLIMITED PASSWORD_VERIFY_FUNCTION NULL; CREATE PROFILE "GENERAL USERS" LIMIT CPU_PER_SESSION DEFAULT CPU_PER_CALL DEFAULT CONNECT_TIME DEFAULT IDLE_TIME 30 SESSIONS_PER_USER UNLIMITED LOGICAL_READS_PER_SESSION DEFAULT LOGICAL_READS_PER_CALL DEFAULT PRIVATE_SGA DEFAULT COMPOSITE_LIMIT DEFAULT FAILED_LOGIN_ATTEMPTS 6 PASSWORD_LOCK_TIME 1/480 PASSWORD_GRACE_TIME DEFAULT PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME 60 PASSWORD_VERIFY_FUNCTION NULL;

Page 49: Fundamentals I Sumary

49

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

-------------------------------- -- Verificando su creación -------------------------------- -- En el OEM o via vista del sistema select * from dba_profiles order by profile; select distinct resource_type from dba_profiles; ------------------------------------- -- Creación de usuarios ------------------------------------- -- Aplicar script -- revisar que profile tienen: select * from dba_users; ------------------------------------- -- Asignacion de Profiles ------------------------------------- alter user c_ycuri profile administraciondb; alter user c_enue profile administraciondb; alter user c_nsequera profile administraciondb; alter user c_achata profile desarrollo; alter user c_esthere profile "GENERAL USERS"; alter user c_mfrancia profile "GENERAL USERS"; alter user c_rafaelc profile "GENERAL USERS"; alter user c_marthag profile "GENERAL USERS"; alter user c_rveintemilla profile computo; alter user c_jospina profile computo; alter user c_sguerra profile computo; alter user c_jonathany profile computo; alter user c_luisb profile computo; -- revisando select * from dba_users;

------------------------------------------- -- Creación de función de Verificación ------------------------------------------- connect sys as sysdba Enter password: ******* Connected. sql> @D:\utlpwdmg.sql Function created. ------------------------------------------- -- Alterando profiles ------------------------------------------- ALTER PROFILE ADMINISTRACIONDB LIMIT PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME 60 FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/480 PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;

Page 50: Fundamentals I Sumary

50

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

ALTER PROFILE COMPUTO LIMIT PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME 60 FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/480 PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION; ALTER PROFILE DESARROLLO LIMIT PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME 60 FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/480 PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION; ALTER PROFILE "GENERAL USERS" LIMIT PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME 60 FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/480 PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION; ---------------------------------- -- Borrando Profiles ---------------------------------- -- Verificando antes del borrado select username, profile from dba_users; drop profile "GENERAL USERS"; ORA-02382: profile GENERAL USERS has users assigned, cannot drop without CASCADE drop profile "GENERAL USERS" cascade; -- Verificando despues del borrado select username, profile from dba_users;

---------------------------------- -- Recomendaciones ---------------------------------- -- Expirar los passwords de todos los usuarios después de aplicar tales políticas -- La aplicación debe ser capaz de renovar passwords.

Page 51: Fundamentals I Sumary

51

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 52: Fundamentals I Sumary

52

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 53: Fundamentals I Sumary

53

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 15: MANAGING USERS

La seguridad implica administrar a los usuarios en varios aspectos:

Bloqueo de Cuentas automáticas o manuales (account locking)

¿Donde permito que los usuarios guarden sus Objetos? (Default Tablespace)

¿Donde permito que los usuarios realice sus Sorts? (Temporary Tablespace)

¿Cuánto espacio permito a los usuarios en los Tablespaces? (Tablespace Quota)

¿Cuánto de recurso permito a los usuarios? (Resource Limits)

¿Qué grants “sueltos” le otorgo a los usuarios directamente? (Direct Privileged)

¿Qué grants “no sueltos” le otorgo a los usuarios? (Roles Privileged)

¿Cómo autentifico a mis usuarios? (Authentication Mechanism)

En esta parte centrémonos en la creación de usuarios y sus modos de

Autentificación: Data Dictionary, Operating System & Network

--------------------------- -- Creación de Usuarios --------------------------- create user c_gvillaran identified by password1$ default tablespace users temporary tablespace temp profile administraciondb account unlock quota 10M on users password expire; grant create session to c_gvillaran; select * from dba_users; --------------------------- -- Alterando Usuarios --------------------------- alter user c_gvillaran quota 0 on users; -------------------------------------------------- -- Creación de Usuarios OS Authentication -------------------------------------------------- select osuser from v$session; SELECT USER FROM DUAL; -- En regedit: OSAUTH_PREFIX_DOMAIN -- FALSE para Oracle inferiores a 8.1.x -- TRUE desde 8.1.x en adelante -- Sin Dominio

CREATE USER OPS$YONOGY IDENTIFIED EXTERNALLY DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP select * from dba_users order by username; GRANT CREATE SESSION TO OPS$YONOGY -- Se debe de crear con Mayúsculas el usuario CREATE USER "OPS$KYD02\YONOGY" IDENTIFIED EXTERNALLY DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;

Page 54: Fundamentals I Sumary

54

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

select * from dba_users order by username; GRANT CREATE SESSION TO "OPS$KYD02\YONOGY"; select osuser from v$session; SELECT USER FROM DUAL; -- Otro usuario CREATE USER "OPS$KYD02\DAVID" IDENTIFIED EXTERNALLY DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; GRANT CREATE SESSION TO "OPS$KYD02\DAVID"; ----------------------------- -- Borrando un usuario ----------------------------- DROP USER C_LUISB; ORA-01940: cannot drop a user that is currently connected -- Si incluye objetos DROP USER C_LUISB cascade;

Page 55: Fundamentals I Sumary

55

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 56: Fundamentals I Sumary

56

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 16: MANAGING PRIVILEGES

Este capítulo comprende acerca de los Object and System Privilege.

Un System Privilege comprende privilegios para acciones particulares sobre la Base

de Datos.

Un Object Privilege comprende privilegios para el acceso y manipulación de objetos

específicos de la base de datos.

Veamos algunos ejemplos de cada uno de ellos:

System Privileges Object Privileges

CREATE SESSION SELECT

CREATE TABLESPACE UPDATE

CREATE ANY TABLE DELETE

CREATE DIRECTORY INSERT

CREATE ANY INDEX EXECUTE

CREATE ROLE REFERENCES

ALTER TABLESPACE ALTER

Ambos privilegios se otorgan con GRANT y se quitan con REVOKE

En el caso de los System Privileges, al revocar los permisos no tiene efecto el

CASCADE. Mientras que en los Object Privileges si tiene efecto el CASCADE.

Veamos algunos ejemplos de ambos tipos:

------------------------ -- SYSTEM PRIVILEGES ------------------------ -- Creando un user adicional y asignando privilegios de sistema CREATE USER DAVID IDENTIFIED BY DAVID QUOTA UNLIMITED ON EXAMPLE QUOTA UNLIMITED ON USERS; grant create session to david; grant create table to david; select * from dba_sys_privs where grantee = 'DAVID'; -- Creando una tabla, alterandola y borrandola connect david/david create table datos (a number) tablespace users; analyze table datos compute statistics; alter table datos add b number; drop table datos; -- Otorgando los privilegios connect system/password

grant alter table to david; ERROR at line 1: ORA-00990: missing or invalid privilege grant drop table to david; ERROR at line 1: ORA-00990: missing or invalid privilege SQL> grant alter any table to david; Grant succeeded. SQL> grant drop any table to david; Grant succeeded.

Page 57: Fundamentals I Sumary

57

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

---------------------------- -- OBJECT PRIVILEGES ---------------------------- -- Creando la tabla create table hr.ventas (fecha_venta timestamp(7) with time zone default systimestamp, usuario varchar2(15) default user, cantidad number(7), monto number(10,2), fecha date default sysdate); grant select on hr.ventas to c_ycuri; grant select, insert, update, delete on hr.ventas to c_ycuri; select * from dba_tab_privs where table_name='VENTAS'; grant update (cantidad, fecha) on hr.ventas to c_ycuri; select * from dba_col_privs where table_name='VENTAS'; ----------------------------- -- With Grant Option ----------------------------- grant select on hr.ventas to c_ycuri WITH GRANT OPTION; ----------------------------- -- To Public ----------------------------- grant select on hr.ventas to PUBLIC; ----------------------------- -- ALL ----------------------------- select * from dba_tab_privs where grantee='C_JOSPINA'; grant all on hr.employees to C_JOSPINA;

select * from dba_tab_privs where grantee='C_JOSPINA'; ----------------------------- -- Revokes ----------------------------- revoke select on hr.ventas from c_ycuri; revoke update on hr.ventas from c_ycuri; -- verificando select * from dba_tab_privs where grantee='c_ycuri'; select * from dba_col_privs where grantee='c_ycuri' ----------------------------- -- A partir de oracle 9i: ----------------------------- -- grant any object privilege -- grant any privilege ----------------------------- --------------- -- Sugerencia: --------------- Crear un user security, y darle estos privilegios para facilidad de revocado.

Page 58: Fundamentals I Sumary

58

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 59: Fundamentals I Sumary

59

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 60: Fundamentals I Sumary

60

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 17: MANAGING ROLES

Administrar ROLES es una manera facil de poder administrar los privilegios, pues

los ROLES nos permiten una Administración Dinámica de los mismos. Al requerir un

nuevo privilegio para varios usuarios, este se añade al ROLE y automáticamente se

replica a todos los usuarios que tienen asignado dicho ROLE.

Podemos crear ROLES NOT IDENTIFIED (DEFAULT) y ROLES IDENTIFIED BY

PASSWORD, esto con el fin de proteger al Roles y adquirir los privilegios del ROLE

solo vía SET ROLE. Esto con el fin de que “nos saquen la vuelta” algunos usuarios y

restringir al uso de la aplicación quien habilitará el password y recién el usuario

puede adquirir los privilegios invlocrados.

Oracle cuenta con privilegios Predefinidos, tales como: CONNECT, RESOURCE, DBA,

EXP_FULL_DATABASE, IMP_FULL_DATABASE, etc. Privilegios que se deben asignar

con mucho cuidado, pues contienen roles dentro de los mismo roles los cuales

pueden perjudicar en vez de ayudar.

Cuando se crea un Role y se asigna a los usuarios, este es DEFAULT; es decir esta

en forma ENABLE para el usuario asignado. Por otro lado podemos definir que esta

en forma INVALIDA mediante DEFAULT ROLE ALL EXCEPT nombre_role.

Si queremos deshabilitar todos los roles tendríamos que ejecutar el ALTER USER

con DEFAULT ROLE NONE

Oracle nos recomienda tener roles de LECTURA sin protección (NOT IDENTIFIED) y

aquellos que son de ESCRITURA (IDENTIFIED BY password) protegidos, inclusive

con Passwords. Así como se muestra en el siguiente gráfico

Veamos algunos ejemplos de Roles:

Page 61: Fundamentals I Sumary

61

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

--------------------------- -- Creación de Roles --------------------------- CREATE ROLE DBO; GRANT ALTER ANY INDEX TO DBO; GRANT ALTER ANY PROCEDURE TO DBO; GRANT ALTER ANY TABLE TO DBO; GRANT ALTER ANY TRIGGER TO DBO; GRANT ALTER SYSTEM TO DBO; GRANT ALTER TABLESPACE TO DBO; GRANT ALTER USER TO DBO; GRANT CREATE ANY VIEW TO DBO; GRANT DROP ANY VIEW TO DBO; GRANT RESTRICTED SESSION TO DBO; GRANT SELECT ANY DICTIONARY TO DBO; GRANT EXP_FULL_DATABASE TO DBO; GRANT IMP_FULL_DATABASE TO DBO; -- Verificando select * from dba_roles; --------------------------------------------- -- Creacion de Usuario y asignacion de Roles --------------------------------------------- create user dtoledo identified by dtoledo; grant create session to dtoledo; grant dbo to dtoledo; CONNECT DTOLEDO/DTOLEDO SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='DTOLEDO'; -- Usando el role alter system enable restricted session; connect hr/hr alter system disable restricted session; -------------------------------------- -- Alterando el Role -------------------------------------- connect system alter ROLE DBO identified by roledbo;

select * from dba_roles order by 1; select * from dba_role_privs order by 1; alter user dtoledo default role all except dbo; SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='DTOLEDO'; grant resource to dtoledo; connect dtoledo/dtoledo select * from session_roles; alter system enable restricted session; ERROR at line 1: ORA-01031: insufficient privileges -- Seteando el ROle con su password: SET ROLE DBO IDENTIFIED BY ROLE; SET ROLE DBO IDENTIFIED BY ROLEdbo; alter system enable restricted session; alter system disable restricted session; ------------------------------------- -- Borrando un ROle ------------------------------------- drop role dbo; select * from dba_roles;

Page 62: Fundamentals I Sumary

62

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 63: Fundamentals I Sumary

63

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 18: AUDITING

La auditoria es una de las actividades que todo DBA debe de implementar para la

investigación de actividades sospechosas. Es muy importante no esperar a que

sucedan estas actividades para habilitar la auditoria.

La auditoria se puede configurar a nivel de Sistema Operativo o a nivel de Base de

Datos.

No es bueno levantar auditoria para todo objeto o para todo privilegio, tampoco se

debe de configurar la auditoria para toda la Base de Datos. Esto degradará la

performance en forma cosnsiderable

Para lograr configurar a nivel de Sistema Operativo el parámetro AUDIT_TRAIL

debe ser igual a OS.

Para lograr configurar a nivel de Base de Datos el parámetro AUDIT_TRAIL debe

ser igual a DB o TRUE.

Para deshabilitar toda auditoria, el parámetro AUDIT_TRAIL debe ser igual a

FALSE o NONE.

Se debe usar la clausula AUDIT para auditar y para dejar de auditar NOAUDIT.

Se recomienda antes de configurar el AUDIT a nivel de Base de Datos, mover la

tabla donde se guardan los registros (SYS.AUD$) a un non-system tablespace.

He aquí los pasos a seguir:

---------------------------------------------------------- -- MOVIENDO EL AUD$ A OTRO TABLESPACE ---------------------------------------------------------- Select * from dba_tables where table_name='AUD$'; Select * from sys.aud$; -- Creando TBS CREATE TABLESPACE AUDITORIATAB DATAFILE 'E:\ORACLE\ORADATA\CIBERTEC\AUDITORIATAB_01.DBF' SIZE 20M; CREATE TABLESPACE AUDITORIAIDX DATAFILE 'E:\ORACLE\ORADATA\CIBERTEC\AUDITORIAIDX_01.DBF' SIZE 10M;

Page 64: Fundamentals I Sumary

64

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

-- Moviendo la tabla AUD$, con usuario SYS ALTER TABLE sys.aud$ move tablespace AUDITORIATAB; Select * from dba_tables where table_name='AUD$'; Select * from sys.aud$; -- Reconstruyendo sus IDXs Select * from dba_INDEXES WHERE table_name='AUD$'; ALTER INDEX sys.i_aud1 rebuild tablespace AUDITORIAIDX; -- Nota: Cuando se trunca la tabla AUD$, de preferecia se debe de borrar y crear el IDX

Veamos algunos ejemplos de AUDIT ------------------------------------- -- AUDIT_SYS_OPERATIONS ------------------------------------- show parameter AUDIT_SYS_OPERATIONS -- Configurar este parametro via pfile o spfile: *.audit_sys_operations=TRUE -- ejecutar dml, ddl -- Revisar Event Viewer si es windows -- Revisar en audit_file_dest $ORACLE_HOME/rdbms/audit Si es UNIX -- Deshabilitandolo via spfile: ALTER SYSTEM SET AUDIT_SYS_OPERATIONS=FALSE SCOPE=SPFILE;

SHUTDOWN IMMEDIATE; STARTUP; show parameter AUDIT_SYS_OPERATIONS ------------------------ -- AUDIT_TRAIL = DB ------------------------ SHOW PARAMETER AUDIT_TRAIL ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; SHOW PARAMETER AUDIT_TRAIL NAME TYPE VALUE ------------------------------------ ----------- ------------- audit_trail string DB Select * from dba_audit_trail; Select * from dba_audit_object; Select * from dba_audit_statement; Select * from dba_audit_session; select * from dba_audit_exists; Select * from sys.aud$; -------------------------------------------------------------- -- Seteando audit para todas las tablas (create,drop, truncate) --------------------------------------------------------------- audit table; -- Con otra session: (hr) create table abcd (a number); alter table abcd add b number; DROP TABLE ABCD; create table ZYZ (a number); TRUNCATE TABLE ZYZ;

Page 65: Fundamentals I Sumary

65

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

-- Verificando select to_char(timestamp#,'yyyymmdd HH24:MI:SS'), ACTION#, OBJ$CREATOR from sys.aud$; Select * from dba_audit_trail; Select * from dba_audit_object; Select * from sys.aud$; --------------------------------------------------------------- -- Seteando audit para un privilegio que este mal usandose --------------------------------------------------------------- grant alter user to hr; audit alter user; connect hr/hr alter user hr identified by hr; alter user scott identified by tiger; -- Verificando Select * from dba_audit_trail; Select * from dba_audit_object; Select * from sys.aud$; --------------------------------------------------------------- -- Seteando audit para un sql y objeto especifico --------------------------------------------------------------- audit select on hr.employees; connect hr/hr select * from employees; -- Verificando select * from sys.aud$; ------------------------- -- Auditando la session ------------------------- audit session; select * from dba_audit_session; select to_char(timestamp#,'yyyymmdd hh24:mi:ss'), LOGOFF$TIME, userid, terminal, spare1 usernt, comment$text from sys.aud$;

-- Para verificar sobre las sesiones rechazadas por password invalido. select * from dba_audit_session; -- Un query con mas detalle: select to_char(timestamp#,'yyyymmdd hh24:mi:ss'), LOGOFF$TIME, userid, terminal, spare1 usernt, comment$text from sys.aud$ where returncode='1017'; -- para Usuarios especificos: Audit Session by c_ycuri, c_sguerra; --------------------------------------------------------------- -- Otros tipos de Audit --------------------------------------------------------------- AUDIT ALTER SYSTEM BY C_RVEINTEMILLA, C_NSEQUERA, C_YCURI; AUDIT CREATE ANY INDEX BY C_NSEQUERA, C_YCURI; AUDIT DROP ANY INDEX BY C_NSEQUERA, C_YCURI; AUDIT DROP ANY INDEX BY C_RVEINTEMILLA, C_JOSPINA, C_LUISB, C_JONATHANY, C_SGUERRA; -- Verificando select * from sys.aud$;

Page 66: Fundamentals I Sumary

66

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

-------------------------- -- Otros Queries importantes --------------------------- select * from sys.aud$ where to_char(timestamp#,'yyyymmdd')= to_char(sysdate,'yyyymmdd'); select * from audit_actions; select * from DBA_STMT_AUDIT_OPTS ORDER BY 3; select * from DBA_PRIV_AUDIT_OPTS ORDER BY 3; select * from DBA_OBJ_AUDIT_OPTS WHERE OWNER='HR'; ------------------------ -- AUDIT_TRAIL = OS ------------------------ ALTER SYSTEM SET AUDIT_TRAIL=OS SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; show parameter audit_trail connect hr/hhrr connect hr/hr select * from employees; -- Revisar Event Viewer si es windows -- Revisar en audit_file_dest $ORACLE_HOME/rdbms/audit Si es UNIX -- Regresando el audit a la DB: ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; show parameter audit_trail ------------------------------------ -- Deshabilitando algunos audit ------------------------------------ NOAUDIT CREATE TABLE; NOAUDIT CREATE USER;

connect hr/hr CREATE TABLE AAAA (A NUMBER); Select * from dba_audit_trail; Select * from dba_audit_object; Select * from sys.aud$; NOAUDIT TABLE; connect hr/hr CREATE TABLE YYYY (A NUMBER); Select * from dba_audit_trail; Select * from dba_audit_object; Select * from sys.aud$; -------------------------------------------- -- Deshabilitando EL AUDIT en forma general -------------------------------------------- ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; SHOW PARAMETER AUDIT_TRAIL

Page 67: Fundamentals I Sumary

67

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 68: Fundamentals I Sumary

68

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 69: Fundamentals I Sumary

69

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 19: LOADING DATA INTO A DATABASE

Existen varios metodos como cargar data a la Base de Datos, tenemos entre ellos al

EXPORT IMPORT y al SQL*LOADER.

Export e Import es un tema propio de Fundamentals II.

Veamos pues en esta oportunidad acerca del SQL*LOADER, sus componentes y

ejemplos al respecto.

Ejemplo: --------------------- -- Archivo origen -------------------- 5119130,1021,SERVICIOS TRANSDIGITAL,AV. LAS FLORES,00-0,S5199499,OSCAR OLIVOS,,,,,,,P,OSCAR OLIVOS 5116002,599,BOTICA JORGE LUIS,JR. GRAU 372,01-1,S5100709,DANIEL DE LA ROCA PUCHURI,,,,,,,N,BOTICA JORGE LUIS 5136007,908,BODEGA LICORERIA CICALA,Mz M Lt 1 AMPLIACIÓN SANTA CRUZ,01-1,S5100709,DANIEL DE LA ROCA PUCHURI,,,,,,,N,BODEGA LICORERIA CICALA --------------------- -- Tabla Destino -------------------- CREATE TABLE HR.DATOS_CLIENTES (COD_ASO vARCHAR2(12) , COD_MAQ VARCHAR2(12) , NOM_ASO VARCHAR2(120) , DIR_ASO VARCHAR2(120) , COD_ZON VARCHAR2(12) , COD_SUP VARCHAR2(12) , NOM_SUP VARCHAR2(120) , USUARIO_SUP VARCHAR2(12) ,

CLAVE_SUP VARCHAR2(12) , USUARIO1 VARCHAR2(12) , CLAVE1 VARCHAR2(12) , USUARIO2 VARCHAR2(12) , CLAVE2 VARCHAR2(12) ,

Page 70: Fundamentals I Sumary

70

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

IND_PRO VARCHAR2(12) , NOM_OPE VARCHAR2(120) , TU_USERNAME VARCHAR2(12) , TU_SUP_USERNAME VARCHAR2(12)); ----------------------------------- -- Archivo de Control (*.ctl) --------------------------------- OPTIONS (BINDSIZE=1000000 ,ROWS=1000 ) LOAD DATA INFILE datos_cli.csv APPEND INTO TABLE HR.datos_clientes TRAILING NULLCOLS ( COD_ASO CHAR TERMINATED BY "," , COD_MAQ CHAR TERMINATED BY "," , NOM_ASO CHAR TERMINATED BY "," , DIR_ASO CHAR TERMINATED BY "," , COD_ZON CHAR TERMINATED BY "," , COD_SUP CHAR TERMINATED BY "," , NOM_SUP CHAR TERMINATED BY "," , USUARIO_SUP CHAR TERMINATED BY "," , CLAVE_SUP CHAR TERMINATED BY "," , USUARIO1 CHAR TERMINATED BY "," , CLAVE1 CHAR TERMINATED BY "," , USUARIO2 CHAR TERMINATED BY "," , CLAVE2 CHAR TERMINATED BY "," , IND_PRO CHAR TERMINATED BY "," , NOM_OPE CHAR TERMINATED BY "," , TU_USERNAME CHAR TERMINATED BY "," , TU_SUP_USERNAME CHAR TERMINATED BY "," ) ------------------------------------ -- Archivo de ejecución (*.bat) ------------------------------------ SQLLDR USERID=system, CONTROL=datos.ctl, LOG=datos.log, bad=datos.bad

Page 71: Fundamentals I Sumary

71

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 72: Fundamentals I Sumary

72

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 73: Fundamentals I Sumary

73

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Capítulo 20: USING GLOBALIZATION SUPPORT

Oracle Globalization Support es un feature que permite contar Oracle en

diferentes lenguajes aparte del Ingles.

En versiones inferiores al 9i, es decir de 8i para atrás, este tema era conocido

como NLS (National Language Support). En 9i en adelante NLS es un

subconjunto de Globalization support.

Se puede diferenciar los features de los Character Sets en el siguiente cuadro:

Oracle soporta diferentes lenguage-econding-schemes para aproducir un producto que sea de uso global (mundial).

Existe 4 diferentes clases soportadas:

Single-Byte Character Sets (both 7 bits y 8 bits)

Varaying-width multibyte character sets

Fixed-width multibyte character sets

Unicode Character sets

Es muy familiar usar el US7ASCII, el single-byte Character set, el 7-bit ASCII

character set es usado en los Estados Unidos, este usa un unico byte (single

byte) para almacenar un carater y puede representar 128 caracteres. Otro es el

8-bit character set que es usado en Europa adicionalmente al Ingles.

WE8ISO8859P1 es el ISO de 8 bits Western European, este usa 8 bits y puede representar hasta 256 caracteres.

Oracle usa el Varying-fixed-width character set para soportar leguajes como el

Japonés, Chino, Koreano y otros leguajes complejos como el Arabico y el Hebreo.

Unicode es un estándar para codificar todo tipo de caracteres usados en

computadoras, incluido todos los caracteres en todos los lenguajes, incluido caracteres matemáticos.

El database Character Set es definido durante la creacion de la Base de Datos

Page 74: Fundamentals I Sumary

74

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Recuerden:

Solo se puede cambiar el character set cuando recrea la Base de Datos. Aquí se

debe usar un full export con el actual character set, drop de la base de Datos, creacion de la Base de Datos con el nuevo character set, despues el import.

PARAMETROS DE NLS

SQL> show parameter nls

NAME TYPE VALUE

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

nls_calendar string

nls_comp string

nls_currency string

nls_date_format string

nls_date_language string

nls_dual_currency string

nls_iso_currency string

nls_language string AMERICAN

nls_length_semantics string BYTE

nls_nchar_conv_excp string FALSE

nls_numeric_characters string

nls_sort string

nls_territory string AMERICA

nls_time_format string

nls_timestamp_format string

nls_timestamp_tz_format string

nls_time_tz_format string

CREATE DATABASE DWORCL MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 15 MAXLOGMEMBERS 5 MAXDATAFILES 200 DATAFILE 'e:\oracle\oradata\DWORCL\systemDWORCL.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE 'e:\oracle\oradata\DWORCL\temp_01.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED UNDO TABLESPACE "UNDOTBS" DATAFILE 'e:\oracle\oradata\DWORCL\undotbsDWORCL_01.dbf' SIZE 64M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET WE8ISO8859P1 NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('e:\oracle\oradata\DWORCL\redDWORCL1a.log') SIZE 100M, GROUP 2 ('e:\oracle\oradata\DWORCL\redDWORCL2a.log') SIZE 100M, GROUP 3 ('e:\oracle\oradata\DWORCL\redDWORCL3a.log') SIZE 100M;

Page 75: Fundamentals I Sumary

75

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

NLS_LANGUAGE

Indica el lenguaje para mensajes de error, los nombres de los dias y meses.

NLS_DATE_LANGUAGE

Cambia el lenguage para nombre de dias y meses.

NLS_SORT

Cambia el mecanismo de ordenamiento de Oracle.

NLS_TERRITORY

Indica la numeracion para dias de la semana, default formato de fechas, simbolos de moneda y simbolos decimales.

NLS_CURRENCY

Identifica un nuevo simbolo de moneda.

NLS_DATE_FORMAT

Identifica un nuevo formato de fecha.

NLS_NUMERIC_CHARACTERS

Identifica un nuevo separador de decimales y de miles.

Se puede cambiar estos parametero via ALTER SESSION:

Ejemplos:

ALTER SESSION SET NLS_LANGUAGE = AMERICAN;

ALTER SESSION SET NLS_TERRITORY = AMERICA;

ALTER SESSION SET NLS_SORT = FRENCH;

O vía package DBMS_SESSION.SET_NLS ()

Así:

set serveroutput on

begin

dbms_session.set_nls('NLS_DATE_FORMAT','''DD-MON-YYYY''');

dbms_output.put_line(sysdate);

end;

/

Un ejemplo donde se puede apreciar el cambio de idioma (en la fecha), efectuada vía package:

Page 76: Fundamentals I Sumary

76

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

SQL> ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';

Session altered.

set serveroutput on

begin

dbms_session.set_nls('NLS_DATE_FORMAT','''DD-MON-YYYY''');

dbms_output.put_line(sysdate);

end;

/

21-AUG-2004

PL/SQL procedure successfully completed.

SQL> ALTER SESSION SET NLS_LANGUAGE = 'SPANISH';

Session altered.

set serveroutput on

begin

dbms_session.set_nls('NLS_DATE_FORMAT','''DD-MON-YYYY''');

dbms_output.put_line(sysdate);

end;

/

21-AGO-2004

PL/SQL procedure successfully completed.

VISTAS IMPORTANTES

NLS_DATABASE_PARAMETERS

Guarda todos los parametros NLS de la Base de Datos

NLS_INSTANCE_PARAMETERS

Guarda todos los parametros NLS de la Instancia

NLS_SESSION_PARAMETES

Guarda los parametros NLS de la session activa

V$NLS_PARAMETERS

Este es un superset de las tres anteriores

V$NLS_VALID_VALUES

Guarda la lista de todos los validos valores para todo los parámetros

Page 77: Fundamentals I Sumary

77

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

Page 78: Fundamentals I Sumary

78

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

ORACLE PERUVIAN NETWORK