Oracle Fundamental

August 8, 2017 | Author: Javier Javier Zambrano | Category: Sql, Oracle Corporation, Java (Programming Language), File System, Computer Data
Share Embed Donate


Short Description

Oracle Fundamental...

Description

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

1

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

Capítulo 1: COMPONENTES DE LA ARQUITECTURA ORACLE

Definamos pues cada uno de sus componentes: Componente Oracle Server Oracle Instance SGA Background Process

Shared Pool

Database Buffer Cache

Redo Log Buffer

Descripción Oracle Server Oracle Instance + Oracle Database SGA + Background Proccess Oracle Instance Estructura de Memoria asignado cuando la Instacia se levanta. Procesos que establecen la comunicación y la relacion entre el Oracle Instance y el Oracle Database SGA 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. 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 Registro de DML + DDL. Con esto se puedo recontruir o rehacer las transacciones. Su principal objetivo es recovery.

2

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

Java Pool Large Pool

Data Base Writer (DBWn)

Log Writer (LGWR)

CHECKPOINT PMON SMON

ARCHIVER (ARCn) RECO LMON Dnnn Datafiles Control Files Redo Log Files User Process

Server process

Parameter File Password File

El LOG_BUFFER es el parametro que define su tamaño Memoria para cuando se usa codigo Java Tamaño definido por JAVA_POOL Alivia carga pesada al Shared Pool. Usado para backups, recover, procesos batch, etc. Tamaño definido por LARGE_POOL_SIZE. Background Proccess 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 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 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. Se encarga de liberar los recursos, bloqueos, etc frente a una falla de un user process. Responsable del Instance Recovery: Rollforward y Rollback También realiza el coalesce a los espacio libres. Other Background Process (optional) Respalda los redos si es que esta en modo ARCHIVE la BD. Para Recover Lock Monitor para RAC Proceso de Dispatcher Oracle Database Archivo Fisico donde reside la data en sí Estructura de la BD y ubicaciones de los archivos de BD Registro Fisico de los DML y DDL. Process Structure 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 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 Archivo de Configuración del Oracle Instance. Puede ser: pfile o spfile. Archivo que contiene los usuarios con privilegio SYSOPER O SYSDBA

3

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

4

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

Capítulo 2: HERRAMIENTAS DE ADMINISTRACION Se tiene las siguientes herramientas para la Administración de Base de Datos:

5

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

# 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

Modificar usuario Oracle # usermod -g oinstall -G dba oracle

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.

6

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

7

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

8

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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.

9

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

10

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

11

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 sqlplus sqlplus sqlplus sqlplus

/nolog /nolog /nolog /nolog /nolog

@e:\oracle\admin\DWORCL\scripts\ordinst.sql @e:\oracle\admin\DWORCL\scripts\interMedia.sql @e:\oracle\admin\DWORCL\scripts\context.sql @e:\oracle\admin\DWORCL\scripts\xdb_protocol.sql @e:\oracle\admin\DWORCL\scripts\postDBCreation.sql

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

12

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

13

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

14

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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.

15

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

16

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

17

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

18

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

19

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

20

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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> SQL> SQL> SQL>

shutdown immediate; startup mount alter database archivelog; 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

21

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

22

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

23

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

24

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali



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

25

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

26

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

27

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

28

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

29

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

30

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

31

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

32

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 undoblks from v$undostat; insert into hr.emp select delete from hr.emp; insert into hr.emp select delete from hr.emp; insert into hr.emp select delete from hr.emp; insert into hr.emp select delete from hr.emp;

into into into into into into

hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp

select select select select select select

