lunes, 23 de febrero de 2015

Creación de Esquemas en Base de datos Oracle

Cómo crear un nuevo esquema en Oracle paso a paso

Vamos a ver en tres simples pasos cómo crear un esquema de Oracle. Para poder crear un nuevo esquema de Oracle siguiendo estos pasos es necesario iniciar la sesión en la base de datos con un usuario con permisos de administración. Lo más sencillo es utilizar directamente el usuario SYSTEM:

Creación de un tablespace para datos y otro para índices. Estos tablespaces son la ubicación donde se almacenarán los objetos del esquema de Oracle que vamos a crear.
Tablespace para datos, con tamaño inicial de 1024 Mb, y auto extensible.

CREATE TABLESPACE "APPDAT" LOGGING 
DATAFILE '/export/home/oracle/oradata/datafiles/APPDAT.dbf' SIZE 1024M 
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

Tablespace para índices, con tamaño inicial de 512 Mb, y auto extensible.

CREATE TABLESPACE "APPIDX" LOGGING 
DATAFILE '/export/home/oracle/oradata/datafiles/APPIDX.dbf' SIZE 512M 
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

La creación de estos tablespaces no es obligatoria, pero sí recomendable, así cada usuario de la BD tendrá su propio espacio de datos.
Creación del usuario que va a trabajar sobre estos tablespaces, y que será el propietario de los objetos que se se creen en ellos.

CREATE USER "APP" PROFILE "DEFAULT" IDENTIFIED BY "APPPWD"
DEFAULT TABLESPACE "APPDAT" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;

Si no se especifica un tablespace, la BD le asignará el tablespace USERS, que es el tablespace que se utiliza por defecto para los nuevos usuarios.
Se puede apreciar también que no hay ninguna referencia al tablespace de índices APPIDX que hemos creado. Si queremos mantener datos e índices separados habrá que acordarse de especificar este tablespace en las sentencias de creación de índices de este usuario, si no se hace éstos se crearán en APPDAT:

CREATE INDEX mi_indice ON mi_tabla(mi_campo) 
TABLESPACE APPIDX;

Sólo falta asignarle los permisos necesarios para trabajar. Si se le asignan los roles 'Connect' y 'Resource' ya tiene los permisos mínimos, podrá conectarse a la base de datos y realizar las operaciones más habituales de consulta, modificación y creación de objetos en su propio esquema.

GRANT "CONNECT" TO "APP";
GRANT "RESOURCE" TO "APP";

Completamos la asignación de permisos con privilegios específicos sobre objetos del esquema Oracle para asegurarnos de que el usuario pueda realizar todas las operaciones que creamos necesarias.

GRANT ALTER ANY INDEX TO "APP";
GRANT ALTER ANY SEQUENCE TO "APP";
GRANT ALTER ANY TABLE TO "APP";
GRANT ALTER ANY TRIGGER TO "APP";
GRANT CREATE ANY INDEX TO "APP";
GRANT CREATE ANY SEQUENCE TO "APP";
GRANT CREATE ANY SYNONYM TO "APP";
GRANT CREATE ANY TABLE TO "APP";
GRANT CREATE ANY TRIGGER TO "APP";
GRANT CREATE ANY VIEW TO "APP";
GRANT CREATE PROCEDURE TO "APP";
GRANT CREATE PUBLIC SYNONYM TO "APP";
GRANT CREATE TRIGGER TO "APP";
GRANT CREATE VIEW TO "APP";
GRANT DELETE ANY TABLE TO "APP";
GRANT DROP ANY INDEX TO "APP";
GRANT DROP ANY SEQUENCE TO "APP";
GRANT DROP ANY TABLE TO "APP";
GRANT DROP ANY TRIGGER TO "APP";
GRANT DROP ANY VIEW TO "APP";
GRANT INSERT ANY TABLE TO "APP";
GRANT QUERY REWRITE TO "APP";
GRANT SELECT ANY TABLE TO "APP";
GRANT UNLIMITED TABLESPACE TO "APP";
Ahora el usuario ya puede conectarse a la base de datos y comenzar a trabajar sobre su nuevo esquema Oracle.

