INTRODUCCION:
• Una función es un bloque nombrado PL/SQL que devuelve un valor.
• Una función puede estar almacenada en la B.D., como objeto de la B.D., para repetidas ejecuciones.
• Una función puede ser llamada como parte de una expresión.
OBJETIVOS
GENERAL: Conocer de manera general cuales son las funciones de oracle y cuales son sus ventajas.
ESPECIFICO: Poder implementar funciones en nuestras bases de datos para dar mayor agilidad en los procesos que sean solicitados.
Funciones de valores simples:
ABS(n)= Devuelve el valor absoluto de (n).
CEIL(n)=Obtiene el valor entero inmediatamente superior o igual a "n".
FLOOT(n) = Devuelve el valor entero inmediatamente inferior o igual a "n".
MOD (m, n)= Devuelve el resto resultante de dividir "m" entre "n".
NVL (valor, expresión)= Sustituye un valor nulo por otro valor.
POWER (m, exponente)= Calcula la potencia de un numero.
ROUND (numero [, m])= Redondea números con el numero de dígitos de precisión indicados.
SIGN (valor)= Indica el signo del "valor".
SQRT(n)= Devuelve la raíz cuadrada de "n".
TRUNC (numero, [m])= Trunca números para que tengan una cierta cantidad de dígitos de precisión.
VAIRANCE (valor)= Devuelve la varianza de un conjunto de valores.
Funciones de grupos de valores:
AVG(n)= Calcula el valor medio de "n" ignorando los valores nulos.
COUNT (* | Expresión)= Cuenta el numero de veces que la expresión evalúa algún dato con valor no nulo. La opción "*" cuenta todas las filas seleccionadas.
MAX (expresión)= Calcula el máximo.
MIN (expresión)= Calcula el mínimo.
SUM (expresión)= Obtiene la suma de los valores de la expresión.
GREATEST (valor1, valor2…)= Obtiene el mayor valor de la lista.
LEAST (valor1, valor2…)= Obtiene el menor valor de la lista.
Funciones que devuelven valores de caracteres:
CHR(n) = Devuelve el carácter cuyo valor en binario es equivalente a "n".
CONCAT (cad1, cad2)= Devuelve "cad1" concatenada con "cad2".
LOWER (cad)= Devuelve la cadena "cad" en minúsculas.
UPPER (cad)= Devuelve la cadena "cad" en mayúsculas.
INITCAP (cad)= Convierte la cadena "cad" a tipo titulo.
LPAD (cad1, n[,cad2])= Añade caracteres a la izquierda de la cadena hasta que tiene una cierta longitud.
RPAD (cad1, n[,cad2])= Añade caracteres a la derecha de la cadena hasta que tiene una cierta longitud.
LTRIM (cad [,set])= Suprime un conjunto de caracteres a la izquierda de la cadena.
RTRIM (cad [,set])= Suprime un conjunto de caracteres a la derecha de la cadena.
REPLACE (cad, cadena_busqueda [, cadena_sustitucion])= Sustituye un carácter o caracteres de una cadena con 0 o mas caracteres.
SUBSTR (cad, m [,n])= Obtiene parte de una cadena.
TRANSLATE (cad1, cad2, cad3)= Convierte caracteres de una cadena en caracteres diferentes, según un plan de sustitución marcado por el usuario.
Funciones que devuelven valores numéricos:
ASCII(cad)= Devuelve el valor ASCII de la primera letra de la cadena "cad".
INSTR (cad1, cad2 [, comienzo [,m]])= Permite una búsqueda de un conjunto de caracteres en una cadena pero no suprime ningún carácter después.
LENGTH (cad)= Devuelve el numero de caracteres de cad.
Funciones para el manejo de fechas:
SYSDATE= Devuelve la fecha del sistema.
ADD_MONTHS (fecha, n)= Devuelve la fecha "fecha" incrementada en "n" meses.
LASTDAY (fecha)= Devuelve la fecha del último día del mes que contiene "fecha".
MONTHS_BETWEEN (fecha1, fecha2)= Devuelve la diferencia en meses entre las fechas "fecha1" y "fecha2".
NEXT_DAY (fecha, cad)= Devuelve la fecha del primer día de la semana indicado por "cad" después de la fecha indicada por "fecha".
Funciones de conversión:
TO_CHAR= Transforma un tipo DATE ó NUMBER en una cadena de caracteres.
TO_DATE= Transforma un tipo NUMBER ó CHAR en DATE.
TO_NUMBER= Transforma una cadena de caracteres en NUMBER.
Bienvenidos a nuestro block en el cual podemos compartir y aprender algunos temas relacionados con el desarrollo de Bases de Datos, espero que no nos quedemos con los conocimientos básicos, si no que este espacio sea el inicio para seguir investigando y alimentando nuestros conocimientos.
domingo, 18 de julio de 2010
TRABAJANDO EN ORACLE
---CREACION DE TABLE SPACE
CREATE TABLESPACE Tblseptimo155
DATAFILE 'D:\data\Tblseptimo155.ora 'size 10M
AUTOEXTEND ON NEXT 1024K
PERMANENT
ONLINE;
---CONSULTA
SELECT * FROM DBA_DATA_FILES;
--MODIFICAR UN TABLE SPACE
ALTER TABLESPACE Tblseptimo155
ADD DATAFILE
'D:\data\Tblseptimo1552.ora 'size 10M
AUTOEXTEND ON NEXT 1024K;
SELECT * FROM DBA_TABLESPACES;
CREATE USER CCNA
IDENTIFIED BY CCNA DEFAULT TABLESPACE TBLSEPTIMO155
ACCOUNT UNLOCK;
GRANT CONNECT,RESOURCE TO CCNA;
CREATE USER CCNA
IDENTIFIED BY CCNA DEFAULT TABLESPACE TBLSEPTIMO155
ACCOUNT UNLOCK;
GRANT CONNECT,RESOURCE TO CCNA;
---CRACION DE SECUENCIAS AUTONUMERICAS
CREATE SEQUENCE SQ_NOTAS
START WITH 1
INCREMENT BY 1
--OPCIONAL LIMITACION
MAXVALUE 5000
--VERIFICO EL USUARIO
SHOW USER;
---CAMBIAR DE USUARIO
sql>connect nombre_usuario/contraceña@cadena_conexion
--CREACION DE TABLAS
CREATE TABLE ALUMNOS
(COD_ALUMNO NUMBER(5) NOT NULL,
NOM_ALUMNO VARCHAR2(10) NOT NULL,
DIR_ALUMNO VARCHAR2(10),
TEL_ALUMNO VARCHAR2(10),
DEP_ALUMNO VARCHAR2(10),
PRIMARY KEY(COD_ALUMNO))
TABLESPACE TBLSEPTIMO155;
CREATE TABLE MATERIAS
(COD_MATERIAS NUMBER(2) NOT NULL,
NOM_MATERIA VARCHAR2(10) NOT NULL,
PENSUM VARCHAR2(25) NOT NULL,
NUMCREDITOS NUMBER(15) NOT NULL,
CONSTRAINT PK_MATERIA PRIMARY KEY(COD_MATERIAS))
TABLESPACE TBLSEPTIMO155;
CREATE TABLE NOTAS
(NOTA1 NUMBER(2) NOT NULL,
NOTA2 NUMBER(2) NOT NULL,
NOTA3 NUMBER(2) NOT NULL,
COD_ALUMNO NUMBER(5) NOT NULL CONSTRAINT FK_ALUMNOS REFERENCES ALUMNOS,
COD_MATERIAS NUMBER(2) NOT NULL CONSTRAINT FK_MATERIAS REFERENCES MATERIAS,
COD_NOTAS NUMBER(2) NOT NULL,
PRIMARY KEY(COD_NOTAS))
TABLESPACE TBLSEPTIMO155;
--CREAR LA RELACIONES DE LAS TABLAS
ALTER TABLE NOTAS
ADD (CONSTRAINT FK_NOTAS_MATERIA FOREIGN KEY(COD_MATERIA)
REFERENCES MATERIAS(COD_MATERIAS));
---VER TABLAS
SELECT * FROM TAB;
---ASOCIAR LAS SECUENCIAS A LAS TABLAS
CREATE OR REPLACE TRIGGER CLAVE_PRIMARIA_ALUMNO
BEFORE INSERT ON ALUMNOS
FOR EACH ROW
DECLARE
VALOR NUMBER;
BEGIN
SELECT SQ_ALUMNOS.NEXTVAL INTO VALOR FROM DUAL;
:NEW.COD_ALUMNO := VALOR;
END;
/
---- VER ERRORES
SHOW ERRORS;
CREATE OR REPLACE TRIGGER CLAVE_PRIMARIA_MATERIAS
BEFORE INSERT ON MATERIAS
FOR EACH ROW
DECLARE
VALOR NUMBER;
BEGIN
SELECT SQ_MATERIAS.NEXTVAL INTO VALOR FROM DUAL;
:NEW.COD_MATERIAS := VALOR;
END;
CREATE OR REPLACE TRIGGER CLAVE_PRIMARIA_NOTAS
BEFORE INSERT ON NOTAS
FOR EACH ROW
DECLARE
VALOR NUMBER;
BEGIN
SELECT SQ_NOTAS.NEXTVAL INTO VALOR FROM DUAL;
:NEW.COD_NOTAS := VALOR;
END;
---------------
SELECT * FROM alumnos
INSERT INTO ALUMNOS VALUES(NULL,'MANUEL','AMBATO','0295645','LORENA');
INSERT INTO MATERIAS VALUES(NULL,'CLIENTE','DIURNO','3');
INSERT INTO NOTAS VALUES('10','10','10','1','1',NULL);
----VISTAS
CREATE VIEW NOTAS_MENSAJE
AS
SELECT NOM_ALUMNO,NOM_MATERIA,NOTA1,NOTA2,NOTA3,
NOTA1+NOTA2+NOTA3 AS TOTAL,(NOTA1+NOTA2+NOTA3)/3 AS PROMEDIO,
SELECT CASE promedio
When 6 Then 'reprobado'
When 10 Then 'aprobado' end
FROM ALUMNOS, MATERIAS ,NOTAS
WHERE ALUMNOS.COD_ALUMNO=NOTAS.COD_ALUMNO
AND MATERIAS.COD_MATERIAS = NOTAS.COD_MATERIAS;
SELECT CASE promedio
When 6 Then 'reprobado'
When 10 Then 'aprobado' end
FROM NOTAS_POR_MATERIA_ALUMNO;
CREATE TABLESPACE Tblseptimo155
DATAFILE 'D:\data\Tblseptimo155.ora 'size 10M
AUTOEXTEND ON NEXT 1024K
PERMANENT
ONLINE;
---CONSULTA
SELECT * FROM DBA_DATA_FILES;
--MODIFICAR UN TABLE SPACE
ALTER TABLESPACE Tblseptimo155
ADD DATAFILE
'D:\data\Tblseptimo1552.ora 'size 10M
AUTOEXTEND ON NEXT 1024K;
SELECT * FROM DBA_TABLESPACES;
CREATE USER CCNA
IDENTIFIED BY CCNA DEFAULT TABLESPACE TBLSEPTIMO155
ACCOUNT UNLOCK;
GRANT CONNECT,RESOURCE TO CCNA;
CREATE USER CCNA
IDENTIFIED BY CCNA DEFAULT TABLESPACE TBLSEPTIMO155
ACCOUNT UNLOCK;
GRANT CONNECT,RESOURCE TO CCNA;
---CRACION DE SECUENCIAS AUTONUMERICAS
CREATE SEQUENCE SQ_NOTAS
START WITH 1
INCREMENT BY 1
--OPCIONAL LIMITACION
MAXVALUE 5000
--VERIFICO EL USUARIO
SHOW USER;
---CAMBIAR DE USUARIO
sql>connect nombre_usuario/contraceña@cadena_conexion
--CREACION DE TABLAS
CREATE TABLE ALUMNOS
(COD_ALUMNO NUMBER(5) NOT NULL,
NOM_ALUMNO VARCHAR2(10) NOT NULL,
DIR_ALUMNO VARCHAR2(10),
TEL_ALUMNO VARCHAR2(10),
DEP_ALUMNO VARCHAR2(10),
PRIMARY KEY(COD_ALUMNO))
TABLESPACE TBLSEPTIMO155;
CREATE TABLE MATERIAS
(COD_MATERIAS NUMBER(2) NOT NULL,
NOM_MATERIA VARCHAR2(10) NOT NULL,
PENSUM VARCHAR2(25) NOT NULL,
NUMCREDITOS NUMBER(15) NOT NULL,
CONSTRAINT PK_MATERIA PRIMARY KEY(COD_MATERIAS))
TABLESPACE TBLSEPTIMO155;
CREATE TABLE NOTAS
(NOTA1 NUMBER(2) NOT NULL,
NOTA2 NUMBER(2) NOT NULL,
NOTA3 NUMBER(2) NOT NULL,
COD_ALUMNO NUMBER(5) NOT NULL CONSTRAINT FK_ALUMNOS REFERENCES ALUMNOS,
COD_MATERIAS NUMBER(2) NOT NULL CONSTRAINT FK_MATERIAS REFERENCES MATERIAS,
COD_NOTAS NUMBER(2) NOT NULL,
PRIMARY KEY(COD_NOTAS))
TABLESPACE TBLSEPTIMO155;
--CREAR LA RELACIONES DE LAS TABLAS
ALTER TABLE NOTAS
ADD (CONSTRAINT FK_NOTAS_MATERIA FOREIGN KEY(COD_MATERIA)
REFERENCES MATERIAS(COD_MATERIAS));
---VER TABLAS
SELECT * FROM TAB;
---ASOCIAR LAS SECUENCIAS A LAS TABLAS
CREATE OR REPLACE TRIGGER CLAVE_PRIMARIA_ALUMNO
BEFORE INSERT ON ALUMNOS
FOR EACH ROW
DECLARE
VALOR NUMBER;
BEGIN
SELECT SQ_ALUMNOS.NEXTVAL INTO VALOR FROM DUAL;
:NEW.COD_ALUMNO := VALOR;
END;
/
---- VER ERRORES
SHOW ERRORS;
CREATE OR REPLACE TRIGGER CLAVE_PRIMARIA_MATERIAS
BEFORE INSERT ON MATERIAS
FOR EACH ROW
DECLARE
VALOR NUMBER;
BEGIN
SELECT SQ_MATERIAS.NEXTVAL INTO VALOR FROM DUAL;
:NEW.COD_MATERIAS := VALOR;
END;
CREATE OR REPLACE TRIGGER CLAVE_PRIMARIA_NOTAS
BEFORE INSERT ON NOTAS
FOR EACH ROW
DECLARE
VALOR NUMBER;
BEGIN
SELECT SQ_NOTAS.NEXTVAL INTO VALOR FROM DUAL;
:NEW.COD_NOTAS := VALOR;
END;
---------------
SELECT * FROM alumnos
INSERT INTO ALUMNOS VALUES(NULL,'MANUEL','AMBATO','0295645','LORENA');
INSERT INTO MATERIAS VALUES(NULL,'CLIENTE','DIURNO','3');
INSERT INTO NOTAS VALUES('10','10','10','1','1',NULL);
----VISTAS
CREATE VIEW NOTAS_MENSAJE
AS
SELECT NOM_ALUMNO,NOM_MATERIA,NOTA1,NOTA2,NOTA3,
NOTA1+NOTA2+NOTA3 AS TOTAL,(NOTA1+NOTA2+NOTA3)/3 AS PROMEDIO,
SELECT CASE promedio
When 6 Then 'reprobado'
When 10 Then 'aprobado' end
FROM ALUMNOS, MATERIAS ,NOTAS
WHERE ALUMNOS.COD_ALUMNO=NOTAS.COD_ALUMNO
AND MATERIAS.COD_MATERIAS = NOTAS.COD_MATERIAS;
SELECT CASE promedio
When 6 Then 'reprobado'
When 10 Then 'aprobado' end
FROM NOTAS_POR_MATERIA_ALUMNO;
CONOCIMIENTOS BÁSICOS DE ORACLE
INTRODUCCIÓN
Tablespace (espacio de tablas)
Una base de datos se divide en unidades lógicas denominadas TABLESPACES. Un tablespace no es un fichero físico en el disco, simplemente es el nombre que tiene un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas, secuencias…) que se van a crear en la base de datos bajo el tablespace indicado (tablas, secuencias…). Un espacio de tablas puede pertenecer sólo a una BD.
Datafile (fichero de datos)
Un datafile es la representación física de un tablespace. Son los "ficheros de datos" donde se almacena la información físicamente. Un datafile puede tener cualquier nombre y extensión (siempre dentro de las limitaciones del sistema operativo), y puede estar localizado en cualquier directorio del disco duro, aunque su localización típica suele ser $ORACLE_HOME/Database. Un datafile tiene un tamaño predefinido en su creación (por ejemplo 100Mb) y este puede ser alterado en cualquier momento. Cuando creemos un datafile, este ocupará tanto espacio en disco como hayamos indicado en su creación, aunque internamente esté vacío. Oracle hace esto para reservar espacio continuo en disco y evitar así la fragmentación. Conforme se vayan creando objetos en ese tablespace, se irá ocupando el espacio que creó inicialmente.
USUARIO
Es un nombre definido en la base de datos que se puede conectar a ella y acceder a determinados objetos según ciertas condiciones que establece el administrador.
Los objetos del diccionario de datos a los que un usuario puede acceder se encuentran en la vista DICTIONARY, que es propiedad del usuario SYS.
CONEXIONES TNS Y CONFIGURACION DEL AGENTE
Las herramientas "Net Configuration Assistant" y "Net Manager" nos permiten configurar la red o los archivos de configuración del "SQL Net". "Fundamentos de Administración de las Bases de Datos del Oracle 2", pero debemos saber cómo iniciar estos programas. La herramienta "Net Configuration Assistant" nos permite configurar los receptores individuales, el acceso a los métodos para dar nombres y los servicios locales. Vamos a configurar los archivos de nombre "tns" u otros tipos de archivos de configuración de métodos para dar nombres.
PRIVILEGIOS DEL SISTEMA
Los roles de sistema se utilizan para distribuir la disponibilidad de los comandos del sistema utilizados para gestionar la BD. Los privilegios más comunes están en la siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de gestión de la BD. La palabra clave ANY significa que ese usuario tiene el privilegio para todos los esquemas en la BD.
OBJETIVOS:
OBJETIVO GENERAL:
Tener conocimientos de Tablespace, Datafile, conexiones tns y configuracion del agente, privilegios del sistema y Usuarios para poder manipular de manera correcta nuestro sistema de gestión de base de datos ORACLE.
OBJETIVO ESPECIFICO:
Conocer de manera detallada como funcionan Tablespace, Datafile, conexiones tns y configuracion del agente, privilegios del sistema y Usuarios con la finalidad de generar nuestras propias BD de acuerdo a las necesidades requeridas por los clientes.
TABLESPACES
El Tablespace System
Cuando se crea una base de datos es obligatorio crear un tablespace inicial en el que se van a crear los usuarios SYS y SYSTEM automáticamente. Estos usuarios son los que tienen la información necesaria para que funcione nuestra base de datos y podamos hacer todo tipo de operaciones como, por ejemplo, crear nuevos usuarios o crear nuevos tablespaces y tablas en esos nuevos tablespaces.
Este tablespace inicial se llama por defecto SYSTEM. Es una pieza clave para un buen funcionamiento de la base de datos ya que en él residen todos los objetos de los usuarios SYS y SYSTEM.
Es muy recomendable crear al menos otro tablespace nuevo distinto al SYSTEM. Así, todos los nuevos usuarios que creemos en nuestra base de datos, junto con todas sus tablas e índices se almacenarán en un tablespace diferente a SYSTEM. Se realiza esta separación para evitar que se bloquee toda la base de datos si ocurre algo grave en el tablespace SYSTEM. Suele ser habitual que para nuestras aplicaciones creemos usuarios y tablas en las que introducimos información y que sin darnos cuenta se llene de información el tablespace en el que están estas tablas. Si no hemos sido previsores, podemos haber llenado el tablespace SYSTEM con lo que es posible que se paralice toda la base de datos.
Manipulando Tablespaces
Ahora que nos hemos hecho una idea acerca de qué es un tablespace, vamos a realizar sobre él las manipulaciones básicas.
Partimos de una base de datos creada y levantada. Nos conectaremos a la misma con el usuario SYSTEM y su contraseña. La contraseña del usuario SYSTEM al crear la base de datos es, por defecto, MANAGER. Como medida de seguridad se recomienda cambiarla cuanto antes. Por lo tanto nos conectaremos bien al SqlPlus mediantesqlplus system/manager, o bien al server manager mediante el comando svrmgrl system/manager.
Crear un Tablespace.
En primer lugar vamos a crear un tablespace llamado Prueba. Esto lo podemos hacer por ejemplo desde el SQLPLUS conectados como system.
Create tablespace prueba datafile '/users/oradata/orcl/prueba01.dbf' size 100M;
Con esta sentencia estamos creando en nuestra base de datos un tablespace nuevo llamado "prueba" y que está formado físicamente por un fichero (datafile) llamado prueba01.dbf de 100 Mbytes y que está en el directorio "/users/oradata/orcl". Esta sentencia crea físicamente dicho fichero.
Aumentar de tamaño un Tablespace.
Para aumentar el tamaño de un tablespace que se nos ha quedado ya pequeño, tenemos varias posibilidades. La primera de ellas es crear un nuevo datafile y asignárselo al tablespace que queremos aumentar. Esto lo podemos hacer con la instrucción siguiente.
Alter tablespace prueba add datafile '/users/oradata/orcl/prueba02.dbf' size 50M;
Con esta sentencia hemos creado un nuevo fichero físico en nuestro directorio /users/oradata/orcl de 50 Mbytes de tamaño y se lo hemos asignado al tablespace "prueba".
Otra posibilidad es ampliar el tamaño de uno de los ficheros físicos o datafiles que forman el tablespace. Esto lo podemos hacer fácilmente con la siguiente instrucción:
Alter datafile '/users/oradata/orcl/prueba01.dbf' resize 150M;
Con esta sentencia lo que hacemos es aumentar el datafile que forma parte de nuestro tablespace en 50 Mbytes.
Tanto en la instrucción de creción como en la de aumentar el tamaño de un tablespace se puede observar fácilmente cómo un datafile pertenece solamente a un tablespace ya que en la propia sentencia se crea el fichero físico o datafile.
Borrando un tablespace.
Para eliminar un tablespace de la base de datos se debe utilizar la sentencia:
Drop tablespace prueba;
Como ver el tamaño de la tablas de un esquema.
select segment_name as table_name, sum(bytes)/(1024*1024) as table_size_meg
from user_extents
where (segment_type='TABLE')
group by segment_name
order by sum(bytes)/(1024*1024) desc
Como ver el tamaño de los tablespace y el espacio utilizado.
SELECT tablespace_name, round(BYTES/1024/1024,0) tamaño, round(user_BYTES/1024/1024,0) tamaño_Usado
FROM dba_data_files b
WHERE tablespace_name NOT LIKE 'TEMP%'
Como ver el espacio libre de los tablespaces de oracle
Para ver el espacio libre que queda en un tablespace tenemos que mirar en la tabla dba_free_space
SELECT tablespace_name,
ROUND(sum(bytes)/1024/1024,0)
FROM dba_free_space
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY tablespace_name;
Con esta consulta obentemos el nombre del tablespace y el espacio en Megas libre
Para ver el espacio total en un tablespace tenemos que mirar en la tabla dba_data_files
SELECT tablespace_name,
round(sum(BYTES/1024/1024),0)
FROM dba_data_files b
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY b.tablespace_name;
Con esta consulta obentemos el nombre del tablespace y el espacio total en Megas que puede llegar a tener
Como enviar un correo en pl/sql
Como hemos dicho en el objetivo de este articulo, cuando el tablespace se esté quedando sin espacio libre, se recibirá un correo.
Vamos a proporcionar un procedimiento para poder enviar un correo.
CREATE OR REPLACE PROCEDURE SEND_MAIL(SENDER IN VARCHAR2, RECIPIENT IN VARCHAR2, SUBJECT IN VARCHAR2, MESSAGE IN VARCHAR2) IS
– SENDER: direccion de correo de quien envia el mail
– RECIPIENT: dirreción de correo a la que va dirigida el mail
– SUBJECT: Es el asunto del correo
– ESSAGE: es el texto del mensaje
mailhost CONSTANT VARCHAR2(30) := ‘mail.server.es’; — servidor de correo , sustituir cadena por una valida
mesg VARCHAR2(1000); — texto del mensaje
mail_conn UTL_SMTP.CONNECTION; — conexion con el servidor smtp
BEGIN
mail_conn := utl_smtp.open_connection(mailhost, 25);
mesg := ‘Date: ‘ ||
TO_CHAR( SYSDATE, ‘dd Mon yy hh24:mi:ss’ ) || CHR(13) || CHR(10) ||
‘From: <’|| Sender ||’>’ || CHR(13) || CHR(10) ||
‘Subject: ‘|| Subject || CHR(13) || CHR(10)||
‘To: ‘||Recipient || CHR(13) || CHR(10) || ” || CHR(13) || CHR(10) || Message;
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, Sender);
utl_smtp.rcpt(mail_conn, Recipient);
utl_smtp.data(mail_conn, mesg);
utl_smtp.quit(mail_conn);
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20004,SQLERRM);
END send_mail;
Sustituir mail.server.es por un servidor smtp valido
Procedimiento para controlar el espacio libre de los tablespaces
A través de este procedimiento comprobamos que queda más de un porcentaje establecido libre en el tablespace con respecto a su espacio total
Si el espacio libre es menor al limite establecido ( portentaje ) del total del tablespace se envia un correo utilizando el procedimiento que se ha explicado en el punto anterior.
CREATE OR REPLACE PROCEDURE ALERTA_ESPACIO (limite number) IS
– CREAMOS EL CURSOR CON EL NOMBRE DE LOS TABLESPACES
– Y ESPACIO LIBRE
CURSOR c_espacio_libre IS
SELECT tablespace_name,
ROUND(sum(bytes)/1024/1024,0)
FROM dba_free_space
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY tablespace_name;
– CREAMOS EL CURSOR CON EL NOMBRE DE LOS TABLESPACES
– Y ESPACIO total
CURSOR c_espacio_total IS
select tablespace_name,
round(sum(BYTES/1024/1024),0)
FROM dba_data_files b
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY b.tablespace_name;
– DEFINIMOS LAS VARIABLES PARA METER EL CONTENIDO DEL CURSOR
c_nombre VARCHAR2(20);
c_libre NUMBER(10);
c_total NUMBER(10);
v_bbdd VARCHAR(20);
BEGIN
– OBTENEMOS EL NOMBRE DE LA BASE DE DATOS
SELECT name into v_bbdd from v$database;
– ABRIMOS EL CURSOR Y NOS POSICIONAMOS EN LA PRIMERA LINEA
OPEN c_espacio_libre;
OPEN c_espacio_total;
FETCH c_espacio_libre INTO c_nombre,c_libre;
FETCH c_espacio_total INTO c_nombre,c_total;
– EN CASO DE QUE EXISTA RESULTADO REALIZAMOS LAS COMPROBACIONES DE ESPACIO
WHILE c_espacio_libre%found
LOOP
– Comprobacion del tablespace ES MENOR DE limite MEGAS
IF (c_libre * 100) / c_total < limite THEN
send_mail(‘dedireccion@orasite.es’,'paradirecion@orasite.es’,
‘ALERTA DE ESPACIO EN BASE DE DATOS ‘ || v_bbdd,
‘El tablespace con nombre: ‘ || c_nombre || ‘ se esta quedando sin espacio’ ||chr(10)|
‘El tamaño restante es de: ‘ || c_libre || ‘ Megas’);
END IF;
FETCH c_espacio_libre INTO c_nombre, c_libre;
FETCH c_espacio_total INTO c_nombre,c_total;
END LOOP;
CLOSE c_espacio_libre;
CLOSE c_espacio_total;
END;
/
Este procedimiento recibe un parametro, que será el porcentaje que queramos comprobar. Un valor normal sería 10, de esta forma comprobará que el espacio libre sea mayor de un 10 por ciento del tamaño total del tablespace.
En caso de que no sea mayor que ese límite puesto, se enviará un mail. Modificar las direcciones de correo, por direcciones de correo validas.
automatizar la tarea de comprobacion de tablespaces
Esta tarea se puede automatizar poniendo un job ( tarea ) en la base de datos y que compruebe cada x tiempo si los tablespaces se han llenado.
Si no tenemos ningún job en la base de datos, antes de poner un job tenemos que asegurarnos que el valorjob_queue_processes es mayor que 0.
TABLESPACES ONLINE Y OFFLINE
Un tablespace puede estar en dos estados: Online y Offline. Que un tablespace esté online significa que está disponible para operar en él, mientras que si está offline quiere decir que no se puede utilizar. Cuando creamos un tablespace, se crea en estado online y, por lo tanto, podemos crear en dicho tablespace objetos como índices, tablas, etc.
¿Cómo sabemos en qué estado se encuentran nuestros tablespaces?.
Existe una vista que nos da información sobre los tablespaces de nuestra base de datos. Esta vista es la dba_tablespaces. Consultándola podemos conocer qué tablespaces tenemos en nuestra base de datos y en qué estado se encuentran.
select tablespace_name, status from dba_tablespaces;
¿Para qué queremos poner un tablespace offline?.
Hay que tener en cuenta que cuando un tablespace está offline, no se puede acceder a ningún objeto que se encuentre en él, es decir, que si en el tablespace hay tablas, no se podrá hacer consultas ni inserciones ni modificaciones de estas tablas, sin embargo, el resto de los objetos que se encuentran en otros tablespaces de la base de datos si están accesibles. Por lo tanto, pondremos un tablespace offline en general para realizar tareas administrativas.
• Para poder hacer una copia de seguridad del tablespace estando completamente seguros de que nadie está modificando los objetos del tablespace y que no quedan transacciones pendientes sin terminar y que pueden modificar estos objetos.
• Para poder actualizar una aplicación que se basa en los objetos de este tablespace sin que ningún usuario pueda modificar los datos en medio de la actualización.
En un tablespace puede haber objetos de varios tipos, como hemos indicado. Si en un tablespace existen segmentos de rollback activos, no se puede poner offline, primero hay que desactivar los segmentos de rollback activos del tablespace.
¿Cómo sabemos los rollback segments que existen en un tablespace y su estado?. Muy sencillo, con la siguiente sentencia:
select rollback_segment, status, tablespace_name from dba_rollback_segs;
Así podremos ver todos los rollback que tenemos, en qué estado se encuentran (online, offline) y en qué tablespace están. Si comprobamos que en el tablespace que vamos a poner offline tenemos algún segmento de rollback online (activo), debemos ponerlo offline antes que el tablespace. Para desactivar un segmento de rollback, ejecutaremos la siguiente sentencia desde el SqlPlus o desde el server manager.
alter rollback segment nombre_de_segmento offline;
Cuando ya no queden segmentos de rollback en estado online en nuestro tablespace, ya podremos desactivarlo para que no se pueda acceder a él.
alter tablespace nombre_de_tablespace offline;
Finalmente, cuando terminemos nuestras tareas administrativas sobre dicho tablespace, ya podemos activarlo para que todos sus objetos vuelvan a estar accesibles por los usuarios.
alter tablespace nombre_de_tablespace online;
Por supuesto, no debemos olvidar que si hemos tenido que desactivar algún segmento de rollback que se encontraba en nuestro tablespace, ahora deberemos volver a activarlo.
alter rollback segment nombre_de_segmento online;
Una curiosidad sobre los tablespaces que no están disponibles (offline), es que, como ya hemos comentado, no se pueden realizar consultas ni modificaciones ni inserciones en los datos de las tablas que están en ellos, pero si que se pueden eliminar objetos de dicho tablespace, que no es lo mismo que borrar datos de objetos del tablespace.
También es muy habitual que en el diseño de las bases de datos, se creen tablespaces para almacenar los índices de la aplicación y otros distintos para almacenar las tablas o datos. En estos casos, si desactivamos el tablespace en el que se encuentran los índices, podemos seguir accediendo a las tablas y realizar consultas sobre ellas porque su tablespace está accesible.
Por otro lado, es posible que si en servidor Oracle se encuentra con graves problemas para escribir en un tablespace, al cabo de varios intentos lo ponga automáticamente offline.
Tablespaces Read Only
Cuando creamos un tablespace, podemos crear en él todos los objetos que queramos y acceder a ellos y eliminarlos y también consultar los datos de las tablas que se encuentren en este tablespace, así como borrar, insertar y modificar estos datos. Existe la posibilidad de poner un tablespace en un estado en el cual, solamente se pueden consultar los datos de los objetos, no se puede ni borrar ni insertar nada en ellos.
¿Para qué me viene bien un tablespace read only?.
La principal ventaja de un tablespace read only es que, como no se pueden modificar los datos que en él se encuentran, no hace falta hacer backup del mismo. Dependiendo de las apliaciones que tengamos en nuestra base de datos nos puede interesar tener tablespaces read only o no. Por ejemplo, si tenemos una aplicación en la que se pueden consultar cientos de fotos de animales salvajes o de paisajes, podríamos crear un tablespace en el que introducir estas imágenes y luego ponerlo read only.
Generalmente un tablespace de estas características, que sirve de almacenamiento de fotos o temas similares, suele ocupar mucho espacio, por lo que hacer un backup del mismo todos los días puede resultar muy costoso en tiempo y espacio. Además, si no se modifican nunca estas fotos no tiene mucho sentido hacer copia de seguridad del mismo, y no solo eso, podríamos incluso almacenar dicho tablespace en un CDROM en vez de ocupar espacio en disco.
Para poner un tablespace en estado read only, simplemente debemos ejecutar la siguiente instrucción:
alter tablespace nombre_de_tablespace read only;
Como hemos indicado, en un tablespace read only solo se pueden realizar consultas de los datos, por lo tanto, si en el instante de ejecutar esta sentencia se están realizando modificaciones o inserciones o borrado de datos, el servidor espera hasta que acaben para poner el tablespace en estado read only. Para ver si ha quedado en estado read only, simplemente ejecutamos la misma select que al principio para ver la información general de los tablespaces:
select tablespace_name, status from dba_tablespaces;
Si por algún motivo necesitamos modificar los datos que se encuentran almacenados en espace un tablespace read only, simplemente deberemos ponerlo en primer lugar en estado read write y una vez realizada la modificación, volver a ponerlo en su estado read only. La sentencia que debemos ejecutar será:
alter tablespace nombre_de_tablespace read write;
Tenemos un concepto que debe quedar claro. Un tablespace read only no necesita backup, y por tanto, recovery, pero, esto no hay que tomarlo al pie de la letra. Siempre hay que hacer al menos un backup. En primer lugar creamos un tablespace vacío en el que iremos metiendo poco a poco toda la información que nos interesa que, como en el caso que hemos supuesto anteriormente, pueden ser varias tablas que almacenan fotos de animales y paisajes. Cuando ya no vamos a crear nuevas imágenes es cuando ponemos el tablespace read only, pero ahí si debemos hacer una copia de seguridad, backup, y como ya no vamos a tocar nunca más este tablespace será la única. Si por algún motivo decidimos poner este tablespace otra vez read write para crear o borrar datos, después de volver a ponerlo read only deberemos hacer un backup de los nuevos datos.
También hay que diferenciar dos ideas. Por un lado hemos dicho que en un tablespace read only no se pueden modificar, ni insertar ni borrar datos de sus tablas. Sin embargo y, al igual que en los tablespaces offline, si se pueden borrar objetos enteros del tablespace, como por ejemplo un índice o una tabla.
Tablespaces Temporales
Un tablespace temporal es aquél en el que solamente puede haber objetos temporales. No se pueden crear en él objetos permanentes como pueden ser los índices, las tablas o los segmentos de rollback. Están especialmente preparados para optimizar las operaciones en las que se lleven a cabo ordenaciones. Por lo tanto está muy recomendado tener al menos un tablespace temporal en cada base de datos. Algunas de las operaciones que implican realizar ordenaciones son, las selects que tienen group by, las que tienen order by, la creación de índices y analizar índices para calcularles las estadísticas. En todos estos casos, cuando para realizar la ordenación el servidor no encuentra espacio suficente libre en la memoria, utiliza el tablespace temporal. Los rendimientos son muy superiores comparándolos con los tiempos que se emplearía en realizar las ordenaciones en tablespaces normales. Esto se debe a que el mecanismo que se utiliza para reservar y desreservar el espacio en los tablespaces temporales es muy distinto que en los normales ya que está orientado a objetos que crecen mucho y rápido y que a continuación disminuyen totalmente su tamaño y desaparecen.
Para crear un tablespace temporal simplemente hay que añadir la palabra TEMPORARY a la instrucción utilizada para crear tablespaces normales. Siguiendo el ejemplo indicado en la creación de tablespaces, podríamos tener lo siguiente:
Create tablespace prueba datafile '/users/oradata/orcl/prueba01.dbf'
size 100M temporary;
Para indicar a un usuario de base de datos que sus ordenaciones debe hacerlas en un determinado tablespace temporal, hay que lanzar una sentencia como la que sigue.
Alter user nombre_de_usuario temporary tablespace nombre_de_tablespace;
Y para conocer qué usuarios existen en nuestra base de datos y cual es el tablespace temporal que utilizan, podemos consultar la base de datos de la siguiente manera:
Select username, temporary_tablespace from dba_users;
Y finalmente, si queremos conocer qué tablespaces tenemos y cuáles son temporales y cuales son permanentes, podemos consultar la vista que nos da la información sobre los tablespaces, es decir, la vista dba_tablespaces;
Select tablespace_name, contents from dba_tablespaces;
Como nota final apuntaremos que un tablespace permanente puede pasar a temporal y que uno temporal puede pasar a permanente.
DATAFILES
Los datafiles son los ficheros físicos en los que se almacenan los objetos que forman parte de un tablespace. Un datafile pertenece solamente a un tablespace y a una instancia de base de datos. Un tablespace puede estar formado por uno o varios datafiles. Cuando se crea un datafile, se debe indicar su nombre, su ubicación o directorio, el tamaño que va a tener y el tablespace al que va a pertenecer. Además, al crearlos, ocupan ya ese espacio aunque se encuentran totalmente vacíos, es decir, Oracle reserva el espacio para poder ir llenándolo poco a poco con posterioridad. Por supuesto, si no hay sitio suficiente para crear un fichero físico del tamaño indicado, se producirá un error y no se creará dicho fichero.
Cuando se van creando objetos en un tablespace, éstos físicamente se van almacenando en los datafiles asignados a dicho tablespace, es decir, cuando creamos una tabla y vamos insertando datos en ella, estos datos realmente se reparten por los ficheros físicos o datafiles que forman parte del tablespace. No se puede controlar en qué fichero físico se almacenan los datos de un tablespace. Si un tablespace está formado por 2 datafiles y tenemos una tabla en ese tablespace, a medida que vamos insertando filas éstas se almacenarán en cualquiera de los dos datafiles indistintamente, es decir, unas pueden estar en un datafile y otras en otro.
El espacio total disponible en un tablespace es lógicamente la suma de los tamaños que ocupan los ficheros físicos o datafiles que lo forman. Como hemos indicado estos datafiles, al crearlos, están totalmente vacíos, simplemente es un espacio reservado y formateado por Oracle para su uso. A medida que se van creando objetos en ellos como tablas, índices, etc y se van insertando registros en estas tablas, los datafiles se van llenando o, lo que es lo mismo, el tablespace se va llenando.
Creación y Manipulación
La creación de datafiles está estrechamente relacionada con el tablespace al que va a pertenecer. Tenemos varias formas de crear datafiles. Cada vez que se crea un tablespace nuevo, hay que indicar obligatoriamente cual es el datafile que va a pertenecer a dicho tablespace y, en ese momento, se crea tanto el tablespace como su datafile. También se pueden añadir datafiles nuevos a un tablespace que ya existe. Esto se suele hacer cuando un tablespace se está llenando y está a punto de llegar a su capacidad máxima. Al añadir un datafile a un tablespace, se aumenta el espacio disponible en dicho tablespace en tantos megabytes como tenga el datafile nuevo recién creado.
Creación de un nuevo datafile de 50 megabytes junto con un nuevo tablespace:
Create tablespace nombre_tablespace datafile
'/users/oracle/orcl/nombre_datafile.dbf' size 50M;
Una vez creado este tablespace, si con el tiempo queremos añadirle espacio, lo podemos hacer creando un nuevo datafile y asignándoselo al tablespace:
Alter tablespace nombre_tablespace add datafile
'/users/oracle/orcl/nombre_datafile2.dbf' size 100M;
Con estas dos instrucciones hemos creado un tablespace nuevo en nuestra base de datos en el que caben 150 megabytes de información. Este espacio está formado físicamente por dos ficheros llamados nombre_datafile.dbf y nombre_datafile2.dbf que se encuentran en el directorio /users/oracle/orcl de nuestra máquina y que ocupan 50 y 100 Mbytes respectivamente.
Para conocer los datafiles que forman parte de nuestra base de datos, podemos consultar la vista dba_data_files en la que se nos indica por cada datafile o fichero de datos, a qué tablespace pertenece y cuanto espacio total tiene reservado. Es importante recalcar que el espacio que aparece en esta vista es el espacio total que ocupa el fichero físico y no el espacio utilizado de ese fichero, es decir, que si creamos un datafile de 50Mbytes y acto seguido consultamos esta vista, veremos que ocupa 50Mbytes a pesar de estar totalmente vacío. Este dato indica la cantidad de espacio que ocupa el fichero físico, la cantidad de información que podremos introducir en él.
select tablespace_name, file_name, bytes /1024/1024 from dba_data_files;
Tenemos también la posibilidad de aumentar el tamaño de un datafile, es decir, podemos conseguir que un tablespace tenga más sitio vacío aumentando uno o varios de los ficheros físicos que lo forman, en lugar de añadiéndole un nuevo fichero físico. Para aumentar el tamaño de un datafile, podremos utilizar la siguiente instrucción:
alter database datafile '/users/oracle/orcl/nombre_datafile.dbf' resize 100M;
Esta instrucción deja el datafile indicado con un tamaño de 100M, no es que se aumente en 100Mbytes. Esto es fácil de recordar, vale con pensar en que esta instrucción se utiliza también para disminuir el tamaño de un datafile que en un primer lugar lo creamos excesivamente grande. En esta instrucción no se pueden utilizar números negativos, por lo que parece claro que si ponemos un número queremos indicar que será el tamaño que queremos que tenga nuestro datafile. Es importante tener en cuenta que no siempre podemos disminuir el tamaño de un datafile. Los motivos serán explicados en temas más avanzados y tienen que ver con la forma que tiene Oracle de reservar el espacio dentro de los tablespaces y datafiles.
Existe una posibilidad de que Oracle aumente automáticamente el tamaño de sus datafiles cuando éstos se están llenando, para evitar así la intervención manual del administrador de la base de datos. Se puede hacer de varias formas, al crear el tablespace con el datafile, al añadir un nuevo datafile al tablespace o incluso en cualquier otro momento.
Para indicar que queremos que un datafile aumente automáticamente cuando añadimos un nuevo datafile a un tablespace existente podemos utilizar:
alter tablespace nombre_tablespace add datafile nombre_datafile size 100M
autoextend on next 250K maxsize 200M;
Con esta instrucción lo que estamos haciendo es añadir un nuevo datafile llamado nombre_datafile a nuestro tablespace nombre_tablespace con 100Mbytes de tamaño. Además, estamos indicando que queremos que aumente por si mismo cada vez que se llene y que aumente en bloques de 250 Kbytes cada vez. Finalmente le ponemos un tope al tamaño total que queremos que tenga nuestro datafile con la instrucción maxsize, por lo que una vez que llegue a 200 Mbytes, si se llena, no volverá a crecer más.
Para indicar en cualquier momento que queremos que un datafile no crezca más automáticamente, podemos utilizar:
alter database datafile nombre_datafile autoextend off;
Y para indicar en cualquier momento que un determinado datafile crezca automáticamente, la instrucción que ejecutaremos será:
alter database datafile nombre_datafile autoextend on next 1 M maxize 300 M;
Renombrando Datafiles
Existe la posiblidad de cambiarle el nombre a un datafile o de cambiarlo de directorio. Esta operación no consiste simplemente en ir al sistema operativo y cambiarle el nombre, ya que si hiciéramos eso, Oracle no se da cuenta de que hemos movido de sitio un datafile y cuando intenta acceder a información de ese datafile muestra mensajes de error indicando que no lo encuentra.
Hay que distinguir entre los datafiles del tablespace SYSTEM y el resto. Los datafiles del tablespace SYSTEM son especiales y no se pueden mover con la misma facilidad que los demás.
Renombrando datafiles que no son del tablespace SYSTEM
En primer lugar, hay que comprobar cual es nombre y el path completo del fichero a mover y el estado en que se encuentra dicho fichero. Para realizar esta comprobación podemos consultar la vista dba_data_files.
select file_name, status, bytes from dba_data_files;
En file_name se nos indica cual es el nombre del datafile que nos interesa, con todo su path, y además vemos cuanto ocupa. El campo status podremos comprobar si el datafile está disponible (available).
Ahora que sabemos cual es el path y nombre completo de nuestro datafile, tenemos que evitar que se realicen operaciones que modifiquen los datos de los objetos de nuestro tablespace, para que así consigamos tener el contenido del datafile estático. Esto se consigue poniendo el tablespace en estado read only, como se explicó en el tema de los tablespaces.
alter tablespace nombre_tablespace read only;
Para comprobar que realmente está nuestro tablespace en estado read only, podemos consultar la vista dba_tablespaces. En estos momentos, los usuarios de la base de datos, pueden acceder y modificar la información de cualquier tablespace que no sea el que estamos manipulando, en el cual, solamente podrán realizar operaciones de lectura, nunca inserciones ni modificaciones ni borrados de datos.
Es en este instante, cuando sabemos que no se está modificando el contenido de nuestro tablespace y, por lo tanto, de nuestro datafile, cuando debemos ir al sistema operativo y hacer una copia de nuestro datafile con el nuevo nombre y la nueva ubicación. Una vez copiado, comprobamos también desde el sistema operativo que el nuevo datafile ocupa el mismo espacio que el antiguo, para estar seguros de que no ha habido ningún problema en la copia.
Hasta ahora, no le hemos indicado a Oracle que hemos movido de ubicación o de nombre a uno de sus datafiles, para poder indicárselo, debemos asegurarnos que no hay ningún usuario utilizando el tablespace, ni siquiera en modo consulta. Por lo tanto, debemos deshabilitar el tablespace.
alter tablespace nombre_tablespace offline;
Y una vez deshabilitado, indicamos a Oracle el cambio de nombre o de ubicación:
alter database rename file 'viejo_datafile_con_path' to 'nuevo_datafile_con_path';
En estos momentos Oracle ya sabe que cuando tenga que buscar la información de ese datafile debe buscarlo en el nuevo path indicado y con el nuevo nombre. Por lo tanto, si lanzamos la select para ver los datafiles de la base de datos, es decir, la select de la vista dba_data_files, comprobaremos que ha cambiado la información antigua por la nueva. Ahora solamente nos queda activar el tablespace y permitir operaciones de lectura y escritura en él.
alter tablespace nombre_tablespace online;
alter tablespace nombre_tablespace read write;
Por supuesto, antes de realizar cualquier operación que implique modificación de las estructuras de la base de datos, como el renombrado de un datafile, se debe hacer un backup completo de la misma. Una vez realizada la operación también se recomienda hacer un nuevo backup.
Nota: hay que resaltar una vez más, que no se debe mover el datafile desde el sistema operativo sin haber puesto con anterioridad su tablespace offline. De no ser así, si alguien manipula datos durante el tiempo que tarda en hacerse la copia en el sistema operativo, Oracle detecta problemas e invalida el datafile, lo que va a provocar que haya que poner en práctica alguna estrategia de backup para recuperar el datafile invalidado.
Renombrando datafiles del tablespace SYSTEM
El tablespace SYSTEM es especial, por lo tanto, para manipular sus datafiles, hay que hacerlo también de manera especial. Nadie puede trabajar con la base de datos. Por ese motivo, se debe apagar la base de datos y levantarla pero sin abrirla. Los conceptos de apagar la base de datos y levantarla no son objeto de este manual por lo que simplemente se indicarán las instrucciones.
Primeramente se debe apagar o, más coloquialmente, tirar abajo la base de datos. Esto lo hacemos desde el Server Manager, no desde SqlPlus. Nos conectamos al Server Manager como el usuario administrador y con privilegios especiales:
svrmgrl
connect internal
shutdown;
Después de esperar a que se terminen las transacciones activas, las base de datos se apaga y podemos volver a levantarla, también desde el Sever Manager, pero sin abrirla, solamente montándola.
startup mount;
Con esta instrucción hemos levantado la base de datos pero no la hemos abierto, por lo que nadie, excepto otro administrador, puede estar manipulando sus objetos. Ahora podemos realizar la copia de los datafiles del tablespace SYSTEM al nuevo directorio o con el nuevo nombre. Comprobamos que tanto el fichero nuevo como el antiguo tengan el mismo tamaño y a continuación indicamos a Oracle que hemos movido el datafile de la misma manera que en el apartado anterior:
alter database rename file 'viejo_datafile_con_path' to 'nuevo_datafile_con_path';
Finalmente podemos levantar la base de datos para que pueda volver a ser utilizada por todos los usuarios:
alter database open;
GESTIÓN DE USUARIOS EN ORACLE.
Es un nombre definido en la base de datos que se puede conectar a ella y acceder a determinados objetos según ciertas condiciones que establece el administrador.
Los objetos del diccionario de datos a los que un usuario puede acceder se encuentran en la vista DICTIONARY, que es propiedad del usuario SYS.
DESC DICTIONARY;
Con la orden:
SELECT TABLENAME FROM DICTIONARY;
Se visualizan los objetos del diccionario de datos a los que se puede acceder.
Creación deusuarios:
CREATE USER NOMBRE_USUARIO
IDENTIFIED BY CLAVE_ACCESO
[DEFAULT TABLESPACE ESPACIO_TABLA]
[TEMPORARY TABLESPACE ESPACIO_TABLA]
[QUOTA {ENTERO {K | M} | UNLIMITED } ON ESPACIO_TABLA]
[PROFILE PERFIL];
DEFAULT TABLESPACE= Asigna a un usuario el tablespace por defecto para almacenar los objetos que cree. Si no se asigna ninguno, el tablespace por defecto es SYSTEM.
TEMPORARY TABLESPACE= Especifica el nombre del tablespace para trabajar temporales. Si no se especifica ninguno, el tablespace por defecto es SYSTEM.
QUOTA= Asigna un espacio en megabites o kilobites en el tablespace asignado. Si no se especifica esta cláusula, el usuario no tiene cuota asignada y no podrá crear objetos en el tablespace. Para tener espacio y acceso ilimitad a un tablespace es:
GRANT UNLIMITED TABLESPACE NOMBRE_TABLESPACE;
PROFILE= Asigna un perfil a un usuario.
Modificación de usuarios:
ALTER USER NOMBRE_USUARIO
IDENTIFIED BY CLAVE _ACCESO
[DEFAULT TABLESPACE ESPACIO_TABLA]
[TEMPORARY TABLESPACE ESPACIO_TABLA]
[QUOTA {ENTERO {K | M } | UNLIMITED } ON ESPACIO_TABLA
[PROFILE PERFIL];
Borrado de usuarios:
DROP USER USUARIO [CASCADE];
CASCADE= Suprime todos los objetos del usuario antes de borrarlo.
PRIVILEGIOS DEL SISTEMA
Los roles de sistema se utilizan para distribuir la disponibilidad de los comandos del sistema utilizados para gestionar la BD. Los privilegios más comunes están en la siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de gestión de la BD. La palabra clave ANY significa que ese usuario tiene el privilegio para todos los esquemas en la BD. Hay que hacer notar que ANY y PUBLIC no son sinónimos.
Privilegio Capacidades
Manejo de Objetos ...
CREATE ANY INDEX Crear cualquier índice.
CREATE [PUBLIC] SYNONYM Crear sinónimos [públicos].
CREATE [ANY] TABLE Crear tablas. El usuario debe tener cuota en el espacio de tablas, o ha de tener asignado el privilegio UNLIMITED TABLESPACE.
CREATE [ANY] VIEW Crear vistas.
ALTER ANY INDEX Alterar cualquier índice.
ALTER ANY TABLE Alterar cualquier tabla
DROP ANY INDEX Borrar cualquier índice.
DROP ANY SYNONYM Borrar cualquier sinónimo.
DROP PUBLIC SYNONYM Borrar sinónimos públicos.
DROP ANY VIEW Borrar cualquier vista.
DROP ANY TABLE Borrar cualquier tabla.
SELECT ANY TABLE Efectuar selecciones de cualquier tabla o vista.
INSERT ANY TABLE Insertar en cualquier tabla o vista.
DELETE ANY TABLE Borrar filas de cualquier tabla o vista, y también truncar.
ALTER SESSION Alterar los parámetros de la sesión.
CREATE SESSION Conectarse a la BD.
Gestión de la BD ...
CREATE PROFILE Crear perfiles de usuario.
CREATE ROLE Crear roles.
CREATE ROLLBACK SEGMENT Creación de segmentos de rollback.
CREATE TABLESPACE Crear espacios de tablas.
CREATE USER Crear usuarios.
ALTER PROFILE Alterar perfiles existentes.
ALTER ANY ROLE Alterar cualquier rol.
ALTER ROLLBACK SEGMENT Alterar segmentos de rollback.
ALTER TABLESPACE Alterar espacios de tablas.
ALTER USER Alterar usuarios.
DROP PROFILE Borrar un perfil existente.
DROP ANY ROLE Borrar cualquier rol.
DROP ROLLBACK SEGMENT Borrar un segmento de rollback existente.
DROP TABLESPACE Borrar un espacio de tablas.
DROP USER Borrar un usuario. Añadir CASCADE si el usuario posee objetos.
ALTER DATABASE Permite una sentencia ALTER DATABASE.
GRANT ANY PRIVILEGE Otorgar cualquiera de estos privilegios.
GRANT ANY ROLE Otorgar cualquier rol a un usario.
UNLIMITED TABLESPACE Puede usar una cantidad de almacenamiento ilimitada.
DROP PROFILE Borrar un perfil existente.
rupo Comandos Auditados
CLUSTER Todas las sentencias que afecten a clusters.
DATABASE LINK Todas las sentencias que afecten a enlaces de BD.
EXISTS Todas las sentencias que fallen porque ya existe un objeto en la BD.
INDEX Todas las sentencias que afecten a índices.
NOT EXISTS Todas las sentencias que fallen porque un determinado objeto no existe.
PROCEDURE Todas las sentencias que afecten a procedimientos.
PROFILE Todas las sentencias que afecten a perfiles.
PUBLIC DATABASE LINK Todas las sentencias que afecten a enlaces públicos de BD.
PUBLIC SINONYM Todas las sentencias que afecten a sinónimos públicos.
ROLE Todas las sentencias que afecten a roles.
ROLLBACK SEGMENT Todas las sentencias que afecten a segmentos de rollback.
SEQUENCE Todas las sentencias que afecten a secuencias.
SESSION Todas las sentencias de acceso a la BD.
SYNONYM Todas las sentencias que afecten a sinónimos.
SYSTEM AUDIT Todas las sentencias AUDIT y NOAUDIT.
SYSTEM GRANT Todas las sentencias afecten a privilegios.
TABLE Todas las sentencias que afecten a tablas.
TABLESPACE Todas las sentencias que afecten a espacios de tablas.
TRIGGER Todas las sentencias que afecten a disparadores.
USER Todas las sentencias que afecten a las cuentas de usuarios.
VIEW Todas las sentencias que afecten a vistas.
Valor Descripción
NONE Deshabilita la auditoría
BD Habilita la auditoría, escribiendo en la tabla SYS.AUD$.
OS Habilita la auditoría, dejando al SO su gestión.
Vista Contenidos
DBA_ROLES Nombres de los roles y su estado del password.
DBA_ROLES_PRIVS Usuarios a los que han sido otorgados roles.
DBA_SYS_PRIVS Usuarios a los que han sido otorgados privilegios del sistema.
DBA_TAB_PRIVS Usuarios a los que han sido otorgados privilegios sobre objetos.
DBA_COL_PRIVS Usuarios a los que han sido otorgados privilegios sobre columnas de tablas.
ROLE_ROLE_PRIVS Roles que han sido otorgados a otros roles.
ROLE_SYS_PRIVS Privilegios de sistema que han sido otorgados a roles.
ROLE_TAB_PRIVS Privilegios de tabla que han sido otorgados a roles.
Privilegio Capacidades Otorgadas
SELECT Puede consultar a un objeto.
INSERT Puede insertar filas en una tabla o vista. Puede especificarse las columnas donde se permite insertar dentro de la tabla o vista.
UPDATE Puede actualizar filas en una tabla o vista. Puede especificarse las columnas donde se permite actualizar dentro de la tabla o vista.
DELETE Puede borrar filas dentro de la tabla o vista.
ALTER Puede alterar la tabla.
INDEX Puede crear índices de una tabla.
REFERENCES Puede crear claves ajenas que referencie a esta tabla.
EXECUTE Puede ejecutar un procedimieto, paquete o función.
Recurso Descripción
SESSIONES_PER_USER El número de sesiones concurrentes que un usuario puede tener en una instancia.
CPU_PER_SESSION El tiempo de CPU, en centenas de segundos, que una sesión puede utilizar.
CONNECT_TIME El número de minutos que una sesión puede permanecer activa.
IDLE_TIME El número de minutos que una sesión puede permanecer sin que sea utilizada de manera activa.
LOGICAL_READS_PER_SESSION El número de bloques de datos que se pueden leer en una sesión.
LOGICAL_READS_PER_CALL El número de bloques de datos que se pueden leer en una operación.
PRIVATE_SGA La cantidad de espacio privado que una sesión puede reservar en la zona de SQL compartido de la SGA.
COMPOSITE_LIMIT El número de total de recursos por sesión, en unidades de servicio. Esto resulta de un calculo ponderado de CPU_PER_SESSION, CONNECT_TIME,LOGICAL_READS_PER_SESSION y PRIVATE_SGA, cuyos pesos se pueden variar con el comando ALTER RESOURCE COST.
Parámetro Significado
Username Nombre del Usuario (Esquema)
Password Palabra clave de la cuenta. Puede ser asociada directamente a una cuenta del sistema operativo.
Default Tablespace Espacio de tablas por defecto en el que los objetos de este usuario serán creados. Esto no da al usuario derechos de crear objetos.
Temporary Tablespace El espacio de tablas en el que se almacenarán los segmentos temporales de las ordenaciones.
Quota Espacio máximo que puede ocupar en un espacio de tablas.
Profile Asigna un perfil al usuario. Los perfiles se utilizan para restringir el uso de recursos como el tiempo de CPU.
CONEXIONES TNS Y CONFIGURACION DEL AGENTE
Las herramientas "Net Configuration Assistant" y "Net Manager" nos permiten configurar la red o los archivos de configuración del "SQL Net". "Fundamentos de Administración de las Bases de Datos del Oracle 2", pero debemos saber cómo iniciar estos programas. La herramienta "Net Configuration Assistant" nos permite configurar los receptores individuales, el acceso a los métodos para dar nombres y los servicios locales. Vamos a configurar los archivos de nombre "tns" u otros tipos de archivos de configuración de métodos para dar nombres.
La función del programa es dar nombres a los descriptores de la cadena de conexión en el equipo cliente e interpretarlos mediante el proceso de listado en el Servidor de la Base de Datos. Esto es todo lo que realiza el programa.
Una herramienta un poco más interesante es la "Net Manager", la cual nos brinda una descripción general, unos perfiles y un nombramiento de servicios. Todos los nombres de servicio "tns" en ésta computadora se seleccionan como "tns". Aquí tenemos muchos otros métodos de nombramiento disponibles y aquí tenemos el receptor de la computadora local. Obviamente, no existe ningún nombre en la opción "Oracle Name Servers" porque no estamos utilizando los nombres del Oracle. Veamos brevemente algunas definiciones. Ésta es la representación "GUI" o gráfica de la configuración "tns" de ésta base de datos. Éste es el nombre del servicio y éste es el tipo de conexión que puede ser "Database Default" o predeterminado, como en éste caso, "Shared Server" o con un servidor compartido… o "Dedicated Server" o con un servidor dedicado, el cual escogimos porque ésta conexión, a través de ésta base de datos o depósito de datos, se utiliza para propósitos de administración.
No podemos apagar de manera remota una base de datos con una conexión de servidor compartido a través de un despachador. Éste es el nombre del host, éste es el puerto por el cual se desplaza y éste es el protocolo que utiliza. Hacemos clic en el botón "Advanced" y podemos adicionar otros elementos. Por ejemplo, podemos cambiar el tamaño de la unidad de datos de la sesión, comunicarnos con otras bases de datos… y cambiar el nombre de la instancia. Estos aspectos pertenecen al siguiente curso, así que no profundizaremos en éste tema. Éstas dos herramientas de configuración de red crean un grupo de archivos de configuración o archivos de configuración del "SQL Net", los cuales se ubican en el directorio raíz del Oracle. En éste caso, estos se ubican en el directorio "e:\oracle\ora92\network\admin". Éste es un archivo de perfiles y su función es dar la orden de utilizar los nombres "tns" como la convención de nombramiento local predeterminada. En otras palabras, ingresamos y al conectarnos desde ésta computadora cliente a un Servidor de Base de Datos, se da la orden de ingresar a éste archivo y buscar ésta descripción. Si usted tiene conocimientos acerca de las redes, los cuales desafortunadamente yo no poseo, sabrá que éste es un nombre de red, así que al realizar una conexión a una base de datos con el nombre de red "test", éste nombre se convierte con ésta configuración, la cual en realidad es una cadena de caracteres. Se nos indica que utilicemos éste protocolo y que nos conectemos a éste servidor por éste puerto, en ésta computadora y con éste nombre de servicio. Sólo se nos indica que vayamos a esa computadora y nos conectemos a ésta base de datos. Éste es el servidor equivalente especializado que ordena la conexión a un proceso del servidor dedicado. Esto significa que ésta base de datos en particular llamada "test" en ésta computadora está configurada en un servidor compartido y la estamos forzando a ser una conexión dedicada, pues queremos administrarla utilizando éste nombre de red para esa base de datos. Ésta es la configuración del archivo receptor en ésta computadora, el cual corresponde a un proceso que recibe los datos que intentan comunicarse con él, por ejemplo, las conexiones "tns" que se comunican con éste receptor desde otras computadoras. Estos se comunican con ésta base de datos mediante éste nombre de host, es decir, el nombre de ésta computadora y a través de éste puerto. Aquí tenemos la definición de cada una de las bases de datos utilizadas por éste receptor. El archivo de configuración del "SQL Net" y los archivos de nombre "tns" son usualmente creados para administrar los elementos mediante las herramientas "Net configuration Assistant" y "Net Manager" del Oracle. Regresamos al Explorer y tenemos los archivos "SNMP", "RO" y "RW", los cuales son archivos de configuración para el agente del Oracle. Generalmente, no modifico estos archivos a menudo aunque es muy útil conocer que al crear una nueva base de datos en la computadora local, ésta se debe configurar mediante el agente. La manera más fácil de hacerlo consiste simplemente en eliminar estos dos archivos, detener y reiniciar el agente en el panel de servicios. De éste modo se rescribirán los dos archivos de configuración.
Tablespace (espacio de tablas)
Una base de datos se divide en unidades lógicas denominadas TABLESPACES. Un tablespace no es un fichero físico en el disco, simplemente es el nombre que tiene un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas, secuencias…) que se van a crear en la base de datos bajo el tablespace indicado (tablas, secuencias…). Un espacio de tablas puede pertenecer sólo a una BD.
Datafile (fichero de datos)
Un datafile es la representación física de un tablespace. Son los "ficheros de datos" donde se almacena la información físicamente. Un datafile puede tener cualquier nombre y extensión (siempre dentro de las limitaciones del sistema operativo), y puede estar localizado en cualquier directorio del disco duro, aunque su localización típica suele ser $ORACLE_HOME/Database. Un datafile tiene un tamaño predefinido en su creación (por ejemplo 100Mb) y este puede ser alterado en cualquier momento. Cuando creemos un datafile, este ocupará tanto espacio en disco como hayamos indicado en su creación, aunque internamente esté vacío. Oracle hace esto para reservar espacio continuo en disco y evitar así la fragmentación. Conforme se vayan creando objetos en ese tablespace, se irá ocupando el espacio que creó inicialmente.
USUARIO
Es un nombre definido en la base de datos que se puede conectar a ella y acceder a determinados objetos según ciertas condiciones que establece el administrador.
Los objetos del diccionario de datos a los que un usuario puede acceder se encuentran en la vista DICTIONARY, que es propiedad del usuario SYS.
CONEXIONES TNS Y CONFIGURACION DEL AGENTE
Las herramientas "Net Configuration Assistant" y "Net Manager" nos permiten configurar la red o los archivos de configuración del "SQL Net". "Fundamentos de Administración de las Bases de Datos del Oracle 2", pero debemos saber cómo iniciar estos programas. La herramienta "Net Configuration Assistant" nos permite configurar los receptores individuales, el acceso a los métodos para dar nombres y los servicios locales. Vamos a configurar los archivos de nombre "tns" u otros tipos de archivos de configuración de métodos para dar nombres.
PRIVILEGIOS DEL SISTEMA
Los roles de sistema se utilizan para distribuir la disponibilidad de los comandos del sistema utilizados para gestionar la BD. Los privilegios más comunes están en la siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de gestión de la BD. La palabra clave ANY significa que ese usuario tiene el privilegio para todos los esquemas en la BD.
OBJETIVOS:
OBJETIVO GENERAL:
Tener conocimientos de Tablespace, Datafile, conexiones tns y configuracion del agente, privilegios del sistema y Usuarios para poder manipular de manera correcta nuestro sistema de gestión de base de datos ORACLE.
OBJETIVO ESPECIFICO:
Conocer de manera detallada como funcionan Tablespace, Datafile, conexiones tns y configuracion del agente, privilegios del sistema y Usuarios con la finalidad de generar nuestras propias BD de acuerdo a las necesidades requeridas por los clientes.
TABLESPACES
El Tablespace System
Cuando se crea una base de datos es obligatorio crear un tablespace inicial en el que se van a crear los usuarios SYS y SYSTEM automáticamente. Estos usuarios son los que tienen la información necesaria para que funcione nuestra base de datos y podamos hacer todo tipo de operaciones como, por ejemplo, crear nuevos usuarios o crear nuevos tablespaces y tablas en esos nuevos tablespaces.
Este tablespace inicial se llama por defecto SYSTEM. Es una pieza clave para un buen funcionamiento de la base de datos ya que en él residen todos los objetos de los usuarios SYS y SYSTEM.
Es muy recomendable crear al menos otro tablespace nuevo distinto al SYSTEM. Así, todos los nuevos usuarios que creemos en nuestra base de datos, junto con todas sus tablas e índices se almacenarán en un tablespace diferente a SYSTEM. Se realiza esta separación para evitar que se bloquee toda la base de datos si ocurre algo grave en el tablespace SYSTEM. Suele ser habitual que para nuestras aplicaciones creemos usuarios y tablas en las que introducimos información y que sin darnos cuenta se llene de información el tablespace en el que están estas tablas. Si no hemos sido previsores, podemos haber llenado el tablespace SYSTEM con lo que es posible que se paralice toda la base de datos.
Manipulando Tablespaces
Ahora que nos hemos hecho una idea acerca de qué es un tablespace, vamos a realizar sobre él las manipulaciones básicas.
Partimos de una base de datos creada y levantada. Nos conectaremos a la misma con el usuario SYSTEM y su contraseña. La contraseña del usuario SYSTEM al crear la base de datos es, por defecto, MANAGER. Como medida de seguridad se recomienda cambiarla cuanto antes. Por lo tanto nos conectaremos bien al SqlPlus mediantesqlplus system/manager, o bien al server manager mediante el comando svrmgrl system/manager.
Crear un Tablespace.
En primer lugar vamos a crear un tablespace llamado Prueba. Esto lo podemos hacer por ejemplo desde el SQLPLUS conectados como system.
Create tablespace prueba datafile '/users/oradata/orcl/prueba01.dbf' size 100M;
Con esta sentencia estamos creando en nuestra base de datos un tablespace nuevo llamado "prueba" y que está formado físicamente por un fichero (datafile) llamado prueba01.dbf de 100 Mbytes y que está en el directorio "/users/oradata/orcl". Esta sentencia crea físicamente dicho fichero.
Aumentar de tamaño un Tablespace.
Para aumentar el tamaño de un tablespace que se nos ha quedado ya pequeño, tenemos varias posibilidades. La primera de ellas es crear un nuevo datafile y asignárselo al tablespace que queremos aumentar. Esto lo podemos hacer con la instrucción siguiente.
Alter tablespace prueba add datafile '/users/oradata/orcl/prueba02.dbf' size 50M;
Con esta sentencia hemos creado un nuevo fichero físico en nuestro directorio /users/oradata/orcl de 50 Mbytes de tamaño y se lo hemos asignado al tablespace "prueba".
Otra posibilidad es ampliar el tamaño de uno de los ficheros físicos o datafiles que forman el tablespace. Esto lo podemos hacer fácilmente con la siguiente instrucción:
Alter datafile '/users/oradata/orcl/prueba01.dbf' resize 150M;
Con esta sentencia lo que hacemos es aumentar el datafile que forma parte de nuestro tablespace en 50 Mbytes.
Tanto en la instrucción de creción como en la de aumentar el tamaño de un tablespace se puede observar fácilmente cómo un datafile pertenece solamente a un tablespace ya que en la propia sentencia se crea el fichero físico o datafile.
Borrando un tablespace.
Para eliminar un tablespace de la base de datos se debe utilizar la sentencia:
Drop tablespace prueba;
Como ver el tamaño de la tablas de un esquema.
select segment_name as table_name, sum(bytes)/(1024*1024) as table_size_meg
from user_extents
where (segment_type='TABLE')
group by segment_name
order by sum(bytes)/(1024*1024) desc
Como ver el tamaño de los tablespace y el espacio utilizado.
SELECT tablespace_name, round(BYTES/1024/1024,0) tamaño, round(user_BYTES/1024/1024,0) tamaño_Usado
FROM dba_data_files b
WHERE tablespace_name NOT LIKE 'TEMP%'
Como ver el espacio libre de los tablespaces de oracle
Para ver el espacio libre que queda en un tablespace tenemos que mirar en la tabla dba_free_space
SELECT tablespace_name,
ROUND(sum(bytes)/1024/1024,0)
FROM dba_free_space
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY tablespace_name;
Con esta consulta obentemos el nombre del tablespace y el espacio en Megas libre
Para ver el espacio total en un tablespace tenemos que mirar en la tabla dba_data_files
SELECT tablespace_name,
round(sum(BYTES/1024/1024),0)
FROM dba_data_files b
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY b.tablespace_name;
Con esta consulta obentemos el nombre del tablespace y el espacio total en Megas que puede llegar a tener
Como enviar un correo en pl/sql
Como hemos dicho en el objetivo de este articulo, cuando el tablespace se esté quedando sin espacio libre, se recibirá un correo.
Vamos a proporcionar un procedimiento para poder enviar un correo.
CREATE OR REPLACE PROCEDURE SEND_MAIL(SENDER IN VARCHAR2, RECIPIENT IN VARCHAR2, SUBJECT IN VARCHAR2, MESSAGE IN VARCHAR2) IS
– SENDER: direccion de correo de quien envia el mail
– RECIPIENT: dirreción de correo a la que va dirigida el mail
– SUBJECT: Es el asunto del correo
– ESSAGE: es el texto del mensaje
mailhost CONSTANT VARCHAR2(30) := ‘mail.server.es’; — servidor de correo , sustituir cadena por una valida
mesg VARCHAR2(1000); — texto del mensaje
mail_conn UTL_SMTP.CONNECTION; — conexion con el servidor smtp
BEGIN
mail_conn := utl_smtp.open_connection(mailhost, 25);
mesg := ‘Date: ‘ ||
TO_CHAR( SYSDATE, ‘dd Mon yy hh24:mi:ss’ ) || CHR(13) || CHR(10) ||
‘From: <’|| Sender ||’>’ || CHR(13) || CHR(10) ||
‘Subject: ‘|| Subject || CHR(13) || CHR(10)||
‘To: ‘||Recipient || CHR(13) || CHR(10) || ” || CHR(13) || CHR(10) || Message;
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, Sender);
utl_smtp.rcpt(mail_conn, Recipient);
utl_smtp.data(mail_conn, mesg);
utl_smtp.quit(mail_conn);
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20004,SQLERRM);
END send_mail;
Sustituir mail.server.es por un servidor smtp valido
Procedimiento para controlar el espacio libre de los tablespaces
A través de este procedimiento comprobamos que queda más de un porcentaje establecido libre en el tablespace con respecto a su espacio total
Si el espacio libre es menor al limite establecido ( portentaje ) del total del tablespace se envia un correo utilizando el procedimiento que se ha explicado en el punto anterior.
CREATE OR REPLACE PROCEDURE ALERTA_ESPACIO (limite number) IS
– CREAMOS EL CURSOR CON EL NOMBRE DE LOS TABLESPACES
– Y ESPACIO LIBRE
CURSOR c_espacio_libre IS
SELECT tablespace_name,
ROUND(sum(bytes)/1024/1024,0)
FROM dba_free_space
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY tablespace_name;
– CREAMOS EL CURSOR CON EL NOMBRE DE LOS TABLESPACES
– Y ESPACIO total
CURSOR c_espacio_total IS
select tablespace_name,
round(sum(BYTES/1024/1024),0)
FROM dba_data_files b
WHERE tablespace_name NOT LIKE ‘TEMP%’
GROUP BY b.tablespace_name;
– DEFINIMOS LAS VARIABLES PARA METER EL CONTENIDO DEL CURSOR
c_nombre VARCHAR2(20);
c_libre NUMBER(10);
c_total NUMBER(10);
v_bbdd VARCHAR(20);
BEGIN
– OBTENEMOS EL NOMBRE DE LA BASE DE DATOS
SELECT name into v_bbdd from v$database;
– ABRIMOS EL CURSOR Y NOS POSICIONAMOS EN LA PRIMERA LINEA
OPEN c_espacio_libre;
OPEN c_espacio_total;
FETCH c_espacio_libre INTO c_nombre,c_libre;
FETCH c_espacio_total INTO c_nombre,c_total;
– EN CASO DE QUE EXISTA RESULTADO REALIZAMOS LAS COMPROBACIONES DE ESPACIO
WHILE c_espacio_libre%found
LOOP
– Comprobacion del tablespace ES MENOR DE limite MEGAS
IF (c_libre * 100) / c_total < limite THEN
send_mail(‘dedireccion@orasite.es’,'paradirecion@orasite.es’,
‘ALERTA DE ESPACIO EN BASE DE DATOS ‘ || v_bbdd,
‘El tablespace con nombre: ‘ || c_nombre || ‘ se esta quedando sin espacio’ ||chr(10)|
‘El tamaño restante es de: ‘ || c_libre || ‘ Megas’);
END IF;
FETCH c_espacio_libre INTO c_nombre, c_libre;
FETCH c_espacio_total INTO c_nombre,c_total;
END LOOP;
CLOSE c_espacio_libre;
CLOSE c_espacio_total;
END;
/
Este procedimiento recibe un parametro, que será el porcentaje que queramos comprobar. Un valor normal sería 10, de esta forma comprobará que el espacio libre sea mayor de un 10 por ciento del tamaño total del tablespace.
En caso de que no sea mayor que ese límite puesto, se enviará un mail. Modificar las direcciones de correo, por direcciones de correo validas.
automatizar la tarea de comprobacion de tablespaces
Esta tarea se puede automatizar poniendo un job ( tarea ) en la base de datos y que compruebe cada x tiempo si los tablespaces se han llenado.
Si no tenemos ningún job en la base de datos, antes de poner un job tenemos que asegurarnos que el valorjob_queue_processes es mayor que 0.
TABLESPACES ONLINE Y OFFLINE
Un tablespace puede estar en dos estados: Online y Offline. Que un tablespace esté online significa que está disponible para operar en él, mientras que si está offline quiere decir que no se puede utilizar. Cuando creamos un tablespace, se crea en estado online y, por lo tanto, podemos crear en dicho tablespace objetos como índices, tablas, etc.
¿Cómo sabemos en qué estado se encuentran nuestros tablespaces?.
Existe una vista que nos da información sobre los tablespaces de nuestra base de datos. Esta vista es la dba_tablespaces. Consultándola podemos conocer qué tablespaces tenemos en nuestra base de datos y en qué estado se encuentran.
select tablespace_name, status from dba_tablespaces;
¿Para qué queremos poner un tablespace offline?.
Hay que tener en cuenta que cuando un tablespace está offline, no se puede acceder a ningún objeto que se encuentre en él, es decir, que si en el tablespace hay tablas, no se podrá hacer consultas ni inserciones ni modificaciones de estas tablas, sin embargo, el resto de los objetos que se encuentran en otros tablespaces de la base de datos si están accesibles. Por lo tanto, pondremos un tablespace offline en general para realizar tareas administrativas.
• Para poder hacer una copia de seguridad del tablespace estando completamente seguros de que nadie está modificando los objetos del tablespace y que no quedan transacciones pendientes sin terminar y que pueden modificar estos objetos.
• Para poder actualizar una aplicación que se basa en los objetos de este tablespace sin que ningún usuario pueda modificar los datos en medio de la actualización.
En un tablespace puede haber objetos de varios tipos, como hemos indicado. Si en un tablespace existen segmentos de rollback activos, no se puede poner offline, primero hay que desactivar los segmentos de rollback activos del tablespace.
¿Cómo sabemos los rollback segments que existen en un tablespace y su estado?. Muy sencillo, con la siguiente sentencia:
select rollback_segment, status, tablespace_name from dba_rollback_segs;
Así podremos ver todos los rollback que tenemos, en qué estado se encuentran (online, offline) y en qué tablespace están. Si comprobamos que en el tablespace que vamos a poner offline tenemos algún segmento de rollback online (activo), debemos ponerlo offline antes que el tablespace. Para desactivar un segmento de rollback, ejecutaremos la siguiente sentencia desde el SqlPlus o desde el server manager.
alter rollback segment nombre_de_segmento offline;
Cuando ya no queden segmentos de rollback en estado online en nuestro tablespace, ya podremos desactivarlo para que no se pueda acceder a él.
alter tablespace nombre_de_tablespace offline;
Finalmente, cuando terminemos nuestras tareas administrativas sobre dicho tablespace, ya podemos activarlo para que todos sus objetos vuelvan a estar accesibles por los usuarios.
alter tablespace nombre_de_tablespace online;
Por supuesto, no debemos olvidar que si hemos tenido que desactivar algún segmento de rollback que se encontraba en nuestro tablespace, ahora deberemos volver a activarlo.
alter rollback segment nombre_de_segmento online;
Una curiosidad sobre los tablespaces que no están disponibles (offline), es que, como ya hemos comentado, no se pueden realizar consultas ni modificaciones ni inserciones en los datos de las tablas que están en ellos, pero si que se pueden eliminar objetos de dicho tablespace, que no es lo mismo que borrar datos de objetos del tablespace.
También es muy habitual que en el diseño de las bases de datos, se creen tablespaces para almacenar los índices de la aplicación y otros distintos para almacenar las tablas o datos. En estos casos, si desactivamos el tablespace en el que se encuentran los índices, podemos seguir accediendo a las tablas y realizar consultas sobre ellas porque su tablespace está accesible.
Por otro lado, es posible que si en servidor Oracle se encuentra con graves problemas para escribir en un tablespace, al cabo de varios intentos lo ponga automáticamente offline.
Tablespaces Read Only
Cuando creamos un tablespace, podemos crear en él todos los objetos que queramos y acceder a ellos y eliminarlos y también consultar los datos de las tablas que se encuentren en este tablespace, así como borrar, insertar y modificar estos datos. Existe la posibilidad de poner un tablespace en un estado en el cual, solamente se pueden consultar los datos de los objetos, no se puede ni borrar ni insertar nada en ellos.
¿Para qué me viene bien un tablespace read only?.
La principal ventaja de un tablespace read only es que, como no se pueden modificar los datos que en él se encuentran, no hace falta hacer backup del mismo. Dependiendo de las apliaciones que tengamos en nuestra base de datos nos puede interesar tener tablespaces read only o no. Por ejemplo, si tenemos una aplicación en la que se pueden consultar cientos de fotos de animales salvajes o de paisajes, podríamos crear un tablespace en el que introducir estas imágenes y luego ponerlo read only.
Generalmente un tablespace de estas características, que sirve de almacenamiento de fotos o temas similares, suele ocupar mucho espacio, por lo que hacer un backup del mismo todos los días puede resultar muy costoso en tiempo y espacio. Además, si no se modifican nunca estas fotos no tiene mucho sentido hacer copia de seguridad del mismo, y no solo eso, podríamos incluso almacenar dicho tablespace en un CDROM en vez de ocupar espacio en disco.
Para poner un tablespace en estado read only, simplemente debemos ejecutar la siguiente instrucción:
alter tablespace nombre_de_tablespace read only;
Como hemos indicado, en un tablespace read only solo se pueden realizar consultas de los datos, por lo tanto, si en el instante de ejecutar esta sentencia se están realizando modificaciones o inserciones o borrado de datos, el servidor espera hasta que acaben para poner el tablespace en estado read only. Para ver si ha quedado en estado read only, simplemente ejecutamos la misma select que al principio para ver la información general de los tablespaces:
select tablespace_name, status from dba_tablespaces;
Si por algún motivo necesitamos modificar los datos que se encuentran almacenados en espace un tablespace read only, simplemente deberemos ponerlo en primer lugar en estado read write y una vez realizada la modificación, volver a ponerlo en su estado read only. La sentencia que debemos ejecutar será:
alter tablespace nombre_de_tablespace read write;
Tenemos un concepto que debe quedar claro. Un tablespace read only no necesita backup, y por tanto, recovery, pero, esto no hay que tomarlo al pie de la letra. Siempre hay que hacer al menos un backup. En primer lugar creamos un tablespace vacío en el que iremos metiendo poco a poco toda la información que nos interesa que, como en el caso que hemos supuesto anteriormente, pueden ser varias tablas que almacenan fotos de animales y paisajes. Cuando ya no vamos a crear nuevas imágenes es cuando ponemos el tablespace read only, pero ahí si debemos hacer una copia de seguridad, backup, y como ya no vamos a tocar nunca más este tablespace será la única. Si por algún motivo decidimos poner este tablespace otra vez read write para crear o borrar datos, después de volver a ponerlo read only deberemos hacer un backup de los nuevos datos.
También hay que diferenciar dos ideas. Por un lado hemos dicho que en un tablespace read only no se pueden modificar, ni insertar ni borrar datos de sus tablas. Sin embargo y, al igual que en los tablespaces offline, si se pueden borrar objetos enteros del tablespace, como por ejemplo un índice o una tabla.
Tablespaces Temporales
Un tablespace temporal es aquél en el que solamente puede haber objetos temporales. No se pueden crear en él objetos permanentes como pueden ser los índices, las tablas o los segmentos de rollback. Están especialmente preparados para optimizar las operaciones en las que se lleven a cabo ordenaciones. Por lo tanto está muy recomendado tener al menos un tablespace temporal en cada base de datos. Algunas de las operaciones que implican realizar ordenaciones son, las selects que tienen group by, las que tienen order by, la creación de índices y analizar índices para calcularles las estadísticas. En todos estos casos, cuando para realizar la ordenación el servidor no encuentra espacio suficente libre en la memoria, utiliza el tablespace temporal. Los rendimientos son muy superiores comparándolos con los tiempos que se emplearía en realizar las ordenaciones en tablespaces normales. Esto se debe a que el mecanismo que se utiliza para reservar y desreservar el espacio en los tablespaces temporales es muy distinto que en los normales ya que está orientado a objetos que crecen mucho y rápido y que a continuación disminuyen totalmente su tamaño y desaparecen.
Para crear un tablespace temporal simplemente hay que añadir la palabra TEMPORARY a la instrucción utilizada para crear tablespaces normales. Siguiendo el ejemplo indicado en la creación de tablespaces, podríamos tener lo siguiente:
Create tablespace prueba datafile '/users/oradata/orcl/prueba01.dbf'
size 100M temporary;
Para indicar a un usuario de base de datos que sus ordenaciones debe hacerlas en un determinado tablespace temporal, hay que lanzar una sentencia como la que sigue.
Alter user nombre_de_usuario temporary tablespace nombre_de_tablespace;
Y para conocer qué usuarios existen en nuestra base de datos y cual es el tablespace temporal que utilizan, podemos consultar la base de datos de la siguiente manera:
Select username, temporary_tablespace from dba_users;
Y finalmente, si queremos conocer qué tablespaces tenemos y cuáles son temporales y cuales son permanentes, podemos consultar la vista que nos da la información sobre los tablespaces, es decir, la vista dba_tablespaces;
Select tablespace_name, contents from dba_tablespaces;
Como nota final apuntaremos que un tablespace permanente puede pasar a temporal y que uno temporal puede pasar a permanente.
DATAFILES
Los datafiles son los ficheros físicos en los que se almacenan los objetos que forman parte de un tablespace. Un datafile pertenece solamente a un tablespace y a una instancia de base de datos. Un tablespace puede estar formado por uno o varios datafiles. Cuando se crea un datafile, se debe indicar su nombre, su ubicación o directorio, el tamaño que va a tener y el tablespace al que va a pertenecer. Además, al crearlos, ocupan ya ese espacio aunque se encuentran totalmente vacíos, es decir, Oracle reserva el espacio para poder ir llenándolo poco a poco con posterioridad. Por supuesto, si no hay sitio suficiente para crear un fichero físico del tamaño indicado, se producirá un error y no se creará dicho fichero.
Cuando se van creando objetos en un tablespace, éstos físicamente se van almacenando en los datafiles asignados a dicho tablespace, es decir, cuando creamos una tabla y vamos insertando datos en ella, estos datos realmente se reparten por los ficheros físicos o datafiles que forman parte del tablespace. No se puede controlar en qué fichero físico se almacenan los datos de un tablespace. Si un tablespace está formado por 2 datafiles y tenemos una tabla en ese tablespace, a medida que vamos insertando filas éstas se almacenarán en cualquiera de los dos datafiles indistintamente, es decir, unas pueden estar en un datafile y otras en otro.
El espacio total disponible en un tablespace es lógicamente la suma de los tamaños que ocupan los ficheros físicos o datafiles que lo forman. Como hemos indicado estos datafiles, al crearlos, están totalmente vacíos, simplemente es un espacio reservado y formateado por Oracle para su uso. A medida que se van creando objetos en ellos como tablas, índices, etc y se van insertando registros en estas tablas, los datafiles se van llenando o, lo que es lo mismo, el tablespace se va llenando.
Creación y Manipulación
La creación de datafiles está estrechamente relacionada con el tablespace al que va a pertenecer. Tenemos varias formas de crear datafiles. Cada vez que se crea un tablespace nuevo, hay que indicar obligatoriamente cual es el datafile que va a pertenecer a dicho tablespace y, en ese momento, se crea tanto el tablespace como su datafile. También se pueden añadir datafiles nuevos a un tablespace que ya existe. Esto se suele hacer cuando un tablespace se está llenando y está a punto de llegar a su capacidad máxima. Al añadir un datafile a un tablespace, se aumenta el espacio disponible en dicho tablespace en tantos megabytes como tenga el datafile nuevo recién creado.
Creación de un nuevo datafile de 50 megabytes junto con un nuevo tablespace:
Create tablespace nombre_tablespace datafile
'/users/oracle/orcl/nombre_datafile.dbf' size 50M;
Una vez creado este tablespace, si con el tiempo queremos añadirle espacio, lo podemos hacer creando un nuevo datafile y asignándoselo al tablespace:
Alter tablespace nombre_tablespace add datafile
'/users/oracle/orcl/nombre_datafile2.dbf' size 100M;
Con estas dos instrucciones hemos creado un tablespace nuevo en nuestra base de datos en el que caben 150 megabytes de información. Este espacio está formado físicamente por dos ficheros llamados nombre_datafile.dbf y nombre_datafile2.dbf que se encuentran en el directorio /users/oracle/orcl de nuestra máquina y que ocupan 50 y 100 Mbytes respectivamente.
Para conocer los datafiles que forman parte de nuestra base de datos, podemos consultar la vista dba_data_files en la que se nos indica por cada datafile o fichero de datos, a qué tablespace pertenece y cuanto espacio total tiene reservado. Es importante recalcar que el espacio que aparece en esta vista es el espacio total que ocupa el fichero físico y no el espacio utilizado de ese fichero, es decir, que si creamos un datafile de 50Mbytes y acto seguido consultamos esta vista, veremos que ocupa 50Mbytes a pesar de estar totalmente vacío. Este dato indica la cantidad de espacio que ocupa el fichero físico, la cantidad de información que podremos introducir en él.
select tablespace_name, file_name, bytes /1024/1024 from dba_data_files;
Tenemos también la posibilidad de aumentar el tamaño de un datafile, es decir, podemos conseguir que un tablespace tenga más sitio vacío aumentando uno o varios de los ficheros físicos que lo forman, en lugar de añadiéndole un nuevo fichero físico. Para aumentar el tamaño de un datafile, podremos utilizar la siguiente instrucción:
alter database datafile '/users/oracle/orcl/nombre_datafile.dbf' resize 100M;
Esta instrucción deja el datafile indicado con un tamaño de 100M, no es que se aumente en 100Mbytes. Esto es fácil de recordar, vale con pensar en que esta instrucción se utiliza también para disminuir el tamaño de un datafile que en un primer lugar lo creamos excesivamente grande. En esta instrucción no se pueden utilizar números negativos, por lo que parece claro que si ponemos un número queremos indicar que será el tamaño que queremos que tenga nuestro datafile. Es importante tener en cuenta que no siempre podemos disminuir el tamaño de un datafile. Los motivos serán explicados en temas más avanzados y tienen que ver con la forma que tiene Oracle de reservar el espacio dentro de los tablespaces y datafiles.
Existe una posibilidad de que Oracle aumente automáticamente el tamaño de sus datafiles cuando éstos se están llenando, para evitar así la intervención manual del administrador de la base de datos. Se puede hacer de varias formas, al crear el tablespace con el datafile, al añadir un nuevo datafile al tablespace o incluso en cualquier otro momento.
Para indicar que queremos que un datafile aumente automáticamente cuando añadimos un nuevo datafile a un tablespace existente podemos utilizar:
alter tablespace nombre_tablespace add datafile nombre_datafile size 100M
autoextend on next 250K maxsize 200M;
Con esta instrucción lo que estamos haciendo es añadir un nuevo datafile llamado nombre_datafile a nuestro tablespace nombre_tablespace con 100Mbytes de tamaño. Además, estamos indicando que queremos que aumente por si mismo cada vez que se llene y que aumente en bloques de 250 Kbytes cada vez. Finalmente le ponemos un tope al tamaño total que queremos que tenga nuestro datafile con la instrucción maxsize, por lo que una vez que llegue a 200 Mbytes, si se llena, no volverá a crecer más.
Para indicar en cualquier momento que queremos que un datafile no crezca más automáticamente, podemos utilizar:
alter database datafile nombre_datafile autoextend off;
Y para indicar en cualquier momento que un determinado datafile crezca automáticamente, la instrucción que ejecutaremos será:
alter database datafile nombre_datafile autoextend on next 1 M maxize 300 M;
Renombrando Datafiles
Existe la posiblidad de cambiarle el nombre a un datafile o de cambiarlo de directorio. Esta operación no consiste simplemente en ir al sistema operativo y cambiarle el nombre, ya que si hiciéramos eso, Oracle no se da cuenta de que hemos movido de sitio un datafile y cuando intenta acceder a información de ese datafile muestra mensajes de error indicando que no lo encuentra.
Hay que distinguir entre los datafiles del tablespace SYSTEM y el resto. Los datafiles del tablespace SYSTEM son especiales y no se pueden mover con la misma facilidad que los demás.
Renombrando datafiles que no son del tablespace SYSTEM
En primer lugar, hay que comprobar cual es nombre y el path completo del fichero a mover y el estado en que se encuentra dicho fichero. Para realizar esta comprobación podemos consultar la vista dba_data_files.
select file_name, status, bytes from dba_data_files;
En file_name se nos indica cual es el nombre del datafile que nos interesa, con todo su path, y además vemos cuanto ocupa. El campo status podremos comprobar si el datafile está disponible (available).
Ahora que sabemos cual es el path y nombre completo de nuestro datafile, tenemos que evitar que se realicen operaciones que modifiquen los datos de los objetos de nuestro tablespace, para que así consigamos tener el contenido del datafile estático. Esto se consigue poniendo el tablespace en estado read only, como se explicó en el tema de los tablespaces.
alter tablespace nombre_tablespace read only;
Para comprobar que realmente está nuestro tablespace en estado read only, podemos consultar la vista dba_tablespaces. En estos momentos, los usuarios de la base de datos, pueden acceder y modificar la información de cualquier tablespace que no sea el que estamos manipulando, en el cual, solamente podrán realizar operaciones de lectura, nunca inserciones ni modificaciones ni borrados de datos.
Es en este instante, cuando sabemos que no se está modificando el contenido de nuestro tablespace y, por lo tanto, de nuestro datafile, cuando debemos ir al sistema operativo y hacer una copia de nuestro datafile con el nuevo nombre y la nueva ubicación. Una vez copiado, comprobamos también desde el sistema operativo que el nuevo datafile ocupa el mismo espacio que el antiguo, para estar seguros de que no ha habido ningún problema en la copia.
Hasta ahora, no le hemos indicado a Oracle que hemos movido de ubicación o de nombre a uno de sus datafiles, para poder indicárselo, debemos asegurarnos que no hay ningún usuario utilizando el tablespace, ni siquiera en modo consulta. Por lo tanto, debemos deshabilitar el tablespace.
alter tablespace nombre_tablespace offline;
Y una vez deshabilitado, indicamos a Oracle el cambio de nombre o de ubicación:
alter database rename file 'viejo_datafile_con_path' to 'nuevo_datafile_con_path';
En estos momentos Oracle ya sabe que cuando tenga que buscar la información de ese datafile debe buscarlo en el nuevo path indicado y con el nuevo nombre. Por lo tanto, si lanzamos la select para ver los datafiles de la base de datos, es decir, la select de la vista dba_data_files, comprobaremos que ha cambiado la información antigua por la nueva. Ahora solamente nos queda activar el tablespace y permitir operaciones de lectura y escritura en él.
alter tablespace nombre_tablespace online;
alter tablespace nombre_tablespace read write;
Por supuesto, antes de realizar cualquier operación que implique modificación de las estructuras de la base de datos, como el renombrado de un datafile, se debe hacer un backup completo de la misma. Una vez realizada la operación también se recomienda hacer un nuevo backup.
Nota: hay que resaltar una vez más, que no se debe mover el datafile desde el sistema operativo sin haber puesto con anterioridad su tablespace offline. De no ser así, si alguien manipula datos durante el tiempo que tarda en hacerse la copia en el sistema operativo, Oracle detecta problemas e invalida el datafile, lo que va a provocar que haya que poner en práctica alguna estrategia de backup para recuperar el datafile invalidado.
Renombrando datafiles del tablespace SYSTEM
El tablespace SYSTEM es especial, por lo tanto, para manipular sus datafiles, hay que hacerlo también de manera especial. Nadie puede trabajar con la base de datos. Por ese motivo, se debe apagar la base de datos y levantarla pero sin abrirla. Los conceptos de apagar la base de datos y levantarla no son objeto de este manual por lo que simplemente se indicarán las instrucciones.
Primeramente se debe apagar o, más coloquialmente, tirar abajo la base de datos. Esto lo hacemos desde el Server Manager, no desde SqlPlus. Nos conectamos al Server Manager como el usuario administrador y con privilegios especiales:
svrmgrl
connect internal
shutdown;
Después de esperar a que se terminen las transacciones activas, las base de datos se apaga y podemos volver a levantarla, también desde el Sever Manager, pero sin abrirla, solamente montándola.
startup mount;
Con esta instrucción hemos levantado la base de datos pero no la hemos abierto, por lo que nadie, excepto otro administrador, puede estar manipulando sus objetos. Ahora podemos realizar la copia de los datafiles del tablespace SYSTEM al nuevo directorio o con el nuevo nombre. Comprobamos que tanto el fichero nuevo como el antiguo tengan el mismo tamaño y a continuación indicamos a Oracle que hemos movido el datafile de la misma manera que en el apartado anterior:
alter database rename file 'viejo_datafile_con_path' to 'nuevo_datafile_con_path';
Finalmente podemos levantar la base de datos para que pueda volver a ser utilizada por todos los usuarios:
alter database open;
GESTIÓN DE USUARIOS EN ORACLE.
Es un nombre definido en la base de datos que se puede conectar a ella y acceder a determinados objetos según ciertas condiciones que establece el administrador.
Los objetos del diccionario de datos a los que un usuario puede acceder se encuentran en la vista DICTIONARY, que es propiedad del usuario SYS.
DESC DICTIONARY;
Con la orden:
SELECT TABLENAME FROM DICTIONARY;
Se visualizan los objetos del diccionario de datos a los que se puede acceder.
Creación deusuarios:
CREATE USER NOMBRE_USUARIO
IDENTIFIED BY CLAVE_ACCESO
[DEFAULT TABLESPACE ESPACIO_TABLA]
[TEMPORARY TABLESPACE ESPACIO_TABLA]
[QUOTA {ENTERO {K | M} | UNLIMITED } ON ESPACIO_TABLA]
[PROFILE PERFIL];
DEFAULT TABLESPACE= Asigna a un usuario el tablespace por defecto para almacenar los objetos que cree. Si no se asigna ninguno, el tablespace por defecto es SYSTEM.
TEMPORARY TABLESPACE= Especifica el nombre del tablespace para trabajar temporales. Si no se especifica ninguno, el tablespace por defecto es SYSTEM.
QUOTA= Asigna un espacio en megabites o kilobites en el tablespace asignado. Si no se especifica esta cláusula, el usuario no tiene cuota asignada y no podrá crear objetos en el tablespace. Para tener espacio y acceso ilimitad a un tablespace es:
GRANT UNLIMITED TABLESPACE NOMBRE_TABLESPACE;
PROFILE= Asigna un perfil a un usuario.
Modificación de usuarios:
ALTER USER NOMBRE_USUARIO
IDENTIFIED BY CLAVE _ACCESO
[DEFAULT TABLESPACE ESPACIO_TABLA]
[TEMPORARY TABLESPACE ESPACIO_TABLA]
[QUOTA {ENTERO {K | M } | UNLIMITED } ON ESPACIO_TABLA
[PROFILE PERFIL];
Borrado de usuarios:
DROP USER USUARIO [CASCADE];
CASCADE= Suprime todos los objetos del usuario antes de borrarlo.
PRIVILEGIOS DEL SISTEMA
Los roles de sistema se utilizan para distribuir la disponibilidad de los comandos del sistema utilizados para gestionar la BD. Los privilegios más comunes están en la siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de gestión de la BD. La palabra clave ANY significa que ese usuario tiene el privilegio para todos los esquemas en la BD. Hay que hacer notar que ANY y PUBLIC no son sinónimos.
Privilegio Capacidades
Manejo de Objetos ...
CREATE ANY INDEX Crear cualquier índice.
CREATE [PUBLIC] SYNONYM Crear sinónimos [públicos].
CREATE [ANY] TABLE Crear tablas. El usuario debe tener cuota en el espacio de tablas, o ha de tener asignado el privilegio UNLIMITED TABLESPACE.
CREATE [ANY] VIEW Crear vistas.
ALTER ANY INDEX Alterar cualquier índice.
ALTER ANY TABLE Alterar cualquier tabla
DROP ANY INDEX Borrar cualquier índice.
DROP ANY SYNONYM Borrar cualquier sinónimo.
DROP PUBLIC SYNONYM Borrar sinónimos públicos.
DROP ANY VIEW Borrar cualquier vista.
DROP ANY TABLE Borrar cualquier tabla.
SELECT ANY TABLE Efectuar selecciones de cualquier tabla o vista.
INSERT ANY TABLE Insertar en cualquier tabla o vista.
DELETE ANY TABLE Borrar filas de cualquier tabla o vista, y también truncar.
ALTER SESSION Alterar los parámetros de la sesión.
CREATE SESSION Conectarse a la BD.
Gestión de la BD ...
CREATE PROFILE Crear perfiles de usuario.
CREATE ROLE Crear roles.
CREATE ROLLBACK SEGMENT Creación de segmentos de rollback.
CREATE TABLESPACE Crear espacios de tablas.
CREATE USER Crear usuarios.
ALTER PROFILE Alterar perfiles existentes.
ALTER ANY ROLE Alterar cualquier rol.
ALTER ROLLBACK SEGMENT Alterar segmentos de rollback.
ALTER TABLESPACE Alterar espacios de tablas.
ALTER USER Alterar usuarios.
DROP PROFILE Borrar un perfil existente.
DROP ANY ROLE Borrar cualquier rol.
DROP ROLLBACK SEGMENT Borrar un segmento de rollback existente.
DROP TABLESPACE Borrar un espacio de tablas.
DROP USER Borrar un usuario. Añadir CASCADE si el usuario posee objetos.
ALTER DATABASE Permite una sentencia ALTER DATABASE.
GRANT ANY PRIVILEGE Otorgar cualquiera de estos privilegios.
GRANT ANY ROLE Otorgar cualquier rol a un usario.
UNLIMITED TABLESPACE Puede usar una cantidad de almacenamiento ilimitada.
DROP PROFILE Borrar un perfil existente.
rupo Comandos Auditados
CLUSTER Todas las sentencias que afecten a clusters.
DATABASE LINK Todas las sentencias que afecten a enlaces de BD.
EXISTS Todas las sentencias que fallen porque ya existe un objeto en la BD.
INDEX Todas las sentencias que afecten a índices.
NOT EXISTS Todas las sentencias que fallen porque un determinado objeto no existe.
PROCEDURE Todas las sentencias que afecten a procedimientos.
PROFILE Todas las sentencias que afecten a perfiles.
PUBLIC DATABASE LINK Todas las sentencias que afecten a enlaces públicos de BD.
PUBLIC SINONYM Todas las sentencias que afecten a sinónimos públicos.
ROLE Todas las sentencias que afecten a roles.
ROLLBACK SEGMENT Todas las sentencias que afecten a segmentos de rollback.
SEQUENCE Todas las sentencias que afecten a secuencias.
SESSION Todas las sentencias de acceso a la BD.
SYNONYM Todas las sentencias que afecten a sinónimos.
SYSTEM AUDIT Todas las sentencias AUDIT y NOAUDIT.
SYSTEM GRANT Todas las sentencias afecten a privilegios.
TABLE Todas las sentencias que afecten a tablas.
TABLESPACE Todas las sentencias que afecten a espacios de tablas.
TRIGGER Todas las sentencias que afecten a disparadores.
USER Todas las sentencias que afecten a las cuentas de usuarios.
VIEW Todas las sentencias que afecten a vistas.
Valor Descripción
NONE Deshabilita la auditoría
BD Habilita la auditoría, escribiendo en la tabla SYS.AUD$.
OS Habilita la auditoría, dejando al SO su gestión.
Vista Contenidos
DBA_ROLES Nombres de los roles y su estado del password.
DBA_ROLES_PRIVS Usuarios a los que han sido otorgados roles.
DBA_SYS_PRIVS Usuarios a los que han sido otorgados privilegios del sistema.
DBA_TAB_PRIVS Usuarios a los que han sido otorgados privilegios sobre objetos.
DBA_COL_PRIVS Usuarios a los que han sido otorgados privilegios sobre columnas de tablas.
ROLE_ROLE_PRIVS Roles que han sido otorgados a otros roles.
ROLE_SYS_PRIVS Privilegios de sistema que han sido otorgados a roles.
ROLE_TAB_PRIVS Privilegios de tabla que han sido otorgados a roles.
Privilegio Capacidades Otorgadas
SELECT Puede consultar a un objeto.
INSERT Puede insertar filas en una tabla o vista. Puede especificarse las columnas donde se permite insertar dentro de la tabla o vista.
UPDATE Puede actualizar filas en una tabla o vista. Puede especificarse las columnas donde se permite actualizar dentro de la tabla o vista.
DELETE Puede borrar filas dentro de la tabla o vista.
ALTER Puede alterar la tabla.
INDEX Puede crear índices de una tabla.
REFERENCES Puede crear claves ajenas que referencie a esta tabla.
EXECUTE Puede ejecutar un procedimieto, paquete o función.
Recurso Descripción
SESSIONES_PER_USER El número de sesiones concurrentes que un usuario puede tener en una instancia.
CPU_PER_SESSION El tiempo de CPU, en centenas de segundos, que una sesión puede utilizar.
CONNECT_TIME El número de minutos que una sesión puede permanecer activa.
IDLE_TIME El número de minutos que una sesión puede permanecer sin que sea utilizada de manera activa.
LOGICAL_READS_PER_SESSION El número de bloques de datos que se pueden leer en una sesión.
LOGICAL_READS_PER_CALL El número de bloques de datos que se pueden leer en una operación.
PRIVATE_SGA La cantidad de espacio privado que una sesión puede reservar en la zona de SQL compartido de la SGA.
COMPOSITE_LIMIT El número de total de recursos por sesión, en unidades de servicio. Esto resulta de un calculo ponderado de CPU_PER_SESSION, CONNECT_TIME,LOGICAL_READS_PER_SESSION y PRIVATE_SGA, cuyos pesos se pueden variar con el comando ALTER RESOURCE COST.
Parámetro Significado
Username Nombre del Usuario (Esquema)
Password Palabra clave de la cuenta. Puede ser asociada directamente a una cuenta del sistema operativo.
Default Tablespace Espacio de tablas por defecto en el que los objetos de este usuario serán creados. Esto no da al usuario derechos de crear objetos.
Temporary Tablespace El espacio de tablas en el que se almacenarán los segmentos temporales de las ordenaciones.
Quota Espacio máximo que puede ocupar en un espacio de tablas.
Profile Asigna un perfil al usuario. Los perfiles se utilizan para restringir el uso de recursos como el tiempo de CPU.
CONEXIONES TNS Y CONFIGURACION DEL AGENTE
Las herramientas "Net Configuration Assistant" y "Net Manager" nos permiten configurar la red o los archivos de configuración del "SQL Net". "Fundamentos de Administración de las Bases de Datos del Oracle 2", pero debemos saber cómo iniciar estos programas. La herramienta "Net Configuration Assistant" nos permite configurar los receptores individuales, el acceso a los métodos para dar nombres y los servicios locales. Vamos a configurar los archivos de nombre "tns" u otros tipos de archivos de configuración de métodos para dar nombres.
La función del programa es dar nombres a los descriptores de la cadena de conexión en el equipo cliente e interpretarlos mediante el proceso de listado en el Servidor de la Base de Datos. Esto es todo lo que realiza el programa.
Una herramienta un poco más interesante es la "Net Manager", la cual nos brinda una descripción general, unos perfiles y un nombramiento de servicios. Todos los nombres de servicio "tns" en ésta computadora se seleccionan como "tns". Aquí tenemos muchos otros métodos de nombramiento disponibles y aquí tenemos el receptor de la computadora local. Obviamente, no existe ningún nombre en la opción "Oracle Name Servers" porque no estamos utilizando los nombres del Oracle. Veamos brevemente algunas definiciones. Ésta es la representación "GUI" o gráfica de la configuración "tns" de ésta base de datos. Éste es el nombre del servicio y éste es el tipo de conexión que puede ser "Database Default" o predeterminado, como en éste caso, "Shared Server" o con un servidor compartido… o "Dedicated Server" o con un servidor dedicado, el cual escogimos porque ésta conexión, a través de ésta base de datos o depósito de datos, se utiliza para propósitos de administración.
No podemos apagar de manera remota una base de datos con una conexión de servidor compartido a través de un despachador. Éste es el nombre del host, éste es el puerto por el cual se desplaza y éste es el protocolo que utiliza. Hacemos clic en el botón "Advanced" y podemos adicionar otros elementos. Por ejemplo, podemos cambiar el tamaño de la unidad de datos de la sesión, comunicarnos con otras bases de datos… y cambiar el nombre de la instancia. Estos aspectos pertenecen al siguiente curso, así que no profundizaremos en éste tema. Éstas dos herramientas de configuración de red crean un grupo de archivos de configuración o archivos de configuración del "SQL Net", los cuales se ubican en el directorio raíz del Oracle. En éste caso, estos se ubican en el directorio "e:\oracle\ora92\network\admin". Éste es un archivo de perfiles y su función es dar la orden de utilizar los nombres "tns" como la convención de nombramiento local predeterminada. En otras palabras, ingresamos y al conectarnos desde ésta computadora cliente a un Servidor de Base de Datos, se da la orden de ingresar a éste archivo y buscar ésta descripción. Si usted tiene conocimientos acerca de las redes, los cuales desafortunadamente yo no poseo, sabrá que éste es un nombre de red, así que al realizar una conexión a una base de datos con el nombre de red "test", éste nombre se convierte con ésta configuración, la cual en realidad es una cadena de caracteres. Se nos indica que utilicemos éste protocolo y que nos conectemos a éste servidor por éste puerto, en ésta computadora y con éste nombre de servicio. Sólo se nos indica que vayamos a esa computadora y nos conectemos a ésta base de datos. Éste es el servidor equivalente especializado que ordena la conexión a un proceso del servidor dedicado. Esto significa que ésta base de datos en particular llamada "test" en ésta computadora está configurada en un servidor compartido y la estamos forzando a ser una conexión dedicada, pues queremos administrarla utilizando éste nombre de red para esa base de datos. Ésta es la configuración del archivo receptor en ésta computadora, el cual corresponde a un proceso que recibe los datos que intentan comunicarse con él, por ejemplo, las conexiones "tns" que se comunican con éste receptor desde otras computadoras. Estos se comunican con ésta base de datos mediante éste nombre de host, es decir, el nombre de ésta computadora y a través de éste puerto. Aquí tenemos la definición de cada una de las bases de datos utilizadas por éste receptor. El archivo de configuración del "SQL Net" y los archivos de nombre "tns" son usualmente creados para administrar los elementos mediante las herramientas "Net configuration Assistant" y "Net Manager" del Oracle. Regresamos al Explorer y tenemos los archivos "SNMP", "RO" y "RW", los cuales son archivos de configuración para el agente del Oracle. Generalmente, no modifico estos archivos a menudo aunque es muy útil conocer que al crear una nueva base de datos en la computadora local, ésta se debe configurar mediante el agente. La manera más fácil de hacerlo consiste simplemente en eliminar estos dos archivos, detener y reiniciar el agente en el panel de servicios. De éste modo se rescribirán los dos archivos de configuración.
ARQUITECTURA CLIENTE SERVIDOR
ARQUITECTURA CLIENTE SERVIDOR
INTRODUCCIÒN
La arquitectura cliente servidor son justamente el elemento llamado cliente y el otro elemento llamado servidor". Por ejemplo dentro de un ambiente multimedia, el elemento cliente seria el dispositivo que puede observar el vídeo, cuadros y texto, o reproduce el audio distribuido por el elemento servidor.
Por otro lado el cliente también puede ser una computadora personal o una televisión inteligente que posea la capacidad de entender datos digitales. Dentro de este caso el elemento servidor es el depositario del vídeo digital, audio, fotografías digitales y texto y los distribuye bajo demanda de ser una maquina que cuenta con la capacidad de almacenar los datos y ejecutar todo el software que brinda éstos al cliente.
C/S es una relación entre procesos corriendo en máquinas separadas
El servidor (S) es un proveedor de servicios.
El cliente (C) es un consumidor de servicios.
C y S Interactúan por un mecanismo de pasaje de mensajes:
Pedido de servicio.
Respuesta
OBJETIVOS:
OBJETIVO GENERAL:
Satisfacer La necesidad que tienen las organizaciones (empresas o instituciones públicas o privadas), de realizar sus operaciones más ágil y eficientemente, debido a la creciente presión competitiva a la que están sometidas, lo cual se traduce en la necesidad de que su personal sea más productivo, que se reduzcan los costos y gastos de operación, al mismo tiempo que se generan productos y servicios más rápidamente y con mejor calidad.
OBJETIVO ESPECIFICO:
Establecer una infraestructura de procesamiento de información, que cuente con los elementos requeridos para proveer información adecuada, exacta y oportuna en la toma de decisiones y para proporcionar un mejor servicio a los clientes.
EVOLUCIÓN DE LA ARQUITECTURA CLIENTE SERVIDOR
La era de la computadora central
“Desde sus inicios el modelo de administración de datos a través de computadoras se basaba en el uso de terminales remotas, que se conectaban de manera directa a una computadora central”. Dicha computadora central se encargaba de prestar servicios caracterizados por que cada servicio se prestaba solo a un grupo exclusivo de usuarios.
La era de las computadoras dedicadas
Esta es la era en la que cada servicio empleaba su propia computadora que permitía que los usuarios de ese servicio se conectaran directamente. Esto es consecuencia de la aparición de computadoras pequeñas, de fácil uso, más baratas y más poderosas de las convencionales.
La era de la conexión libre
Hace más de 10 años que la computadoras escritorio aparecieron de manera masiva. Esto permitió que parte apreciable de la carga de trabajo de cómputo tanto en el ámbito de cálculo como en el ámbito de la presentación se lleven a cabo desde el escritorio del usuario. En muchos de los casos el usuario obtiene la información que necesita de alguna computadora de servicio. Estas computadoras de escritorio se conectan a las computadoras de servicio empleando software que permite la emulación de algún tipo de terminal. En otros de los casos se les transfiere la información haciendo uso de recursos magnéticos o por trascripción.
La era del cómputo a través de redes
Esta es la era que está basada en el concepto de redes de computadoras, en la que la información reside en una o varias computadoras, los usuarios de esta información hacen uso de computadoras para laborar y todas ellas se encuentran conectadas entre si. Esto brinda la posibilidad de que todos los usuarios puedan acceder a la información de todas las computadoras y a la vez que los diversos sistemas intercambien información.
La era de la arquitectura cliente servidor
“En esta arquitectura la computadora de cada uno de los usuarios, llamada cliente, produce una demanda de información a cualquiera de las computadoras que proporcionan información, conocidas como servidores”estos últimos responden a la demanda del cliente que la produjo.
Los clientes y los servidores pueden estar conectados a una red local o una red amplia, como la que se puede implementar en una empresa o a una red mundial como lo es la Internet.
Bajo este modelo cada usuario tiene la libertad de obtener la información que requiera en un momento dado proveniente de una o varias fuentes locales o distantes y de procesarla como según le convenga. Los distintos servidores también pueden intercambiar información dentro de esta arquitectura.
QUE ES UNA ARQUITECTURA
Una arquitectura es un entramado de componentes funcionales que aprovechando diferentes estándares, convenciones, reglas y procesos, permite integrar una amplia gama de productos y servicios informáticos, de manera que pueden ser utilizados eficazmente dentro de la organización.
Debemos señalar que para seleccionar el modelo de una arquitectura, hay que partir del contexto tecnológico y organizativo del momento y, que la arquitectura Cliente/Servidor requiere una determinada especialización de cada uno de los diferentes componentes que la integran.
QUE ES UN CLIENTE
Es el que inicia un requerimiento de servicio. El requerimiento inicial puede convertirse en múltiples requerimientos de trabajo a través de redes LAN o WAN. La ubicación de los datos o de las aplicaciones es totalmente transparente para el cliente.
QUE ES UN SERVIDOR
Es cualquier recurso de cómputo dedicado a responder a los requerimientos del cliente. Los servidores pueden estar conectados a los clientes a través de redes LANs o WANs, para proveer de múltiples servicios a los clientes y ciudadanos tales como impresión, acceso a bases de datos, fax, procesamiento de imágenes, etc.

Este es el ejemplo grafico de la arquitectura cliente servidor.
ELEMENTOS DE LA ARQUITECTURA CLIENTE/SERVIDOR
En esta aproximación, y con el objetivo de definir y delimitar el modelo de referencia de una arquitectura Cliente/Servidor, debemos identificar los componentes que permitan articular dicha arquitectura, considerando que toda aplicación de un sistema de información está caracterizada por tres componentes básicos:
• Presentación/Captación de Información
• Procesos
• Almacenamiento de la Información
Los cuales se suelen distribuir tal como se presenta en la figura:
Aplicaciones Cliente/Servidor

Y se integran en una arquitectura Cliente/Servidor en base a los elementos que caracterizan dicha arquitectura, es decir:
• Puestos de Trabajo
• Comunicaciones
• Servidores
Tal como se presenta en la figura:
Arquitectura Cliente/Servidor

De estos elementos debemos destacar:
El Puesto de Trabajo o Cliente
Una Estación de trabajo o microcomputador (PC: Computador Personal) conectado a una red, que le permite acceder y gestionar una serie de recursos» el cual se perfila como un puesto de trabajo universal. Nos referimos a un microcomputador conectado al sistema de información y en el que se realiza una parte mayoritaria de los procesos.
Se trata de un fenómeno en el sector informático. Aquellos responsables informáticos que se oponen a la utilización de los terminales no programables, acaban siendo marginados por la presión de los usuarios.
Debemos destacar que el puesto de trabajo basado en un microcomputador conectado a una red, favorece la flexibilidad y el dinamismo en las organizaciones. Entre otras razones, porque permite modificar la ubicación de los puestos de trabajo, dadas las ventajas de la red.
Los Servidores o Back-end
Una máquina que suministra una serie de servicios como Bases de Datos, Archivos, Comunicaciones,...).
Los Servidores, según la especialización y los requerimientos de los servicios que debe suministrar pueden ser:
• Mainframes
• Miniordenadores
• Especializados (Dispositivos de Red, Imagen, etc.)
Una característica a considerar es que los diferentes servicios, según el caso, pueden ser suministrados por un único Servidor o por varios Servidores especializados.
Las Comunicaciones
En sus dos vertientes:
• Infraestructura de redes
• Infraestructura de comunicaciones
Infraestructura de redes
Componentes Hardware y Software que garantizan la conexión física y la transferencia de datos entre los distintos equipos de la red.
Infraestructura de comunicaciones
Componentes Hardware y Software que permiten la comunicación y su gestión, entre los clientes y los servidores.
La arquitectura Cliente/Servidor es el resultado de la integración de dos culturas. Por un lado, la del Mainframe que aporta capacidad de almacenamiento, integridad y acceso a la información y, por el otro, la del computador que aporta facilidad de uso (cultura de PC), bajo costo, presentación atractiva (aspecto lúdico) y una amplia oferta en productos y aplicaciones.
CARACTERISTICAS DEL MODELO CLIENTE/SERVIDOR
En el modelo CLIENTE/SERVIDOR podemos encontrar las siguientes características:
1. El Cliente y el Servidor pueden actuar como una sola entidad y también pueden actuar como entidades separadas, realizando actividades o tareas independientes.
2. Las funciones de Cliente y Servidor pueden estar en plataformas separadas, o en la misma plataforma.