to_char(begin_time,'yyyymmdd

hh24:mi:ss'),

to_char(begin_time,'yyyymmdd

hh24:mi:ss'),

* from hr.employees; * from hr.employees; * from hr.employees; * from hr.employees;

select to_char(end_time,'yyyymmdd undoblks from v$undostat; insert insert insert insert insert insert

hh24:mi:ss'),

* * * * * *

from from from from from from

hh24:mi:ss'),

hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees;

33

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

insert insert insert insert insert insert insert insert insert insert insert insert insert insert

into into into into into into into into into into into into into into

hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp hr.emp

select select select select select select select select select select select select select select

* * * * * * * * * * * * * *

from from from from from from from from from from from from from from

hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees; hr.employees;

delete from hr.emp; select to_char(end_time,'yyyymmdd undoblks from v$undostat;

hh24:mi:ss'),

to_char(begin_time,'yyyymmdd

hh24:mi:ss'),

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

34

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

35

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 inicialización del Space y de Storage:

donde

involucra

a

parámetros

de

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 NEXT 1ER 100

100K 100K 2DO 100

Tamaño de la tabla = Tamaño de la tabla

3RO 100 * 1.5 =150

100 + 100 + 150 + 225 = 575 KB

Nota.- El Next siempre se respeta

36

4TO 150 * 1.5 = 225

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

37

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

-------------------------- 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';

38

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

39

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

40

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 Para tablas con columnas de cardinalidad Los updates no son costosos Ineficientes para queries con OR Util para ambientes OLTPL CREATE INDEX NOMBRE_IDX ON TABLA(COLUMNA);

BITMAP INDEX alta Para tablas con columnas con baja cardinalidad Son costosos los updates Eficientes para queries con OR Util para ambientes Datawarehouse 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

41

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

42

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

43

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 DISABLE NOVALIDATE DISABLE VALIDATE ENABLE NOVALIDATE ENABLE VALIDATE

DESCRIPCIÓN DEL CONSTRAINT Se ignora el Constraint Se mantiene valido el Constraint. Deniega todo DML sobre las columnas involucradas en el Constraint Valida la nueva data, la data antigua no la valida 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:

44

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

--------------------------------- 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;

45

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 insert into insert into insert into COMMIT;

cliente cliente cliente cliente

values values values values

(12345678910,'Yonogy Curi'); (12345678911,'Jenell Curi'); (12345678912,'Andrea Curi'); (12345678913,'David Curi');

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 INSERT INSERT INSERT INSERT INSERT INSERT

INTO INTO INTO INTO INTO INTO INTO

HR.FACTURA HR.FACTURA HR.FACTURA HR.FACTURA HR.FACTURA HR.FACTURA HR.FACTURA

VALUES VALUES VALUES VALUES VALUES VALUES VALUES

(1,200405,DEFAULT,12345678910,100.00); (2,200405,DEFAULT,12345678911,1000.00); (3,200405,DEFAULT,12345678912,100.00); (4,200405,DEFAULT,12345678913,1000.00); (5,200405,DEFAULT,12345678915,1000.00); (6,200405,DEFAULT,12345678916,1000.00); (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 INSERT INTO INSERT INTO INSERT INTO

nueva data HR.FACTURA VALUES (8,200405,DEFAULT,12345678915,1000.00); HR.FACTURA VALUES (9,200405,DEFAULT,12345678916,1000.00); 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);

46

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

47

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

48

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

--------------------------------- 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 alter alter alter

user user user user

c_esthere profile "GENERAL USERS"; c_mfrancia profile "GENERAL USERS"; c_rafaelc profile "GENERAL USERS"; c_marthag profile "GENERAL USERS";

alter alter alter alter alter

user user user user user

c_rveintemilla profile computo; c_jospina profile computo; c_sguerra profile computo; c_jonathany profile computo; 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;

49

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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.

50

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

51

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

52

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

53

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

54

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

55

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 CREATE SESSION CREATE TABLESPACE CREATE ANY TABLE CREATE DIRECTORY CREATE ANY INDEX CREATE ROLE ALTER TABLESPACE

Object Privileges SELECT UPDATE DELETE INSERT EXECUTE REFERENCES 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.

56

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

57

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

58

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

59

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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:

60

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

---------------------------- 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;

61

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

62

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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;

63

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

-- 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;

64

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

-- 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$;

65

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

66

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

67

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

68

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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,011,S5100709,DANIEL DE LA ROCA PUCHURI,,,,,,,N,BODEGA LICORERIA CICALA ---------------------- Tabla Destino -------------------CREATE TABLE HR.DATOS_CLIENTES (COD_ASO COD_MAQ NOM_ASO DIR_ASO COD_ZON COD_SUP NOM_SUP USUARIO_SUP CLAVE_SUP USUARIO1 CLAVE1 USUARIO2 CLAVE2

vARCHAR2(12) , VARCHAR2(12) , VARCHAR2(120) , VARCHAR2(120) , VARCHAR2(12) , VARCHAR2(12) , VARCHAR2(120) , VARCHAR2(12) , VARCHAR2(12) , VARCHAR2(12) , VARCHAR2(12) , VARCHAR2(12) , VARCHAR2(12) ,

69

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

IND_PRO NOM_OPE TU_USERNAME TU_SUP_USERNAME

VARCHAR2(12) , VARCHAR2(120) , VARCHAR2(12) , 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 COD_MAQ NOM_ASO DIR_ASO COD_ZON COD_SUP NOM_SUP USUARIO_SUP CLAVE_SUP USUARIO1 CLAVE1 USUARIO2 CLAVE2 IND_PRO NOM_OPE TU_USERNAME TU_SUP_USERNAME )

CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," , CHAR TERMINATED BY "," , CHAR TERMINATED BY "," , CHAR TERMINATED BY "," CHAR TERMINATED BY "," , CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," CHAR TERMINATED BY "," , CHAR TERMINATED BY ","

------------------------------------- Archivo de ejecución (*.bat) -----------------------------------SQLLDR USERID=system, CONTROL=datos.ctl, LOG=datos.log, bad=datos.bad

70

, , , , , , ,

, , , ,

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

71

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

72

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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 producto que sea de uso global (mundial).

para

aproducir

un

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

73

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

Recuerden: 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;

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

74

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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:

75

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

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

76

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

77

ORACLE

PERUVIAN

NETWORK

Fundamentals I Summary By Yonogy Curi Pomahuali

ORACLE PERUVIAN NETWORK

78

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF