Posts filed under ‘DB-Oracle’

Administración de Usuarios en Oracle

  1. CREACIÓN DE USUARIOS
  2. AUTENTICACIÓN ORACLE
  3. ASIGNACIONES A LOS USUARIOS
  4. Una de las más básicas tareas de un administrador de base de datos es identificar los usuarios. Cada usuario que conecta en la base de datos debe de tener una cuenta. En las cuentas compartidas son difíciles de aplicar una auditoria.

    Para crear un usuario utilizamos la sentencia CREATE USER. Cuando creas una cuenta como mínimo tienes que asignar un único nombre (username) y una contraseña para poder autenticarse.

    Para cambiar alguno de los atributos que se le ha añadido al usuario creado se utiliza la sentencia ALTER USER.

    Cuando uno se conecta con una instancia de una base de datos la cuenta de usuario debe de estar autenticada. ORACLE provee tres métodos de autenticación para nuestra cuenta de usuario.

    AUTENTICACIÓN MEDIANTE PASSWORDCuando un usuario conecta con una base de datos verifica que este usuario y la contraseña introducida almacenada en la base de datos, sea correcta. Las contraseñas se guardan encriptadas en la base de datos (en el data dictionary).

    SQL > CREATE USER david IDENTIFIED BY tititus;

    En este caso tititus es la contraseña de david que será guardada encriptada en la base de datos.

    AUTENTICACIÓN EXTERNA

    Cuando un usuario conecta con la base de datos se verifica que el nombre de usuario es el mismo que el nombre de usuario del sistema operativo para permitir la validación.

    No se almacenan las cuentas en la base de datos de ninguna forma. Estas cuentas están siempre referidas con OPS$ .A partir de la versión 10g puedes configurar OS_AUTHENT_PREFIX en el spfile

    SQL > CREATE USER ops$david IDENTIFIED BY tititus;

    Mediante IDENTIFIED EXTERNALLY decimos a la base de datos que nuestra cuenta es externa y tiene que ser validada con el sistema operativo.

    AUTENTICACIÓN GLOBAL

    Cuando un usuario se conecta con la base de datos se verifica globalmente cuando la información pasa por una opción avanzada de seguridad ( ADVANCED SECURITY OPTION ) para la autenticación tal como Kerberos, RADIUS ….

    Para las cuentas globales no se almacena tampoco nada en la base de datos.

    SQL > CREATE USER david IDENTIFIED GLOBALLY AS ‘CN=alumnos,OU=campus …….’

    Mediante IDENTIFIED GLOBALLY decimos a la base de datos que nuestra cuenta se autentica globalmente, mediante otra opción de seguridad avanzada.

    ASIGNACIÓN DE UN USUARIO A UN TABLESPACE ( DEFAULT TABLESPACE )Mediante esta sentencia asignamos un usuario a un tablespace, este será su tablespace por defecto cuando creamos un usuario.

    SQL > CREATE USER david IDENTIFIED BY tititus DEFAULT TABLESPACE users;

    Mediante esta sentencia, en caso de tener creado ya el usuario le asignamos un tablespace.

    SQL > ALTER USER david DEFAULT TABLESPACE users;

    La base de datos toma un tablespace por defecto, en caso de querer cambiar este tablespace utilizamos la siguiente sentencia

    SQL > ALTER DATABASE DEFAULT TABLESPACE users;

    ASIGNACIÓN DE UN USUARIO A UN TABLESPACE TEMPORAL

    Un tablespace temporal se utiliza para almacenar “segmentos” temporales que son creados durante operaciones como ORDER BY,SELECT DISTINCT, MERGE JOIN o CREATE INDEX.A veces a los usuarios se les asocia un tablespace temporal para realizar este tipo de operaciones, cuando estas operaciones finalizan este segmento temporal que se ha creado exclusivamente para la operación desaparece.

    SQL > CREATE USER david IDENTIFIED BY tititus DEFAULT TABLESPACE users
    TEMPORARY TABLESPACE temp;

    Mediante TEMPORARY TABLESPACE asignamos como tablespace temporal temp al usuario david.

    En caso de que el usuario esté creado si queremos asignarle un tablespace temporal utilizamos ALTER USER

    SQL > ALTER USER david TEMPORARY TABLESPACE Temp;

    ASIGNACIÓN DE UN PERFIL A UN USUARIOAl igual que podemos asignar un tablespace a un usuario, también podemos asignarle un perfil (profile). El principal perfil ( profile ) por defecto se denomina default.

    Si el usuario no está lo podemos crear de la siguiente forma:

    SQL > CREATE USER david IDENTIFIED BY tititus
    DEFAULT TABLESPACE users
    TEMPORARY TABLESPACE temp
    PROFILE resource_profile;

    En caso de que el usuario ya esté creado al igual que en los anteriores casos utilizamos la sentencia ALTER USER.

    SQL > ALTER USER david PROFILE resource_profile;

    BORRADO DE UN USUARIOPara borrar un usuario utilizamos la sentencia DROP USER, podemos opcionalmente incluir la opción CASCADE, se utiliza para borrar recursivamente los objetos del usuario que se pretende borrar.

    SQL > DROP USER david CASCADE

    OTORGANDO PRIVILEGIOS (GRANTING)A un usuario podemos otorgarle una serie de privilegios. Un privilegio permite a un usuario acceder a ciertos objetos o realizar ciertas acciones:.

    - Privilegios sobre Objetos ( Object privileges ) a permisos sobre vistas, tablas, secuencias, procedimientos, paquetes.
    - Privilegios del Sistema ( System privileges ) a permisos sobre “niveles de la base de datos” como pueden ser conexión a la base de datos, creación de usuarios, limitar cuentas.
    - Privilegios sobre Roles ( Role privileges ) a muchos permisos son otorgados mediante roles agrupando un conjunto de privilegios.
    Para otorgar privilegios utilizamos la sentencia GRANT, para quitar un privilegio o permiso a un usuario utilizamos la sentencia REVOKE

    EJEMPLOSPrivilegio sobre una tabla:

    SQL > GRANT ALL ON tabla_alumnos TO david

    Siendo tabla_alumnos una tabla de nuestra base de datos y david un usuario de esta, hemos asignado mediante GRANT ALL,todos los permisos al usuario david sobre esta tabla.

    GRANT ALL = permisos SELECT, INSERT, UPDATE, DELETE

    Si queremos asignar sólo uno de estos permisos utilizamos la misma sentencia pero con el permiso que queramos otorgar.

    SQL > GRANT SELECT ON tabla_alumnos TO david
    SQL > GRANT SELECT,INSERT ON tabla_alumnos TO david

    Privilegio sobre una vista:

    Para el caso de las vistas podemos a un usuario otorgar permisos SELECT, INSERT, UPDATE, DELETE, DEBUG, REFERENCES.

    Siendo vista_alumnos una vista de nuestra base de datos y david un usuario de esta:

    Otorgamos al usuario david todos los permisos sobre la vista vista_alumnos.

    SQL > GRANT ALL ON vista_alumnos TO david

    Otorgamos al usuario david algunos permisos sobre la vista_alumnos

    SQL > GRANT SELECT ON vista_alumnos TO david

    SQL > GRANT SELECT,INSERT ON vista_alumnos TO david

    Privilegio sobre una secuencia:

    Con las secuencias pasa lo mismo que con los anteriores objetos vistos, para otorgar permisos se utiliza GRANT. Los permisos que podemos otorgar a una secuencia es SELECT o ALTER.

    Privilegio sobre un paquete,función o procedimiento

    Los permisos que podemos otorgar a las funciones, paquetes o procedimientos almacenados en nuestra base de datos son los siguientes: EXECUTE, DEBUG.

    QUITANDO PRIVILEGIOS Si queremos quitar un privilegio a uno de estos objetos haremos lo mismo que con GRANT pero utilizando la sentencia REVOKE.

    SQL > REVOKE ALL ON tabla_usuarios FROM david