3. Un servidor da servicio a múltiples clientes en forma concurrente.
4. Cada plataforma puede ser escalable independientemente. Los cambios realizados en las plataformas de los Clientes o de los Servidores, ya sean por actualización o por reemplazo tecnológico, se realizan de una manera transparente para el usuario final.
5. La interrelación entre el hardware y el software están basados en una infraestructura poderosa, de tal forma que el acceso a los recursos de la red no muestra la complejidad de los diferentes tipos de formatos de datos y de los protocolos.
6. Un sistema de servidores realiza múltiples funciones al mismo tiempo que presenta una imagen de un solo sistema a las estaciones Clientes. Esto se logra combinando los recursos de cómputo que se encuentran físicamente separados en un solo sistema lógico, proporcionando de esta manera el servicio más efectivo para el usuario final.
También es importante hacer notar que las funciones Cliente/Servidor pueden ser dinámicas. Ejemplo, un servidor puede convertirse en cliente cuando realiza la solicitud de servicios a otras plataformas dentro de la red.
Su capacidad para permitir integrar los equipos ya existentes en una organización, dentro de una arquitectura informática descentralizada y heterogénea.
7. Además se constituye como el nexo de unión mas adecuado para reconciliar los sistemas de información basados en mainframes o minicomputadores, con aquellos otros sustentados en entornos informáticos pequeños y estaciones de trabajo.
8. Designa un modelo de construcción de sistemas informáticos de carácter distribuido.
1. Su representación típica es un centro de trabajo (PC), en donde el usuario dispone de sus propias aplicaciones de oficina y sus propias bases de datos, sin dependencia directa del sistema central de información de la organización, al tiempo que puede acceder a los
2. recursos de este host central y otros sistemas de la organización ponen a su servicio.
En conclusión, Cliente/Servidor puede incluir múltiples plataformas, bases de datos, redes y sistemas operativos. Estos pueden ser de distintos proveedores, en arquitecturas propietarias y no propietarias y funcionando todos al mismo tiempo. Por lo tanto, su implantación involucra diferentes tipos de estándares: APPC, TCP/IP, OSI, NFS, DRDA corriendo sobre DOS, OS/2, Windows o PC UNIX, en Token¬Ring, Ethernet, FDDI o medio coaxial, sólo por mencionar algunas de las posibilidades.
TIPOS DE CLIENTES
1. “cliente flaco”:
Servidor rápidamente saturado.
Gran circulación de datos de interfase en la red.
2. “cliente gordo”:
Casi todo el trabajo en el cliente.
No hay centralización de la gestión de la BD.
Gran circulación de datos inútiles en la red.

