Hace unas semanas alguien me preguntó como se podía determinar si un procedimiento PL/SQL (procedure PLSQL) estaba siendo ejecutado para evitar tener dos instancias del mismo proceso corriendo simultáneamente. Para manejar este tipo de situaciones, así como situaciones en las que queramos ejecutar procedimientos y funciones de forma secuencial y sincronizar diferentes procesos, Oracle dispone de el paquete de funciones y procedimientos DBMS_LOCK. (más…)
Posts filed under 'DB-Oracle'
COMO exportar tablas de Access 2000 a Oracle 9i
Guía rápida y sencilla.
Lo he probado con un Access 2000 y una Oracle 9i desde un Windows 2000 y me ha funcionado muy bien.
Necesitamos tener Access 2000 y un cliente de oracle 9i instalados como es evidente.
2 comments Octubre 21, 2009
Oracle adquiere a Virtual Iron y mejora su oferta de virtualización

Oracle anunció la compra la empresa especializada en herramientas de gestión de sistemas virtuales para bases de datos
Oracle aumentó su gama de productos de virtualización con la compra de Virtual Iron, una compañía especializada en herramientas para la gestión de sistemas virtuales para bases de datos. (más…)
Add comment Octubre 17, 2009
Oracle lanzó un duro desafío contra IBM

Larry Ellison, el millonario director general de Oracle, desafió fuertemente al viejo socio de su empresa y actual rival en la batalla sobre cuál de sus programas informáticos para negocios tiene mejor desempeño. Hay u$s10 millones en juego (más…)
Add comment Octubre 17, 2009
Manejo de tablas grandes en Oracle (Continuacion)
MANEJO DE PARTICIONES Oracle 10G
Continuando mi último artículo sobre el uso de las particiones de oracle, los tipos de particiones y su uso. En este artículo haremos referencia a varias funcionalidades que pueden resultar útiles en determinado momento en la definición de una tabla particionada. (más…)
1 comment Septiembre 17, 2009
Manejo de tablas grandes en Oracle
Tablas Particionadas en Oracle
Es un esquema de organización de los datos con el cual podemos dividirla en múltiples objetos de almacenamientos llamados particiones de datos o rangos, dependiendo los valores puede ser dividido en uno o más columnas de la tabla. Cada particiones de datos es almacenado separadamente. Estos objetos almacenados pueden estar en diferentes tablespaces, en el mismo o en una combinación de ambos. (más…)
2 comments Septiembre 17, 2009
SQL Avanzado
En esta sección, describiremos las siguientes palabras claves y conceptos SQL:
- SQL UNION
- SQL UNION ALL
- SQL INTERSECT
- SQL MINUS
- SQL Subconsulta
- SQL EXISTS
- SQL CASE (más…)
1 comment Septiembre 12, 2009
ORACLE: Seguridad (Tutoriales)
La información dicen que es poder, y como las BD son un almacén de información también almacenan poder, por lo que han sido objeto de intentos de acceso no autorizados desde su nacimiento. Por eso, las BD se han dotado de unos mecanismos que hacen posible la gestión de la seguridad en el acceso a la información que almacenan. VerTutorial
Add comment Abril 21, 2009
Oracle compra Sun Microsystems
Un completo análisis de la operación Sun-Oracle
Probablemente será la segunda noticia en importancia del año en el terreno tecnológico si finalmente se confirma la salida al mercado de Windows 7 antes del 31 de diciembre. Oracle es considerada la segunda fabricante de software del mundo por detrás de Microsoft, aunque una primera consecuencia de la operación de adquisición de Sun puede ser su escalada en el ránking hasta el primer puesto. No en vano, la compañía adquirida posee un catálogo de productos software envidiable, entre los cuales se cuentan el sistema operativo Solaris, el lenguaje de programación Java, la suite ofimática StarOffice, la base de datos MySQL y el patrocinio de los proyectos libres relacionados con estos productos, como OpenOffice y OpenSolaris.

En principio, hay una parte del catálogo de productos de Sun que parece perfectamente compatible con el de Oracle, y otra parte de la cual podemos dudar de su encaje. Pero empecemos por el principio (valga la redundancia): ¿va a desaparecer la marca Sun Microsystems?
Una histórica
Sun Microsystems nació en 1982… SigueLeyendo…
Add comment Abril 21, 2009
El paquete estándar DBMS_LOCK para sincronizar procesos
Add comment Abril 14, 2009
Nueva wiki oficial de Oracle
Desde 1990, el sitio web Oracle Technology Network (OTN), ha proporcionado a la comunidad de usuarios de las bases de datos Oracle un medio informal de comunicarse e intercambiar conocimientos entre ellos mismos, así como con empleados de Oracle. En 2005, esta fórmula fue mejorada al surgir una gran colección de blogs oficiales de Oracle. No obstante, esto recursos contienen fundamentalmente información proporcionada por Oracle.
Ahora, por primera vez, clientes y asociados pueden complementar este contenido oficial con el que ha generado la comunidad OTN, todo gracias a la nueva wiki de Oracle. Para los que no sepan que es una wiki, diré que se trata de un software que permite a los usuarios editar, crear y enlazar páginas web de una manera muy sencilla. En esencia se trata de un sistema de gestión de contenidos muy fácil de usar y que facilita el cruce de enlaces y la publicación de artículos en colaboración con otros usuarios.
Con la nueva wiki de Oracle, puedes crear tu propio contenido web, incluyendo trucos y guías de instalación, documentación de proyectos, notas técnicas o cualquier otra cosa que capture tu imaginación. También se pueden publicar comentarios en las páginas web creadas por otros miembros de la comunidad Oracle. Sin duda, este mundo paralelo de Oracle formado por clientes y asociados, se trata del complemento perfecto al sitio web OTN y a los foros de discusión y blogs de Oracle.
Otro hecho que quiero mencionar es la existencia del llamado Oracle ACE Program, los Oracle ACEs son profesionales conocidos por sus profundos conocimientos en aplicaciones Oracle y por sus credenciales como entusiastas defensores de la comunidad Oracle. Los candidatos a ser Oracle ACEs pueden ser nominados por cualquier miembro de comunidad de aplicaciones y tecnología Oracle. Para poder acceder al programa Oracle ACE, los candidatos deben ser expertos que pongan su conocimiento de las aplicaciones Oracle al alcance de todos, a través de blogs, podcasts, conferencias, artículos o foros.
A continuación os pongo algunos enlaces a sitios de la Oracle Technology Network que no he mencionado anteriormente en el contenido de este artículo:
Notas de prensa
Descargas de software gratis
Documentación
Centros de tecnología
Podcasts
Artículos técnicos
Foros de discusión
Calendario de eventos para desarrolladores
1 comment Octubre 15, 2008
Paquete DBMS_SQL para utilizar SQL dinámico (Dynamic SQL)
El grupo de paquetes DBMS se trata de un conjunto de funciones y procedimientos que el PL/SQL de Oracle incorpora de forma estándar. Estos paquetes DBMS pueden ser de mucha utilidad cuando estamos programando en PLSQL. Hoy voy a hablar sobre el paquete DBMS_SQL que permite utilizar SQL dinámico en procedimientos almacenados y bloques PL/SQL.
Las sentencias de SQL dinámico tienen la característica de que no forman parte del código fuente PL/SQL, sino que están almacenadas dentro de cadenas de caracteres que, bien forman parte de los parámetros de entrada, o bien son construidas durante la ejecución del programa PLSQL. Esto posibilita la creación de programas de propósito mucho más general. Por ejemplo, se pueden crear procedimientos que operen sobre una tabla cuyo nombre no se conoce hasta el momento de la ejecución, ya que se trata de un parámetro de entrada de dicho procedimiento.
Además, con el paquete DBMS_SQL se pueden ejecutar cualquier tipo de sentencias, tanto DML (Data Manipulation Language – Lenguaje de manipulación de datos), como DDL (Data Definition Language – Lenguaje de definición de datos). Por lo tanto, también permite directamente desde PL/SQL crear, modificar o borrar: tablas, índices, o cualquier objeto DDL (incluso procedimientos).
En el siguiente ejemplo os muestro un procedimiento almacenado en el que, dependiendo de los parámetros de entrada, se actualiza, bien el sueldo (campo salario), bien el departamento (campo dpto), de un determinado empleado.
CREATE OR REPLACE PROCEDURE upd_tabla_empleados
( p_campo IN VARCHAR2
, p_emp_id IN VARCHAR2
, p_valor IN VARCHAR2 ) IS
l_cursor INTEGER;
l_sql VARCHAR2(500); -- Sentencia a ejecutar
l_updated_rows INTEGER; -- Número de rows actualizadas
BEGIN
l_sql := 'UPDATE empleados SET ' || p_campo || ' = ' ||
p_valor || ' WHERE empleado_id = ' || p_emp_id;
l_cursor := dbms_sql.open_cursor;
dbms_sql.parse (l_cursor, l_sql, dbms_sql.native);
l_update_rows := dbms_sql.execute (l_cursor);
dbms_sql.close_cursor (l_cursor);
END;
Por lo tanto si ejecutamos el comando:
SQL> EXEC upd_tabla_empleados ('dpto', '1234', 'Compras');
Estaremos asignando el empleado con ID 1234 al departamento de compras.
Y si ejecutamos:
SQL> EXEC upd_tabla_empleados ('salario', '1122', '3000');
Estaremos asignando al empleado con ID 1122 un salario de 3.000 pesos.
Add comment Octubre 15, 2008
Vistas Materializadas
El refresco de las vistas materializadas en SQL y PL/SQL
Ya he hablado en otro artículo acerca del funcionamiento básico de las vistas materializadas, en éste voy a exponer los distintos tipos de refresco que se pueden utilizar para actualizar una vista materializada con los cambios provocados por las actualizaciones en las tablas base utilizadas en la misma. El tipo de refresco que debemos elegir dependerá de la frecuencia de actualización de las tablas base y de las necesidades que tengamos de disponer de datos exactos.
Tipos de refresco
COMPLETE: Este tipo de refresco implica el borrado de los datos existentes y la reinserción de todos los datos mediante la reejecución de la consulta SELECT que define la vista materializada.
FAST: El refresco aplica sólo a los cambios realizados sobre las tablas base desde el último refresco. Puede ser de dos tipos: SigueLeyendo. . .
Add comment Octubre 15, 2008
Oracle 11g
Oracle lanza la base de datos Oracle 11g