mayo 19, 2008 at 1:10 pm 3 comentarios

Accediendo a rutinas C y C++ desde Oracle

1. Introducción

En este tutorial os quiero mostrar como llamar a rutinas desarrolladas en c o cpp desde un procedimiento almacenado de ORACLE.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: HP COMPAQ Presario V6000 (Centrino Duo 1.66GHz, 2048 MB RAM, 100 GB HD)
  • Sistema Operativo: Windows XP Home Edition
  • Oracle 9.2
  • MinGW 5 para windows.
  • Eclipse como editor de ficheros

SigueLeyendo . . .

mayo 15, 2008 at 12:15 pm Deja un comentario

Ver el código fuente SQL de una vista Oracle

Para ver el código fuente de una vista, puede recurrirse a las vistas del diccionario de datos:

DBA_VIEWS,

USER_VIEWS,

ALL_VIEWS.A través del sqlplus, dicha consulta sería:

SQL> set long 4000
SQL> SELECT text
           FROM user_views
         WHERE view_name = ‘NOMBREDELAVISTA’;

o si la vista pertenece a otro esquema y se tienen los permisos de SELECT ANY TABLE sería:

SQL> Set Long 4000
SQL> SELECT text
            FROM dba_views
          WHERE view_name = ‘NOMBREDELAVISTA’
             AND OWNER = ‘NOMBREDELESQUEMA’;

mayo 12, 2008 at 1:48 pm 4 comentarios

Actualizando a Oracle 10.2.03 en Ubuntu

SQL> select * from UTL_RECOMP_ERRORS;