TIPOS DE SERVIDOR
Servidores de archivos
Servidor donde se almacena archivos y aplicaciones de productividad como por ejemplo procesadores de texto, hojas de cálculo, etc.
Servidores de bases de datos
Servidor donde se almacenan las bases de datos, tablas, índices. Es uno de los servidores que más carga tiene.
Servidores de transacciones
Servidor que cumple o procesa todas las transacciones. Valida primero y recién genera un pedido al servidor de bases de datos.
Servidores de Groupware
Servidor utilizado para el seguimiento de operaciones dentro de la red.
Servidores de objetos
Contienen objetos que deben estar fuera del servidor de base de datos. Estos objetos pueden ser videos, imágenes, objetos multimedia en general.
Servidores Web
Se usan como una forma inteligente para comunicación entre empresas a través de Internet.
Este servidor permite transacciones con el acondicionamiento de un browser específico.
ESTILOS DEL MODELO CLIENTE SERVIDOR
PRESENTACIÓN DISTRIBUIDA
1. Se distribuye la interfaz entre el cliente y la plataforma servidora.
2. La aplicación y los datos están ambos en el servidor.
3. Similar a la arquitectura tradicional de un Host y Terminales.
4. El PC se aprovecha solo para mejorar la interfaz gráfica del usuario.
Ventajas
Revitaliza los sistemas antiguos.
Bajo costo de desarrollo.
No hay cambios en los sistemas existentes.
Desventajas
El sistema sigue en el Host.
No se aprovecha la GUI y/o LAN.
La interfaz del usuario se mantiene en muchas plataformas.
PRESENTACIÓN REMOTA
1. La interfaz para el usuario esta completamente en el cliente.
2. La aplicación y los datos están en el servidor.
Ventajas
La interfaz del usuario aprovecha bien la GUI y la LAN.
La aplicación aprovecha el Host.
Adecuado para algunos tipos de aplicaciones de apoyo a la toma de decisiones.
Desventajas
Las aplicaciones pueden ser complejas de desarrollar.
Los programas de la aplicación siguen en el Host.
El alto volumen de tráfico en la red puede hacer difícil la operación de aplicaciones muy pesadas.
LÓGICA DISTRIBUIDA
1. La interfaz esta en el cliente.
2. La base de datos esta en el servidor.
3. La lógica de la aplicación esta distribuida entre el cliente y el servidor.
Ventajas
Arquitectura mas corriente que puede manejar todo tipo de aplicaciones.
Los programas del sistema pueden distribuirse al nodo mas apropiado.
Pueden utilizarse con sistemas existentes.
Desventajas
Es difícil de diseñar.
Difícil prueba y mantenimiento si los programas del cliente y el servidor están hechos en distintos lenguajes de programación.
No son manejados por la GUI 4GL.
ADMINISTRACIÓN DE DATOS REMOTA
1. En el cliente residen tanto la interfaz como los procesos de la aplicación.
2. Las bases de datos están en el servidor.
3. Es lo que comúnmente imaginamos como aplicación cliente servidor
Ventajas
Configuración típica de la herramienta GUI 4GL.
Muy adecuada para las aplicaciones de apoyo a las decisiones del usuario final.
Fácil de desarrollar ya que los programas de aplicación no están distribuidos.
Se descargan los programas del Host.
Desventajas
No maneja aplicaciones pesadas eficientemente.
La totalidad de los datos viaja por la red, ya que no hay procesamiento que realice el Host.
BASE DE DATOS DISTRIBUIDA
1. La interfaz, los procesos de la aplicación, y , parte de los datos de la base de datos están en cliente.
2. El resto de los datos están en el servidor.
Ventajas
Configuración soportada por herramientas GUI 4GL.
Adecuada para las aplicaciones de apoyo al usuario final.
Apoya acceso a datos almacenados en ambientes heterogéneos.
Ubicación de los datos es transparente para la aplicación.
Desventajas
No maneja aplicaciones grandes eficientemente.
El acceso a la base de datos distribuida es dependiente del proveedor del software administrador de bases de datos.
DEFINICIÓN DE MIDDLEWARE
“Es un término que abarca a todo el software distribuido necesario para el soporte de interacciones entre Clientes y Servidores”.
Es el enlace que permite que un cliente obtenga un servicio de un servidor.
Este se inicia en el modulo de API de la parte del cliente que se emplea para invocar un servicio real; esto pertenece a los dominios del servidor. Tampoco a la interfaz del usuario ni la a la lógica de la aplicación en los dominios del cliente.
Tipos de Middleware
Existen dos tipos de middleware:
1. Middleware general
Este tipo permite la impresión de documentos remotos, manejos de transacciones, autenticación de usuarios, etc.
2. Middleware de servicios específicos
Generalmente trabajan orientados a mensajes. Trabaja uno sola transacción a la vez.
FUNCIONES DE UN PROGRAMA SERVIDOR
1. Espera las solicitudes de los clientes.
2. Ejecuta muchas solicitudes al mismo tiempo.
3. Atiende primero a los clientes VIP.
4. Emprende y opera actividades de tareas en segundo plano.
5. Se mantiene activa en forma permanente.
INTRODUCCIÒN
La arquitectura cliente servidor son justamente el elemento llamado cliente y el otro elemento llamado servidor". Por ejemplo dentro de un ambiente multimedia, el elemento cliente seria el dispositivo que puede observar el vídeo, cuadros y texto, o reproduce el audio distribuido por el elemento servidor.
Por otro lado el cliente también puede ser una computadora personal o una televisión inteligente que posea la capacidad de entender datos digitales. Dentro de este caso el elemento servidor es el depositario del vídeo digital, audio, fotografías digitales y texto y los distribuye bajo demanda de ser una maquina que cuenta con la capacidad de almacenar los datos y ejecutar todo el software que brinda éstos al cliente.
C/S es una relación entre procesos corriendo en máquinas separadas
El servidor (S) es un proveedor de servicios.
El cliente (C) es un consumidor de servicios.
C y S Interactúan por un mecanismo de pasaje de mensajes:
Pedido de servicio.
Respuesta
OBJETIVOS:
OBJETIVO GENERAL:
Satisfacer La necesidad que tienen las organizaciones (empresas o instituciones públicas o privadas), de realizar sus operaciones más ágil y eficientemente, debido a la creciente presión competitiva a la que están sometidas, lo cual se traduce en la necesidad de que su personal sea más productivo, que se reduzcan los costos y gastos de operación, al mismo tiempo que se generan productos y servicios más rápidamente y con mejor calidad.
OBJETIVO ESPECIFICO:
Establecer una infraestructura de procesamiento de información, que cuente con los elementos requeridos para proveer información adecuada, exacta y oportuna en la toma de decisiones y para proporcionar un mejor servicio a los clientes.
EVOLUCIÓN DE LA ARQUITECTURA CLIENTE SERVIDOR
La era de la computadora central
“Desde sus inicios el modelo de administración de datos a través de computadoras se basaba en el uso de terminales remotas, que se conectaban de manera directa a una computadora central”. Dicha computadora central se encargaba de prestar servicios caracterizados por que cada servicio se prestaba solo a un grupo exclusivo de usuarios.
La era de las computadoras dedicadas
Esta es la era en la que cada servicio empleaba su propia computadora que permitía que los usuarios de ese servicio se conectaran directamente. Esto es consecuencia de la aparición de computadoras pequeñas, de fácil uso, más baratas y más poderosas de las convencionales.
La era de la conexión libre
Hace más de 10 años que la computadoras escritorio aparecieron de manera masiva. Esto permitió que parte apreciable de la carga de trabajo de cómputo tanto en el ámbito de cálculo como en el ámbito de la presentación se lleven a cabo desde el escritorio del usuario. En muchos de los casos el usuario obtiene la información que necesita de alguna computadora de servicio. Estas computadoras de escritorio se conectan a las computadoras de servicio empleando software que permite la emulación de algún tipo de terminal. En otros de los casos se les transfiere la información haciendo uso de recursos magnéticos o por trascripción.
La era del cómputo a través de redes
Esta es la era que está basada en el concepto de redes de computadoras, en la que la información reside en una o varias computadoras, los usuarios de esta información hacen uso de computadoras para laborar y todas ellas se encuentran conectadas entre si. Esto brinda la posibilidad de que todos los usuarios puedan acceder a la información de todas las computadoras y a la vez que los diversos sistemas intercambien información.
La era de la arquitectura cliente servidor
“En esta arquitectura la computadora de cada uno de los usuarios, llamada cliente, produce una demanda de información a cualquiera de las computadoras que proporcionan información, conocidas como servidores”estos últimos responden a la demanda del cliente que la produjo.
Los clientes y los servidores pueden estar conectados a una red local o una red amplia, como la que se puede implementar en una empresa o a una red mundial como lo es la Internet.
Bajo este modelo cada usuario tiene la libertad de obtener la información que requiera en un momento dado proveniente de una o varias fuentes locales o distantes y de procesarla como según le convenga. Los distintos servidores también pueden intercambiar información dentro de esta arquitectura.
QUE ES UNA ARQUITECTURA
Una arquitectura es un entramado de componentes funcionales que aprovechando diferentes estándares, convenciones, reglas y procesos, permite integrar una amplia gama de productos y servicios informáticos, de manera que pueden ser utilizados eficazmente dentro de la organización.
Debemos señalar que para seleccionar el modelo de una arquitectura, hay que partir del contexto tecnológico y organizativo del momento y, que la arquitectura Cliente/Servidor requiere una determinada especialización de cada uno de los diferentes componentes que la integran.
QUE ES UN CLIENTE
Es el que inicia un requerimiento de servicio. El requerimiento inicial puede convertirse en múltiples requerimientos de trabajo a través de redes LAN o WAN. La ubicación de los datos o de las aplicaciones es totalmente transparente para el cliente.
QUE ES UN SERVIDOR
Es cualquier recurso de cómputo dedicado a responder a los requerimientos del cliente. Los servidores pueden estar conectados a los clientes a través de redes LANs o WANs, para proveer de múltiples servicios a los clientes y ciudadanos tales como impresión, acceso a bases de datos, fax, procesamiento de imágenes, etc.

