Upload
yonogy-curi
View
233
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Un Manual Ideal para el aprendizaje basico de los Fundamentos de Oracle
Citation preview
1
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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.
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
4
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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:
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.
7
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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
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.
10
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
11
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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:
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.
14
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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.
16
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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;
18
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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;
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
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
22
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
23
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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;
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
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;
27
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
28
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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;
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
31
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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 ...
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;
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.
35
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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
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
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';
39
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
40
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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
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
43
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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:
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;
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);
47
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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;
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;
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.
51
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
52
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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;
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;
55
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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.
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.
58
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
59
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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:
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;
62
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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;
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;
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$;
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
67
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
68
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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) ,
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
71
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
72
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
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
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;
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:
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
77
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
78
Fundamentals I Summary By Yonogy Curi Pomahuali
ORACLE PERUVIAN NETWORK
ORACLE PERUVIAN NETWORK