Oracle ha lanzado la base de datos Oracle 11g, disponible globalmente sobre plataforma Linux, y que ha sido especialmente desarrollada para ayudar a los clientes a abordar los retos derivados de un entorno empresarial cada vez más cambiante y competitivo, la necesidad de manejar grandes volúmenes de datos y la posibilidad de ofrecer una mayor calidad de servicio y reducir a la vez los costes tecnológicos asociados.
La base de datos Oracle Database 11g proporciona nuevas funcionalidades que garantizan un alto rendimiento, una alta escalabilidad, fiabilidad y seguridad, permitiendo el uso de plataformas grid y asegurando altos niveles de calidad de servicio e incrementos de la flexibilidad de negocio reduciendo además los costes de explotación. Con la base de datos Oracle 11g los clientes pueden resolver los problema más exigentes en todas las áreas, incluyendo aplicaciones transaccionales, de inteligencia de negocio y de gestión de contenidos. SigueLeyendo…
Add comment Octubre 15, 2008
Determinar las sentencias SQL que se están ejecutando
Si desea consultar toda la sentencias sql y llamadas a procedimientos,
funciones y paquetes almacenados puede utilizar la siguiente sentencia:
SELECT sql_text,
users_executing,
executions,
loads
FROM v$sqlarea;Sin embargo, si desea por una sentenciaen particular, puede
especificar su consulta de la siguiente manera:
SELECT sql_text,
users_executing,
executions,
loads
FROM v$sqltext
WHERE sql_text like ‘%aqui va el fragmento de sentencia a buscar%’;
2 comments Junio 16, 2008
Consultar los usuarios conectados a una base de datos Oracle
SELECT username,
sid,
serial#
FROM v$session;
Listar todos los índices de una tabla en oracle
para consultar los índices de una tabla perteneciente al usuario conectado:
select c.index_name,
i.uniqueness,
c.column_name
from user_indexes i,
user_ind_columns c
where i.index_name = c.index_name
and i.table_name = upper(‘nombre_de_la_tabla’)
order by
c.index_name, c.column_position
Eliminar sesiones de usuario en oracle
prompt Digite nombre de usuario
select SID,
serial#,
SID||’,'||serial# cadena,
username,
status
from v$session
where username like upper(‘&nombreUsuario%’)
/
prompt usuario a eliminar:
alter system kill session ‘cadena’
/
select SID,
serial#,
username,
status
from v$session
where username = upper(‘&nombreUsuario’)
1 comment Junio 13, 2008
Administración de Usuarios en Oracle
- CREACIÓN DE USUARIOS
- AUTENTICACIÓN ORACLE
- ASIGNACIONES A LOS USUARIOS
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
2 comments Mayo 19, 2008
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 . . .
Add comment Mayo 15, 2008
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’;
Add comment Mayo 12, 2008
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:
Con lo que, una vez más: prueba superada. Oracle 10.2.03 en Ubuntu.
Add comment Mayo 6, 2008
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
Add comment Abril 28, 2008