Este es el ejemplo grafico de la arquitectura cliente servidor.
ELEMENTOS DE LA ARQUITECTURA CLIENTE/SERVIDOR
En esta aproximación, y con el objetivo de definir y delimitar el modelo de referencia de una arquitectura Cliente/Servidor, debemos identificar los componentes que permitan articular dicha arquitectura, considerando que toda aplicación de un sistema de información está caracterizada por tres componentes básicos:
• Presentación/Captación de Información
• Procesos
• Almacenamiento de la Información
Los cuales se suelen distribuir tal como se presenta en la figura:
Aplicaciones Cliente/Servidor

Y se integran en una arquitectura Cliente/Servidor en base a los elementos que caracterizan dicha arquitectura, es decir:
• Puestos de Trabajo
• Comunicaciones
• Servidores
Tal como se presenta en la figura:
Arquitectura Cliente/Servidor

De estos elementos debemos destacar:
El Puesto de Trabajo o Cliente
Una Estación de trabajo o microcomputador (PC: Computador Personal) conectado a una red, que le permite acceder y gestionar una serie de recursos» el cual se perfila como un puesto de trabajo universal. Nos referimos a un microcomputador conectado al sistema de información y en el que se realiza una parte mayoritaria de los procesos.
Se trata de un fenómeno en el sector informático. Aquellos responsables informáticos que se oponen a la utilización de los terminales no programables, acaban siendo marginados por la presión de los usuarios.
Debemos destacar que el puesto de trabajo basado en un microcomputador conectado a una red, favorece la flexibilidad y el dinamismo en las organizaciones. Entre otras razones, porque permite modificar la ubicación de los puestos de trabajo, dadas las ventajas de la red.
Los Servidores o Back-end
Una máquina que suministra una serie de servicios como Bases de Datos, Archivos, Comunicaciones,...).
Los Servidores, según la especialización y los requerimientos de los servicios que debe suministrar pueden ser:
• Mainframes
• Miniordenadores
• Especializados (Dispositivos de Red, Imagen, etc.)
Una característica a considerar es que los diferentes servicios, según el caso, pueden ser suministrados por un único Servidor o por varios Servidores especializados.
Las Comunicaciones
En sus dos vertientes:
• Infraestructura de redes
• Infraestructura de comunicaciones
Infraestructura de redes
Componentes Hardware y Software que garantizan la conexión física y la transferencia de datos entre los distintos equipos de la red.
Infraestructura de comunicaciones
Componentes Hardware y Software que permiten la comunicación y su gestión, entre los clientes y los servidores.
La arquitectura Cliente/Servidor es el resultado de la integración de dos culturas. Por un lado, la del Mainframe que aporta capacidad de almacenamiento, integridad y acceso a la información y, por el otro, la del computador que aporta facilidad de uso (cultura de PC), bajo costo, presentación atractiva (aspecto lúdico) y una amplia oferta en productos y aplicaciones.
CARACTERISTICAS DEL MODELO CLIENTE/SERVIDOR
En el modelo CLIENTE/SERVIDOR podemos encontrar las siguientes características:
1. El Cliente y el Servidor pueden actuar como una sola entidad y también pueden actuar como entidades separadas, realizando actividades o tareas independientes.
2. Las funciones de Cliente y Servidor pueden estar en plataformas separadas, o en la misma plataforma.