Administración de Usuarios en Oracle Database

Create User
Esta sentencia sirve para crear un usuario en base de datos oracle.

Un usuario es un nombre de acceso a la base de datos oracle. Normalmente va asociado a una clave (password).

Lo que puede hacer un usuario una vez ha accedido a la base de datos depende de los permisos que tenga asignados ya sea directamente (GRANT) como sobre algun rol que tenga asignado (CREATE ROLE).

El perfil que tenga asignado influye en los recursos del sistema de los que dispone un usuario a la hora de ejecutar oracle (CREATE PROFILE).

La sintaxis es:


CREATE USER username
      IDENTIFIED {BY password | EXTERNALLY | GLOBALLY AS 'external_name'}
         options;

Donde options:
 
   DEFAULT TABLESPACE tablespace
   TEMPORARY TABLESPACE tablespace
   QUOTA int {K | M} ON tablespace
   QUOTA UNLIMITED ON tablespace
   PROFILE profile_name
   PASSWORD EXPIRE
   ACCOUNT {LOCK|UNLOCK}

Crea un usuario sin derecho a guardar datos o crear objetos:


CREATE USER usuariolimitado IDENTIFIED BY miclavesecreta;

Crea un usuario con todos los derechos para guardar datos o crear objetos:


DROP USER miusuario CASCADE;

CREATE USER miusuario IDENTIFIED BY miclavesecreta
       DEFAULT TABLESPACE data  
       TEMPORARY TABLESPACE temp
       QUOTA UNLIMITED ON data;

CREATE ROLE programador;

GRANT CREATE session, CREATE table, CREATE view, 
      CREATE procedure,CREATE synonym,
      ALTER table, ALTER view, ALTER procedure,ALTER synonym,
      DROP table, DROP view, DROP procedure,DROP synonym,
      TO conn;

GRANT programador TO miusuario;

Es necesario crear el usuario antes de asignar permisos con GRANT o un ROLE por defecto.

Acceso remoto mediante DBLINK de Oracle Database

Para acceder desde una base de datos Oracle a objetos de otra base de datos Oracle la manera más sencilla es utilizar un DBLink (que sea la más sencilla no significa que siempre sea la más aconsejable, el abuso de los dblinks puede generar muchos problemas, tanto de rendimiento como de seguridad)
Para ello es necesario, con un usuario que posea el privilegio CREATE DATABASE LINK, crear el DBLINK en la base de datos origen (A) mediante una sencilla sentencia como la siguiente:

SQL> Create database link LNK_DE_A_a_B 
     connect to USUARIO identified by CONTRASEÑA USING 'B'; 

'LNK_DE_A_a_B' es el nombre del link, 'USUARIO' y 'CONTRASEÑA' son los identificadores del usuario que utilizará el database link para conectarse, los permisos del cual heredarán todos los accesos a través del db link, y B es el nombre de la instancia de la base de datos.
A través del dblink se puede conectar con los objetos de la base de datos remota con los permisos que tenga el usuario que se ha proporcionado en la sentencia de creación.

Para referenciar un objeto de la base de datos remota se ha de indicar el nombre del objeto, concatenado con el carácter '@' y el nombre que se le ha dado al DBLINK.

Ejemplo:
SQL> select * from TABLA@LNK_DE_A_a_B

Export / Import en Oracle Database

Cómo exportar e importar bases de datos Oracle  (exp/imp)

A continuación se explica el método de exportación e importación utilizando sqlplus.

Primero se debe chequear que la variable ORACLE_HOME esté seteada y sería bueno incluir los BINARIOS de Oracle en el PATH. Por ejemplo:


export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export PATH=$PATH:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin


Luego, al ejecutar el sqlplus la conexión deberá ser de la forma:


$ sqlplus USUARIO/PASSWORD@IP_BD/SERVICE_NAME


Para generar el respaldo (export):


SQL> host exp USUARIO/PASSWORD owner=DUEÑO_BD file=NOMBRE_ARCHIVO.dmp


Para restaurar el respaldo (import):


SQL> host imp USUARIO/PASSWORD fromuser=DUEÑO_BD file=NOMBRE_ARCHIVO.dmp touser=USUARIO;


En caso de que deba borrarse el usuario de la base de datos antes de restaurar el respaldo (si hay tablas preexistentes). Esto debe hacerse conectado como otro usuario:


SQL> drop user USUARIO cascade;
SQL> create user USUARIO identified by "PASSWORD" default tablespace TABLESPACE quota unlimited on TABLESPACE;
SQL> grant connect,resource to USUARIO;

Uso de la utilidad DATAPUMP en Oracle Database


Data Pump Export es la utilidad de Oracle que se encarga de copiar los datos a un fichero de volcado con una extensión .dmp en la base de datos ORACLE.
El objetivo de este documento es ver cómo utilizar la utilidad expdp tanto para la exportación de la base de datos completa, como para exportar esquemas, tablas y tablespaces comparándolo con la antigua utilidad de Oracle exp.


 DATAPUMP EXPORT


Para trabajar con expdp se necesitan los permisos adecuados en el usuario con el que vayamos a realizar la exportación. Cualquier usuario puede exportar objetos de su propiedad o su esquema al completo pero los usuarios no privilegiados deben tener permiso WRITE en el objeto directorio.
Para poder hacer uso de esta utilidad se debe especificar el directorio que va a ser utilizado por ORACLE11g Export/Import. Dependiendo de la exportación, se deberá actualizar cada uno de los diferentes permisos.

Ejemplo de creación de directorios


Existen diversas formas de crear un directorio aquí se muestra una de ellas:


SQL> CONNECT system/******; 

Se crea el mapeo del directorio export a '/backup/exports/datapump'

 

SQL> CREATE OR REPLACE DIRECTORY export AS '/backup/exports/datapump'; 

Se crea el mapeo del directorio log a '/backup/exports/datapump/log'


SQL> CREATE OR REPLACE DIRECTORY log AS '/backup/exports/datapump/log'; 

Nota: Estos directorios ya deben estar creados en disco, ya que la sentencia CREATE DIRECTORY define un directorio como objeto en la base de datos, pero no lo crea físicamente. Hay que comprobar que el directorio sea válido y que existan los permisos necesarios para acceder a él en los directorios físicos definidos como directorio de bd. 
Nota2: Para crear un directorio es necesario tener el rol DBA o el privilegio CREATE ANY DIRECTORY.

Se otorgan permisos de escritura y lectura sobre los directorios al usuario system, porque en este caso es el encargado de realizar la exportación.


SQL> GRANT read, write ON DIRECTORY export TO SYSTEM;   SQL> GRANT read, write ON DIRECTORY log TO system; 

Para consultar todos los directorios definidos en la bd y su equivalencia con sistemas de ficheros de s.o.:

 

    SQL> SELECT * FROM DBA_DIRECTORIES; 

Nota:
A la hora de realizar el export se debe indicar el directorio de destino o, en su defecto, ser un usuario privilegiado. En el caso de los usuarios privilegiados, el fichero de volcado .dmp se genera en el directorio indicado por DATA_PUMP_DIR (En los ejemplos anteriores sería el usuario system, verificando que este usuario tenga los permisos adecuados para exportar, explicados posteriormente).


Directory: Este parámetro especifica la localización en la cual Export DataPump or Import DataPump pueden escribir el “dump file “, “log file”, “SQL file”.


2.1 Exportación completa (Full Export Mode)

Una exportación completa se especifica con el parámetro FULL. Para ello el usuario que exporta debe tener el rol DATAPUMP_EXP_FULL_DATABASE (El usuario system tiene este rol).


Se verifica que el usuario que va a realizar la exportación tiene los roles necesarios:


SELECT * FROM SYS.DBA_ROLES 

Con esta vista se ven todos los roles del usuario system.


SELECT * FROM DBA_ROLE_PRIVS WHERE granted_role='DATAPUMP_EXP_FULL_DATABASE'; 


En Oracle 9 lo hacíamos de la siguiente forma (exp):


Ejemplo

    $ exp system/***** file=/backup/exports/todaBD.dmp full=Y log=/backup/exports/logs/exptodaBD.log buffer=100000 

exp:  comando con el que se realiza la exportación.
system/*****: usuario y contraseña con el que realizo la  exportación.
file=/backup/exports/todaBD.dmp: ubicación en la que se genera el archivo de volcado con toda la información que voy a exportar.
full=Y: parámetro que indica la exportación de la base de datos completa. (Todos los esquemas de la base de datos,  sus datos,  permisos...)
log=/backup/exports/logs/exptodaBD.log: fichero que contiene el log de la exportación.
buffer=100000: reservamos buffer para la operación.

Nota: El usuario siempre tiene que tener permisos sobre los directorios especificados.


A partir de oracle10 (expdp):


Ejemplo

$ expdp system/***** full=Y DUMPFILE=export:DB10G.dmp LOGFILE=log:expdpDB10G.log; 

expdp: comando con el que se realiza la exportación Data Pump
system/*****: usuario y contraseña con el que realizo la  exportación Data Pump  .
full=Y: parámetro que indica la exportación de la base de datos completa.
DUMPFILE=export:DB10G.dmp:  Se pone el nombre del fichero mediante DUMPFILE indicándole el directorio que se había creado y dado permisos para el efecto.
LOGFILE=log:expdpDB10G.log: Indica el nombre del fichero log mediante LOGFILE indicándole el directorio creado para ubicar estos archivos(log)

Nota: Export y log son asignados en el pto. 2


Exportación de un esquema (Schema Mode)

La exportación de un esquema se especifica usando el parámetro SCHEMAS. El parámetro OWNER de exp (Oracle 9) ha sido reemplazado por dicho parámetro, el cual es usado para especificar el esquema que es exportado. Se debe tener el rol DATAPUMP_EXP_FULL_DATABASE para especificar esquemas que no son el propio.


Para excluir un usuario y todos sus objetos puede emplearse el filtro: EXCLUDE=SCHEMA:”=’<esquema>’”. También puede emplearse este filtro para excluir únicamente alguno de los objetos de dicho usuario: EXCLUDE=TABLE:”IN(‘<tabla>’)”.
Nota: Este parámetro podría ser interesante en exportaciones de toda la bd.

En Oracle 9 lo hacíamos de la siguiente forma (exp):

Copio el esquema de un usuario completo

Ejemplo:

$ exp system/reco1 file=/backup/exports/Esqreco2.dmp log=/backup/exports/logs/expEsqreco2.log owner=reco2 buffer=1000000 

exp:  comando con el que se realiza la exportación.
system/reco1: usuario y contraseña con el que realizo la  exportación.
file=/backup/exports/ Esqreco2.dmp: ubicación en la que se genera el archivo de volcado que contendrá la información que voy a exportar.
log=/backup/exports/logs/ expEsqreco2.log: fichero que contiene el log de la exportación.
Owner=reco2: usuario del que se realiza la copia.
buffer=100000: reservamos buffer para la operación.

Nota: El usuario siempre tiene que tener permisos sobre los directorios especificados.

Nota2: ORACLE11g no exporta las tablas con rows=0, ya que no tienen una entrada en la vista DBA_SEGMENTS. Debido a un nuevo feature llamado “deferred segment creation”.

Otra forma de copiar el esquema de un usuario completo: 


$ exp reco2/***** file=/backup/exports/Esqreco2.dmp log=/backup/exports/logs/expEsqreco2.log buffer=1000000 

exp:  comando con el que se realiza la exportación.
Reco2/*****: usuario y contraseña con el que realizo la  exportación.
file=/backup/exports/ Esqreco2.dmp: ubicación en la que se genera el archivo de volcado que contendrá la información que voy a exportar.
log=/backup/exports/logs/ expEsqreco2.log: fichero que contiene el log de la exportación.
buffer=100000: reservamos buffer para la operación.

Nota: El usuario siempre tiene que tener permisos sobre los directorios especificados.

Nota2:ORACLE11g no exporta las tablas con rows=0, ya que no tienen una entrada en la vista DBA_SEGMENTS. Debido a un nuevo feature llamado “deferred segment creation”.


A partir de Oracle10 (expdp):

Copio el esquema de un usuario completo


Ejemplo:

$ expdp system/***** schemas=reco2 DUMPFILE=export:RECO2.dmp LOGFILE=log:expdpRECO2.log; 

expdp comando con el que se realiza la exportación DataPump
system/*****: usuario y contraseña con el que realizo la  exportación.
schemas=reco2: parámetro que indica el esquema a exportar.
DUMPFILE=export:RECO2.dmp:  Se pone el nombre del fichero mediante DUMPFILE indicándole el directorio que se había creado y dado permisos para el efecto.
LOGFILE=log:impdpRECO2.log: Indica el nombre del fichero log mediante LOGFILE indicándole el directorio creado para ubicar estos archivos(log)

Nota: Export y log son asignados en el pto. 2
Reco2 es un usuario que ya tengo creado y tiene permiso sobre los directorios.
El usuario que realiza la exportación debe tener permisos de lectura y escritura sobre el directorio.

Ejemplo de cómo dar permisos sobre un directorio a un usuario

SQL> GRANT READ, WRITE ON DIRECTORY log TO reco2;   SQL> GRANT READ, WRITE ON DIRECTORY export TO reco2; 
Otra forma de copiar el esquema de un usuario completo:

Ejemplo


$ expdp reco2/***** DUMPFILE=export:RECO2.dmp LOGFILE=log:expdpRECO2.log; 

expdp comando con el que se realiza la exportación DataPump
reco2/*****: usuario y contraseña con el que realizo la  exportación.
DUMPFILE=export:RECO2.dmp:  Se pone el nombre del fichero mediante DUMPFILE indicándole el directorio que se había creado y dado permisos para el efecto.
LOGFILE=log:impdpRECO2.log: Indica el nombre del fichero log mediante LOGFILE indicándole el directorio creado para ubicar estos archivos(log)

Nota: Export y log son asignados en el pto. 2
Reco2 es un usuario que ya tengo creado y tiene permiso sobre los directorios.
El usuario que realiza la exportación debe tener permisos de lectura y escritura sobre el directorio.



Exportación de una tabla (Table Mode)


El parámetro TABLES se usa para especificar  las tablas que son exportadas. Se debe tener el rol DATAPUMP_EXP_FULL_DATABASE para especificar tablas que no son pertenecientes a tu propio esquema. Esta exportación se puede realizar a partir de una exportación de la base de datos completa, de un esquema, de un tablespace o de una tabla.

En Oracle 9 lo hacíamos de la siguiente forma (exp):


Copio tablas específicas de un usuario


Ejemplo

$  exp system/***** file=/backup/exports/Esqreco2.dmp log=/backup/exports/logs/expEsqreco2.log tables=reco2.T2UNIAS rows=y buffer=1000000 

Exp: comando con el que se realiza la exportación.
system/*****: usuario y contraseña con el que realizo la  exportación.
file=/backup/exports/ Esqreco2.dmp: ubicación en la que se genera el archivo de volcado que contendrá la información que voy a exportar.
log=/backup/exports/logs/expEsqreco2.log: fichero que contiene el log de la exportación.
Tables=reco2.T2UNIAS: relación de tablas a exportar (modo tabla).
Rows=y: parámetro para exportar o no los datos de las tablas (es opcional).
buffer=100000: reservamos buffer para la operación.

Nota: El usuario siempre tiene que tener permisos sobre los directorios especificados.


Copio tablas de un usuario con una condición específica

Ejemplo:


$ exp reco2/***** file=/backup/exports/Esqreco2.dmp tables=T2UNIAS log=/backup/exports/logs/expEsqreco2.log query=\"WHERE an_fab='2001'\" statistics=none  

Exp: comando con el que se realiza la exportación.
Reco2/*****: usuario y contraseña con el que realizo la  exportación.
file=/backup/exports/ Esqreco2.dmp: ubicación en la que se genera el archivo de volcado que contendrá la información que voy a exportar.
Tables=T2UNIAS: relación de tablas a exportar (modo tabla).
log=/backup/exports/logs/expEsqreco2.log: fichero que contiene el log de la exportación.
Query=\”WHERE an_fab=’2001’\”: parámetro que permite seleccionar las filas a exporter según condiciones a cumplir.
Statistics=none: parámetro para evitar que aparezcan todas las estadísticas.


Nota: El usuario siempre tiene que tener permisos sobre los directorios especificados.

A partir de oracle10 ( expdp )


Copio tablas específicas de un usuario


Ejemplo:

$ expdp system/***** tables=reco2.T2UNIAS DUMPFILE=export:T2UNIAS.dmp LOGFILE=log:expdpT2UNIAS.log 

expdp comando con el que se realiza la exportación DataPump
system/reco1: usuario y contraseña con el que realizo la  exportación.
tables=T2UNIAS: parámetro que indica la(s)  tabla(s) a exportar.
DUMPFILE=export: T2UNIAS.dmp: Se pone el nombre del fichero mediante DUMPFILE indicándole el directorio que se había creado y dado permisos para el efecto.
LOGFILE=log: expdpT2UNIAS.log: Indica el nombre del fichero log mediante LOGFILE indicándole el directorio creado para ubicar estos archivos(log)

Nota: Export y log son asignados en el pto. 2


Copio tablas de un usuario con una condición específica


Ejemplo:

$ expdp reco2/***** DUMPFILE=export:RECO2.dmp tables=reco2.t2COCHE LOGFILE=log:expt2coche.log query=reco2.t2COCHE:\”WHERE an_fab=’2011’\”; 

expdp comando con el que se realiza la exportación DataPump
reco2/*****: usuario y contraseña con el que realizo la  exportación.
DUMPFILE=export:RECO2.dmp:  Se pone el nombre del fichero mediante DUMPFILE indicándole el directorio que se había creado y dado permisos para el efecto.
tables=reco2.t2COCHE: parámetro que indica la(s)  tabla(s) a exportar.
LOGFILE=log: expdPt2coche.log: Indica el nombre del fichero log mediante LOGFILE indicándole el directorio creado para ubicar estos archivos (log).
Query=reco2.t2COCHE:\”WHERE an_fab=’2011’\”: parámetro que permite seleccionar las filas a exportar según condiciones a cumplir.

Nota: Export y log son asignados en el pto. 2


Exportación de un tablespace (Tablespace Mode)


La exportación de un tablespace se realiza usando el parámetro TABLESPACE. Esta exportación se puede realizar a partir de una exportación de la base de datos completa, de un esquema, de un tablespace o de una tabla.

A partir de oracle10 (expdp)


Ejemplo
Se realiza la exportación de un tablespaces llamado prueba:


$ expdp system/***** DUMPFILE=export:expTOTALtablespace.dmp LOGFILE=log:expdPTOTALtablespace1.log TABLESPACES=prueba 

expdp comando con el que se realiza la exportación DataPump
system/*****: usuario y contraseña con el que realizo la  exportación.
DUMPFILE=export:expTOTALtablespace.dmp:  Se pone el nombre del fichero mediante DUMPFILE indicándole el directorio que se había creado y dado permisos para el efecto.
LOGFILE=log: expdPTOTALtablespace1.log: Indica el nombre del fichero log mediante LOGFILE indicándole el directorio creado para ubicar estos archivos(log)
TABLESPACES=prueba: parámetro que indica el tablespace(s) a exportar.

Creación de Tablespaces en Bases de datos Oracle

La sentencia CREATE TABLESPACE sirve para crear un tablespace en una base de datos Oracle, (un tablespace es una asignación lógica de espacio en la base de datos Oracle que puede contener objetos de esquema. Podemos distinguir tres tipos de tablespaces:
1- Los Tablespaces permanentes contienen objetos, tablas, índices, etc. de un o más esquemas. Los objetos en los tablespaces permanentes se almacenan en archivos de datos, datafiles.
2- Los tablespaces de UNDO es un tipo de tablespace permanente utilizado por la de base de datos ORACLE para gestionar datos de UNDO si está ejecutando la base de datos en modo automático de gestión de UNDO. Oracle recomienda que uso automático de gestión de UNDO en lugar de usar segmentos de rollback para UNDO, Como crear un tablespace de UNDO en Oracle 10g.
3- El tablespace temporal contiene objetos de esquema sólo durante la sesión. Los objetos en tablespaces temporales se almacenan en datafiles temporales.

- La sentencia CREATE TABLESPACE tiene una sintaxis con numerosas opciones, es este articulo vamos a ver la forma de crear un tablesapce más usual.
La sentencia CREATE TABLESPACE siguiente crea un tablespace en un filesystem.

1
CREATE TABLESPACE DATOS01 DATAFILE '/u03/oradata/PRUEBA01/PRUEBA01_DATOS01_01.dbf' SIZE 100M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

 - Tablespaces con AUTOEXTEND en ON.

Podemos crear tablespaces donde el/los datafiles se vayan extendiendo de forma automática, si lo creamos de esta manera tenemos que tener cuidado en no olvidar la cláusula MAXSIZE, ya que si la omitimos el datafile se extenderá hasta llenar el filesystem donde este creado. En este ejemplo creamos el tablespace con AUTOEXTEND ON , y que este vaya extendiéndose en tramos de 200K y con un máximo de 200M.

?
1
CREATE TABLESPACE DATOS01 DATAFILE '/u03/oradata/PRUEBA01/PRUEBA01_DATOS01_01.dbf' SIZE 100M AUTOEXTEND ON NEXT 200K MAXSIZE 200M;

La cláusula AUTOEXTEND no es aplicable cuando estemos utilizando RAWs para los datafiles.

Revisar Bloqueos en Base de Datos Oracle

1-Revisar la vista Oracle "v$lock" para bloquear la información. Utiliza la opción "Seleccionar" para ver "sid", "type", "lmode" y "request". Sid representa el número ID de sesión e identifica la sesión que posee el bloqueo.

select sid, type, lmode, request from v$lock;


2-Une la vista"v$session" a la tabla "v$lock" para determinar quién está bloqueando la base de datos. Une la sesión sid (sesión ID) para encontrar el nombre de usuario.

select s.username, s.sid, l.type, l.lmode, l.request from v$lock l, v$session s where l.sid = s.sid;


3-Consulta la vista"v$locked_object" para obtener más información sobre lo que la está bloqueando. Une la tabla "dba_objects" para el nombre y el tipo. El nombre del objeto indica que está bloqueado y las columnas del nombre de usuario identifica a quién ha creado el bloqueo.

 select oracle_username os_user_name, locked_mode, object_name, object_type from v$locked_object lo,dba_objects do where lo.object_id = do.object_id;