OBJ# ERROR_AT                     COMPILE_ERR
---- ---------------------------- -------------------------------------------------------------------------
8806 03-MAR-07 08.22.54.073149 PM ORA-04045: errors during recompilation/revalidation of SYS.AQ$_ALERT_QT_F
                                  ORA-04031: unable to allocate 28 bytes of shared memory ("shared pool",
                                  "select name,password,datats#...","sql area","idndef*[]: qkexrPackName”)

Si bien la culpa de este error no es de Oracle: No hay suficiente ‘SHARED POOL’ debido a la configuración de la instancia.

En cualquier caso, tras arrancar el listener, el ‘dbconsole’ tenemos:

Oracle 10.2.03 en ubuntu

Con lo que, una vez más: prueba superada. Oracle 10.2.03 en Ubuntu.

SigueLeyendo. . .

mayo 6, 2008 at 12:53 pm Deja un comentario

DBA_REGISTRY

Muchas veces, además de conocer la versión exacta de la base de datos (a través de V$VERSION), es necesario saber los componentes instalados, así como su estado y versión.
Desde la versión 9i existe la vista de diccionario de datos DBA_REGISTRY, que proporciona esta información y más… (siempre a usuarios con los correspondientes privilegios)

SQL> select substr(COMP_ID,1,10) COMP_ID, substr(COMP_NAME,1,30) COMP_NAME, VERSION, STATUS  from DBA_REGISTRY;

COMP_ID    COMP_NAME                             VERSION                        STATUS
———- ——————–      ———- —————-
EM              Oracle Enterprise Manager         10.1.0.2.0                     VALID
XDB            Oracle XML Database                 10.1.0.2.0                     VALID
CONTEXT   Oracle Text                                 10.1.0.2.0                     VALID
ORDIM       Oracle interMedia                        10.1.0.2.0                     VALID
EXF            Oracle Expression Filter              10.1.0.2.0                     VALID
OWM          Oracle Workspace Manager         10.1.0.2.0                     VALID
ODM           Oracle Data Mining                     10.1.0.2.0                     VALID
CATALOG    Oracle Database Catalog Views  10.1.0.2.0                     VALID
CATPROC    Oracle Database Packages and T 10.1.0.2.0                     VALID
JAVAVM      JServer JAVA Virtual Machine        10.1.0.2.0                     VALID
XML            Oracle XDK                                    10.1.0.2.0                     VALID
CATJAVA    Oracle Database Java Packages     10.1.0.2.0                     VALID
APS             OLAP Analytic Workspace             10.1.0.2.0                     VALID
XOQ            Oracle OLAP API                            10.1.0.2.0                     VALID

abril 28, 2008 at 2:05 pm Deja un comentario

Oracle 11g para Windows

Después de aparecer Oracle 11g para Linux 32 bits y, mas tarde, para Linux 64, llega Oracle 11g para Windows.

Nota: Al día de hoy, en metalink Oracle 11g presenta las certificaciones con Status ‘projected’ para Windows XP, Windows 2003 / 2003 SR2 y Windows Vista.

abril 28, 2008 at 1:25 pm Deja un comentario

Iniciación a Oracle – Administración basica y seguridad en Oracle

Concepto de usuario, privilegio y rol:

A la hora de establecer una conexión con un servidor Oracle, es necesario que utilicemos un modo de acceso, el cual describa de qué permisos dispondremos durante nuestra conexión. Estos permisos se definen sobre un nombre de usuario. Un usuario no es más que un conjunto de permisos que se aplican a una conexión de base de datos. Así mismo, el usuario también tiene otras funciones:

· Ser el propietario de ciertos objetos. · Definición del tablespace por defecto para los objetos de un usuario. · Copias de seguridad. · Cuotas de almacenamiento.

Un privilegio no es más que un permiso dado a un usuario para que realice cierta operación. Estas

operaciones pueden ser de dos tipos: · Operación de sistema: necesita el permiso de sistema correspondiente. · Operación sobre objeto: necesita el permiso sobre el objeto en cuestión.

Y por último un rol de base de datos no es más que una agrupación de permisos de sistema y de objeto.

Creación de usuarios

La creación de usuarios se hace a través de la sentencia SQL CREATE USER Su sintaxis básica es:

SigueLeyendo . . .

abril 26, 2008 at 1:42 pm 1 comentario

DECODE, CASE y NULL’s

Los más viejos del lugar estamos acostumbrados a trabajar con la útil función DECODE. La hemos venido utilizando profusamente a lo largo de los años, pero (no tan) recientemente Oracle introdujo su ‘prima’ CASE. CASE es una construcción de tipo IF…THEN…ELSIF…THEN…ELSE… que se puede utilizar dentro de las sentencias SQL y que amplía las funcionalidades de DECODE. En muchos foros se anima a la transición de ir sustituyendo poco a poco los DECODEs por CASEs. Principalmente porque:

·CASE pertenece al estándar, mientras que DECODE es sintaxis propia de Oracle.
·CASE es más flexible, ya que tiene dos modos de funcionamiento: ’simple’ (simple) y ‘búsqueda’ (search).

El modo ’simple’ es muy parecido al DECODE de toda la vida, pero hay una sutil diferencia que puede llegar a no ser tan sutil:

SQL> SELECT DECODE(NULL,
2                  NULL, 'NULL Es Nulo',
3                 'NULL No Es Nulo') NULL_DECODE,
4  CASE NULL
5       WHEN NULL THEN 'NULL Es Nulo'
6       ELSE 'NULL No Es Nulo'
7  END NULL_CASE
8  FROM DUAL;

NULL_DECODE  NULL_CASE
------------ ---------------
NULL Es Nulo NULL No Es Nulo

En efecto, el tratamiento que se hace de los valores nulos es diferente. DECODE en este aspecto se sale un poco del estándar de la lógica trivaluada en operaciones con nulos (NULL = NULL ? => TRUE) mientras que CASE sí la sigue a rajatabla (NULL = NULL ? => NULL).

Así que NULL y DECODE no son intercambiables en todos los casos.

Gracias a CarlosAL

abril 18, 2008 at 7:00 pm 1 comentario

Insertar y extraer documentos en una tabla Oracle con Visual Basic 6

En este artículo os explicamos paso a paso, con capturas de pantalla, cómo insertar y extraer documentos de una tabla Oracle (con un campo RAW/BLOB). Para ello utilizaremos Visual Basic 6 y OLEDB.

Insertar y extraer documentos en una tabla Oracle con Visual Basic 6

Oracle incorpora un tipo de datos llamado BLOB que permite almacenar documentos de cualquier tipo (imágenes, excel, word, access, comprimidos, vídeos, música, etc). En principio admite cualquier tipo de documento y de cualquier tamaño. Para más información puedes visitar este artículo: Tipos de datos / Datatypes en Oracle. Aún sigue manteniendo el tipo de datos LONG RAW que está obsoleto, sustituido por BLOB. Las instrucciones que os mostramos a continuación admiten ambos tipos de datos: BLOB y LOB RAW.

Para poder insertar documentos en un campo BLOB de Oracle con Visual Basic necesitaremos una librería (dll) llamada SAFileMgr Module (SAFileMgr.dll), esta librería está disponible de forma gratuita en la web http://www.softartisans.com. Tras descargar este fichero, deberemos copiarlo a la carpeta del sistema (normalmente C:/Windows/System32) y registrarlo con el comando:

regsvr32 C:/Windows/System32/SAFileMgr.dll

De la siguiente forma: copiaremos el fichero SAFileMgr.dll a la carpeta System32 de Windows. Pulsaremos en el botón “Inicio”, luego en “Ejecutar”:

Introduciremos el comando:

%systemroot%/system32/SAFileMgr.dll

y pulsaremos “Aceptar”:

Si el registro es correcto nos mostrará este mensaje:

Con el texto:

—————————
RegSvr32
—————————
DllRegisterServer en C:/Windows/System32/SAFileMgr.dll se realizó con éxito.
—————————
Aceptar
—————————

Tras copiar y registrar el fichero SAFileMgr.dll, también necesitaremos disponer de una base de datos Oracle activa (Instalar Oracle Database 10g en Windows XP), con una base de datos (Cómo crear una base de datos en Oracle 9 utilizando el asistente que incorpora) y una tabla con la siguiente estructura:

CREATE TABLE documentos ( titulo VARCHAR2 (100), rutadocumento VARCHAR2 (255), documento BLOB);

Podremos cambiar el nombre de la tabla y el nombre de los campos, también podremos utilizar una tabla existente. Ejecutando el script SQL anterior en la BD de Oracle creará la tabla “documentos” para realizar las pruebas oportunas. Para ejecutar el script podemos utilizar esta aplicación: AjpdSoft Administración Bases de Datos.

Tras tener la tabla creada con el campo BLOB, procederemos a abrir Visual Basic y a crear un nuevo proyecto para insertar y extraer documentos en Oracle. En la ventana de “Nuevo proyecto” seleccionaremos “EXE estándar” y pulsaremos “Abrir”:

Para que la aplicación funcione correctamente deberemos agregar las referencias necesarias. Para ello pulsaremos en el menú “Proyecto ” – “Referencias” de Visual Basic:

SigueLeyendo . . .

abril 18, 2008 at 2:19 pm 2 comentarios

Controlar espacio de los tablespaces en Oracle

  1. OBJETIVOS

    Automatizar el control de espacios libre en los tablespaces de base de datos mediante un procedimiento pl/sql.
    Se pretende facilitar un procedimiento que compruebe el espacio libre del tablespace y si este es menor de un portentaje especificado del total se envie un correo de alerta para que el administrador pueda aumentar el tamaño del tablespace

  2. COMO VER EL ESPACIO LIBRE DE LOS TABLESPACES DE ORACLE              

  3.  Para ver el espacio libre que queda en un tablespace tenemos que mirar en la tabla dba_free_space

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

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

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

  7. 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 valor job_queue_processes es mayor que 0.

marzo 24, 2008 at 6:59 pm 4 comentarios

Instalación de Oracle. Una posible configuración de memoria

Objetivo:

Se muestra una forma de distribuir la memoria del sistema en una nueva instalación de ORACLE.

La memoria de ORACLE

El total disponible de memoria en un sistema tiene que estar configurado de forma que todos los componentes de ese sistema funcionen óptimamente. Una pauta a seguir para que el sistema quede bien configurado podría ser el siguiente:

  1. Componentes del sistema
Memoria del Sistema
Oracle SGA Componentes ~ 50\% del total
Sistema operativo + Otros componentes ~15\% del total
Memoria de usuario ~ 35\% del total

Esta es la primera pauta que podemos seguir a la hora de reservar o ver la memoria que se necesita o que se puede poner cómo máximo en un sistema para que Oracle funcione correctamente y los demás componentes del sistema puedan hacerlo también. ( habría que tener en cuenta también el número de usuarios que accederán concurrentemente al sistema ).

  • Una vez que hemos decidido que la SGA de nuestra base de datos ORACLE va a ser el 50\% de la memoria total del sistema. Esta memoria la tenemos que dividir entre los componentes que la forman. (Database buffer cache, shared_pool_area, fixed size, redo log buffer)

    1. Componentes de la SGA
    Memoria SGA
    Database Buffer Cache ~80\% de la SGA
    Shared Pool Area ~12\% de la SGA
    Fixed Size ~1\% de la SGA
    Redo Log Buffer ~0.1\% de la SGA

    La distribución puede venir bien para comenzar a establecer un sistema, aunque posteriormente podrán variar (y habrá que realizar tuning de ellos ) cuando se conozca o varíen el tipo de acceso a la base de datos, los patrones de acceso, usuarios concurrentes en el sistema etc.

  • Para entender mejor estas tablas proponemos el siguiente ejemplo:
    Tengo un sistema configurado con 2 GB de memoria y con una estimación de 100 sesiones concurrentes. La aplicación requiere responder en pocos segundos. Es una base de datos que tiene muchas transacciones.

    1. Componentes del sistema
    Memoria asignada (en Mb)
    SGA para ORACLE ~1024
    Sistema operativo + Otros componentes ~306
    Memoria de usuario ~694

     

  • Los 694 MB estarán disponibles para la PGA y todos los procesos servidores de Oracle.
    Teniendo en cuenta que en el ejemplo hemos dicho que teníamos 100 sesiones concurrentes nos daría un promedio de unos 7 Megas (aproximadamente) para el consumo de cada usuario. (Tenemos que tener en cuenta que el SORT_AREA_SIZE forma parte de la PGA).

  • Por ultimo habría que distribuir la memoria que hemos dado a la SGA entre todos sus componentes.

    1. Componentes de la SGA
    Memoria asignada (en Mb)
    Database Buffer Cache ~800
    Shared Pool Area ~128 – 188
    Fixed Size + Misc ~ 8
    Redo Log Buffer ~ 1 (promedio 512K)

    Via | Orasite

    marzo 18, 2008 at 12:52 pm 2 comentarios

    Loadjava y Dropjava en Oracle

    Loadjava 

    Las bases de datos Oracle incluyen un compilador de JAVA y una JVM. Esto va a permitir a los desarrolladores que utilicen este lenguaje de programación (PL/SQL) crear objetos almacenados, procedimientos, funciones, disparadores…

    Se podrán también compilar programas Java directamente en la base de datos, de este modo también podemos encontrarnos clases de java creadas de forma convencional que se encuentran fuera de la base de datos, este es el caso en el cual interviene la utilidad loadjava. A través de esta utilidad podemos cargar código fuente java y clases dentro de nuestras bases de datos ORACLE.

    Esta utilidad se encuentra a partir de la versión de base de datos 8.1.5.

    Para ejecutar esta utilidad se requiere tener una serie de privilegios dentro de nuestro esquema (esquema en el que vayamos a cargar las clases java).

    •create procedure

    •create table

    En caso de que vayamos a cargar clases dentro de un esquema que no sea el nuestro los privilegios que tenemos que tener son los siguientes:

    create any procedure

    create any table

    Si queremos cargar una clase java dentro de nuestra base de datos lo haremos de la siguiente forma:

    C:oracle9iin loadjava -user scott/tiger clasejava.java

    El ejecutable loadjava se encuentra dentro de ORACLE_HOMEin
    También podemos cargar archivos .jar con ese ejecutable.

    Para ver todas las posibilidades que tenemos con la utilidad loadjava podemos verlo escribiendo en nuestra línea de comandos loadjava.

    dropjava

    Al igual que podemos cargar estos objetos dentro de nuestra base de datos podemos también eliminarlos a través de la utilidad dropjava. Esta utilidad se encuentra en la misma ubicación que loadjava. Puede eliminar clases de java o ficheros .jar

    C:oracle9iin>dropjava -u scott/tiger claseJava.class

    Para ver las opciones que presenta esta utilidad, hacemos lo mismo que con la utilidad loadjava y escribimos en la línea de comandos dropjava.

    Como alternativa podemos utilizar en la línea de comandos el paquete dms_java.dropjava para eliminar las clases de java contenidas en nuestra base de datos:

    SQL> call dbms_java.dropjava(‘……’);

    marzo 18, 2008 at 12:40 pm 2 comentarios

    Cómo activar la auditoría de una base de datos Oracle

    Se pretende mediante un sencillo ejemplo práctico para ver cómo se puede auditar las conexiónes a una base de datos ORACLE o auditar los intentos de modificación a las tablas de un usuario.

    Teniendo en cuenta que el parámetro que habilita la posibilidad de auditar la base de datos ORACLE en el init.ora es audit_trail que el comando sql que activa la auditoría sobre algo es AUDIT ( para desactivar NOAUDIT ) y que la tabla para mirar ( usuario sys ) el seguimiento de auditoría es dba_audit_trail vamos a realizar este sencillo ejemplo.

    1. Activar la auditoria de intento de conexiones fallidas para todos los usuarios.

      Miramos que actualmente no está activada la auditoria en la base de datos

      SQL> select name , value from v$parameter where name like ‘audit_trail’;

      audit_trail NONE

      Activamos la auditoría de la base de datos

      SQL> alter system set audit_trail = DB scope = spfile;

      Reiniciamos la base de datos ( shutdown immediate, startup ) y comprobamos que la auditoría se ha activado.

      SQL> select name , value from v$parameter where name like ‘audit_trail’;

      audit_trail DB

      Activamos la auditoría para ver la conexión y desconexión de los usuarios a la base de datos, se hace con la siguiente sentencia

      SQL> audit connect;

    2. Visualizar las tablas de auditoría para comprobar que se insertan datos cuando intentamos conectarnos sin lograrlo.

      En el apartado anterior hemos activado la auditoría para ver como se conectan los usuarios a la base de datos, vamos a realizar varias pruebas y mostrar dónde se puede comprobar que los usuarios se han conectado a la base de datos.

      Nos conectamos con varios usuarios a la base de datos ( en nuestro caso con system y el usuario user9 que está creado )

      SQL> connect user9/user9;

      SQL> connect system/system;

      Tras habernos conectado a la base de datos miramos la tabla dba_audit_trail para ver que datos contiene.

      SQL> select username , action_name , priv_used , returncode from dba_audit_trail ;

      “SYSTEM” “LOGON” 1017

      “SYSTEM” “LOGON” 1017

      “USER9″ “LOGON” 1017

      “USER9″ “LOGON” “CREATE SESSION” 0

      “USER9″ “LOGON” 1017

      “USER9″ “LOGON” 1017

      Observarmos que en esta tabla se registran los intentos de conexión de los usuarios, por lo tanto podemos saber quien se ha conectado a la base de datos

    3. Activar la auditoria sobre la modificación de tablas del usuario Scott.

      Ahora vamos a activar la auditoría sobre la modificación de las tablas sobre el usuario Scott, de esta forma cualquier modificación realizada en una tabla que pertenezca a este usuario será registrada en las tablas y podremos ver quien ha realizado esa modifiación.

      SQL>audit insert,update on scott . bonus by access;

      SQL>audit insert,update on scott . emp by access;

      SQL>audit insert,update on scott .dept by access;

      SQL>audit insert,update on scott . salgrade by access;

      En este caso estamos auditando cada una de las tablas que pertenencen al usuario scott ( bonus, emp, dept, salgrade ) en caso de que alguien inserte algo en ellas o realice alguna actualización. ( si queremos auditar el borrado o la lectura de alguna fila, solo hay que añadir los permisos de select y delete detrás del comando audit).Al ponerlo by access se guardará un registro en la tabla de auditoría por cada intento de insert o update que se realice sobre cada una de las tablas nombradas. ( exite también el registro by session, en el cual se registra por sesión única el intento de insert o update sobre las tablas ).

      Miramos la tabla user_obj_audit_opts ( con el usuario scott )

      SQL>select * from user_obj_audit_opts;

      “BONUS” “TABLE” “-/-” “-/-” “-/-” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “-/-” “-/-”

      “DEPT” “TABLE” “-/-” “-/-” “-/-” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “-/-” “-/-”

      “EMP” “TABLE” “-/-” “-/-” “-/-” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “-/-” “-/-”

      “SALGRADE” “TABLE” “-/-” “-/-” “-/-” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “A/A” “-/-” “-/-” “-/-” “-/-” “-/-”

      Y observamos que es lo que estamos auditando del usuario scott, en este caso se vería que eta activada para cada una de las tablas la auditoría para update e insert.

      (A/A) –> activado / por acceso

      La prueba que se puede realizar es conectarse con otro usuario que tenga permisos de insert y update sobre estas tablas y realizar una serie de inserciones y actualizaciones en esas tablas. En este caso suponemos que un usuario, user9 que tiene permisos de inserción y actualización sobre las tablas del usuario scott ha realizado una serie de inserciones y actualizaciones sobre estas tablas. La forma de ver si las ha realizado o no ( teniendo activada la auditoría es la siguiente ).

      SQL>select * from sys . dba_audit_trail where ( action_name = ‘INSERT’ ) or ( action_name = ‘UPDATE’ ) ;

      El resultado es el siguiente:

      “ERIN-0S2WXM4BDG\Erin” “USER9″ “ERIN-0S2WXM4BDG” 19/04/2006 15:38:56 “SCOTT” “BONUS” 2 “INSERT” 267 2 47 0

      “ERIN-0S2WXM4BDG\Erin” “USER9″ “ERIN-0S2WXM4BDG” 19/04/2006 15:39:09 “SCOTT” “BONUS” 2 “INSERT” 267 3 50 0

      “ERIN-0S2WXM4BDG\Erin” “USER9″ “ERIN-0S2WXM4BDG” 19/04/2006 15:39:19 “SCOTT” “BONUS” 6 “UPDATE” 267 4 55 0

      Observamos que se han registrado los intentos de inserción y de modificación sobre la tabla BONUS.

    marzo 15, 2008 at 1:06 pm 13 comentarios

    El libro de PHP y Oracle

    Puedes descargar el libro “The Underground PHP and Oracle® Manual” Entre otros temas incluye:
    Extensiones, instalacion de 10g XE, servidor http, conexion a oracle usando oci8, algunas funciones en oci8, php y php5.

    marzo 6, 2008 at 2:18 pm 1 comentario

    Asistente para Migración de Oracle a SQL Server

    Microsoft ha publicado la nueva versión de la herramienta SSMA o SQL Server Migration Assistant for Oracle v3.0 son un conjunto de herramientas o utilidades que permitirán o facilitarán la migración de bases de datos Oracle a SQL Server 2005, reduciendo tiempos, costes y esfuerzos.SSMA no obstante, está diseñado para trabajar con bases de datos Oracle 7.3 o superior, y con SQL Server 2005 exceptuando la versión Express Edition.

    su tamaño es de unos 4.6 Mb

     

    ServerSQL Server Migration Assistant for Oracle V3.1

    marzo 6, 2008 at 2:11 pm Deja un comentario

    ADMINISTRACION DE BASES DE DATOS ORACLE

    ANTECEDENTES HISTORICOS

    • En sus comienzos, Oracle era principalmente una empresa de bases de datos relacionales, Las cuales eran una nueva forma de pensar sobre como deberían estructurarse y almacenarse los datos; la clave de este nuevo pensamiento consiste en entender las relaciones existentes entre los datos y en estructurar la base de Información para que refleje dichas relaciones. El objetivo de una base de datos relacional consiste en construir una estructura en la cual las modificaciones requeridas no la afecten a ella, sino únicamente a los datos, es decir, se minimicen las modificaciones a las aplicaciones, se termine con la redundancia de los datos y se garantice la sincronización de los cambios hechos a los mismos “estos cambios solo deben afectar una tabla, y no varios archivos como frecuentemente sucedía cuando se manejaba el enfoque tradicional”.

    RESPONSABILIDADES DE UN ADMINISTRADOR DE BASES DE DATOS (DBA)

    • El DBA contribuye con su trabajo al funcionamiento eficaz de todos los sistemas que se ejecutan con la base de datos Oracle; Además ofrece asistencia técnica a quienes interactuan con la Base de Datos y se espera que tenga soltura en todos los aspectos técnicos que surjan con el software de Oracle. Dentro de sus responsabilidades están:
      • Instalación y actualización del Oracle Server y de todos sus productos asociados
      • Asignación de recursos para la utilización de Oracle: memoria, espacio en disco, perfiles de usuario etc.
      • Ajuste de la base de datos para conseguir el rendimiento optimo.
      • Enlace con el servicio mundial de asistencia al cliente de Oracle (Oracle Wordwide Support) para resolver problemas técnicos que requieran la intervención de Oracle.
      • Estrategias de copia de seguridad y recuperación.
      • Colaboración con el personal de administración del sistema y desarrolladores de aplicaciones.

    SigueLeyendo…

    febrero 6, 2008 at 12:23 pm Deja un comentario

    Oracle se hace con BEA Systems por 5.750 millones de Euro

    AP) 

    Exteriores de la sede de BEA en San José, California. (FOTO: AP) 

    REDWOOD SHORES (ESTADOS UNIDOS).- La compañía estadounidense de software Oracle ha alcanzado un acuerdo definitivo para la compra de BEA Systems por 8.500 millones de dólares (5.752 millones de euros) en efectivo. En esta cantidad se incluye la asunción de 1.300 millones de dólares (879,5 millones de euros) de deuda de la compañía.

    Oracle podría vender así la tecnología ‘middleware’ -software que facilita la interoperatividad de diversas aplicaciones de empresas- que fabrica BEA Systems, junto a sus propios productos de bases de datos y sus programas de gestión de negocios. Charles Phillips, presidente de Oracle, ha agregado que la operación también impulsará la penetración en regiones consideradas clave como China.

    El consejo de administración de BEA Systems ha respaldado de manera unánime la transacción que, a la espera de recibir el visto bueno por parte de los accionistas de BEA Systems y de los reguladores, podría cerrarse a mediados de 2008.

    Bajo los términos del acuerdo, los accionistas de BEA Systems percibirán 19,375 dólares en efectivo (13,11 euros) por cada título de la compañía, lo que supone una prima del 24% respecto al último precio de cierre de las acciones de BEA Systems.

    “Esperamos que el acuerdo resulte en un incremento de al menos 1 ó 2 centavos de dólar en los resultados de la compañía a partir del primer año desde que se cierre la operación”, ha dicho el presidente y director financiero de Oracle, Safra Catz.

    El pasado 12 de octubre, Oracle ya había presentado una oferta de compra sobre BEA Systems de 17 dólares por acción, un 13,9% inferior a la actual, que fue rechazada por BEA Systems al considerar que infravaloraba a la compañía.

    Las tecnológicas siguen de compras

    Otro nuevo movimiento en el sector tecnológico se suma a la operación protagonizada por Oracle. Se trata de la anunciada por la compañía proveedora de productos y servicios para redes informáticas Sun Microsystems, que afirma haber llevado a un acuerdo para adquirir la base de datos de código abierto MySQL.

    Sun accedería así a una base de datos de amplia extensión en todo el mundo y en los principales sistemas operativos en el marco de su apoyo al software libre.

    Con miles de implementaciones en el mundo y clientes de la talla de Facebook, Google, Nokia, Baidu o China Mobile, “MySQL aporta a Sun sinergias que cambiarán radicalmente el actual mercado del software”, asegura la compañía compradora.

    Via | elmundo.es

    febrero 4, 2008 at 1:10 pm Deja un comentario

    Oracle 10g para Windows Vista

    Para los que usan Windows Vista y estan por emprender proyectos con Oracle, pues les pasaré este post que muestra las direcciones para descargar tanto la BD de Oracle como el cliente para la versión 10g pero soportadas en Windows Vista ya que las versiones comunes no son soportadas en este nuevo SO.

    1. En la máquina Vista con Visual Studio 2005 se debe instalar sí o sí el Oracle Database 10g Client Release 2 (10.2.0.3) desde el mismo URL del servidor.
    2. Si planeas usar System.Data.OracleClient, el proveedor ADO.NET para Oracle desarrollado por Microsoft, no necesitas más. Fin de la pelea.
    3. Si planeas usar ODP, el proveedor ADO.NET desarrollado por el mismo Oracle, entonces debes bajar e instalar Oracle10g Release 2 ODAC and Oracle Developer Tools for Visual Studio .NET (10.2.0.2.21) «después» de haber instalado el cliente del punto 1, este instalador te provee estos elementos adicionales:
      1. ODP, el proveedor ADO.NET por supuesto.
      2. ODE, Oracle Database Extensions for .NET 2.0, una opción que te permite crear procedimientos almacenados usando C# (ajá, eso, puedes usar C# en lugar de PL/SQL).
      3. ODT, Oracle Developer Tools for Visual Studio 2005, un add-in que te permite navegar en un servidor Oracle, crear tablas, consultar datos, etc. desde Visual Studio.

    Para ilustrar la diferencia entre el cliente y la BD, pongo la siguiente imágen:

    Oracle 10g para Windows Vista

    Como ven, el cliente está en la parte inferior. El cliente permite que te conectes con alguna BD de Oracle existente y normalmente eso tendremos que hacer.

    URL: Oracle Database 10g Release 2 (10.2.0.3)

    Fuente: .NET a 2.860 m de altura (Los puntos 1, 2 y 3 son tomados textualmente de este blog)

    enero 24, 2008 at 1:57 pm 3 comentarios

    Full Outer Join en Oracle

    La sentencia full outer join de SQL (como lenguaje de consulta) extrae todos los registros de las tablas relacionadas, independientemente de si sus relaciones aparecen o no en la otra tabla. Pues bien, en Oracle no la puedo utilizar, porque no esta permitida, no me pregunten, no soy especialista en Oracle, solo sé que no pude usarla porque no es aceptada. Pero en ocasioes, talvés raras ocasiones, es necesario, es decir, la debes emplear (así vaya contra tus principios como me dijo un compañero).

    Pues bién, ¿como hacer esta instucción?, si deseas utilizar la instrucción:

    –En SQL 92 (ANSI)
    SELECT ename, job, dname
    FROM emp e FULL OUTER JOIN dept d
    ON e.deptno = d.deptno;

    debes hacerla de esta forma:

    –En SQL ISO
    SELECT ename, job, dname
    FROM emp e, dept d
    WHERE e.deptno = d.deptno(+)
    UNION
    SELECT ename, job, dname
    FROM emp e, dept d
    WHERE e.deptno(+) = d.deptno;

    La idea es utilizar la instrucción UNION para unir dos conjuntos de resultado y obetener solo uno, que es finalmente el que me sirve…. y aunque trate de hacerlo con más de dos instrucciones UNION solo funcionó con una, como en el ejemplo… a menos que haya hecho algo mal! ???

    Una explicación detallada de estas instrucciones y de las demás join las encuentras en la siguiente dirección web: http://www.zonaoracle.com/manuales-tutoriales-oracle/sql92/index.asp con los ejemplos correspondientes.

    Espero que les sea de utilidad.

    Contacto

    enero 24, 2008 at 1:33 pm 54 comentarios

    Guia de Introduccion a ORACLE

    Oracle 

    El siguiente documento, es el ideal si quieres aprender ORACLE desde cero. Recordemos que ORACLE es una de las bases de datos mas utilizadas en el mundo y que si nos dedicamos a estudiar informática, lo ideal es conocerle. El documento comienza con conceptos básicos de bases de datos…

     

    Extracto del documento

    ¿Qué es una base de datos?

    Una base de datos es un programa residente en memoria, que se encarga de gestionar todo el tratamiento de entrada, salida, protección y elaboración de la información de interés del usuario.

    Tipos de bases de datos

    Desde el punto de vista de la organización lógica:

    1. Jerárquicas. (Progress)
    2. Relacionales. (Oracle, Access, Sybase…)

    Desde el punto de vista de número de usuarios:

    1. Monousuario (dBase, Access, Paradox…)
    2. Multiusuario cliente/servidor (Oracle, Sybase…)

    Oracle es una base de datos relacional para entornos cliente/servidor. Todo lo que hablemos a partir de ahora será aplicable sólo a bases de datos Relacionales cliente/servidor, y concretamente para bases de datos Oracle. Mas…

    enero 22, 2008 at 6:35 pm Deja un comentario

    Entradas recientes


    Categorías

    Páginas

    Estadisticas

    • 730,363 Visitas

    Archivos Meses Anteriores

    Sigueme por Twitter


    Seguir

    Recibe cada nueva publicación en tu buzón de correo electrónico.

    Únete a otros 49 seguidores