3. Un servidor da servicio a múltiples clientes en forma concurrente.
4. Cada plataforma puede ser escalable independientemente. Los cambios realizados en las plataformas de los Clientes o de los Servidores, ya sean por actualización o por reemplazo tecnológico, se realizan de una manera transparente para el usuario final.
5. La interrelación entre el hardware y el software están basados en una infraestructura poderosa, de tal forma que el acceso a los recursos de la red no muestra la complejidad de los diferentes tipos de formatos de datos y de los protocolos.
6. Un sistema de servidores realiza múltiples funciones al mismo tiempo que presenta una imagen de un solo sistema a las estaciones Clientes. Esto se logra combinando los recursos de cómputo que se encuentran físicamente separados en un solo sistema lógico, proporcionando de esta manera el servicio más efectivo para el usuario final.
También es importante hacer notar que las funciones Cliente/Servidor pueden ser dinámicas. Ejemplo, un servidor puede convertirse en cliente cuando realiza la solicitud de servicios a otras plataformas dentro de la red.
Su capacidad para permitir integrar los equipos ya existentes en una organización, dentro de una arquitectura informática descentralizada y heterogénea.
7. Además se constituye como el nexo de unión mas adecuado para reconciliar los sistemas de información basados en mainframes o minicomputadores, con aquellos otros sustentados en entornos informáticos pequeños y estaciones de trabajo.
8. Designa un modelo de construcción de sistemas informáticos de carácter distribuido.
1. Su representación típica es un centro de trabajo (PC), en donde el usuario dispone de sus propias aplicaciones de oficina y sus propias bases de datos, sin dependencia directa del sistema central de información de la organización, al tiempo que puede acceder a los
2. recursos de este host central y otros sistemas de la organización ponen a su servicio.
En conclusión, Cliente/Servidor puede incluir múltiples plataformas, bases de datos, redes y sistemas operativos. Estos pueden ser de distintos proveedores, en arquitecturas propietarias y no propietarias y funcionando todos al mismo tiempo. Por lo tanto, su implantación involucra diferentes tipos de estándares: APPC, TCP/IP, OSI, NFS, DRDA corriendo sobre DOS, OS/2, Windows o PC UNIX, en Token¬Ring, Ethernet, FDDI o medio coaxial, sólo por mencionar algunas de las posibilidades.
TIPOS DE CLIENTES
1. “cliente flaco”:
Servidor rápidamente saturado.
Gran circulación de datos de interfase en la red.
2. “cliente gordo”:
Casi todo el trabajo en el cliente.
No hay centralización de la gestión de la BD.
Gran circulación de datos inútiles en la red.

