Curso DBA9i1 Practicas 2p
Curso DBA9i1 Practicas 2p
Curso DBA9i1 Practicas 2p
1.8. Localizar el proceso “servidor” asociado a mi sesión (v$process y v$session). ¿Es un servidor dedicado o
compartido?
1.14. Asignar la variable NLS_LANG para nuestro país y comprobar el cambio en las respuestas de Oracle desde
sqlplus.
1.15. Subir el tamaño de la shared-pool de 8 a 12M y comprobar cómo aumenta el espacio libre.
1.16. Comprobar el funcionamiento de la caché de redolog, como protectora del contenido de la caché de datos.
1.17. Comprobar el funcionamiento de la caché de datos, en lo que se refiere a la mejora del rendimiento cuando se
repite una consulta.
Recursos.
- Máquina: cursos.atica.um.es
- Usuario unix: curso51 a curso70
- Conexión máquina unix: ssh con Secure Shell
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 1 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 2
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
- Bases de datos: CURSO51 a CURSO70 También lo podemos hacer consultando la vista dinámica V$PROCESS (o directamente en V$BGPROCESS),
- Conexión a bd: sqlplus desde sesión unix, usuario “/ as sysdba” en la BD en cuestión:
En primer lugar, si ya no lo está, hay que arrancar la base de datos. En el ejemplo vemos el arranque de la select * from v$process where background is not null;
base de datos CURSOxy, desde el usuario curso01 de la máquina mncs:
/home/DBA9i1/curso01 (CURSOxy)> sqlplus
o bien
SQL*Plus: Release 9.2.0.1.0 - Production on Wed Oct 20 12:39:05 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. select * from v$process a, v$bgprocess b where a.ADDR=b.PADDR;
Enter user-name: / as sysdba
Connected to an idle instance.
Solución:
SQL> startup
ORACLE instance started.
Total System Global Area 34148352 bytes /home/DBA9i1/curso01 (CURSOxy)> ps -ef|grep CURSOxy
Fixed Size 450560 bytes oracle 30205 1 0 09:32 ? 00:00:00 ora_pmon_CURSOxy
Variable Size 29360128 bytes oracle 30207 1 0 09:32 ? 00:00:00 ora_dbw0_CURSOxy
Database Buffers 4194304 bytes oracle 30209 1 0 09:32 ? 00:00:00 ora_lgwr_CURSOxy
Redo Buffers 143360 bytes oracle 30211 1 0 09:32 ? 00:00:00 ora_ckpt_CURSOxy
Database mounted. oracle 30213 1 0 09:32 ? 00:00:00 ora_smon_CURSOxy
Database opened. oracle 30215 1 0 09:32 ? 00:00:00 ora_reco_CURSOxy
curso01 30528 30492 0 12:58 pts/11 00:00:00 grep CURSOxy
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 3 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 4
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 5 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 6
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
¡¡¡ Ojo !!!, ésto no es más que una convención, las extensiones pueden ser otras, o incluso no existir. 1.6. Identificar la estructura lógica de la BD: tablespaces, segmentos, extensiones.
Otra opción es acceder a la información de los ficheros de control desde la propia BD, consultando las vistas En el DD de la BD tenemos vistas que nos permiten comprobar la estructura lógica de la BD:
dinámicas V$DATAFILE, V$TEMPFILE, V$CONTROLFILE y V$LOGFILE: DBA_TABLESPACES, DBA_DATA_FILES, DBA_SEGMENTS y DBA_EXTENTS.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 7 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 8
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Podemos obtener información de la base de datos y de la instancia, de las vistas V$DATABASE y SQL> !ps -fp 30581
UID PID PPID C STIME TTY TIME CMD
V$INSTANCE, respectivamente. oracle 30581 30580 0 13:36 ? 00:00:01 oracleCURSOxy
(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))
Solución:
El proceso servidor asociado a mi sesión es un servidor DEDICADO.
SQL> select name,created,log_mode,checkpoint_change#,open_mode
from v$database;
NAME CREATED LOG_MODE CHECKPOINT_CHANGE# OPEN_MODE 1.9. ¿Cuanto ocupa la Dictionary cache y la Library cache en tu BD? (v$sgastat)
--------- --------- ------------ ------------------ ----------
CURSOxy 13-AUG-04 NOARCHIVELOG 753958 READ WRITE
En la vista V$SGASTAT hay información detallada sobre las partes de la SGA.
SQL> select instance_name,host_name,version,startup_time,
status,archiver,logins,database_status from v$instance;
INSTANCE_NAME Solución:
----------------
HOST_NAME
SQL> select * from v$sgastat where name like '%cache';
----------------------------------------------------------------
POOL NAME BYTES
VERSION STARTUP_T STATUS ARCHIVE LOGINS DATABASE_STATUS
----------- -------------------------- ----------
----------------- --------- ------------ ------- ---------- -----------------
buffer_cache 4194304
CURSOxy
shared pool library cache 1567084
cursos.atica.um.es
shared pool dictionary cache 1610880
9.2.0.1.0 20-OCT-04 OPEN STOPPED ALLOWED ACTIVE
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 9 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 10
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Solución:
1.10. Ver la actividad de la Library Cache (v$librarycache).
$ orapwd file=$ORACLE_HOME/dbs/orapwCURSOxy password=miclave entries=5
$ chmod g+w orapwCURSOxy
En la vista V$LIBRARYCACHE podemos ver los ratios (en “tantos por uno”).
$ echo "remote_login_passwordfile=EXCLUSIVE" >>
Solución: /u01/app/oracle/admin/CURSOxy/pfile/initCURSOxy.ora
$ echo >> /u01/app/oracle/admin/CURSOxy/pfile/initCURSOxy.ora
1.11. Ver las sentencias SQL que guarda la Shared-Pool (v$sqlarea). Solución:
En la vista V$SQLAREA tenemos el contenido del “área SQL” de la sharedpool. $ echo $LD_LIBRARY_PATH
/u01/app/oracle/product/9.2.0.1.0/lib
$ unset LD_LIBRARY_PATH
Solución: $ sqlplus
sqlplus: error while loading shared libraries: libclntsh.so: cannot open shared
object file: No such file or directory
SQL> select sql_text from v$sqlarea; $ export LD_LIBRARY_PATH=/u01/app/oracle/product/9.2.0.1.0/lib
SQL_TEXT $ sqlplus /nolog
-------------------------------------------------------------------------------- SQL*Plus: Release 9.2.0.1.0 - Production on Wed Feb 2 10:18:27 2005
commit Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
ALTER DATABASE OPEN SQL>
grant sysdba to system
ALTER DATABASE MOUNT
SELECT USER FROM DUAL
select o.owner#,o.obj#,decode(o.linkname,null, decode(u.name,null,'SYS',u.name), 1.14. Asignar la variable NLS_LANG para nuestro país y comprobar el cambio en las respuestas de
o.remoteowner), o.name,o.linkname,o.namespace,o.subname from user$ u, obj$ o whe Oracle desde sqlplus.
re u.user#(+)=o.owner# and o.type#=:1 and not exists (select p_obj# from depende
ncy$ where p_obj# = o.obj#) for update
... ! Comprobar el valor de NLS_LANG y ver la fecha del sistema desde sqlplus.
! Salir de sqlplus y asignar spanish_spain a NLS _LANG.
! Ejecutar sqlplus y comprobar que pide “usuario” y no “username”.
1.12. Crear el fichero de autenticación y activarlo (orapwd). ! Comprobar de nuevo la fecha del sistema desde sqlplus y verificar el cambio de formato.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 11 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 12
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
1.15. Subir el tamaño de la shared-pool de 8 a 12M y comprobar cómo aumenta el ! Consultar el contenido y la estructura de la tabla BORRAME del usuario SYSTEM.
! Insertar una fila sin hacer commit y forzar la caída de la BD.
espacio libre.
! Arrancar de nuevo la BD y comprobar que la fila insertada no está (pues no se hizo commit).
! Repetir la inserción de la fila, esta vez haciendo commit; y forzar la caída de la BD otra vez.
! Comprobar el valor de shared_pool_size, así como el espacio libre en la shared_pool.
! Arrancar la BD una vez más y comprobar que ahora la fila si está (ya que se validó la transacción con
! Asignarle 12M y volver a comprobar el valor del parámetro, así como el espacio libre que tiene ahora la
commit).
shared-pool.
! Finalmente, volver a dejar la shared-pool con 8M y comprobar de nuevo los valores anteriores.
Solución:
Solución: SQL> select * from system.borrame;
C1
SQL> show parameter shared_pool_size ----------
NAME TYPE VALUE Primera
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 8388608 SQL> desc system.borrame
Name Null? Type
SQL> select sum(bytes) from v$sgastat where pool='shared pool' and name like ----------------------------------------- -------- ----------------------------
'%free%'; C1 VARCHAR2(10)
SUM(BYTES)
---------- SQL> insert into system.borrame values ('Segunda');
8922756 1 row created.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 13 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 14
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> commit;
Commit complete.
SQL> startup
ORACLE instance started.
Database mounted.
Database opened.
Solución:
SQL> set timing on
SQL> select count(*) from IDL_UB1$;
COUNT(*)
----------
3798
Elapsed: 00:00:02.65
SQL> r
COUNT(*)
----------
3798
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 15 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 16
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
2.4. Impedir las conexiones de usuarios, de modo que el DBA sí pueda conectarse. Intenta conectarte como
scott/tiger. Volver a permitir conexiones de usuarios. ! Crea fichero /home/CURSO/cursoxy/init01xy.ora, copia del initCURSOxy.ora, y modifica
processes= 9.
2.5. Forzar un checkpoint y hacer un insert en la tabla SCOTT.DEPT. Inmediatamente después hacer Puedes editar el init.ora con el vi o también añadir al final del mismo una línea con el nuevo valor del
SHUTDOWN ABORT. Arrancar y comprobar SCOTT.DEPT. Volver a repetir el insert, haciendo commit antes parámetro (este segundo método es el usado en el ejemplo, usa tú el que quieras).
del SHUTDOWN ABORT; y comprueba el contenido de SCOTT.DEPT. /home/CURSO/curso01 (CURSOxy)> cp $PFILE/init$ORACLE_SID.ora
init0101.ora
2.6. Conéctate como SCOTT y haz update sobre DEPT (sin hacer commit). Desde otra sesión, cierra la BD /home/CURSO/curso01 (CURSOxy)> echo processes = 9 >> init0101.ora
/home/CURSO/curso01 (CURSOxy)> grep processes init0101.ora
con SHUTDOWN TRANSACTIONAL. ¿Qué pasa al hacer commit en la sesión de SCOTT? processes = 10
processes = 9
2.7. Conéctate como usuario scott/tiger. Activa la traza y haz una query con una join entre EMP y DEPT
(select a.ename, b.dname from emp a, dept b where a.deptno=b.deptno;). Desactiva la traza y analiza el ! Arranca la BD (sólo si está parada) y comprueba los parámetros anteriores.
fichero que se ha generado con el comando tkprof. SQL> connect / as sysdba
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 17 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 18
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 19 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 20
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 21 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 22
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 23 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 24
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> select
rpad(username,14),rpad(osuser,10),rpad(machine,15),rpad(terminal,10),
rpad(program,27) 2.5. Forzar un checkpoint y hacer un insert en la tabla SCOTT.DEPT. Inmediatamente después hacer
from v$session where username is not null SHUTDOWN ABORT. Arrancar y comprobar SCOTT.DEPT. Volver a repetir el insert, haciendo commit
order by username;
RPAD(USERNAME, RPAD(OSUSE RPAD(MACHINE,15 RPAD(TERMI RPAD(PROGRAM,27) antes del SHUTDOWN ABORT; y comprueba el contenido de SCOTT.DEPT.
-------------- ---------- --------------- ---------- ---------------------------
SYSTEM juanlu cursos.atica.um pts/2 sqlplus@cursos.atica.um.es Se trata de comprobar los mecanismos de recuperación de la instancia. Vamos a insertar una fila en
SCOTT.DEPT y a simular una caída de la BD con SHUTDOWN ABORT. Comprobaremos que, como no se
hizo COMMIT, los datos insertados no están, al arrancar de nuevo la BD. Si repetimos el experimento
2.4. Impedir las conexiones de usuarios, de modo que el DBA sí pueda conectarse.
haciendo COMMIT después del INSERT, comprobaremos que la información no se pierde; ya que al hacer
Intenta conectarte como scott/tiger. Volver a permitir conexiones de usuarios. commit estamos forzando el volcado a disco de los buffers redolog, que serán leídos en el siguiente
arranque al recuperarse la instancia.
En primer lugar vamos a parar la BD y a arrancarla en modo RESTRICT. Después intentaremos la
conexión como el usuario SCOTT. Finalmente desactivaremos el modo RESTRICT y podremos Recuerda que el checkpoint es el evento que fuerza la escritura de los bloques de datos q hay en la SGA, a
conectarnos como SCOTT. disco, por parte del DBWR (previo volcado de los buffer redo log, por parte del LGWR).
SQL> connect / as sysdba SQL> connect / as sysdba
Connected. Conectado.
SQL> shutdown immediate SQL> alter system checkpoint;
Database closed. Sistema modificado.
Database dismounted. SQL> insert into scott.dept values (99,'FORMACION','MURCIA');
ORACLE instance shut down. 1 fila creada.
SQL> SHUTDOWN ABORT
SQL> startup restrict Instancia de ORACLE cerrada.
Instancia de ORACLE arrancada.
Total System Global Area 24670100 bytes SQL> startup
Fixed Size 73620 bytes Instancia de ORACLE arrancada.
Variable Size 7647232 bytes ...
Database Buffers 16777216 bytes Base de datos abierta.
Redo Buffers 172032 bytes
Base de datos montada. SQL> select * from scott.dept;
Base de datos abierta. DEPTNO DNAME LOC
---------- -------------- -------------
SQL> connect scott/tiger 10 ACCOUNTING NEW YORK
ERROR: 20 RESEARCH DALLAS
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 30 SALES CHICAGO
Aviso: Ya no est conectado a ORACLE!
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 25 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 26
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
40 OPERATIONS BOSTON
SQL> commit;
SQL> alter system checkpoint; Validación terminada.
Sistema modificado.
SQL> insert into scott.dept values (99,'FORMACION','MURCIA'); SQL> !tail -10 $BDUMP/alert_CURSO22.log
1 fila creada. Mon Apr 26 09:24:55 2004
SQL> commit; SMON: enabling cache recovery
Validación terminada. SMON: enabling tx recovery
SQL> shutdown abort Mon Apr 26 09:24:57 2004
Instancia de ORACLE cerrada. Completed: ALTER DATABASE OPEN
Mon Apr 26 09:34:42 2004
SQL> startup Shutting down instance (transactional)
Instancia de ORACLE arrancada. Mon Apr 26 09:35:12 2004
Total System Global Area 24670100 bytes All transactions complete. Performing immediate shutdown
Fixed Size 73620 bytes License high water mark = 7
Variable Size 7647232 bytes
Database Buffers 16777216 bytes SQL> !tail -10 $BDUMP/alert_CURSO22.log
Redo Buffers 172032 bytes SMON: disabling tx recovery
Base de datos montada. SMON: disabling cache recovery
Base de datos abierta. Mon Apr 26 09:36:18 2004
Thread 1 closed at log sequence 191
SQL> select * from scott.dept; Mon Apr 26 09:36:18 2004
DEPTNO DNAME LOC Completed: ALTER DATABASE CLOSE NORMAL
---------- -------------- ------------- Mon Apr 26 09:36:18 2004
10 ACCOUNTING NEW YORK ALTER DATABASE DISMOUNT
20 RESEARCH DALLAS Completed: ALTER DATABASE DISMOUNT
30 SALES CHICAGO archiving is disabled
40 OPERATIONS BOSTON
99 FORMACION MURCIA (SESION DEL SYS)
Base de datos cerrada.
Base de datos desmontada.
2.6. Conéctate como SCOTT y haz update sobre DEPT (sin hacer commit). Desde otra sesión, cierra la Instancia de ORACLE cerrada.
BD con SHUTDOWN TRANSACTIONAL. ¿Qué pasa al hacer commit en la sesión de SCOTT?
2.7. Conéctate como usuario scott/tiger. Activa la traza y haz una query con una join entre EMP y DEPT
Recuerda que el SHUTDOWN TRANSACTIONAL espera a que terminen todas las transacciones en curso; (select a.ename, b.dname from emp a, dept b where a.deptno=b.deptno;). Desactiva la traza y
por tanto esperará hasta que SCOTT haga commit. Una vez que SCOTT ha hecho commit, el shutdown
analiza el fichero que se ha generado con el comando tkprof.
cerrará su sesión al cabo de unos minutos.
(SESION DE SCOTT) Desde sqlplus, el usuario conectado (p.e. SCOTT) puede activar la traza con ALTER SESSION SET
SQL> connect scott/tiger SQL_TRACE=TRUE. Esto se hace justamente antes de lanzar las sentencias que se quieren analizar. Una
Conectado.
SQL> update dept set deptno=88 where deptno=99;
vez terminadas las sentencias en cuestión, se vuelve a desactivar la traza con ALTER SESSION SET
1 fila actualizada. SQL_TRACE=FALSE. El fichero de traza se generará en el directorio indicado por el parámetro
USER_DUMP_DEST, que por defecto es $ORACLE_HOME/rdbms/log, y en caso de usar OFA será el
(SESION DEL SYS)
SQL> CONNECT / AS SYSDBA directorio $UDUMP, y será el fichero más reciente generado.
Conectado.
SQL> shutdown transactional SQL> connect scott/tiger
Conectado.
(SESION DE SCOTT) SQL> alter session set sql_trace=true;
SQL> !tail -7 $BDUMP/alert_CURSO22.log Sesión modificada.
Mon Apr 26 09:24:55 2004 SQL> select a.ename, b.dname from emp a, dept b where a.deptno=b.deptno;
SMON: enabling cache recovery ENAME DNAME
SMON: enabling tx recovery ---------- --------------
Mon Apr 26 09:24:57 2004 SMITH RESEARCH
Completed: ALTER DATABASE OPEN ...
Mon Apr 26 09:34:42 2004 MILLER ACCOUNTING
Shutting down instance (transactional) 14 filas seleccionadas.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 27 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 28
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 29 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 30
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
o Sacar una copia de seguridad del fichero de control. 3.2. Consultar la información de la BD relativa al contenido del fichero de control. Forzar
un checkpoint y volver a consultar. Consultar los registros que contiene el fichero de
control.
! En la vista V$DATABASE hay una serie de columnas, con el prefijo CONTROLFILE, que nos dan
información sobre el fichero de control, por ejemplo la fecha de creación del fichero de control
(CONTROLFILE_CREATED) o la última vez que se actualizó la copia del fichero de control
(!"#$%"&'(&)*$(+)).
SQL> select CONTROLFILE_TYPE type,
to_char(CONTROLFILE_CREATED,'dd/mm/yyyy hh24:mi') created,
CONTROLFILE_SEQUENCE# secuence,CONTROLFILE_CHANGE# change,
to_char(CONTROLFILE_TIME,'dd/mm/yyyy hh24:mi') time
from v$database
TYPE CREATED SECUENCE CHANGE TIME
------- ---------------- ---------- ---------- ----------------
CURRENT 13/08/2004 14:15 1805 1115572 04/11/2004 12:47
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 31 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 32
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 33 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 34
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
4.1. Localizar los ficheros redolog de la BD. ¿Cuántos grupos hay y cuántos miembros
PRACTICAS TEMA 4. tiene cada grupo? ¿están correctamente distribuidos?.
FICHEROS REDO LOG. Hay 3 grupos con 1 miembro cada uno. Están todos en el disco /u04. Podría ser interesante añadir un
miembro a cada grupo en el disco /u03.
El fichero redolog activo nos los muestra V$LOG, con status CURRENT.
o Añade un grupo más (grupo 4), con dos miembros de 1M:
/u03/oradata/$ORACLE_SID/redo04.log y SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
/u04/oradata/$ORACLE_SID/redo14.log. Añade 2 grupos más (grupo 5 y 6), con ---------- ---------- ---------- ---------- ---------- --- ----------------
las mismas características. FIRST_CHANGE# FIRST_TIM
------------- ---------
1 1 562 512000 1 NO INACTIVE
o Elimina los miembros del grupo 1, de uno en uno. ¿Qué ocurre al eliminar el 1146778 05-NOV-04
2 1 563 512000 1 NO CURRENT
último?. Borrar los grupos 1, 2 y 3. ¡¡¡ Ojo con borrar el redo log activo !!! 1175473 08-NOV-04
3 1 561 512000 1 NO INACTIVE
1112763 04-NOV-04
o Cambiar el nombre de los miembros de redo de los grupos 4, 5 y 6; a
redo1a.log, redo1b.log, redo2a.log, redo2b.log, redo3a.log, redo3b.log. Al forzar un “log switch”, se provoca el cambio de fichero redo log (current)
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 35 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 36
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> select CONTROLFILE_SEQUENCE#,checkpoint_change#,LOG_MODE from v$database; SQL> alter database add logfile group 4
CONTROLFILE_SEQUENCE# CHECKPOINT_CHANGE# LOG_MODE ('/u03/oradata/CURSOxy/redo04.log',
--------------------- ------------------ ------------ '/u04/oradata/CURSOxy/redo14.log') size 1M;
1860 1178372 NOARCHIVELOG Base de datos modificada.
SQL> alter system checkpoint; SQL> alter database add logfile group 5
Sistema modificado.
('/u03/oradata/CURSOxy/redo05.log',
SQL> select CONTROLFILE_SEQUENCE#,checkpoint_change#,LOG_MODE from v$database; '/u04/oradata/CURSOxy/redo15.log') size 1M;
CONTROLFILE_SEQUENCE# CHECKPOINT_CHANGE# LOG_MODE Base de datos modificada.
--------------------- ------------------ ------------
1861 1178432 NOARCHIVELOG SQL> alter database add logfile group 6
('/u03/oradata/CURSOxy/redo06.log',
'/u04/oradata/CURSOxy/redo16.log') size 1M;
Base de datos modificada.
4.3. Añade un miembro más a cada grupo: “/u03/oradata/$ORACLE_SID/redo11.log”, SQL> select member from v$logfile;
“/u03/oradata/$ORACLE_SID/redo12.log”, “/u03/oradata/$ORACLE_SID/redo13.log”. MEMBER
--------------------------------------------------------------------------------
/home/u04/oradata/CURSOxy/redo01.log
Hasta ahora había 3 grupos redolog, con 1 miembro cada uno bajo /u04. Al añadir un miembro a cada grupo /home/u04/oradata/CURSOxy/redo02.log
/home/u04/oradata/CURSOxy/redo03.log
bajo /u03, pasarán a tener 2 miembros cada uno (consultar V$LOG y V$LOGFILE), en discos distintos. /u03/oradata/CURSOxy/redo11.log
/u03/oradata/CURSOxy/redo12.log
SQL> alter database add logfile member /u03/oradata/CURSOxy/redo13.log
'/u03/oradata/CURSOxy/redo11.log' to group 1, /u03/oradata/CURSOxy/redo04.log
'/u03/oradata/CURSOxy/redo12.log' to group 2, /u04/oradata/CURSOxy/redo14.log
'/u03/oradata/CURSOxy/redo13.log' to group 3; /u03/oradata/CURSOxy/redo05.log
Base de datos modificada. /u04/oradata/CURSOxy/redo15.log
/u03/oradata/CURSOxy/redo06.log
SQL> select member from v$logfile; /u04/oradata/CURSOxy/redo16.log
MEMBER 12 filas seleccionadas.
--------------------------------------------------------------------------------
/home/u04/oradata/CURSOxy/redo01.log SQL> select GROUP#,MEMBERS,STATUS from v$log;
/home/u04/oradata/CURSOxy/redo02.log GROUP# MEMBERS STATUS
/home/u04/oradata/CURSOxy/redo03.log ---------- ---------- ----------------
/u03/oradata/CURSOxy/redo11.log 1 2 INACTIVE
/u03/oradata/CURSOxy/redo12.log 2 2 INACTIVE
/u03/oradata/CURSOxy/redo13.log 3 2 CURRENT
6 filas seleccionadas. 4 2 UNUSED
5 2 UNUSED
SQL> select GROUP#,MEMBERS,STATUS from v$log; 6 2 UNUSED
GROUP# MEMBERS STATUS 6 filas seleccionadas.
---------- ---------- ----------------
1 2 INACTIVE Finalmente haremos seis “log switch” para que se usen los nuevos redolog que hemos creado:
2 2 INACTIVE
SQL> alter system switch logfile;
3 2 CURRENT System altered.
Repetirlo seis veces.
4.4. Añade un grupo más (grupo 4), con dos miembros de 1M:
/u03/oradata/$ORACLE_SID/redo04.log y /u04/oradata/$ORACLE_SID/redo14.log. Añade
4.5. Elimina los miembros del grupo 1, de uno en uno. ¿Qué ocurre al eliminar el
2 grupos más (grupo 5 y 6), con las mismas características.
último?. Borrar los grupos 1, 2 y 3. ¡¡¡ Ojo con borrar el redo log activo !!!
Tenemos ficheros redolog de 512Kb, y vamos a crearlos de 1M, para poder alargar el tiempo entre
checkpoints. Para cada nuevo grupo crearemos 2 miembros en discos físicos distintos. Vamos a ver cómo borrar miembros de redo, y también grupos redolog. No podemos borrar el redo log activo
(current).
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 37 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 38
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Si intentamos borrar el 1er miembro de un grupo, no podremos hacerlo (aunque tenga más miembros). Los 4 2 INACTIVE
5 2 CURRENT
borrados son siempre a nivel de BD, no se borran los ficheros a nivel del SO (habría que borrarlos una vez 6 2 INACTIVE
que hayamos hecho el borrado a nivel de BD ¡¡¡ ojo con esta operación, y borremos un redolog de la BD !!!).
SQL> alter database drop logfile group 3;
SQL> alter database drop logfile member '/home/u04/oradata/CURSOxy/redo01.log'; Database altered.
ERROR en línea 1:
ORA-00362: se necesita un miembro para formar un logfile valido en el grupo 1 SQL> select member from v$logfile;
ORA-01517: miembro log: '/u04/oradata/CURSOxy/redo01.log' MEMBER
--------------------------------------------------------------------------------
SQL> alter database drop logfile member '/u03/oradata/CURSOxy/redo11.log'; /u03/oradata/CURSOxy/redo04.log
Base de datos modificada. /u04/oradata/CURSOxy/redo14.log
/u03/oradata/CURSOxy/redo05.log
/u04/oradata/CURSOxy/redo15.log
Vamos a borrar los 3 grupos que tienen miembros de 512Kb; para quedarnos sólo con los nuevos de /u03/oradata/CURSOxy/redo06.log
1M. /u04/oradata/CURSOxy/redo16.log
6 filas seleccionadas.
SQL> alter database drop logfile group 1;
Base de datos modificada.
SQL> alter database drop logfile group 2; 4.6. Cambiar el nombre de los miembros de redo de los grupos 4, 5 y 6; a redo1a.log,
Base de datos modificada.
redo1b.log, redo2a.log, redo2b.log, redo3a.log, redo3b.log.
SQL> alter database drop logfile group 3;
ERROR en línea 1:
ORA-01623: log 3 is current log for thread 1 - cannot drop
¡¡¡ OJO, la BD debe estar sólo montada !!! por tanto hay que cerrar la BD y después sólo montarla. Despues
ORA-00312: online log 3 thread 1: '/home/u04/oradata/CURSOxy/redo03.log' se cambia el nombre a los ficheros (desde el S.O.); y entonces cambiamos el nombre a los redolog (desde la
ORA-00312: online log 3 thread 1: '/u03/oradata/CURSOxy/redo13.log' BD). Si intentamos cambiar el nombre en la BD, antes de cambiarlo desde el SO, cascará. Finalmente
SQL> select GROUP#,MEMBERS,STATUS from v$log; abrimos la BD y veremos los nuevos nombres en V$LOGFILE.
GROUP# MEMBERS STATUS
---------- ---------- ---------------- SQL> shutdown immediate
3 2 CURRENT Base de datos cerrada.
4 2 INACTIVE Base de datos desmontada.
5 2 INACTIVE Instancia de ORACLE cerrada.
6 2 INACTIVE
SQL> startup mount
SQL> alter system switch logfile; Instancia de ORACLE arrancada.
Sistema modificado. Total System Global Area 34148352 bytes
Fixed Size 450560 bytes
SQL> alter database drop logfile group 3; Variable Size 29360128 bytes
ERROR at line 1: Database Buffers 4194304 bytes
ORA-01624: log 3 needed for crash recovery of thread 1 Redo Buffers 143360 bytes
ORA-00312: online log 3 thread 1: '/home/u04/oradata/CURSOxy/redo03.log' Base de datos montada.
ORA-00312: online log 3 thread 1: '/u03/oradata/CURSOxy/redo13.log'
SQL> select member from v$logfile;
SQL> select GROUP#,MEMBERS,STATUS from v$log; MEMBER
GROUP# MEMBERS STATUS --------------------------------------------------------------------------------
---------- ---------- ---------------- /u03/oradata/CURSOxy/redo04.log
3 2 ACTIVE /u04/oradata/CURSOxy/redo14.log
4 2 CURRENT /u03/oradata/CURSOxy/redo05.log
5 2 INACTIVE /u04/oradata/CURSOxy/redo15.log
6 2 INACTIVE /u03/oradata/CURSOxy/redo06.log
SQL> alter system switch logfile; /u04/oradata/CURSOxy/redo16.log
System altered. 6 filas seleccionadas.
SQL> select GROUP#,MEMBERS,STATUS from v$log; SQL> alter database rename file '/u03/oradata/CURSOxy/redo04.log' to
GROUP# MEMBERS STATUS '/u03/oradata/CURSOxy/redo1a.log';
---------- ---------- ---------------- ORA-01512: error renaming log file /u03/oradata/CURSOxy/redo04.log - new file
3 2 INACTIVE /u03/oradata/CURSOxy/redo1a.log not found
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 39 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 40
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 41 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 42
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
5.1. Consultar los tablespaces que componen la BD. Comprobar los ficheros que tiene
SQL> Create tablespace DATACURSOxy
cada uno. ¿Cuales son 'locales' y cuales no? datafile '/u02/oradata/CURSOxy/datacurso0101.dbf' size 1M
extent management dictionary;
Tablespace creado.
En el DD disponemos de vistas para consultar información sobre tablespaces (DBA_TABLESPACES,
V$TABLESPACE) y los ficheros que los componen (DBA_DATA_FILES, DBA_TEMP_FILES, V$DATAFILE, SQL> select tablespace_name,extent_management from dba_tablespaces
V$TEMPFILE) where tablespace_name='DATACURSOxy';
TABLESPACE_NAME EXTENT_MAN
------------------------------ ----------
SQL> select tablespace_name,extent_management from dba_tablespaces; DATACURSOxy DICTIONARY
TABLESPACE_NAME EXTENT_MAN
------------------------------ ---------- SQL> create table TABLA01 (C1 VARCHAR2(4000))
SYSTEM DICTIONARY tablespace DATACURSOxy storage (initial 256K minextents 1);
TOOLS LOCAL Tabla creada.
UNDO_RBS1 LOCAL
TEMP LOCAL SQL> create table TABLA02 (C1 VARCHAR2(4000))
USERS LOCAL tablespace DATACURSOxy storage (initial 256K minextents 1);
Tabla creada.
SQL> SELECT rpad(TABLESPACE_NAME,10) tablespace,rpad(FILE_NAME,40) fichero,
to_char(BYTES/1024/1024,'999.99') MB, SQL> create table TABLA03 (C1 VARCHAR2(4000))
to_char(increment_by*8/1024,'99.99') nextmb, tablespace DATACURSOxy storage (initial 256K minextents 1);
to_char(MAXBYTES/1024/1024,'9999.99') maxmb Tabla creada.
FROM DBA_DATA_FILES;
TABLESPACE FICHERO MB NEXTMB MAXMB SQL> drop table tabla02;
---------- ---------------------------------------- ------- ------ -------- Tabla borrada.
SYSTEM /home/u02/oradata/CURSOxy/system01.dbf 260.00 40.00 8192.00
TOOLS /home/u02/oradata/CURSOxy/tools01.dbf 4.00 1.25 8192.00 SQL> select bytes from dba_free_space where tablespace_name='DATACURSOxy';
UNDO_RBS1 /home/u03/oradata/CURSOxy/rbs01.dbf 4.00 .00 .00 BYTES
USERS /home/u02/oradata/CURSOxy/users01.dbf 4.00 5.00 8192.00 ----------
247808
SQL> select rpad(name,40) name,CHECKPOINT_CHANGE#, 266240
to_char(CHECKPOINT_TIME,'dd/mm/yyyy hh24:mi') CHECKPOINT_TIME
from v$datafile; SQL> create table TABLA02 (C1 VARCHAR2(4000))
NAME CHECKPOINT_CHANGE# CHECKPOINT_TIME tablespace DATACURSOxy storage (initial 352K minextents 1);
---------------------------------------- ------------------ ---------------- ORA-01658: no se ha podido crear extensión INITIAL para el segmento en el
/home/u02/oradata/CURSOxy/system01.dbf 1179986 08/11/2004 13:06 tablespace DATACURSOxy
/home/u02/oradata/CURSOxy/tools01.dbf 1179986 08/11/2004 13:06
/home/u03/oradata/CURSOxy/rbs01.dbf 1179986 08/11/2004 13:06
/home/u02/oradata/CURSOxy/users01.dbf 1179986 08/11/2004 13:06
No se puede crear la tabla porque el tablespace NO es 'local' y no hay una extensión libre mayor o igual a
352Kb. Vamos a borrar el tablespace y a crearlo de nuevo 'local'. Veremos como siendo 'local' no tendremos
problemas para crear la tabla de 352Kb.
5.2. Crea el tablespace DATACURSOxx, NO manejado localmente, con el fichero
SQL> ALTER TABLESPACE DATACURSOxy OFFLINE;
/u02/oradata/datacursoxx01.dbf, con un tamaño de 1M. Crea 3 tablas (TABLA01, Tablespace modificado.
TABLA02, TABLA03) de 256K sobre dicho tablespace. Borra las tabla TABLA02 y crea SQL> DROP TABLESPACE DATACURSOxy;
una tabla TABLA04 de 352K. ¿Qué ocurre y por qué?. Borra el tablespace ORA-01549: el tablespace no está vacío, use la opción INCLUDING CONTENTS
DATACURSOxx y créalo de nuevo, manejado localmente. Vuelve a crear las tablas y SQL> DROP TABLESPACE DATACURSOxy INCLUDING CONTENTS;
repite el borrado de TABLA02; y la creación de TABLA04. ¿Qué ocurre esta vez y por Tablespace borrado.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 43 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 44
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> create table TABLA01 (C1 VARCHAR2(4000)) SQL> insert into tabla02 values ('PRIMERA FILA');
tablespace DATACURSOxy storage (initial 256K minextents 1); 1 fila creada.
Tabla creada.
SQL> commit;
SQL> create table TABLA02 (C1 VARCHAR2(4000)) Validación terminada.
tablespace DATACURSOxy storage (initial 256K minextents 1);
Tabla creada.
5.4. Crea una tabla TABLA04 en el tablespace DATACURSOxx, ¿qué ocurre y por qué?.
SQL> create table TABLA03 (C1 VARCHAR2(4000))
tablespace DATACURSOxy storage (initial 256K minextents 1); Activa el autoextend de su fichero, ajustando next 256K y maxsize 2M. Vuelve a crear
Tabla creada. la tabla TABLA06.
SQL> drop table tabla02;
Tabla borrada. Cuando el tablespace se llena no será posible crear más objetos, a no ser que esté activado el 'autoextend',
SQL> select bytes from dba_free_space where tablespace_name='DATACURSOxy'; de forma que permita la ampliación del tablespace lo suficiente para albergar el nuevo objeto.
BYTES
---------- SQL> select bytes from dba_free_space where tablespace_name='DATACURSOxy';
262144 no rows selected
131072
SQL> create table TABLA04 (C1 VARCHAR2(4000))
SQL> create table TABLA02 (C1 VARCHAR2(4000)) tablespace DATACURSOxy storage (initial 256K minextents 1);
tablespace DATACURSOxy storage (initial 352K minextents 1); ERROR en línea 1:
Tabla creada. ORA-01658: no se ha podido crear extensión INITIAL para el segmento en el
tablespace DATACURSOxy
SQL> select bytes from dba_free_space where tablespace_name='DATACURSOxy';
ninguna fila seleccionada SQL> alter database datafile '/u02/oradata/CURSOxy/datacurso0101.dbf'
autoextend on next 256K maxsize 2M;
Como se observa, siendo el tablespace local, se aprovechan los huecos que se generan con el borrado de Base de datos modificada.
tablas. La cuestión clave, en este caso, es encontrar un tamaño adecuado para “uniform size”. Una posibilidad SQL> create table TABLA04 (C1 VARCHAR2(4000))
es tener varios tablespaces: pequeño, mediano y grande con uniform size, por ejemplo, de 8K, 256K y 8M. tablespace DATACURSOxy storage (initial 256K minextents 1);
Tabla creada.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 45 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 46
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Database altered.
5.5. Crea el tablespace INDCURSOxx de 1M con el fichero
'/u02/oradata/CURSOxx/indcursoxx01.dbf'. Muévelo al directorio
SQL> alter tablespace INDCURSOxy add datafile
'/u03/oradata/CURSOxx'. '/u03/oradata/CURSOxy/indcurso0102.dbf' size 512K;
Tablespace altered.
Para mover o renombrar un fichero de un tablespace, éste último debe estar OFFLINE. SQL> select rpad(file_name,50),bytes from dba_data_files where
tablespace_name='INDCURSOxy';
SQL> Create tablespace INDCURSOxy RPAD(FILE_NAME,50) BYTES
datafile '/u02/oradata/CURSOxy/indcurso0101.dbf' size 1M -------------------------------------------------- ----------
reuse /u03/oradata/CURSOxy/indcurso0101.dbf 524288
extent management local uniform size 64K; /u03/oradata/CURSOxy/indcurso0102.dbf 524288
Tablespace creado.
SQL> alter database datafile '/u02/oradata/CURSOxy/datacurso0101.dbf' resize 1M; SQL> CREATE TABLE TABLA05 (C1 VARCHAR2(2)) TABLESPACE UNDO_CURSOxy;
ORA-03297: file contains used data beyond requested RESIZE value ORA-30022: Cannot create segments in undo tablespace
SQL> alter database datafile '/u03/oradata/CURSOxy/indcurso0101.dbf' resize SQL> SHOW PARAMETER UNDO_TABLESPACE
512K;
NAME TYPE VALUE
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 47 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 48
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 49 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 50
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
3 4194304
PRACTICAS TEMA 6.
4. Consultar el valor actualmente activo de los parámetros de “undo” en la base de datos.
ESPACIO DE “UNDO”.
SQL> show parameters undo
Transaction set.
3. ¿En qué sistema/s de ficheros están definidos los anteriores espacios de almacenamiento?, ¿cuál es su tamaño?.
SQL> select tablespace_name, file_name, file_id, bytes 7. Repetir el ejercicio número 4 y observar el cambio de valor de los parámetros.
2 from dba_data_files where tablespace_name='UNDO_RBS1';
SQL> show parameters undo
TABLESPACE_NAME
------------------------------ NAME TYPE VALUE
FILE_NAME ------------------------------------ ---------- ------------
----------------------------------------------------------- undo_management string AUTO
FILE_ID BYTES undo_retention integer 900
---------- ---------- undo_suppress_errors boolean TRUE
UNDO_RBS1 undo_tablespace string undo_rbs1
/home/u03/oradata/CURSO01/rbs01.dbf
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 51 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 52
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
UNDO_RBS1 11. Modificar el fichero de inicialización comentando la línea correspondiente a la variable “undo_tablespace”. ¿cuál es
/home/u03/oradata/CURSO01/rbs01.dbf el espacio de “undo” que se habilita? (recuerde que al cerrar la base de datos era UNDO02, ver ejercicio anterior).
UNDO02
/home/u03/oradata/CURSO01/undo02.dbf /u01/app/oracle/admin/CURSO01/pfile (CURSO01)> sqlplus /nolog
Nombre ... UNDO03 Copyright (c) 1982, 2002, Oracle Corporation. All rights
Localización ... /home/u03/oradata/CURSOxx/undo03.dbf reserved.
Tamaño ... 1M
SQL> connect / as sysdba;
Definir la cláusula “storage” por defecto: initial 100k, next 100k y maxextents 50.
Connected.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 53 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 54
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
12. Modificar el fichero de inicialización y asignar a la variable “undo_tablespace” el valor “UNDO02”. Parar y arrancar la 13. Borrar el espacio de “undo” UNDO02.
base de datos.
SQL> show parameters undo
# Gestion Automatica de Rollback (UNDO).
undo_management = auto NAME TYPE VALUE
undo_tablespace = UNDO02 ------------------------------------ ---------- ---------
undo_management string AUTO
"initCURSO01.ora" 125L, 5655C escritos undo_retention integer 900
undo_suppress_errors boolean FALSE
/u01/app/oracle/admin/CURSO01/pfile (CURSO01)> sqlplus /nolog undo_tablespace string UNDO02
SQL> shutdown immediate 14. Asignar “UNDO_RBS1” como nuevo espacio de “undo”. Borrar el espacio “UNDO02”.
Database closed.
Database dismounted. SQL> alter system set undo_tablespace='UNDO_RBS1';
ORACLE instance shut down. System altered.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 55 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 56
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> startup 17. Comentar todos los parámetros correspondientes a “undo” en el fichero de inicialización, parar y arrancar la base de
ORACLE instance started. datos. Comprobar los valores de “undo”, ¿qué observa?.
Copyright (c) 1982, 2002, Oracle Corporation. All rights SQL> startup
reserved. ORACLE instance started.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 57 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 58
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
19. En el ejercicio anterior, ¿se genera algún mensaje de error en el fichero de alertas?.
SQL> drop tablespace UNDO_RBS1;
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 59 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 60
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Successful mount of redo thread 1, with mount id 2097158872. Nombre ... UNDO_RBS1
Fri Nov 19 09:49:17 2004 Localización ... /home/u03/oradata/CURSOxx/rbs01.dbf
Database mounted in Exclusive Mode. Tamaño ... 1M
Completed: ALTER DATABASE MOUNT Siguiente extensión ... 500k
Fri Nov 19 09:49:17 2004 Tamaño máximo ... 2M
ALTER DATABASE OPEN
Fri Nov 19 09:49:17 2004 SQL> create undo tablespace undo_rbs1 datafile
Thread 1 opened at log sequence 578 '/home/u03/oradata/CURSO01/rbs01.dbf'
Current log# 5 seq# 578 mem# 0: /u03/oradata/CURSO01/redo2a.log 2* size 1M autoextend on next 500K maxsize 2M
Current log# 5 seq# 578 mem# 1: /u04/oradata/CURSO01/redo2b.log create undo tablespace undo_rbs1 datafile
Successful open of redo thread 1. '/home/u03/oradata/CURSO01/rbs01.dbf'
Fri Nov 19 09:49:17 2004 *
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not ERROR at line 1:
set ORA-01119: error in creating database file
Fri Nov 19 09:49:17 2004 '/home/u03/oradata/CURSO01/rbs01.dbf'
SMON: enabling cache recovery ORA-27038: skgfrcre: file exists
SMON: enabling tx recovery
***Warning - Executing transaction without active Undo Tablespace
Fri Nov 19 09:49:17 2004 Nota. Cuando se borró el espacio UNDO_RBS1, no se eliminó el fichero correspondiente y se
Database Characterset is WE8ISO8859P15
replication_dependency_tracking turned off (no async multimaster genera un error. Es necesario previamente borrar o renombrar “rbs01.dbf”; se elige renombrar el
replication found) fichero por ser una operación más segura en este caso. ¡Cuidado con esta operación!.
***Warning - Executing transaction without active Undo Tablespace
Completed: ALTER DATABASE OPEN
SQL> !
20. Crear un espacio llamado PRUEBA, que no sea de “undo”, e intentar asignarlo como espacio de “undo”. ¿Qué /u01/app/oracle/admin/CURSO01/bdump (CURSO01)> cd
sucede?. /home/u03/oradata/CURSO01
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 61 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 62
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 63 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 64
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL*Plus: Release 9.2.0.1.0 - Production on Fri Nov 19 11:54:44 2004 SEGMENT_TYPE VARCHAR2(18)
TABLESPACE_NAME VARCHAR2(30)
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
HEADER_FILE NUMBER
SQL> connect / as sysdba; HEADER_BLOCK NUMBER
Connected. BYTES NUMBER
BLOCKS NUMBER
SQL> shutdown immediate EXTENTS NUMBER
Database closed.
Database dismounted. INITIAL_EXTENT NUMBER
ORACLE instance shut down. NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
SQL> startup MAX_EXTENTS NUMBER
ORACLE instance started. PCT_INCREASE NUMBER
Total System Global Area 34148352 bytes FREELISTS NUMBER
Fixed Size 450560 bytes FREELIST_GROUPS NUMBER
Variable Size 29360128 bytes RELATIVE_FNO NUMBER
Database Buffers 4194304 bytes BUFFER_POOL VARCHAR2(7)
Redo Buffers 143360 bytes
Database mounted.
Database opened. SQL> desc dba_rollback_segs
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 65 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 66
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
26. Averiguar de cuántos segmentos de "rollback" dispone la base de datos y cuáles de ellos están activos.
Realizar la consulta anterior para tipo de segmento igual a “UNDO”.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 67 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 68
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Tablespace created.
27. Idem para el número de segmentos fuera de línea.
29. Crear un segmento de "rollback" público, en el espacio de almacenamiento anterior, llamado RP01.
SQL> select count(*) from dba_rollback_segs where
status='OFFLINE'; SQL> CREATE PUBLIC ROLLBACK SEGMENT RP01 TABLESPACE RBS
2 storage (initial 100k next 100k minextents 2 maxextents 10
COUNT(*) optimal 500K);
---------- CREATE PUBLIC ROLLBACK SEGMENT RP01 TABLESPACE RBS
8 *
ERROR at line 1:
ORA-01552: cannot use system rollback segment for non-system
28. Averiguar si existe un espacio de almacenamiento de nombre RBS, si no crearlo. En adelante se trabajará con este tablespace 'RBS'
espacio de almacenamiento exclusivo para los segmentos de "rollback".
Nombre ... RBS Según la nota 1005227.6 para la solución a este problema, provocado porque debe haber como
Localización ... /home/u03/oradata/CURSOxx/rbs_manual01.dbf mínimo un segmento activado que no sea SYSTEM, deben seguirse los siguientes pasos:
Tamaño ... 1M
Siguiente extensión ... 500k " Crear un segmento de “rollback” en el espacio SYSTEM y activarlo.
Tamaño máximo ... 2M " Crear los segmentos oportunos en el espacio dedicado a “rollback”.
" Borrar o desactivar el segmento creado en SYSTEM
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SQL> create public rollback segment r_borrar tablespace system
TOOLS
2 storage (initial 100k next 100k minextents 2 maxextents 10
UNDO_RBS1
optimal 500K);
TEMP
USERS
Rollback segment created.
DATACURSO01
INDCURSO01
SQL> alter rollback segment r_borrar online;
UNDO02
PRUEBA
Rollback segment altered.
9 rows selected.
SQL> CREATE PUBLIC ROLLBACK SEGMENT RP01 TABLESPACE RBS
2 storage (initial 100k next 100k minextents 2 maxextents 10
optimal 500K);
SQL> select tablespace_name from dba_tablespaces where
tablespace_name ='RBS';
Rollback segment created.
no rows selected
SQL> create tablespace rbs 30. Observar los parámetros de almacenamiento con que se ha creado el segmento RP01. ¿Cuáles son?, ¿cuáles son
2 datafile '/home/u03/oradata/CURSO01/rbs_manual01.dbf' los del espacio de almacenamiento RBS?.
3 size 1M
4 default storage (initial 100k next 100k minextents 2 SQL> select substr(segment_name,1,10) seg,
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 69 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 70
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> select substr(tablespace_name,1,10) tables, INITIAL_EXTENT, 34. Averiguar en que espacios de almacenamiento está definido cada uno de los segmentos de "rollback" de la base de
NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS from dba_tablespaces where datos.
tablespace_name ='RBS'
TABLES INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS SQL> select substr(owner,1,10) prop, substr(segment_name,1,10)
---------- -------------- ----------- ----------- ----------- nombre, tablespace_name from dba_rollback_segs order by
RBS 102400 102400 2 2147483645 segment_name;
12 rows selected.
33. Averiguar cuáles de los segmentos de "rollback" anteriores son públicos y cuáles privados.
35. Averiguar cuáles son los parámetros de almacenamiento de los segmentos de "rollback".
SQL> select owner, segment_name, status from dba_rollback_segs;
SQL> select substr(owner,1,10) prop, substr(segment_name,1,10)
OWNER SEGMENT_NAME STATUS nombre, INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS ,
------ ------------------------------ ---------------- PCT_INCREASE from dba_rollback_segs where segment_name like 'R%';
SYS SYSTEM ONLINE
PUBLIC _SYSSMU1$ OFFLINE PROP NOMBRE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS
PUBLIC _SYSSMU2$ OFFLINE MAX_EXTENTS PCT_INCREASE
PUBLIC _SYSSMU3$ OFFLINE ------ ---------- -------------- ----------- -----------
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 71 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 72
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Nov 22 10:03:34 42. Desactivar el segmento de "rollback" RPR01 y borrarlo.
2004
SQL> alter rollback segment rpr01 offline;
Copyright (c) 1982, 2002, Oracle Corporation. All rights
reserved. Rollback segment altered.
SQL> connect /as sysdba; SQL> drop rollback segment rpr01;
Connected.
SQL> shutdown immediate Rollback segment dropped.
Database closed.
Database dismounted.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 73 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 74
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
43. Realizar una parada y arranque de la base de datos (sin modificar el init.ora ni la variable donde se declaran los ORA-01556: MINEXTENTS for rollback segment must be greater than 1
segmentos de "rollback"). ¿Cuál es el resultado?. Modificar el init.ora y volver a arrancar la base de datos.
/u01/app/oracle/admin/CURSO01/pfile (CURSO01)> sqlplus /nolog SQL> CREATE PUBLIC ROLLBACK SEGMENT RP01
2 TABLESPACE RBS
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Nov 22 10:09:36 3 STORAGE (INITIAL 100K
2004 4 NEXT 100K
5 MINEXTENTS 2
Copyright (c) 1982, 2002, Oracle Corporation. All rights 6* MAXEXTENTS 1)
reserved. MAXEXTENTS 1)
*
SQL> connect / as sysdba; ERROR at line 6:
Connected. ORA-02221: invalid MAXEXTENTS storage option value
SQL> shutdown immediate
Database closed.
Database dismounted. 45. Idem pero modificando los siguientes parámetros:
ORACLE instance shut down.
- minextents 2
SQL> startup " maxextents 20
ORACLE instance started.
SQL> CREATE PUBLIC ROLLBACK SEGMENT RP01
Total System Global Area 34148352 bytes 2 TABLESPACE RBS
Fixed Size 450560 bytes 3 STORAGE (INITIAL 100K
Variable Size 29360128 bytes 4 NEXT 100K
Database Buffers 4194304 bytes 5 MINEXTENTS 2
Redo Buffers 143360 bytes 6* MAXEXTENTS 20)
Database mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced Rollback segment created.
Buscar el mensaje de error precedente en la documentación en 46. Crear un segmento de "rollback" público llamado RP02 con los mismos parámetros que los anteriores y además:
línea. Modificar el init.ora y rearrancar la base de datos.
" pctincrease 50
44. Crear de nuevo los segmentos de "rollback" ateniéndose a los siguientes parámetros de almacenamiento: SQL> CREATE PUBLIC ROLLBACK SEGMENT RP02
2 TABLESPACE RBS
- minextents 1 3 STORAGE (INITIAL 100K
- maxextents 1 4 NEXT 100K
- initial 100k 5 MINEXTENTS 2
- next 100k 6 MAXEXTENTS 20
7* PCTINCREASE 50)
SQL> CREATE PUBLIC ROLLBACK SEGMENT RP01 PCTINCREASE 50)
2 TABLESPACE RBS *
3 STORAGE (INITIAL 100K ERROR at line 7:
4 NEXT 100K ORA-02192: PCTINCREASE not allowed for rollback segment storage
5 MINEXTENTS 1 clauses
6* MAXEXTENTS 1)
CREATE PUBLIC ROLLBACK SEGMENT RP01
* 47. Crear un segmento de "rollback" público llamado RP02 con los mismos parámetros que los anteriores.
ERROR at line 1:
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 75 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 76
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
48. Crear un segmento de "rollback" público llamado RP03 con un optimal de 50k. Idem con un optimal de 300K. SQL> ALTER ROLLBACK SEGMENT RP02 online;
SQL> c.rp02.rp03.
Buscar el error producido en la documentación en línea. 1* ALTER ROLLBACK SEGMENT rp03 SHRINK
SQL> r
1* ALTER ROLLBACK SEGMENT rp03 SHRINK
SQL> CREATE PUBLIC ROLLBACK SEGMENT RP03
2 TABLESPACE RBS Rollback segment altered.
3 STORAGE (INITIAL 100K
4 NEXT 100K
5 MINEXTENTS 2 51. Desactivar todos los segmentos de "rollback" (incluido el SYSTEM).
6 MAXEXTENTS 20
7* OPTIMAL 300K ) SQL> select segment_name, status from dba_rollback_segs;
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 77 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 78
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> alter rollback segment rp02 offline; SQL> select segment_name, status from dba_rollback_segs where
status='ONLINE';
Rollback segment altered.
SEGMENT_NAME STATUS
SQL> alter rollback segment rp03 offline; ------------------------------ ----------------
SYSTEM ONLINE
Rollback segment altered.
SQL> alter rollback segment system offline; SQL> drop rollback segment system;
alter rollback segment system offline drop rollback segment system
* *
ERROR at line 1: ERROR at line 1:
ORA-01597: cannot alter system rollback segment online or offline ORA-01544: cannot drop system rollback segment
52. Borrar todos los segmentos de "rollback" de la base de datos (excepto el SYSTEM). 54. Crear segmentos de "rollback" públicos RP01, RP02, RP03, ... RP20 con los parámetros:
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 79 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 80
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 81 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 82
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
61. Realizar una inserción en la tabla SCOTT.DEPT, conectarse como SCOTT, previamente asignar a la transacción el RP11 19 512000
segmento de "rollback" RP19. Los valores seran los siguientes:
SEGMENT_NAME SEGMENT_ID OPTSIZE
- DEPTNO 50 ------------------------------ ---------- ----------
- DNAME INFORMATICA RP12 20 512000
- LOC MURCIA RP13 21 512000
RP14 22 512000
SQL> connect scott RP15 23 512000
Enter password: RP16 24 512000
Connected. RP17 25 512000
SQL> SET TRANSACTION USE ROLLBACK SEGMENT rp19; RP18 26 1048576
RP19 27 512000
Transaction set. RP20 28 512000
SYSTEM 0
SQL> insert into scott.dept values (50,'INFORMATICA','MURCIA');
1 row created.
SQL> commit;
Commit complete.
62. Modificar el parámetro OPTIMAL de los segmentos de "rollback" RP01 a RP10, fijándolo en 100K. ¿Es posible?,
¿tiene sentido?.
63. Consultar el valor del parámetro OPTIMAL de los segmentos de "rollback" definidos en la base de datos.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 83 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 84
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 85 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 86
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
defecto USERS y como "tablespace" temporal TEMP; asignar una cuota de 0K en el "tablespace" USERS. ¿Es
posible hacerlo?.
9. Abrir una sesión sqlplus e intentar conectarse como usuario “administrador”, ¿qué sucede?, ¿por qué?.
SQL> select * from dba_role_privs where grantee='ADMINISTRADOR'; SQL*Plus: Release 9.2.0.1.0 - Production on Mon Nov 22 12:55:31
2004
no rows selected
Copyright (c) 1982, 2002, Oracle Corporation. All rights
SQL> select * from dba_tab_privs where grantee='ADMINISTRADOR'; reserved.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 87 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 88
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
14. Averiguar que usuarios de la base de datos tienen asignado el privilegio “create user” de forma directa, ¿qué vista
debe ser consultada?. 16. Crear dos "tablespace" llamados NOMINA y ACADEMO, que contendrán datos relativos a las aplicaciones de
nomina y datos académicos de los empleados de una empresa, según las siguientes características:
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 89 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 90
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> create temporary tablespace temp_nomina 21. Crear un rol llamado “ADMIN”, asignarle los privilegios “create session”, “create user” y “CREATE ROLE”. Asignarlo
2 tempfile '/u04/oradata/CURSO01/temp_nomina01.dbf' al usuario administrador.
3 size 600k autoextend on next 50k maxsize 700k
4 extent management local uniform size 100k;
SQL> create role admin;
Tablespace created.
Role created.
18. Estando conectado como usuario “administrador” probar a crear un rol llamado “administrador”, ¿qué ocurre?. SQL> grant create session to admin;
Grant succeeded.
SQL> connect administrador
Enter password: SQL> c.session.user.
Connected. 1* grant create user to admin
SQL> create role administrador; SQL> r
create role administrador 1* grant create user to admin
*
ERROR at line 1: Grant succeeded.
ORA-01031: insufficient privileges
SQL> c.user.role.
1* grant create role to admin
19. Idem estando conectado como usuario SYSTEM, ¿qué sucede?, ¿por qué?. SQL> r
1* grant create role to admin
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 91 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 92
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
--
PRUEBA01 SYSTEM SYSTEM
SQL> select * from dba_sys_privs where grantee ='ADMINISTRADOR' PRUEBA00 USERS TEMP
ADMINISTRADOR USERS TEMP
GRANTEE PRIVILEGE SYSTEM SYSTEM TEMP
ADM SYS SYSTEM TEMP
------------------------------
---------------------------------------- --- SQL> select substr(username,1,15) usuario, tablespace_name,
ADMINISTRADOR CREATE SESSION max_bytes from dba_ts_quotas where username in
NO ('SYS','SYSTEM','ADMINISTRADOR','PRUEBA00','PRUEBA01')
ADMINISTRADOR CREATE USER
NO USUARIO TABLESPACE_NAME MAX_BYTES
--------------- ------------------------------ ----------
SQL> revoke create session from administrador; ADMINISTRADOR USERS 512000
Revoke succeeded.
SQL> c.session.user. 25. Crear un usuario llamado “prueba02” autenticado por base de datos, asignando como "tablespace" por defecto
1* revoke create user from administrador NOMINA y como "tablespace" temporal TEMP_NOMINA (no se le asignara cuota en NOMINA).
SQL> r
1* revoke create user from administrador
SQL> create user prueba02 identified by prueba02
Revoke succeeded. 2 default tablespace nomina
3 temporary tablespace temp_nomina;
SQL> grant admin to administrador;
User created.
Grant succeeded.
26. Asignar al usuario “prueba01” los "tablespace" ACADEMO y TEMP_ACADEMO como "tablespace" de trabajo y
23. Crear, conectado como SYSTEM, un usuario llamado “prueba01” autenticado por base de datos al que no se le temporal respectivamente (sin especificar cuota).
asigne "tablespace" por defecto ni temporal.
SQL> alter user prueba01 temporary tablespace temp_academo;
SQL> create user prueba01 identified by prueba01;
User altered.
User created.
SQL> alter user prueba01 default tablespace academo;
24. Consultar en las vistas correspondientes los "tablespaces" y la quota en cada uno de ellos que tiene los usuarios User altered.
SYS, SYSTEM, “administrador”, “prueba00” y “prueba01”. ¿Qué ha ocurrido con el usuario “prueba01”?.
27. Consultar en las vistas correspondientes los "tablespace" y la cuota en cada uno de ellos que tiene los usuarios
SQL> select substr(username,1,15) usuario, DEFAULT_TABLESPACE , “prueba01” y “prueba02”.
TEMPORARY_TABLESPACE
2 from dba_users SQL> select * from dba_ts_quotas where username in
3 where username in ('PRUEBA01','PRUEBA02');
('SYS','SYSTEM','ADMINISTRADOR','PRUEBA00','PRUEBA01');
no rows selected
USUARIO DEFAULT_TABLESPACE
TEMPORARY_TABLESPACE
------------------------------------------------------------------ 28. Crear un rol llamado “CONEXIÓN” y asignarle el permiso “CREATE SESSION”.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 93 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 94
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
30. Comprobar en la vista correspondiente cuales son los roles asignados a los usuarios “prueba00”, “prueba01” y
“prueba02”. 32. Crear un rol llamado “DESARROLLO” y asignarle los permisos "CREATE SEQUENCE", "CREATE SESSION",
"CREATE SYNONYM", "CREATE TABLE" y "CREATE VIEW". Asignar el rol “DESARROLLO” a los usuarios
“prueba00”, “prueba01” y “prueba02”.
SQL> select * from dba_role_privs where grantee in
('PRUEBA00','PRUEBA01','PRUEBA02');
SQL> connect system
GRANTEE GRANTED_ROLE ADM Enter password:
DEF Connected.
------------------------------ ------------------------------ ---
--- SQL> create role desarrollo;
PRUEBA00 CONEXION NO
YES Role created.
PRUEBA01 CONEXION NO
YES SQL> grant create sequence, create session, create synonym, create
PRUEBA02 CONEXION NO table, create view to desarrollo;
YES
Grant succeeded.
31. Conectarse como usuario “prueba01” y crear la tabla siguiente en el "tablespace" ACADEMO: SQL> grant desarrollo to prueba00, prueba01, prueba02;
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 95 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 96
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> CREATE TABLE CODIGOS SQL> select * from dba_sys_privs where grantee in
(CODIGO varchar2(3), ('PRUEBA00','PRUEBA01','PRUEBA02')
DESCRIPCION varchar2(20)) 2 ;
TABLESPACE ACADEMO
STORAGE (INITIAL 64K no rows selected
NEXT 64K
MINEXTENTS 5 SQL> select USERNAME , TABLESPACE_NAME , BYTES from
MAXEXTENTS 10); dba_ts_quotas where username in
('PRUEBA00','PRUEBA01','PRUEBA02');
Table created.
USERNAME TABLESPACE_NAME
BYTES
35. Asignar cuota ilimitada al usuario “prueba02” en el "tablespace" NOMINA. ------------------------------ ------------------------------
----------
PRUEBA02 ACADEMO
SQL> connect system 0
Introduzca su clave: PRUEBA01 ACADEMO
Connected. 327680
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 97 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 98
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
37. Asignar cuota cero en el "tablespace" por defecto para el usuario “prueba01”, ¿siguen estando sus objetos?, ¿es
posible crear algún otro? (probad a crear un tabla). User altered.
SQL> alter user prueba01 quota 0k on academo; 40. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio ALTER USER.
User altered.
SQL> connect system
SQL> select owner, table_name from dba_tables where Introduzca su clave:
owner='PRUEBA01'; Conectado.
SQL> connect prueba01 42. Asignar el permiso DROP USER al rol ADMIN.
Introduzca su clave:
Connected.
SQL> grant drop user to admin;
SQL> alter user prueba01 quota unlimited on academo;
alter user prueba01 quota unlimited on academo Grant succeeded.
*
ERROR at line 1:
ORA-01031: insufficient privileges 43. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio DROP USER.
39. Conectarse como usuario “prueba01” y modificar su clave, ¿es posible?. SQL> select * from dba_sys_privs where privilege='DROP USER';
GRANTEE PRIVILEGE
SQL> alter user prueba01 identified by probando01; ADM
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 99 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 100
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
------------------------------
---------------------------------------- ---
ADMIN DROP USER
NO 47. Asignar el permiso “CREATE PROFILE” al rol ADMIN.
DBA DROP USER
YES
IMP_FULL_DATABASE DROP USER SQL> grant create profile to admin;
NO
Grant succeeded.
44. Conectado como usuario "administrador", crear el usuario “prueba03” autentificado por base de datos y asignando
cuotas en el "tablespace" ACADEMO (500K) y NOMINA (200K). Su "tablespace" temporal será TEMP. 48. Averiguar que perfiles están definidos en la base de datos y que límites de recursos fija cada uno de ellos.
46. Averiguar que usuarios de base de datos o que roles tienen asignado el privilegio “CREATE PROFILE”. PERFIL RECURSO RESOURCE LIMITE
------------ ------------------------- -------- ----------
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
SQL> connect system DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
Enter password: DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
Connected. DEFAULT PRIVATE_SGA KERNEL UNLIMITED
SQL> select * from dba_sys_privs where privilege='CREATE PROFILE'; DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 101 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 102
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 103 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 104
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
53. Crear un usuario “prueba04” con el parámetro “password expire”, sus "tablespace" por defecto y temporal serán 55. Modificar el "tablespace" por defecto y el temporal del usuario “prueba01” de forma que sean NOMINA y
USERS (cuota 0k) y TEMP. Asignar los roles CONEXIÓN y DESARROLLO. Conectarse como usuario “prueba04”, TEMP_NOMINA.
¿qué sucede?.
SQL> connect prueba04 56. Comprobar cual es el valor del parámetro OS_AUTHENT_PREFIX en la base de datos.
Enter password:
ERROR:
ORA-28001: the password has expired Editar con vi o ejecutar la sentencia pg sobre el fichero de
parametros de inicializacion (init<SID>.ora).
User altered.
54. Bloquear la cuenta del usuario “prueba04”, ¿qué sucede al conectarse de nuevo?.
SQL> set head off
SQL> select * from dba_users where username='PRUEBA01'
SQL> connect system
Enter password: PRUEBA01 26 EXTERNAL
Connected. LOCKED(TIMED) 22-NOV-04 22-MAR-05
ACADEMO TEMP_ACADEMO
SQL> alter user prueba04 account lock; 22-NOV-04
DESARROLLO DEFAULT_CONSUMER_GROUP
User altered.
SQL> connect prueba04 58. Modificar el parámetro OS_AUTHENT_PREFIX de forma que, en adelante, la cadena que identifique a un usuario
Enter password: externo sea “” (cadena vacía).
ERROR:
ORA-28000: the account is locked
Editar con vi o ejecutar la sentencia pg sobre el fichero de
parametros de inicializacion (init<SID>.ora). Indicar:
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 105 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 106
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
os_authent_prefix = ""
62. Asignar el privilegio anterior al rol ADMIN..
63. Comprobar los valores asignados al perfil “DESARROLLO”. Modificar el perfil “DESARROLLO”, desde el usuario
60. Modificar los valores del perfil DEFAULT según se indica en la siguiente tabla: “administrador”, según la siguiente tabla:
Sessions_per_user 5
Cpu_per_session unlimited Sessions_per_user 5
Cpu_per_call 6000 Connect_time DEFAULT
Connect_time 480 Idle_time 30
Idle_time 60
Failed_login_attempts 3 ¿Qué ha sucedido con el resto de los parámetros?. ¿Coincide el valor de “Connect_time” en este perfil con el
Password_life_time 180 que tiene en el perfil DEFAULT?.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 107 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 108
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
10 rows selected.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 109 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 110
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
66. Averiguar que usuarios o roles de la base de datos tienen asignado el privilegio “DROP PROFILE”. SQL> create role secreto identified by total;
Role created.
SQL> select * from dba_sys_privs where privilege='DROP PROFILE';
SQL> grant secreto to prueba04;
GRANTEE PRIVILEGE ADM
---------------------------------------------------------------- Grant succeeded.
-----
DBA DROP PROFILE YES
IMP_FULL_DATABASE DROP PROFILE NO 70. Averiguar que usuarios poseen el privilegio “ALTER ANY ROLE” (de forma directa o a través de roles).
67. Asignar el privilegio “DROP PROFILE” al rol “ADMIN.”. SQL> select * from dba_sys_privs where privilege='ALTER ANY
ROLE';
71. ¿Qué valor tiene en la base de datos el parámetro MAX_ENABLED_ROLES?. Modificar su valor para que, en
adelante, valga 40. Comprobar esta modificacion.
68. Conectarse como usuario “administrador” e intentar eliminar el perfil “DEFAULT”, ¿qué ocurre?.
SQL> drop profile default; 72. Averiguar que usuarios poseen el privilegio “GRANT ANY ROLE” (de forma directa o a través de roles).
drop profile default
*
ERROR at line 1: SQL> select * from dba_sys_privs where privilege='GRANT ANY
ORA-00931: missing identifier ROLE';
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 111 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 112
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
77. Asignar permiso de conexión al usuario "prueba03", asignar el rol “SECRETO” al mismo usuario. Conectarse como SQL> select * from dba_role_privs where grantee='PRUEBA04';
este usuario e intentar borrar el rol.
GRANTEE GRANTED_ROLE ADM
DEF
SQL> connect system ------------------------------ ------------------------------ ---
Enter password: ---
Connected. PRUEBA04 CONEXION NO
YES
SQL> grant conexion to prueba03; PRUEBA04 DESARROLLO NO
NO
Grant succeeded.
SQL> grant secreto to prueba03; 80. Conectado como usuario “prueba04”, activar el rol “DESARROLLO” y comprobar de nuevo en la vista apropiada del
diccionario de datos los roles activos en la sesión.
Grant succeeded.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 113 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 114
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
ROLE 82. Conectarse como usuario SYSTEM y otorgar al usuario "prueba02" el permiso para seleccionar datos de la tabla
------------------------------ códigos (pertenece al usuario "prueba01"). ¿Qué sucede?, ¿por qué?.
CONEXION
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 115 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 116
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
no rows selected
PRACTICAS TEMA 8.
85. Conectarse como usuario "prueba01" y revocar al usuario "prueba02" el permiso para seleccionar datos de la tabla TRABAJOS (JOBS).
códigos.
SQL> connect prueba01 87. Identificar los procesos de sistema operativo que corresponden al proceso gestor de colas corriendo en la instancia.
Enter password:
Connected.
/u01/app/oracle/admin/CURSO01/pfile (CURSO01)> ps -ef|grep cj
SQL> revoke select on prueba01.codigos from prueba02;
oracle 20321 1 0 14:27 ? 00:00:00 ora_cjq0_CURSO01
oracle 20525 19652 0 15:13 pts/172 00:00:00 grep cj
Revoke succeeded.
SQL> select * from prueba01.codigos; 89. Eliminar el proceso de sistema operativo gestor de colas mediante la orden “kill”. ¿Qué sucede?, ¿ha afectado a la
select * from prueba01.codigos instancia?, ¿se ha generado algún error en el fichero de alertas?, ¿y alguna traza?.
*
ERROR at line 1: /u01/app/oracle/admin/CURSO01/pfile (CURSO01)> ps -ef|grep CURSO01
ORA-00942: table or view does not exist oracle 20309 1 0 14:27 ? 00:00:00 ora_pmon_CURSO01
oracle 20311 1 0 14:27 ? 00:00:00 ora_dbw0_CURSO01
oracle 20313 1 0 14:27 ? 00:00:00 ora_lgwr_CURSO01
oracle 20315 1 0 14:27 ? 00:00:00 ora_ckpt_CURSO01
oracle 20317 1 0 14:27 ? 00:00:00 ora_smon_CURSO01
oracle 20319 1 0 14:27 ? 00:00:00 ora_reco_CURSO01
oracle 20542 1 0 15:16 ? 00:00:00 ora_cjq0_CURSO01
oracle 20546 19652 0 15:17 pts/172 00:00:00 grep CURSO01
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 117 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 118
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 119 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 120
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
tablespace users
storage (initial 16K next 16K maxextents 10)
94. Fijar el numero de procesos de ejecucion de trabajos en cero y forzar la ejecución del trabajo, ¿se genera algún
error?. ¿Ha variado el intervalo de ejecución?, ¿qué día de la semana se ejecutara si se fuerza de nuevo su
CREATE OR REPLACE procedure analiza_usuarios as ejecución mañana?.
cursor usuarios is
select username,rowid from system.usuarios_estadisticas;
werror varchar2(80); SQL> alter system set job_queue_processes=0;
wrowid urowid;
begin System altered.
FOR rec_usuarios IN usuarios LOOP
wrowid:=rec_usuarios.rowid; SQL> select job,to_char(last_date, 'dd-mm-yyyy hh24:mi:ss'),
begin to_char(next_date, 'dd-mm-yyyy hh24:mi:ss'),substr(interval,1,25)
DBMS_UTILITY.ANALYZE_SCHEMA(rec_usuarios.username,'ESTIMATE',NULL,33) from dba_jobs;
;
update system.usuarios_estadisticas
JOB TO_CHAR(LAST_DATE,' TO_CHAR(NEXT_DATE,'
SUBSTR(INTERVAL,1,25)
set fecha=sysdate, error=null
------ -------------------
where rowid=rec_usuarios.rowid;
-----------------------------------------
exception
2 22-11-2004 15:31:18 29-11-2004 15:31:18 SYSDATE + 7
when others then
werror:=rpad(sqlerrm,80); SQL> exec dbms_job.run(2);
update system.usuarios_estadisticas
set error=werror, fecha=sysdate PL/SQL procedure successfully completed.
where rowid=wrowid;
end; SQL> select job,to_char(last_date, 'dd-mm-yyyy hh24:mi:ss'),
END LOOP; to_char(next_date, 'dd-mm-yyyy hh24:mi:ss'),substr(interval,1,25)
end analiza_usuarios; from dba_jobs;
/
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 121 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 122
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> @chequear_tablas.sql
CREATE OR REPLACE procedure chequear_tablas as
Procedure created.
extensiones integer;
maximo_extensiones integer;
ocupacion integer;
Crear un "script" llmado crea_trabajo2.sql, por ejemplo, con el
porcentaje_extensiones integer := 80; contenido siguiente:
cursor c_tablas is select table_name from user_tables;
begin DECLARE
FOR rec_tables IN c_tablas LOOP v_numjob integer;
select count(*) into extensiones begin
from user_extents dbms_job.submit(v_numjob,'PRUEBA01.CHEQUEAR_TABLAS;', SYSDATE,
where segment_name=rec_tables.table_name; 'SYSDATE + 60/1440');
commit;
select max_extents into maximo_extensiones DBMS_OUTPUT.PUT_LINE('Identificador de trabajo es: ' || v_numjob);
from user_tables end;
where table_name=rec_tables.table_name; /
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 123 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 124
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Table created.
select nvl(count(*),0) into sesiones
from v$session
Conectarse como usuario SYS y dar permisos sobre vista SESSION:
where username=rec_usuarios.usuario
and status in ('ACTIVE','INACTIVE'); SQL> connect sys as sysdba;
Enter password:
select nvl(count(*),0) into activas Connected.
from v$session SQL> show user
where username=rec_usuarios.usuario USER is "SYS"
and status = 'ACTIVE';
SQL> grant select on V_$SESSION to system;
insert into usuarios_monitorizados_log
values (rec_usuarios.usuario,sysdate,sesiones,activas); Grant succeeded.
END LOOP;
commit; Crear un "script" llamado monitorizar_usuarios.sql, por ejemplo,
end monitorizar_usuarios; que contenga las sentencias de creacion del procedimiento:
/
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 125 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 126
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 127 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 128
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
WHAT SYSTEM.MONITORIZAR_USUARIOS;
------------------------------------------------------------------
--------
3 01-01-4000 00:00:00 SYSDATE + 60/1440 19. Conectarse como usuario “prueba01” y modificar el trabajo que chequea la ocupación de las tablas para que se
Y realice cada treinta minutos.
PRUEBA01.CHEQUEAR_TABLAS;
SQL> connect prueba01
Enter password:
17. Intentar marcar como “broken” el trabajo que realiza la monitorización de usuarios. ¿Qué sucede al realizarlo?, Connected.
¿quién es su poseedor?.
SQL> exec dbms_job.interval(3,'SYSDATE + 30/1440');
SQL> exec dbms_job.broken(4,TRUE);
BEGIN dbms_job.broken(4,TRUE); END; PL/SQL procedure successfully completed.
*
ERROR at line 1: SQL> select job, to_char(next_date, 'dd-mm-yyyy
ORA-23421: job number 4 is not a job in the job queue hh24:mi:ss'),substr(interval,1,25), failures, broken, what from
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86 user_jobs;
ORA-06512: at "SYS.DBMS_IJOB", line 529
ORA-06512: at "SYS.DBMS_JOB", line 245 JOB TO_CHAR(NEXT_DATE,' SUBSTR(INTERVAL,1,25)
ORA-06512: at line 1 FAILURES B
---------- ------------------- -------------------------
---------- -
18. Conectarse como usuario SYSTEM y modificar el trabajo que llama al procedimiento de monitorización de usuarios WHAT
para que se realice cada quince minutos. ------------------------------------------------------------------
-------
SQL> exec dbms_job.interval(4,'SYSDATE + 15/1440'); 3 01-01-4000 00:00:00 SYSDATE + 30/1440
Y
PL/SQL procedure successfully completed. PRUEBA01.CHEQUEAR_TABLAS;
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 129 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 130
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
PRUEBA01.CHEQUEAR_TABLAS;
PRACTICAS TEMA 9.
21. Conectado como usuario SYSTEM, eliminar el trabajo que realiza el chequeo de ocupación de tablas.
AUDITORÍA.
SQL> connect system
Enter password:
Connected.
1. Ver la descripción de las vistas ALL_DEF_AUDIT_OPTS, DBA_AUDIT_OBJECT, DBA_AUDIT_SESSION,
SQL> exec dbms_job.remove(3); DBA_AUDIT_STATEMENT, DBA_AUDIT_TRAIL, DBA_OBJ_AUDIT_OPTS, DBA_PRIV_AUDIT_OPTS, y
BEGIN dbms_job.remove(3); END; DBA_STMT_AUDIT_OPTS. Averiguar el significado de cada uno de los campos usando la documentación en línea.
*
ERROR at line 1:
ORA-23421: job number 3 is not a job in the job queue SQL> desc ALL_DEF_AUDIT_OPTS
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86 Nombre ¿Nulo? Tipo
ORA-06512: at "SYS.DBMS_IJOB", line 529 ----------------------------------------- --------
ORA-06512: at "SYS.DBMS_JOB", line 171 ---------------
ORA-06512: at line 1 ALT VARCHAR2(3)
AUD VARCHAR2(3)
COM VARCHAR2(3)
22. Repetir el ejercicio anterior conectado como usuario “prueba01”. DEL VARCHAR2(3)
GRA VARCHAR2(3)
SQL> connect prueba01 IND VARCHAR2(3)
Enter password: INS VARCHAR2(3)
Connected. LOC VARCHAR2(3)
REN VARCHAR2(3)
SQL> exec dbms_job.remove(3); SEL VARCHAR2(3)
UPD VARCHAR2(3)
PL/SQL procedure successfully completed. REF VARCHAR2(3)
EXE VARCHAR2(3)
SQL> select job, to_char(next_date, 'dd-mm-yyyy
hh24:mi:ss'),substr(interval,1,25), failures, broken, what from ...
user_jobs;
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 131 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 132
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
VARCHAR2(255) Connected.
ACTION# NOT NULL NUMBER
RETURNCODE NOT NULL NUMBER SQL> select * from dba_sys_privs where privilege ='AUDIT ANY';
OBJ$CREATOR VARCHAR2(30)
OBJ$NAME GRANTEE PRIVILEGE
VARCHAR2(128) ADM
AUTH$PRIVILEGES VARCHAR2(16) ------------------------------
AUTH$GRANTEE VARCHAR2(30) ---------------------------------------- ---
NEW$OWNER VARCHAR2(30) DBA AUDIT ANY
NEW$NAME YES
VARCHAR2(128) IMP_FULL_DATABASE AUDIT ANY
SES$ACTIONS VARCHAR2(19) NO
SES$TID NUMBER
LOGOFF$LREAD NUMBER SQL> select * from dba_sys_privs where privilege ='AUDIT SYSTEM';
LOGOFF$PREAD NUMBER
LOGOFF$LWRITE NUMBER GRANTEE PRIVILEGE
LOGOFF$DEAD NUMBER ADM
LOGOFF$TIME DATE ------------------------------
COMMENT$TEXT ---------------------------------------- ---
VARCHAR2(4000) DBA AUDIT SYSTEM
CLIENTID VARCHAR2(64) YES
SPARE1
VARCHAR2(255)
SPARE2 NUMBER 5. Auditar todas las conexiones exitosas y fallidas a la base de datos.
OBJ$LABEL RAW(255)
SES$LABEL RAW(255)
PRIV$USED NUMBER SQL> audit session;
SESSIONCPU NUMBER
Audit succeeded.
3. Comprobar si esta habilitada la auditoría en la base de datos. Habilitar la auditoría en la base de datos en caso de
que no este. 6. Abrir una sesión a la base de datos como usuario “SYSTEM” y como usuario “prueba01”. Comprobar que
información se ha guardado en la auditoría como consecuencia de las operaciones anteriores (consultar la vista
DBA_AUDIT_TRAIL).
SQL> show parameters audit_trail
SQL> connect system 7. Auditar las conexiones exitosas y fallidas a la base de datos de los usuarios “prueba01” y “prueba02”.
Enter password:
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 133 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 134
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Otorgar privilegios para consultar, insertar, actualizar y borrar registros de la tabla “codigos_notas” al usuario
SQL> select substr(os_username,1,10) usuario_so, "prueba02".
substr(username,1,12) usuario, to_char(timestamp,'dd-mm-yyy Conectarse como usuario “prueba02” y realizar las siguientes operaciones:
hh24:mi:ss') tiempo_conexion, to_char(logoff_time,'dd-mm-yyyy
hh24:mi:ss') tiempo_desconexion from dba_audit_session where • Seleccionar todos los registros de la tabla “codigos_notas”.
username='PRUEBA02' order by username,timestamp,logoff_time • Insertar en la tabla “codigos_notas” los siguientes registros:
USUARIO_SO USUARIO TIEMPO_CONEXION TIEMPO_DESCONEXION
‘0’, ‘NO PRESENTADO’
---------- ------------ ------------------ -------------------
‘1’, ‘APROBADO’
oracle PRUEBA02 29-11-004 11:55:37
Consultar los registros de auditoría generados para las operaciones anteriores (vista DBA_AUDIT_OBJECT).
9. Auditar el uso de SELECT TABLE, DELETE TABLE, UPDATE TABLE e INSERT TABLE en cualquier caso (fallido o
no) y por sentencia individual. Comprobar las opciones activas de auditoría (vista DBA_STMT_AUDIT_OPTS).
SQL> connect prueba01
Enter password:
Connected.
SQL> audit select table, delete table, update table, insert
table by access; SQL> CREATE TABLE CODIGOS_NOTAS
2 (CODIGO varchar2(3),
Audit succeeded. 3 DESCRIPCION varchar2(20))
4 TABLESPACE ACADEMO
5 STORAGE (INITIAL 64K
SQL> select user_name usuario, audit_option opcion, success, 6 NEXT 64K
failure from DBA_STMT_AUDIT_OPTS order by user_name 7 MINEXTENTS 3
8* MAXEXTENTS 10)
USUARIO OPCION SUCCESS FAILURE
------------------------------------------------------------ Table created.
PRUEBA01 CREATE SESSION BY ACCESS BY ACCESS
PRUEBA02 CREATE SESSION BY ACCESS BY ACCESS SQL> grant select, insert, update, delete on codigos_notas to
CREATE SESSION BY ACCESS BY ACCESS prueba02;
SELECT TABLE BY ACCESS BY ACCESS
INSERT TABLE BY ACCESS BY ACCESS Grant succeeded.
UPDATE TABLE BY ACCESS BY ACCESS
DELETE TABLE BY ACCESS BY ACCESS SQL> connect prueba02
Enter password:
7 rows selected. Connected.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 135 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 136
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> insert into prueba01.codigos_notas values ('0','NO oracle PRUEBA02 29-11-004 12:08:54 SYSTEM PRODUCT_PRIVS
PRESENTADO'); SELECT
oracle PRUEBA02 29-11-004 12:08:54 SYSTEM
1 row created. SQLPLUS_PRODUCT SELECT
oracle PRUEBA02 29-11-004 12:08:54 SYSTEM
SQL> insert into prueba01.codigos_notas values ('1','APROBADO'); SQLPLUS_PRODUCT SELECT
oracle PRUEBA02 29-11-004 12:09:06 PRUEBA01 CODIGOS_NOTAS
1 row created. SELECT
oracle PRUEBA02 29-11-004 12:09:19 PRUEBA01 CODIGOS_NOTAS
SQL> commit; INSERT
oracle PRUEBA02 29-11-004 12:09:32 PRUEBA01 CODIGOS_NOTAS
Commit complete. INSERT
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 137 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 138
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
7 rows selected.
14. Desactivar la auditoría de uso de SELECT TABLE, DELETE TABLE, UPDATE TABLE e INSERT TABLE (activada
SQL> noaudit session; en ejercicios anteriores).
Noaudit succeeded.
SQL> select substr(user_name,1,12) usuario, substr(audit_option,
SQL> select substr(user_name,1,12) usuario, privilege, 1,15) opcion, success,failure from dba_stmt_audit_opts order by
success,failure from dba_priv_audit_opts order by user_name, user_name, audit_option;
privilege;
USUARIO OPCION SUCCESS FAILURE
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 139 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 140
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> noaudit select table, delete table, update table, insert 1 row created.
table;
SQL> commit;
Noaudit succeeded.
SQL> connect system
SQL> select substr(user_name,1,12) usuario, substr(audit_option, Introduzca su clave:
1,15) opcion, success,failure from dba_stmt_audit_opts order by Connected.
user_name, audit_option;
SQL> select substr(username,1,10) usuario, to_char(timestamp,'dd-
no rows selected mm-yyyy hh24:mi:ss') fecha, substr(owner,1,10) prop,
substr(obj_name,1,15) objeto, ses_actions from dba_audit_object
where owner='PRUEBA01' order by timestamp
15. Activar la auditoría para cualquier operación de consulta, inserción o borrado que se efectué sobre la tabla
“prueba01.codigos_notas”. USUARIO FECHA PROP OBJETO
SES_ACTIONS
------------------------------------------------------------------
SQL> audit select, insert, delete on prueba01.codigos_notas; --------
PRUEBA02 29-11-2004 12:09:06 PRUEBA01 CODIGOS_NOTAS
Audit succeeded. PRUEBA02 29-11-2004 12:09:19 PRUEBA01 CODIGOS_NOTAS
PRUEBA02 29-11-2004 12:09:32 PRUEBA01 CODIGOS_NOTAS
SQL> select substr(owner,1,12),substr(OBJECT_NAME,1,12), PRUEBA01 02-12-2004 10:09:30 PRUEBA01 CODIGOS_NOTAS ------
substr(object_type,1,10), DEL, INS, SEL, UPD from S--S------
dba_obj_audit_opts where owner='PRUEBA01' order by object_name,
object_type;
SUBSTR(OWNER SUBSTR(OBJEC SUBSTR(OB DEL INS SEL UPD SES_ACTIONS Resumen de sesion, una cadena de 16 caracteres,
------------ ------------ --------- --- --- --- --- uno por cada tipo de accion de la lista ordenada ALTER, AUDIT,
PRUEBA01 CHEQUEAR_TAB PROCEDURE -/- -/- -/- -/- COMMENT, DELETE, GRANT, INDEX, INSERT, LOCK, RENAME, SELECT,
PRUEBA01 CODIGOS TABLE -/- -/- -/- -/-
PRUEBA01 CODIGOS_NOTA TABLE S/S S/S S/S -/- UPDATE, REFERENCES, y EXECUTE.
PRUEBA01 TABLAS_REVIS TABLE -/- -/- -/- -/- Las posicones 14, 15, y 16 estan reservadas para usos futuros. Los
caracteres son - para ninguno, S para éxito, F para fallo y B para
ambos.
16. Conectado como usuario “prueba01” realizar una consulta del contenido de la tabla “codigos_notas”. Consultar los
registros de auditoría generados (DBA_AUDIT_OBJECT).
17. Desactivar la auditoría del ejercicio 15.
COD DESCRIPCION
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 141 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 142
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
18. Desactivar todas las opciones de auditoría de objetos que existen por defecto.
• Se están produciendo un número considerable de abrazos mortales debido a que se están adquiriendo bloqueos
exclusivos sobre tablas.
SQL> noaudit all on default;
• Se ha detectado el borrado de registros de la tabla SCOTT.EMP
Noaudit succeeded.
Se sospecha que los usuarios “prueba01” y “prueba02” son los responsables de las acciones anteriores.
Determinar las distintas operaciones sobre las que habrá que efectuar una auditoría, así como consultar en las
distintas vistas para obtener la información precisa que permita descartar o confirmar las sospechas que han dado lugar
19. Comprobar las características de almacenamiento del “audit trail”. Borrar todos los registros de auditoría a la activación de la auditoría.
correspondientes a la tabla “prueba01.codigos_notas”.
Al usuario "prueba02" se le han asignado todos los permisos posibles sobre scott.emp:
PROP TABLA ESPACIO INITIAL_EXTENT NEXT_EXTENT Para activar la auditoría se ejecutara el siguiente orden de
MIN_EXTENTS MAX_EXTENTS sentencias:
---------- -------- ---------- -------------- -----------
----------- ----------- SQL> audit alter, INDEX, RENAME ON DEFAULT BY SESSION;
SYS AUD$ SYSTEM 10240 16384
1 121 Audit succeeded.
Audit succeeded.
PROP OBJETO TIPO DEL INS SEL UPD SQL> AUDIT DELETE ON scott.emp BY ACCESS WHENEVER SUCCESSFUL;
------------ ------------ --------- --- --- --- ---
SYS AUD$ TABLE A/A A/A -/- A/A Audit succeeded.
21. Considere un caso hipotético donde quiere auditarse la base de datos en base a los siguientes hechos detectados: Supongamos que el usuario prueba01 ejecuta las sentencias:
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 143 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 144
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Enter password:
Connected.
• Opciones de auditoría de sentencias fijadas.
SQL> ALTER USER prueba03 QUOTA 0 ON users;
ALTER USER prueba03 QUOTA 0 ON users
* SQL> connect system
ERROR at line 1: Enter password:
ORA-01031: insufficient privileges Connected.
Recuperamos ahora información sobre los registros de • Opciones de auditoría para objetos del esquema SCOTT.
auditoría:
SQL> SELECT * FROM sys.dba_obj_audit_opts WHERE owner =
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 145 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 146
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 147 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 148
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> audit alter, INDEX, RENAME ON scott.emp by access; Observemos que prueba02 no tiene permiso para crear
índices.
Audit succeeded.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 149 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 150
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
SQL> select * from dba_sys_privs where grantee='PRUEBA02'; SQL> select substr(username,1,12) usuario,
to_char(timestamp,'dd-mm-yyy hh24:mi:ss') tiempo_conexion,
no rows selected substr(owner,1,10) propie, substr(obj_name,1,15) objeto,
substr(action_name,1,15) accion from dba_audit_object where
SQL> select * from dba_role_privs where grantee='PRUEBA02' owner='SCOTT' order by os_username,usuario, timestamp,
owner,obj_name,action_name;
Grant succeeded.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 151 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 152
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
buffer=102400
SQL> select * from dba_role_privs where file=/export/CURSO01/total_admin01.dmp
granted_role='EXP_FULL_DATABASE'; log=/export/CURSO01/total_admin01.log
full=y
GRANTEE GRANTED_ROLE ADM " Lanzar la exportación (se conectara como usuario
DEF "administrador").
------------------------------ ------------------------------ ---
---
DBA EXP_FULL_DATABASE NO /export/CURSO01 (CURSO01)> exp parfile=par_admin01
YES
SYS EXP_FULL_DATABASE YES Export: Release 9.2.0.1.0 - Production on Jue Dic 9 12:37:16 2004
YES
Copyright (c) 1982, 2002, Oracle Corporation. All rights
reserved.
3. ¿Podría un usuario que tuviera asignado el rol “dba” realizar una exportación total de la base de datos?, ¿por qué?.
Usuario: administrador
4. Asignar el rol ”exp_full_database” al rol “admin”. Contraseña:
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 153 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 154
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
buffer=102400
7. Editar el fichero “total_admin01.log” y verificar el orden de copia de los objetos de la base de datos, ¿cuál es?. file=/export/CURSO01/scott_scott03.dmp
log=/export/CURSO01/scott_scott03.log
8. Comprobar si se ha exportado al fichero “total_admin01.dmp” el usuario “SYS”. ¿Y el “SYSTEM”?. owner=(SCOTT)
compress=y
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 155 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 156
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
/export/CURSO01 (CURSO01)> exp parfile=par_scott04 Exportando las tablas especificadas a través de la Ruta de Acceso
Convencional ...
Export: Release 9.2.0.1.0 - Production on Jue Dic 9 13:04:18 2004 . exportando la tabla EMP 9
filas exportadas
Copyright (c) 1982, 2002, Oracle Corporation. All rights . exportando la tabla DEPT 5
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 157 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 158
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 159 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 160
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
With the Partitioning and Oracle Label Security options usuario SCOTT
JServer Release 9.2.0.1.0 - Production . exportando sinónimos de tipo público
. exportando sinónimos de tipo privado
SQL> show parameters db_block_size . exportando definiciones de tipos de objetos para el usuario
SCOTT
NAME TYPE VALUE Exportando los objetos de SCOTT ...
--------------------------------------------------------- . exportando enlaces a la base de datos
db_block_size integer 2048 . exportando números de secuencia
. exportando definiciones de agrupamiento
. exportando las tablas de SCOTT a través de la Ruta de Acceso
16. Realizar de nuevo los ejercicios 5 y 10 usando el modo directo de exportación. Defina el valor del parámetro Directa ...
RECORDLENGTH. . exportando la tabla BONUS 0
El nombre de los ficheros usados será: filas exportadas
. exportando la tabla DEPT 5
filas exportadas
F.parámetros F.exportación F.registro . exportando la tabla EMP 9
filas exportadas
Ejercicio 6 Pard_admin01 Totald_admin01.dmp Totald_admin01.log . exportando la tabla SALGRADE 5
Ejercicio 10 Pard_admin02 Sistemad_admin02.dmp Sistemad_admin02.log
filas exportadas
. exportando sinónimos
. exportando vistas
. exportando procedimientos almacenados
En el caso, por ejemplo, del ejercicio 10, el fichero de
. exportando operadores
parámetros quedaría de esta forma:
. exportando restricciones de integridad referencial
. exportando disparadores
file=/export/CURSO01/scottd_scott03.dmp
. exportando tipos de índice
log=/export/CURSO01/scottd_scott03.log
. exportando índices bitmap, funcionales y extensibles
owner=(SCOTT)
. exportando acciones de posttables
compress=y
. exportando vistas materializadas
direct=y
. exportando logs de instantáneas
RECORDLENGTH=65535
. exportando colas de trabajo
. exportando grupos de refrescamiento y secundarios
/export/CURSO01 (CURSO01)> exp parfile=pard_scott03
. exportando dimensiones
. exportando acciones y objetos de procedimiento post-esquema
Export: Release 9.2.0.1.0 - Production on Jue Dic 9 13:39:31 2004
. exportando estadísticas
La exportación ha terminado correctamente y sin advertencias.
Copyright (c) 1982, 2002, Oracle Corporation. All rights
reserved.
17. Conectarse como usuario “scott” y eliminar la tabla”emp”.
Usuario: scott
Contraseña:
SQL> drop table emp;
Conectado a: Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Production Tabla borrada.
With the Partitioning and Oracle Label Security options
JServer Release 9.2.0.1.0 - Production
Exportación realizada en el juego de caracteres WE8ISO8859P15 y el 18. Como usuario “administrador”, importar la tabla “scott.emp” desde el fichero “scott_scott03.dmp”. Crear un fichero de
juego de caracteres NCHAR AL16UTF16 parámetros llamado “par_imp_admin01” (parámetros file, fromuser y tables), el registro se guardara en el fichero
. exportando acciones y objetos de procedimiento pre-esquema “imp_tabla_emp”. ¿Termina con éxito la importación?.
. exportando nombres de biblioteca de funciones ajenas para el
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 161 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 162
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
buffer=102400
file=/export/CURSO01/scott_scott03.dmp 20. Asignar el rol “imp_full_database” al usuario “administrador”.
log=/export/CURSO01/imp_tabla_emp.log
tables=(EMP)
fromuser=scott SQL> grant imp_full_database to administrador;
touser=scott
Concesión terminada correctamente.
Copyright (c) 1982, 2002, Oracle Corporation. All rights /export/CURSO01 (CURSO01)> imp parfile=par_imp_admin01
reserved.
Import: Release 9.2.0.1.0 - Production on Jue Dic 9 13:52:04 2004
Usuario: administrador
Contraseña: Copyright (c) 1982, 2002, Oracle Corporation. All rights
reserved.
Conectado a: Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Production Usuario: administrador
With the Partitioning and Oracle Label Security options Contraseña:
JServer Release 9.2.0.1.0 - Production
Conectado a: Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Archivo de exportación creado por EXPORT:V09.02.00 a través de la Production
ruta de acceso convencional With the Partitioning and Oracle Label Security options
JServer Release 9.2.0.1.0 - Production
Advertencia: Los objetos fueron exportados por SCOTT, no por usted
Archivo de exportación creado por EXPORT:V09.02.00 a través de la
importación realizada en el juego de caracteres WE8ISO8859P15 y el ruta de acceso convencional
juego de caracteres NCHAR AL16UTF16
IMP-00007: tiene que ser DBA para importar objetos en la cuenta de Advertencia: Los objetos fueron exportados por SCOTT, no por usted
otro usuario
IMP-00000: La importación no ha terminado correctamente importación realizada en el juego de caracteres WE8ISO8859P15 y el
juego de caracteres NCHAR AL16UTF16
. importando objetos de SCOTT en SCOTT
19. Comprobar que usuarios y roles tienen asignado el rol “imp_full_database”. . importando la tabla "EMP" 9
filas importadas
Activando las restricciones...
SQL> select * from dba_role_privs where La importación ha terminado correctamente pero con advertencias.
granted_role='IMP_FULL_DATABASE';
GRANTEE GRANTED_ROLE ADM 22. Comprobar si los usuarios “prueba01” y “prueba02” tienen cuota en el “tablespace” USERS. En caso de que no la
DEF tengan, asignar una cuota de 1M a cada uno de ellos.
------------------------------ ------------------------------ ---
---
DBA IMP_FULL_DATABASE NO SQL> select tablespace_name, max_bytes from dba_ts_quotas where
YES tablespace_name='USERS' and username in ('PRUEBA01','PRUEBA02');
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 163 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 164
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
Usuario modificado. Advertencia: Los objetos fueron exportados por SCOTT, no por usted
SQL> alter user prueba02 quota 1M on users; importación realizada en el juego de caracteres WE8ISO8859P15 y el
juego de caracteres NCHAR AL16UTF16
Usuario modificado. . importando objetos de SCOTT en PRUEBA01
. importando la tabla "EMP" 9
SQL> select tablespace_name, max_bytes from dba_ts_quotas where filas importadas
tablespace_name='USERS' and username in ('PRUEBA01','PRUEBA02') . importando la tabla "DEPT" 5
filas importadas
TABLESPACE_NAME MAX_BYTES Activando las restricciones...
------------------------------ ---------- La importación ha terminado correctamente pero con advertencias.
USERS 1048576
USERS 1048576
24. Idem en el esquema “prueba02” para todo el esquema “scott” (fichero “scott_scott03.dmp”). Crear un fichero de
parámetros llamado “par_imp_admin03” (parámetros file, log, grants –N-, full y touser); el registro se guardara en el
23. Como usuario “administrador”, realizar una importación en el esquema de usuario “prueba01” de las tablas “emp” y fichero “imp_esquema_scott_prueba02”.
“dept” pertenecientes al esquema de usuario “scott” (fichero “tablas_scott05.dmp”). Crear un fichero de parámetros
llamado “par_imp_admin02” (parámetros file, log, grants –N-, fromuser, touser y tables); el registro se guardara en el
fichero “imp_tablas_prueba01”. El contenido del fichero de parámetros de importación es:
buffer=102400
El contenido del fichero de parámetros de importación es: file=/export/CURSO01/scott_scott03.dmp
log=/export/CURSO01/imp_esquema_scott_prueba02
buffer=102400 full=y
file=/export/CURSO01/tablas_scott05.dmp grants=N
log=/export/CURSO01/imp_tablas_prueba01 touser=prueba02
tables=(EMP, DEPT)
fromuser=scott
touser=prueba01 /export/CURSO01 (CURSO01)> imp parfile=par_imp_admin03
grants=N
Import: Release 9.2.0.1.0 - Production on Jue Dic 9 13:58:54 2004
/export/CURSO01 (CURSO01)> imp parfile=par_imp_admin02 Copyright (c) 1982, 2002, Oracle Corporation. All rights
reserved.
Import: Release 9.2.0.1.0 - Production on Jue Dic 9 13:55:36 2004
Usuario: administrador
Copyright (c) 1982, 2002, Oracle Corporation. All rights Contraseña:
reserved.
Conectado a: Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Usuario: administrador Production
Contraseña: With the Partitioning and Oracle Label Security options
JServer Release 9.2.0.1.0 - Production
Conectado a: Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Production Archivo de exportación creado por EXPORT:V09.02.00 a través de la
With the Partitioning and Oracle Label Security options ruta de acceso convencional
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 165 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 166
Administración Básica de Oracle9i – Prácticas resueltas Administración Básica de Oracle9i – Prácticas resueltas
/export/CURSO01 (CURSO01)> imp parfile=par_impfichero_admin04 "CREATE UNIQUE INDEX "PK_DEPT" ON "DEPT" ("DEPTNO" ) PCTFREE 10
INITRANS 2 "
Import: Release 9.2.0.1.0 - Production on Jue Dic 9 14:00:44 2004 "MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 65536 MINEXTENTS 1
MAXEXTENTS 21474"
Copyright (c) 1982, 2002, Oracle Corporation. All rights "83645 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL
reserved. DEFAULT) TAB"
"LESPACE "SYSTEM" LOGGING"
Usuario: administrador "ALTER TABLE "DEPT" ADD CONSTRAINT "PK_DEPT" PRIMARY KEY
Contraseña: ("DEPTNO") USING I"
"NDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536
Conectado a: Oracle9i Enterprise Edition Release 9.2.0.1.0 - NEXT 65536 MI"
Production "NEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 50 FREELISTS 1
With the Partitioning and Oracle Label Security options FREELIST GROUPS"
JServer Release 9.2.0.1.0 - Production " 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" LOGGING ENABLE "
...
Archivo de exportación creado por EXPORT:V09.02.00 a través de la El resultado de la importacion, las sentencias de creación, se
ruta de acceso convencional almacenará en el fichero de log.
© Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 167 © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 168