TIPOS DE SERVIDOR
Servidores de archivos
Servidor donde se almacena archivos y aplicaciones de productividad como por ejemplo procesadores de texto, hojas de cálculo, etc.
Servidores de bases de datos
Servidor donde se almacenan las bases de datos, tablas, índices. Es uno de los servidores que más carga tiene.
Servidores de transacciones
Servidor que cumple o procesa todas las transacciones. Valida primero y recién genera un pedido al servidor de bases de datos.
Servidores de Groupware
Servidor utilizado para el seguimiento de operaciones dentro de la red.
Servidores de objetos
Contienen objetos que deben estar fuera del servidor de base de datos. Estos objetos pueden ser videos, imágenes, objetos multimedia en general.
Servidores Web
Se usan como una forma inteligente para comunicación entre empresas a través de Internet.
Este servidor permite transacciones con el acondicionamiento de un browser específico.
ESTILOS DEL MODELO CLIENTE SERVIDOR
PRESENTACIÓN DISTRIBUIDA
1. Se distribuye la interfaz entre el cliente y la plataforma servidora.
2. La aplicación y los datos están ambos en el servidor.
3. Similar a la arquitectura tradicional de un Host y Terminales.
4. El PC se aprovecha solo para mejorar la interfaz gráfica del usuario.
Ventajas
Revitaliza los sistemas antiguos.
Bajo costo de desarrollo.
No hay cambios en los sistemas existentes.
Desventajas
El sistema sigue en el Host.
No se aprovecha la GUI y/o LAN.
La interfaz del usuario se mantiene en muchas plataformas.
PRESENTACIÓN REMOTA
1. La interfaz para el usuario esta completamente en el cliente.
2. La aplicación y los datos están en el servidor.
Ventajas
La interfaz del usuario aprovecha bien la GUI y la LAN.
La aplicación aprovecha el Host.
Adecuado para algunos tipos de aplicaciones de apoyo a la toma de decisiones.
Desventajas
Las aplicaciones pueden ser complejas de desarrollar.
Los programas de la aplicación siguen en el Host.
El alto volumen de tráfico en la red puede hacer difícil la operación de aplicaciones muy pesadas.
LÓGICA DISTRIBUIDA
1. La interfaz esta en el cliente.
2. La base de datos esta en el servidor.
3. La lógica de la aplicación esta distribuida entre el cliente y el servidor.
Ventajas
Arquitectura mas corriente que puede manejar todo tipo de aplicaciones.
Los programas del sistema pueden distribuirse al nodo mas apropiado.
Pueden utilizarse con sistemas existentes.
Desventajas
Es difícil de diseñar.
Difícil prueba y mantenimiento si los programas del cliente y el servidor están hechos en distintos lenguajes de programación.
No son manejados por la GUI 4GL.
ADMINISTRACIÓN DE DATOS REMOTA
1. En el cliente residen tanto la interfaz como los procesos de la aplicación.
2. Las bases de datos están en el servidor.
3. Es lo que comúnmente imaginamos como aplicación cliente servidor
Ventajas
Configuración típica de la herramienta GUI 4GL.
Muy adecuada para las aplicaciones de apoyo a las decisiones del usuario final.
Fácil de desarrollar ya que los programas de aplicación no están distribuidos.
Se descargan los programas del Host.
Desventajas
No maneja aplicaciones pesadas eficientemente.
La totalidad de los datos viaja por la red, ya que no hay procesamiento que realice el Host.
BASE DE DATOS DISTRIBUIDA
1. La interfaz, los procesos de la aplicación, y , parte de los datos de la base de datos están en cliente.
2. El resto de los datos están en el servidor.
Ventajas
Configuración soportada por herramientas GUI 4GL.
Adecuada para las aplicaciones de apoyo al usuario final.
Apoya acceso a datos almacenados en ambientes heterogéneos.
Ubicación de los datos es transparente para la aplicación.
Desventajas
No maneja aplicaciones grandes eficientemente.
El acceso a la base de datos distribuida es dependiente del proveedor del software administrador de bases de datos.
DEFINICIÓN DE MIDDLEWARE
“Es un término que abarca a todo el software distribuido necesario para el soporte de interacciones entre Clientes y Servidores”.
Es el enlace que permite que un cliente obtenga un servicio de un servidor.
Este se inicia en el modulo de API de la parte del cliente que se emplea para invocar un servicio real; esto pertenece a los dominios del servidor. Tampoco a la interfaz del usuario ni la a la lógica de la aplicación en los dominios del cliente.
Tipos de Middleware
Existen dos tipos de middleware:
1. Middleware general
Este tipo permite la impresión de documentos remotos, manejos de transacciones, autenticación de usuarios, etc.
2. Middleware de servicios específicos
Generalmente trabajan orientados a mensajes. Trabaja uno sola transacción a la vez.
FUNCIONES DE UN PROGRAMA SERVIDOR
1. Espera las solicitudes de los clientes.
2. Ejecuta muchas solicitudes al mismo tiempo.
3. Atiende primero a los clientes VIP.
4. Emprende y opera actividades de tareas en segundo plano.
5. Se mantiene activa en forma permanente.
Suscribirse a:
Entradas (Atom)