Recopilación de artículos sobre Oracle

Recopilación de artículos sobre Oracle
Dataprix Fri, 08/01/2008 - 09:18

En este libro online vamos recopilando los artículos y entradas del foro y de blogs más interesantes sobre bases de datos Oracle y herramientas relacionadas.

Gracias a todos los usuarios de Dataprix que al compartir su conocimiento hacen que algunas cosas nos resulten más fáciles a los demás.

 


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.

Los libros que ves a continuación son una selección de los que a mi me parecen más interesantes para aprender administración y desarrollo PL/SQL, teniendo en cuenta precio y temática, espero que te puedan ser de utilidad:

 

 


Administración de la base de datos

Administración de la base de datos Dataprix Tue, 09/08/2009 - 09:46

AWR Formatter para DBA's de Oracle

AWR Formatter Oscar_paredes Sat, 06/11/2011 - 13:06

Anyone who usually look at AWR performance reports to analyze Oracle performance problems, often have their own reading process and approach to all data that shows this report, but I always missed a tool that make easier reading all data.

 

I've found! "AWR Formatter" developed by the DBA Tyler Muth facilitates this reading. Fantastic, you must try.

 

AWR Formatter is an extension of Chrome (file with. Crx) free once installed in the browser, each time you view an AWR report in HTML, gives you the option to format to help you see all your information. Once formatted text, HTML is seen in browser in different tabs. Highlight the following features that gives you the added format:

  • Possibility of performing conversions dynamically KB / MB / GB / TB in the various indicators
  • Possibility of searching the meaning of a pending event, parameter, etc ... (this is really useful)
  • Formatted tables sortable, much like an Excel ...
  • Ability to view the text of the SQL command's ...

AWR Formatter

 

 

Overall, nothing compared to the large standard html file ... wonderful. You can download it free from the following link:

http://dl.dropbox.com/u/4131944/AWR-Format/AWR-Format.crx

 

A tab called "Observations", aims to give reading indications reading of the report, but it is a first approach, and of course, each DBA should follow it as their responsibility.

 

Hope you enjoy,

Oscar Paredes - oscar.paredes@dataprix.com

Acceso remoto mediante DBLink de Oracle

Acceso remoto mediante DBLink de Oracle Carlos Mon, 03/12/2007 - 23:18

Para acceder desde una base de datos Oracle a objetos de otra base de datos Oracle la manera más sencilla es utilizar un DBLink (que sea la más sencilla no significa que siempre sea la más aconsejable, el abuso de los dblinks puede generar muchos problemas, tanto de rendimiento como de seguridad)

Vistas materializadas en Oracle Enterprise Manager

Para ello es necesario, con un usuario que posea el privilegio CREATE DATABASE LINK, crear el DBLINK en la base de datos Oracle origen (A) mediante una sencilla sentencia como la siguiente:

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

'LNK_DE_A_a_B' es el nombre del link, 'USUARIO' y 'CONTRASEÑA' son los identificadores del usuario que utilizará el database link para conectarse, los permisos del cual heredarán todos los accesos a través del db link, y B es el nombre de la instancia de la base de datos.

A través del dblink se puede conectar con los objetos de la base de datos remota con los permisos que tenga el usuario que se ha proporcionado en la sentencia de creación.

 

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

Ejemplo de consulta de select sobre una tabla a través de una database link:

SQL> select * from TABLA@LNK_DE_A_a_B 

 

Para ampliar información sobre la creación y utilización de database links se puede consultar la documentación de Oracle que se proporciona online en documentacion oracle create database.

Si lo que se quiere es acceder a una base de datos de otro fabricante, se puede crear el DBLink utilizando Heterogeneous Services. Se puede consultar cómo hacerlo con SQLServer en el artículo Heterogeneous services: Conexión desde Oracle a SQLServer

 


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.


 

Cuestiones sobre los dblinks de Oracle

Cuestiones sobre los dblinks de Oracle Carlos Mon, 10/19/2009 - 16:08

Abro este tema a partir del artículo Acceso remoto mediante DBLink de Oracle para que podamos comentar dudas y experiencias sobre la creación y utilización de database links de Oracle.

hola, queria ver si hay alguna manera de accesar con algun nombre de usuario y contraseña universal o algo asi porque acabo de instalar el sql plus, pero no tengo esos datos. gracias y espero me pueda ayudar alguien

In reply to by Carlos

Estimados, soy nuevo en oracle y estoy haciendo una conexión entre dos servidores pero al momento de compilar mis paquetes me da el error ORA-04052.

Variables:

DBLINKS

Variable Global_name = FALSE;

Tengo el sinonimo:

CREATE SYNONYM  r_csh_ppm
    FOR awunadm.csh_ppm@toawas

create database link TOAWAS
connect to awunadm identified by awunadm123 using
'  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =  172.20.130.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ASYWDB)
      (SERVER = DEDICATED)
      (GLOBAL_NAME = ASYWDB.UNCTAD.ORG)
    )
  )
'

EL paquete hace un

select * from r_csh_ppm

 

Al compilar devuelve el error ORA-04052, me pueden ayudar con esto?

Gracias de antemano

 

In reply to by Anonimo (not verified)

Entiendo que desde SQLPlus la SELECT sobre el sinónimo te funciona correctamente, y el problema lo tienes al intentar utilizar este sinónimo dentro de un PROCEDURE.

Supongo que has escrito global_name (sin la 's') por error. De todas maneras en Oracle global_names puedes encontrar una explicación sobre los GLOBAL_NAMES(S) y el DB_DOMAIN.

  • Por si acaso asegúrate de que el parámetro GLOBAL_NAMES está a FALSE en ambas bases de datos.
     
  • Supongo que el error te habrá devuelto el texto:
ORA-04052 error occurred when looking up remote object %s%s%s%s%s
Cause:
An error has occurred when trying to look up a remote object.
Action:
Fix the error. Make sure the remote database system has run KGLR.SQL to create necessary views used for querying/looking up objects stored in the database.

En las versiones actuales de BD, este script ya no se llama KGLR.SQL. Si no encuentras este fichero busca catlog.sql y catproc.sql. Aunque en teoría se ejecutan al instalar la base de datos, puedes probar a ejecutarlos en las dos bases de datos, y puede que así se resuelva el problema
 

In reply to by Carlos

Hola se que usted es esperto en Oracle tengo la siguiente duda:

mi trabajo o tarea es hacer un replica de una base de datos en oracle 10g express y para ello necesito hacer un database link pero antes

necesito modificar los archivos de la siguiente ruta:

C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN dentro de esta direccion esta el archivo tnsnames.ORA

y la verdad no se cual de estos codigos voy a mo dificar (osea si voy a modificar o agregar nuevas lineas) ALUMNO-PC3 es el nombre de mi maquina y ALUMNO-PC4 EL de la otra maquina.  estos son los codigos que hay dentro de este archivo:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ALUMNO-PC3)(PORT = 1521))                  // en la otra maquina aparece ALUMNO-PC4
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

LO MISMO TIENEN LAS DOS MAQUINAS dime por favor como quedaria modificado este archivo en ALUMNO-PC3 Y ALUMNO-PC4.

tambien lei que el archivo listener pero no se si tambien se va a modificar y que parte se modificara. este es el codigo:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = ALUMNO-PC3)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)
 

Y me gustaria como quedaria creado el dblink  que necesito

ambas maquinas tienen instalado el oracle 10g y los usuarios son para ALUMNO-PC3 es HR y contraseña: QWERTY.  y para ALUMNO-PC4 es ALUMNOS Y HR y la contraseña para ambos es recursos. y como hacer una consulta una vez creado el database link.

OJALA Y ME RESPONDAS CLARO Y CONCISO YO SOY NOBATO EN ESTO GRACIASSSSSSSS

ANDRES.....

In reply to by ADRES (not verified)

En el TNSNAMES se agregan las 'referencias' a los servidores de bases de datos con los que se quiera conectar desde la máquina. Como en tu caso quieres hacer un DBLINK desde ALUMNO-PC3 hasta ALUMNO-PC4 tendrías que modificar el TNSNAMES de ALUMNO-PC3 con los datos de conexión a la BD de ALUMNO-PC4:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ALUMNO-PC4)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

 

En principio, si vas a hacer un dblink entre dos BBDD Oracle no tienes porqué modificar la configuración del listener.

 

Tal como comento en el post Acceso remoto mediante DBLINK de Oracle, para crear después el database link en la BD origen (la de ALUMNO-PC3), deberías ejecutar con un usuario con suficientes privilegios una sentencia como la siguiente:

create database link LINK_de_PC3_a_PC4 connect to ALUMNOS identified by recursos;

Y para hacer desde la BD de ALUMNO-PC3 una select sobre una tabla de la BD de ALUMNO-PC4:

select * from TABLA_DE_PC4@LINK_de_PC3_a_PC4;

 

 

In reply to by Carlos

 Carlos espero pueda ayudarme con este problemita:

 

estoy ejecutando el siguiente código desde una BD Oracle 9i para consultar datos de una base de datos en 10g mediante un debelink llamado suiscen:

 

begin

 

select *

from persona@suiscen;

 

end;

 

pero me genera el siguiente error:

 

ORA-06550: line 4, column 6:

PL/SQL: ORA-04052: error occurred when looking up remote object SERECE.PERSONA@SUISCEN

ORA-00604: error occurred at recursive SQL level 1

ORA-06502: PL/SQL: numeric or value error

ORA-06512: at line 64

ORA-24757: duplicate transaction identifier

ORA-02063: preceding 4 lines from SUISCEN

ORA-06550: line 3, column 1:

 

este error solo se presenta cuando esta entre el BEGIN y el END 

he investigado y al parecer es un bug y me indican debo migra mi BD que esta en 9i a 10G sera que existe otra salida?

 

Carlos de antemano mil gracias en lo que me pueda asesorar.

 

 

In reply to by kmilo666 (not verified)

Seguro que es un bug? Si quieres puedes enlazar el lugar donde comentan lo del bug y le echamos un vistazo. Ahora no tengo disponible una BD 9i para probarlo, pero es la primera noticia que tengo de que exista este problema entre versiones.

A mi lo que me parece más indicativo es el error ORA-24757: duplicate transaction identifier. Podría ser que según cómo estén configuradas las BBDD te diera problemas utilizar a la vez el DBLINK desde varios lugares. Asegúrate de que no tengas abierta ninguna otra conexión que utilice el link y vuelve a probar con el Procedure. Para la prueba utiliza el mismo procedure que indicas, no sea que sea el mismo procedure el que abra demasiados enlaces.

Las dos bases de datos están en el mismo servidor? Eso también podría darte algún problema de identificadores.

In reply to by Carlos

Carlos gracias por la pronta respuesta....bueno lo del enlace fue tanto lo que busque que no guarde dichos enlaces pero los buscare nuevamente...

 

las bases de datos están en distintos servidores y lo que me faltó comentar es que el servidor donde esta la BD en 10g esta en modo RAC (Real Apliccation Server) .

Es decir el codigo o procedure funciona correctamente hacia los servidores con Oracle 9i normal y  el error me aparece con los dblinks que apuntan hacia las BD que están en RAC.

In reply to by kmilo666 (not verified)

Lo de RAC es un detalle importante, esas cosas se dicen antes ;)

Si no lo has hecho ya deberías comprobar los valores de los parámetros OPEN_LINKS y OPEN_LINKS_PER_INSTANCE de la BD que está en RAC para saber cuántos dblinks pueden abrirse como máximo en una sesión o una instancia de esta base de datos.

El problema podría ser simplemente que superaras este límite al utilizar el DBLINK desde el procedure.

In reply to by Carlos

Hola Carlos... te saluda Ivan, tengo una consulta:

Estoy tratando de crear una conexion DBLINK desde Oracle 11g para conectarme a SQL Server 2008.

Para hacer la conexion utilizo un Driver ODBC 11 de oracle... y la conexion se hace con éxito.

Pero al momento de hacer una consulta (SELECT, INSERT, UPDATE), me sale el siguiente error:

ORA-00942: la tabla o vista no existe
[Microsoft][ODBC SQL Server Driver][SQL Server]El nombre de objeto 'TM0000000001.AREA' no es válido. {42S02,NativeErr = 208}[Microsoft][ODBC SQL Server Driver][SQL Server]No se puede preparar la instrucción o instrucciones. {42000,NativeErr = 8180}
ORA-02063: 2 lines precediendo a SASERVER_LINK
00942. 00000 -  "table or view does not exist"

 

Favor ayudarme para solucionar este problema y poder hacer mis consultar respectivas... gracias

In reply to by Ivan (not verified)

Hola Iván

Parece sólo que no te reconoce el nombre de la tabla. ¿Puede ser que te falte el propietario de la tabla de SQL Server? Si la base de datos es TM0000000001 el nombre completo sería 'TM0000000001.dbo.AREA', o 'TM0000000001.ivan.AREA' si fuera del usuario ivan.

Saludos,

In reply to by Carlos

Carlos ya hice todo lo que me indicaste y el databaselink  si lo crea pero al querer consultar manda el siguiente error:

ORA-02019: no se ha encontrado la descripción de la conexión para la base de datos remota

y e buscado este error pero no encuentro la solucion y lo hice tal como me dijistes.

 

contesta porfa. de ante mano Gracias...   ATTE Andres...

 

In reply to by ANDRES (not verified)

Puede que la base de datos tenga el global_names activado, y al utilizar el dblink necesites especificar el nombre del dominio. El tema de los global names lo explico un poco en esta entrada del foro.

Comprueba cuál es el DB_DOMAIN de la base de datos y agrégalo al nombre del DBLINK al utilizarlo. Si utilizas una herramienta visual como SQLDeveloper, por ejemplo, seguramente en el nombre del dblink ya te indicará el nombre completo que tienes que utilizar.

Prueba a hacer esto:

 SQL> select * from global_name; 
 GLOBAL_NAME -------------------
 XE.MIDOMINIO.COM 

Lo que te ponga en lugar de MIDOMINIO.COM agregalo en la SELECT del database link:

 select * from TABLA_DE_PC4@LINK_de_PC3_a_PC4.MIDOMINIO.COM;

Suerte!!

In reply to by Carlos

Hola, ya hice lo del dominio, como dominio me aparecia solo XE despues de eso yo cambie el dominio a mibd.dominio.com de la sig manera

-------------------------------------

SQL> alter database rename GLOBAL_NAME to MIBD.DATAPRIX.COM;
Database altered.

-------------------------------------

ya que no me regreso algun domino la primer parte, use lo sig.

------------------------------------

select * from Datos_Personales@LINK_de_pc-3_a_pc-4.MIBD.DOMINO.COM;

y me mando el mismo error (ora-0219) la verdad me gustaria que nos siguieras orientando por que hasta ahora tu apoyo ha sido de mucha ayuda.clarificamos muchas dudas que teniamos probando todo lo que nos has enviado y leyendo los foros que tienes en tu pagina(www.dataprix.com) sin mas que decir me despido deseandole una muy buena tarde.

In reply to by Jonathan (not verified)

Si has hecho el alter database como comentas, el dominio que le has asignado a la BD es DATAPRIX.COM

Entonces la select te quedaría:

SELECT * FROM Datos_Personales@LINK_de_pc-3_a_pc-4.DATAPRIX.COM

Recuerda que al link sólo le has de agregar el dominio, el nombre de la base de datos no lo tienes que incluir.

Venga, que ya falta menos!!

In reply to by ANDRES (not verified)

No lo hemos especificado, pero entiendo que el alter database para modificar el dominio lo has hecho en la base de datos remota (PC4). Otra cosa que habría que hacer es modificar el TNSNAMES de la BD local (la de PC3) teniendo en cuenta el nuevo dominio:

XE.DATAPRIX.COM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ALUMNO-PC4)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

Y después recrea de nuevo el dblink, incluyendo también el dominio:

SQL> dropdatabase link LINK_de_PC3_a_PC4;
SQL> create database link LINK_de_PC3_a_PC4.DATAPRIX.COM connect to ALUMNOS identified by recursos;
SQL> select * from TABLA_DE_PC4@LINK_de_PC3_a_PC4.DATAPRIX.COM;

Enlazo otro post donde también comento cosas sobre los Global Names, por si sirve de ayuda.
Espero que ahora salga todo bien..

Tengo dos bases de datos distintas A y B. Tengo un DBLink DBL_BA creado en B que apunta a las tablas creadas en A.

Funciona sin problemas, accedo a los datos de las tablas de A y creo vistas materializadas con esos datos. Mi problema

es que intento que dichas vistas sean de tipo FAST, es decir, que su refresco sea de tipo incremental, pues el volumen de

datos que tengo que manejar es muy grande.

 

Para ello creo LOGS en las tablas de A:

 

CREATE MATERIALIZED VIEW LOG ON esquemaA.tabla1
  WITH ROWID;
 
CREATE MATERIALIZED VIEW LOG ON esquemaA.tabla2 
WITH ROWID;

 

Ahora creo la vista materializada tipo FAST a través del dblink en mi base de datos B:

 

CREATE MATERIALIZED VIEW esquemaB.vmtablas   
PARALLEL BUILD IMMEDIATE
       REFRESH FAST
       AS
       SELECT T1.ROWID "CN_ID_1", T2.ROWID "CN_ID_2", T1.DC_NOMBRE, T2.DC_NOMBRE
       FROM tabla1@DBL_BA T1, tabla2@DBL_BA T2
       WHERE  T1.CN_ID = T2.CN_ID;

Obteniendo el siguiente error:

ORA-12015: no se puede crear una vista materializada de refrescamiento rápido a partir de una consulta compleja
 

Tengo todos los permisos necesarios, he probado a crear sinónimos de las tablas de A, pero sigo obteniendo el mismo

resultado...

 

Sin embargo, si creo la vista materializada sin utilizar el dblink, es decir, sobre la propia base de datos A,

me la crea sin problemas.

 

CREATE MATERIALIZED VIEW esquemaA.vmtablas   
PARALLEL BUILD IMMEDIATE
       REFRESH FAST
       AS
       SELECT T1.ROWID "CN_ID_1", T2.ROWID "CN_ID_2", T1.DC_NOMBRE, T2.DC_NOMBRE
       FROM tabla1 T1, tabla2 T2
       WHERE  T1.CN_ID = T2.CN_ID;

 

Espero puedan ayudarme :). Gracias por adelantado

In reply to by Elena (not verified)

La creación de vistas materializadas con el método de refresco FAST tiene bastantes restricciones, y el error ORA-12015 que te devuelve parece referirse precisamente a eso.

En el artículo Vistas materializadas de Oracle para optimizar un Datawarehouse incluyo un enlace a la documentación de Oracle donde habla de las restricciones para el método FAST. Si no lo has hecho ya, échale un vistazo. De todas maneras copio las restricciones generales que documenta Oracle:

General Restrictions on Fast Refresh

The defining query of the materialized view is restricted as follows:

  • The materialized view must not contain references to non-repeating expressions like SYSDATE and ROWNUM.

  • The materialized view must not contain references to RAW or LONG RAW data types.

  • It cannot contain a SELECT list subquery.

  • It cannot contain analytical functions (for example, RANK) in the SELECT clause.

  • It cannot contain a MODEL clause.

  • It cannot contain a HAVING clause with a subquery.

  • It cannot contain nested queries that have ANY, ALL, or NOT EXISTS.

  • It cannot contain a [START WITH ...] CONNECT BY clause.

  • It cannot contain multiple detail tables at different sites.

  • On-commit materialized view cannot have remote detail tables.

  • Nested materialized views must have a join or aggregate.

Como puedes ver parece que con el tipo de refresco FAST y la opción ON-COMMIT no se pueden utilizar tablas remotas en la vista. Pueba a definir la vista forzando la opción de refresco ON-DEMAND, y yo creo que te funcionará.

Ya nos contarás..

In reply to by Carlos

Efectivamente, la opción ON-COMMIT me daba problemas, la cambié a ON-DEMAND, pero el error persistía :(

Me dijeron que podía ser un problema con la versión de oracle y haciendo pruebas descubrí que así era. Ejecutando las Vistas Materializadas en una versión 11g no daba problemas (yo estaba usando la 9i para hacer las pruebas).

Muchas gracias por la ayuda :)

Estimado Carlos:

Yo podria atrapar un error de conexion utilizando dblink  entre una base de datos y otra  para luego indicarle a esa conexion que internte conectarse de nuevo. Lo que deseo es que si un hay un problema conectandome a la base de datos utiliwando dblink el procedo de reconexion se haga automaticamente en un intervalo de tiempo para garantizar que la extraccion de datos se haga siepre.

 

In reply to by Damian (not verified)

 Te entiendo, yo he tenido problemas al utilizar un dblink para conectar con un MySQL y cargar datos en el Data Warehouse corporativo. Funcionaba, pero también fallaba demasiado a menudo, y además cuando fallaba se quedaba frito y ya había manera de hacer nada.

En aquel momento no encontré ninguna manera de reconectar automáticamente el link, por lo que no puedo darte una solución en este sentido, no sé si se puede llegar a hacer. Cuando pueda investigaré un poco, o a ver si alguien más nos ayuda.

Lo que sí te puedo contar es que para que el error de conexión no me dejara vacías las tablas destino, lo que hice fue utilizar vistas materializadas en la stage area del DWH, así si la conexión fallaba simplemente la tabla no actualizaba los datos de ese día y no me paraba la carga. Después tenía un control adicional que me informaba si el día se había cargado o no. Supongo que tú lo solucionas tratando el error directamente en la ETL.

Bueno, ya nos contarás si averiguas algo tú antes, el tema es interesante..

Hola,

 

mi pregunta es sencilla. He leído que cuando se hace una select remota a una tabla mediante dblink, internamente

se inicia una trasacción distribuida.

Uso vistas que realizan select remota a otra/s tablas mediante dblink, ¿es necesario poner COMMIT

después del select para cerrar esta trasacción o todo esto lo hace Oracle internamente?.

 

 

Gracias

 

In reply to by Jose (not verified)

Para hacer una select no es necesario hacer un commit. Independientemente de si se utilizan database links o no, si no modificas datos de ninguna tabla no hay ninguna razón para hacer un commit.

Si Oracle internamente inicia una transacción distribuída, también la cerrará internamente, no tienes que preocuparte por eso.

 

In reply to by Carlos

Hola Carlos.

 

En mi caso tambien utilizo dblinks para en una sola vista integrar datos de clietnes de dos servidores distintos.

 

He notado que cuando consulto datos de esa vista, despues de obtener los datos,

La BD mantiene la transaccion de  esa consulta como bloqueada, y tengo que darle commit;

 

Es normal esto o como puedo configurar la vista para que en cuanto termine de usarse se cierre su transaccion?

 

Gracias!

 

In reply to by arzamm@yahoo.com

Buenas.

El bloqueo que tienes al utilizar dblinks es normal, ya que en Oracle cuando se utiliza un database link se genera un bloqueo de transacción, aunque sólo se relicen sentencias de SELECT.

Yo ya veo bien lo que estás haciendo, enviar un commit para finalizar la transacción o, si no se va a seguir utilizando el dblink en esa sesión, cerrar explícitamente el dblink para liberar los recursos:

ALTER SESSION CLOSE DATABASE LINK mi_dblink;

Según lo que tus procesos tengan que hacer después puedes plantearte también cerrar directamente la sesión y asegurarte así de liberar todos los recursos.

Saludos,

Carlos:

Tenemos una aplicación Cliente Servidor desarrollada en VB6, la cual desde su BD en Oracle 10g accede, a través de un dblink, a otras tablas (también en Oracle 10g), se nos están quedando estas sesiones "colgadas" en el servidor remoto, por lo que tenemos que ejecutar la instrucción "alter session close data base link" al salir del cliente o inmediatamente después de hacer el query, es posible configurar esta instrucción en el servidor  para que al hacer el logoff se ejecute o en el servidor remoto.

Gracias

 

In reply to by poncho

Si las sesiones se quedan colgadas es porque hay algún problema, no? En teoría al cerrar la sesión que abre el database link, éste se tiene que cerrar también.
Si no se cierra puede ser porque en la sesión se haya quedado alguna transacción sin terminar. Asegúrate de hacer un commit de todo lo que haya pendiente antes de que se cierre la sesión.
Comprueba también que no llegues al número máximo de cursores, aunque supongo que en ese caso ya habrías mencionado el error ORA-02020: too many database links in use.

Sobre si se puede hacer algo desde el servidor, yo creo que no, ya que como te digo, el comportamiento normal es que al cerrarse la sesión ya se cierre también el dblink.

Carlos:

Las sesiones que se quedan "colgadas" son el servidor remoto, al cual es un repositorio de catálogos, es decir sólo se hacen querys no se inserta ni actualiza ningún tipo de información. Al salir del cliente si cerramos nuestra sesión, pero la que se levantó a través de la liga en el servidor remoto es la que se nos queda "colgada" y eso, segun el DBA, afecta el performance del servdidor remoto. Por eso pensaba que tal vez una configuración ya sea en el servidor de mi aplicación o en el remoto podría ayudar.

 

Gracias

In reply to by poncho

Vale, si he entendido bien tienes la base de datos de la aplicación, que podríamos llamar local, que abre un dblink para comunicarse con la base de datos servidora, el repositorio de catálogos.

Me reafirmo en que el comportamiento normal debería ser que al cerrar la sesión de la BD local también se cerrara el dblink, y si se queda la sesión colgada en la base de datos servidora es que existe algún problema, o que se está produciendo alguna espera.

Si me dices que todas las sentencias son de selección, podría ser que el problema estuviera justo en lo contrario de lo que te decía antes. Puede ser que se estén colando commits junto con las selects? La utilización de commits innecesarios a través de dblinks puede provocar problemas de rendimiento en la base de datos remota. Échale un vistazo a este post del blog Desempeño en Oracle, a ver si puede ser este tu caso.

Si no lo fuera lo que te recomiendo es que analicéis a fondo las sesiones abiertas en la base de datos remota, y busquéis indicadores de rendimiento anormal, como tiempos de espera demasiado elevados, que os puedan guiar para detectar el problema.

Hola Carlos,  tengo la siguiente consulta, debo hacer un Dblink entre dos diferentes versiones de bases de datos entre la 7 y la 10, ¿es posible realizar esto?

 gracias

Jorge

In reply to by Jorge

Directamente no podrás hacerlo, ya que Oracle no soporta la conexión por DBLink entre Oracle 7 y cualquier versión de base de datos superior a la 9.2.

Tendrías que subir de versión la base de datos hasta una 8 o una 9i como mínimo.
Si no te puedes plantear el upgrade, puedes intentar hacer un enlace 'puente' desde un cliente de Oracle 8, ya que esta versión puede comunicarse remotamente tanto con la versión 7 como con la 9i, y creo que también con la 10g.

Hola.

 

Tengo un error extraño de bbdd que no se como encajar:

 

Tengo un package compilado en un oracle 8i, lo llamo desde una app deployada en un jboss 4.5 y el 90% de las veces funciona OK. De vez en cuando falla devolviendo: "ORA-01007: la variable no se encuentra en la lista de selección"... Al entrar en el package y compilar de nuevo funciona OK...  no le veo explicación.. salvo que el package utiliza un DBLink que de vez en cuando falla, pero NO en ese procedure !

 

ALguna explicación ? Muchas gracias.

In reply to by Juan (not verified)

Hola Juan

No creo que sea un problema del dblink. Primero porque lo que tú mismo dices de que el database link está en otro procedure, y segundo porque si fallara te devolvería otro tipo de error, más de comunicaciones, conexiones, servidores remotos y esas cosas.

Revisa el procedure y las SELECTS que haces en el mismo. Si te falla sólo a veces tiene que ser que a veces la sentencia devuelve algo que no esperas, o no devuelve nada..

 

ORA-01007 variable not in select list

Cause: A reference was made to a variable not listed in the SELECT clause.

In OCI, this can occur if the number passed for the position parameter is less than one or greater than the number of variables in the SELECT clause in any of the following calls: DESCRIBE, NAME, or DEFINE.

In SQL*Forms or SQL*Report, specifying more variables in an INTO clause than in the SELECT clause also causes this error.

Action: Determine which of the problems listed caused the problem and take appropriate action.

 

 Hola 

 

bueno tengo montado oracle 10g sobre centos 5.5 ... configure el freedts y unixODBC  en las pruebas de conexión que hago 

puedo conectarme a la bd haciendo un llamado directo a la bd sql server (sin dblink), esto lo hago con las herramientas 

tsql y isql  

 

las consultas funcionan perfectamente, sin embargo cuando creo el dblink  y hago la prueba de conexión de este me aparece el siguente error: 

 

tambien haciendo pruebas con telnet al puerto 1433 se obtiene respuesta. 

 

*********************************************************************
Link  : "abc.xxx.COM"
Error : ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from abc
*********************************************************************
 
si tienen alguna sugerencia para resolver este error se los agradezco. 
 
 
saludos.

In reply to by oscarw

[quote=oscarw]

 Hola 

 

bueno tengo montado oracle 10g sobre centos 5.5 ... configure el freedts y unixODBC  en las pruebas de conexión que hago 

puedo conectarme a la bd haciendo un llamado directo a la bd sql server (sin dblink), esto lo hago con las herramientas 

tsql y isql  

 

las consultas funcionan perfectamente, sin embargo cuando creo el dblink  y hago la prueba de conexión de este me aparece el siguente error: 

 

tambien haciendo pruebas con telnet al puerto 1433 se obtiene respuesta. 

 

 

*********************************************************************
Link  : "abc.xxx.COM"
Error : ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from abc
*********************************************************************
 
si tienen alguna sugerencia para resolver este error se los agradezco. 
 
 
saludos.

 

[/quote]

 

un poco mas de información revisando el log que se genera para el listener, cuando se hace la prueba del dblink aparecen los siguientes errores: 

 

23-JUN-2010 13:04:39 *

(CONNECT_DATA=(SERVICE_NAME=abc)(CID=(PROGRAM=)(HOST=zzz)(USER=userabc))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxx.xx.xx.xx)(PORT=55782)) * establish * abc* 12518

TNS-12518: TNS:listener could not hand off client connection

 TNS-12547: TNS:lost contact

  TNS-12560: TNS:protocol adapter error

   TNS-00517: Lost contact

    Linux Error: 32: Broken pipe

 

 

 

In reply to by oscarw

A primera vista lo que me sorprende es el número de puerto que tienes en el log, 55782, y más si dices que la prueba de telnet la haces con el 1433. Asegúrate de que la conectividad, y sobrodo los puertos que tiene que utilizar la conexión están abiertos.

Lo mejor para validar conexiones de Oracle, después de haber comprobado el ping, es utilizar un TNSPING:

> tnsping nombre_del_servicio

o también

> tnsping ‘(ADDRESS=(PROTOCOL=tcp)(HOST=nombre_servidor_o_ip)(PORT=1575))’  

In reply to by Carlos

 Hola 

 

las opciones que comentas del ping y el tnsping las use y siempre funcionaron de forma satisfactoria. Pero igual el problema  seguía presentandose. 

 

 

bueno finalmente ... luego de muchos cambios y pruebas infructuosas, encontré una referencia que el error tns-12518 se solucionaba parchando la bd 10.2.0.1 a 10.2.0.3. Pues bueno me he decidido hacerlo y enhorabuena que ha funcionado. 

 

Carlos agradezco tus aportes. 

 

 

bueno espero que si alguien tiene este inconveniente .. pues buen aquí esta la solución que me ha sacado de este rollo.

 

 

saludos.  

 

 

 

 

 

 

 

Hola!
Tengo dos bases de datos en Oracle, una base esta de forma local con 10g y la otra está en otro servidor de Oracle 9 tengo ambas conexiones con ODBC, mismas q funcionan perfectamente.

Como puedo realizar un query anidado de ambas bases de datos? pero sin cambiar el tsnames-- y si es necesario cambiarlo como hacer el query anidado de ambas dases de datos.

 

He leido que puedo hacerlo con un bdlink, pero ¿es necesario crear el bdlink? o ¿puedo hacerlo de otra forma?
pueden parecer tontas mis preguntas, pero de verdad que necesito un poco de ayuda.

100 gracias.

In reply to by glicea17

Pues si quieres crear una query que referencie a las dos bases de datos por lo menos en una tienes que crear el dblink. Si el problema que tienes es que no puedes acceder al TNSNAMES para modificarlo, puedes definir el DBLINK con toda la cadena que incluirías en el TNSNAMES.

Si no utilizas un dblink también podrías abrir un cursor para cada BD con cualquier lenguaje de desarrollo que te permita conectar por ODBC con BBDD Oracle, pero tendrás que anidar los cursores, no podrás crear una sentencia SQL que combine las dos bases de datos.

Estimado,
enhorabuena y gracias por el temita.
También tengo una consulta: tengo una aplicación Oracle y me piden un acceso via dblink desde una BD Adabas ¿es posible? ¿cómo?

gracias mil, y salud a porrillo.

Hola Carlos,

Estoy trabajando por primer vez con los dblinks en Oracle On Demand y tengo algunas dudas:

1.- Es necesario que las BD que quiera conectar tengan la misma versión??
2.- Tienen que estar en el mismo servidor las bases que quiera conectar??

Gracias por tu ayuda

In reply to by Laila (not verified)

[quote=Laila] Estoy trabajando por primer vez con los dblinks en Oracle On Demand y tengo algunas dudas: 1.- Es necesario que las BD que quiera conectar tengan la misma versión?? 2.- Tienen que estar en el mismo servidor las bases que quiera conectar?? [/quote]

Las bases de datos pueden tener versiones diferentes, pero dentro de unos límites, en este comentario ya surgió esta cuestión. En principio no deberías tener problemas entre bases de datos Oracle de versiones 8i, 9i, 10g y 11g.

Sobre los servidores, te confirmo que las bases de datos pueden estar en diferentes servidores.

 

Hola Carlos, tengo un problema, estoy trabajando con un dblink el cual es ejecutado dentro de un procedure. Cuando ejecuto el procedure directamente del plsql no es mucho el tiempo de respuesta pero sin embargo cuando lo ejecuto desde un form demora demasiado o a veces no responde.
Que puede ser y que podría hacer para optimizarlo?

Hola podría ayudarme con una consulta que tengo sobre los dblink

Tengo un paquete Cl_pruebas1 el cual llama aun procedimiento pt_pruebas.
En el procedimiento pt_pruebas realizo varios select e insert a unas tablas que estan en una base ppt

Select *
From tabla1@ppt.dd.com
Where Customer_Id = Cn_Customerid ;

Insert Into tabla1@ppt.dd.com

En este procedimiento pt_pruebas cierro los dblink y luego en el paquete principal Cl_pruebas1 realizo un commit a todo, pero el problema es que no se estan actualizando las tablas (tabla1@ppt.dd.com) que estan en la base ppt, solo se actualizan para la otra base qppt, no entiendo cual podría ser el problema.

In reply to by myf

La verdad es que yo siempre lo he hecho al revés, siempre intento utilizar los dblinks para hacer selecciones de datos, y las inserciones hacerlas 'en local', es la manera más segura, no tienes problemas adicionales con los permisos y te ahorras estos problemas.

Si puedes haz el INSERT desde la BD 'ppt' utilizando un dblink para seleccionar los datos de la BD donde tienes el procedimiento pt_pruebas.

Puede que te vaya bien echarle un vistazo al tema Insert entre bases de datos remotas enlazadas por dblink

Y si al final descubres algo más, porqué no se puede hacer, u otra manera de hacerlo, no te olvides de explicárnoslo..

 

 

In reply to by myf

Hola

 

podes revisar estas opciones creo que te pueden servir para lo que necesitas, haciendo uso de los dblinks

 

cursor integer

devuelve binary_integer

--esto para una db en sql server

 ejecutar:= "exec insert .... commit"

cursor  := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@dblink

DBMS_HS_PASSTHROUGH.PARSE(cursor, ejecutar);

devuelve := DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@dblink(cursor);

--cerrar

DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@dblink(cursor);

 

bueno espero te sirva, nos cuentas como  te fue.

 

saludos.

 

tengo el siguiente codigo

Imports System.Data.OracleClient

Public Class Form1

Private Sub btnbuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnbuscar.Click

Dim cadenaDeConexion As String
Dim conexion As OracleConnection
Dim dsdataset As New DataSet

cadenaDeConexion = " Data source=ORCL; persist security info=false; User ID= SCOTT; password= scott;"
conexion = New OracleConnection(cadenaDeConexion)

conexion.Open()

Dim query As String
query = "select scott.emp.ename , scott.emp.deptno, scott.dept.loc from" & _
" scott.emp inner join scott.dept on scott.emp.deptno = scott.dept.deptno " & _
" where ename like '%" & UCase(Me.txtnombre.Text.Trim) & "%'"

Dim MiAdaptador As New OracleDataAdapter(query, conexion)
Try
MiAdaptador.Fill(dsdataset)
Me.DataGridView1.DataSource = dsdataset.Tables(0)
Catch ex As Exception

End Try
End Sub

lo que busco es llenar un datagrid con la informacion, pero al darle click al boton me aparece el siguiente error ORA-00604: error ocurred at recursive SQL level 1 ORA 06502 PL/SQL numeric or value error: character string buffer to small ORA 06512: at line 10..
que puedo hacer?? no e encontrado la solucion a este problema!! le agradeceria que me ayudara.. muchas gracias

Hola,
Tengo un servidor en Windows con 10gR2 con un dblink definido a un servidor Solaris con 10gR2 también.

Resulta que migre el servidor Windows a un Solaris con 11gR2 pero ahora los queries que usan el dblink al Solaris 10gR2 tienen un mal rendimiento.

Por ejemplo desde el servidor de Windows duran 20 segundos pero desde el nuevo servidor Solaris duran 157 segundos.

Alguna idea de que pueda ser?

Saludos,

Alberto

In reply to by Alberto (not verified)

Así a primera vista parece un problema de comunicaciones más que de versiones de BBDD o de SO, y más si son versiones 10g y 11g.
Yo revisaría que todas las comunicaciones entre los servidores estén funcionando al 100% y no haya nada que las esté ralentizando

Estimado Carlos, estoy creando el siguiente trigger:

create or replace trigger trg_autonumero
before insert on t_personas_atendidas
for each row
begin
if :new.codPer is null then
select personas_id.NextVal into :new.codPer from dual;
end if;
end;

y me da error de que "el identificador new.CodPer no se ha declarado", a que se debe.

hola! tengo un problema con un BDlink y espero me pudieras ayudar. tengo dos bases remotas con oracle 8, creo mi bdlink para conectarme a la otra BD y al probar el bdlink me dice que el enlace no esta activo y al hacer un select o una vista materializada a la BD donde me quiero conectar con el bdlink me dice que TNS:COULD NOT RESOLVE SERVICE NAME.

tengo otro enlace a otra BD remota y ese si funciona sin problemas, todos son oracle 8; no se si falte algo de configuracion en la bd a donde no puedo entrar.
gracias por la ayuda

Hola Carlos, quería ver si me puedes ayudar...

Necesito crear un sinónimo con db link para llamar a procedimiento de un paquete que está en otra base de datos pero no me funciona.
Es en Oracle.
Le pongo create public synonym xxx for paquete.procedimiento@dblink
y si lo crea pero cuando hago el llamado del sinónimo para ejecutarlo da error de que no reconoce el sinónimo.
Lo intenté hacer solo con el paquete pero igual cuando llamo al sinónimo como? le especifico cual procedimiento del paquete necesito?.

Si lo hago con un procedimiento solito si me funciona... es con paquete que no.

Si me puedes dar un pista!!.. please!. A ver si me dí a entender!.

Saludos Carlos.

Mi problema es el siguiente, tal vez me puedas ayudar !!

Tengo un problema con un DBLink al tratar de ejecutar un procedimiento dentro de un paquete

de la siguiente manera.

Por ejemplo: nombre_paquete.nombre_procedimiento@nombre_dblink(<parámetros>)

La situación es que se realizó una migración y en el servidor anterior todo funciona correctamente

pero en el nuevo servidor esto da problemas. Me han dicho que hay posibilidad de que dé problema

la ejecución de un procedimiento dentro de un paquete haciendo uso de dblinks. He llegado a

pensar que el problema puede ser de configuración del archivo de parámetros; sin embargo;

reviso el archivo y están prácticamente iguales. Las bases de datos tienen nombres distintos.

Básicamente al ejecutarlo obtengo los siguientes errores:

 

Gracias !!

In reply to by tavo.montero

La nueva base de datos tiene exactamente la misma versión que la antigua?

Buscando por el error he encontrado más de una referencia a un bug de la versión 10g, que se soluciona con un parche. También podría ser la misma versión y que a la nueva le falte aplicar el pachset, echa un vistazo por si acaso fuera eso..

 

This error is an interoperability error due to the bug 4511371, which is fixed by applying the 10.1.0.5.0 patchset for 10gR1 and 10.2.0.2.0 patchset for 10gR2.

Ref. Metalink note 4511371.8

Fuente: Oracle by Madrid

In reply to by Carlos

Saludos Carlos !!

Muchas gracias por tu pronta respuesta !!

 

En el ambiente anterior las dos bases de datos eran Oracle 10g Release 2 de 32 bits

En el nuevo ambiente una base de datos es Oracle 10g Release 2 de 32 bits y la otra

es Oracle 11g de 64 bits.

Menciono que en el ambiente anterior todo funcionaba perfectamente, leyendo tus comentarios

he visto que el problema se solucionaba con la Oracle 10g R 2, por lo que me extraña mucho

que en Oracle 11g 64 bits esté danto este problema.

Afectará mucho el manejo de los bits? Esto porque una es de 32 y la otra es de 64?

 

Muchas gracias Carlos !!

 

 

 

In reply to by tavo.montero

 El tema 32/64 bits siempre puede dar alguna sorpresa, pero yo antes me aseguraría de que la nueva 10g R2 tiene aplicado el patch. Aunque las dos BBDD tengan la misma versión puede que en la anterior estuviera aplicado y en la nueva no.

Busca más información en el metalink para asegurarte antes de hacer nada.

 Una pregunta estimados amigos

instale BD Oracle 10G sobre windows7 y a diferencia del xp o vista no veo

en el regedit las variables de Oracle que antes se creabam en HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE

Quiero configurar la variable ui_icon para ver los iconos en el forms.

Por favor gracias anticipadas!

 

Hola, tengo una BD en Oracle 9 que deseo migrar a Oracle10, quisiera saber qué diferencias en cuanto a DBlinks, vistas, sinónimos, etc o algun otro topic que debería considerar a la hora de la migración.

 

Muchas gracias.

In reply to by pablolivaxxi@h…

Hola 

 

verificaste que los servicios heterogeneos estan bien configurados ? 

 

como estas haciendo la consulta con el dblink ? 

 

1. primero asegurarse que la conexion con la bd funciona para los servicios heterogeneos, se puede

usar el comando: isql -V bdconfigurada user pass si te da conexion no hay problema lo servicios estan bien configurados.

De lo contrario el dblink nunca te va funcionar.

 

 

[quote=carlos]

Abro este tema a partir del artículo Acceso remoto mediante DBLink de Oracle para que podamos comentar dudas y experiencias sobre la creación y utilización de database links de Oracle.

[/quote]

Hola Carlos, mi consulta es la siguiente: estoy utilizando oracle10g XE y tengo
creadas 15 bdlinks, el problema es que quiero unir los datos de las diferentes
tablas creando una vista utilizando un union all ya que las tablas a las que
quiero acceder tienen la misma estructura pero solo me permite crear la vista
con solo 4 dblinks, cuando quiero agregar uno más me dice
‘ORA-02020 demasiados enlaces de base datos en uso.’

Espero me puedas ayudar,
Saludos, Javier.

A parte de lo que me pueda parecer tú query... la solución podria ser aumentar el parámetro open_links y open_links_per_instance. Ambos parámetros tiene el valor por defecto 4. El primero de ellos es el número máximo de dblinks abiertos por una sesión. El segundo, como su nombre indica, por toda la instancia. De todas maneras, lo que te comentaba, si el valor por defecto es 4, por algo será... has pensado en formas alternativas de ejecutar dicha query? Saludos, Oscar Paredes - oscar.paredes@dataprix.com

Buenas, tengo una pregunta.

 

He creado algunos dblink, conectando un oracle 10g con un sql server 2005  (usando el oracle gateway).

Hasta ahi todo va bien, porque puedo hacer select, insert, update, delete.

Bueno el siguiente paso fue utilizar un sp del sql server, desde el oracle. Para ello cree un procedimiento dentro de un paquete, a fin de poder llamar al procedimiento del sql, desde el oracle, de tal forma que tengo algo asi.

 

 

Procedimiento SQL
-----------------------------

create PROCEDURE [dbo].[TempSQLSP]
@inParam varchar(11),
@outParam int OUTPUT
AS
BEGIN
select @outParam = fkDepeCod from alumno where alumCod=@inParam
END

 

Procedimiento Oracle

----------------------------------

FUNCTION TEMP_ORACLE_FUNCTION ( inParam IN  varchar2 )
RETURN NUMBER;

---------------


FUNCTION TEMP_ORACLE_FUNCTION ( inParam IN  varchar2 )
RETURN NUMBER
IS
       outParam  NUMBER;
BEGIN
      "dbo"."TempSQLSP"@Sqlserver (inParam, outParam);

      
       commit;
    RETURN 0;
   
END TEMP_ORACLE_FUNCTION;

 

Al ejecutar me sale un error,


Compilation errors for PACKAGE BODY TD.P_TEMP

Error: PLS-00306: número o tipos de argumentos erróneos al llamar a 'TempSQLSP'
Line: 486
Text: "dbo"."TempSQLSP"@Sqlserver (inParam, outParam);

Error: PL/SQL: Statement ignored
Line: 486
Text: "dbo"."TempSQLSP"@Sqlserver  (inParam, outParam);

 

Gracias.

Hola comunidad, tengo un problema al tratar de cerrar un database link desde APEX

actualmente desarrollo una aplicación q obtiene la mayor parte de la informacion de otra base de datos (ACSEL)

para lo cual utilizo database link para las consultas y llamados a procedimientos

cada vez q se solicita una consulta un nuevo hilo de conexion database link es creado, necesito llevar el control de los hilos de conexion se que para cerrar una database link utilizamos el comando ALTER SESSION CLOSE DATABASE LINK nombredeldblink;

mas no consigo ejecutar esta sentencia dentro de APEX, alguna sugerencia??

de antemano gracias.

 

In reply to by Ludin

Pero cuál es el problema que tienes al ejecutar el comando? Si te devuelve un error dinos cuál es.

Igualmente, si no consigues cerrar el dblink directamente, aunque seguro que no es la opción más eficiente, puedes probar a cerrar la sesión, ya que el cierre de la sesión debería hacer que la conexión del dblink también se libere.

 

Hola, mi pregunta es si puedo crear una tabla en mi base de datos a partir de otra tabla de otra base de datos usando dblink y si esto afecta el rendimiento de la aplicación. Muchas Gracias

In reply to by yajaira Pardo (not verified)

Sí, sin problemas, con Oracle SQL puedes crear una tabla a partir de otra con una sentencia CTAS:

CREATE AS SELECT ... FROM otra_tabla@dblink

Si no son muchos datos y la red va bien no deberías tener problemas de rendimiento. Si hablamos de millones de registros para arriba, y la red que conecta las dos bases de datos no va sobrada, tendrías que plantearte opciones de exportación e importación.

 

Buenas tardes Carlos, En el momento tengo dos bases de datos una 10g y la otra 11g, y estoy intentando actualizar una tabla en 10g que tiene un trigger el cual inserta datos en una tabla de 11g, pero me sale el siguiente error ORA-02070: database does not support in this context. Si ejecuto el insert de la tabla 11g directamente en el usuario 10g, me funciona sin problemas. Me puedes orientar porque desde el trigger no funciona, sera falta de alguna configuracion? Muchas Gracias.

In reply to by Caro (not verified)

Hola, Tal vez una solucion podria ser que ejecutaras tu insert desde un procedimiento autonomo invocado desde el trigger. saludos

 

alguien me puede ayudar con esto

Tengo un procedimiento en una base de datos A que necesita ejecutar un procedimiento en una base de datos B, ya tengo el dblink entre las dos bases dedatos y puedo invocar tablas y llamar procedimientos, el problema esque el procedimiento B recibe como parametro un type table que esta definido en esa base de datos, yo creo el type el la base de datos origen(A) y lo lleno con datos y se lo envio como parametro, pero me sale un error que puedo hacer

 

declare

  varnum   number;

  equipo   number:=11127;

  operacion number:=68;

  impresora  varchar2(100);

  mensaje  varchar2(100);

  tDetalleV    PRUEBA_TAB_TYPE := PRUEBA_TAB_TYPE();

  rtDetalleV   PRUEBA_TYPE := PRUEBA_TYPE(0,'',0,0);

  n_registros NUMBER := 0;

  nusuarioventa number;

            

begin

        tDetalleV.extend;

n_registros:=n_registros+1;

rtdetallev.ide_producto:=1;

rtDetalleV.descripcion:='hola';

rtDetalleV.vlr_unitario:=10;

rtdetallev.cantidad:=1;

        tDetalleV(n_registros):=rtDetalleV;

 

ganasw.facturacion.facturar_productos_prueba@DIVEDLLO_A_GANADLLO(tDetalleV,mensaje);

 

dbms_output.put_line(mensaje);

end;

 

Informe de error:

ORA-06550: línea 38, columna 1:

PLS-00306: wrong number or types of arguments in call to 'FACTURAR_PRODUCTOS_PRUEBA'

ORA-06550: línea 38, columna 1:

PL/SQL: Statement ignored

06550. 00000 -  "line %s, column %s:\n%s"

*cause:    usually a pl/sql compilation error.

 

Hola, estoy intentando ejecutar un sp desde un oracle 11g standar one a un oracle xe 10g por medio de un dblink, cuando lo ejecuto me sale el siguiente error: ORA-04052: se ha producido un error al consultar el objeto remoto FLYPASS.PCKFPS_PURGAR_COLAS@XEPUERTO.WORLD ORA-00604: se ha producido un error a nivel 1 de SQL recursivo ORA-06544: PL/SQL: error interno, argumentos: [55916], [], [], [], [], [], [], [] ORA-06553: PLS-801: error interno [55916] ORA-02063: 2 lines precediendo a XEPUERTO.WORLD 04052. 00000 - "error occurred when looking up remote object %s%s%s%s%s" *Cause: An error has occurred when trying to look up a remote object. *Action: Fix the error. Make sure the remote database system has run KGLR.SQL to create necessary views used for querying/looking up objects stored in the database. se que el dblink esta bien por que cuando consulto una tabla remota funciona pero con el sp no Gracias

Estimado, Estoy Trabajando En Apex Que Esta En Un Servidor Con Oracle Xe Y Conectandome A Un Servidor Remoto Para Sacar Los Datos De Produccion Lo Que Es Bastante Lento Y Tengo Dos Dudas Espero Me Pueda Ayudar:

1.- Mi Conexion Es A Traves De Dblink Me Comentaron Que De Esta Forma Es Lenta De Que Forma Me Puedo Conectar En Forma Mas Eficiente Manteniendo Mi Servidor Con Apex Y Mi Servidor De Produccion.

2.- Cuando Ejecuto Un Sql En "Sql Comand" De Apex, El Resultado Es Relativamente Rapido, Pero Al Correr Ese Mismo Sql En Una Pagina Este Se Hace Extremadamente Lento. Porque??? Que Pone Mi Pagina Tan Lenta Cuando Debe Mostrar Los Datos. No Estoy Paginando Las Paginas.

Muchas Gracias

hola amigos, tengo el siguiente problema al tratar de hacer un insert vía un dblink

ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
ORA-02063: preceding line from LNK_HIST_SI

lo que hago es un
Insert into tabla@dblink
select from tabla
where condiciones
y excluyendo lo que ya este con un not exists tabla@dblink;

espero haber sido claro

si ejecuto el solo select no me da ningun problema pero cuando pongo el insert me da el error del tablespace TEMP
en ese tablespace tengo 5 GB y estoy tratando de insertar solo 5 registros.

gracias por los comentarios

Muy buenas tardes, una pregunta
Resulta que de sql server 2008 r2 hice un linked server a oracle 9i pero cuando consulto y traigo datos de una tabla de oracle a una en sql server me tarda demasiado tiempo en ejecutar.
No se si es normal porque en la tabla de oracle hay miles de registros, pero los registros los estoy filtrando por fecha no se donde estar el error o si es normal

gracias de antemano

Buenas noches, quería consultarte sobre un error que me está apareciendo en un aplicativo que usa un dblink desde Oracle a MySQL (un esquema de Oracle consume información de una base de datos Mysql), el dblink lo he hecho mediante el Oracle Gateway ODBC que viene con el Oracle, y el error es el siguiente:

java.sql.SQLException: Violación de protocolo
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C7Ocommoncall.doOLOGOFF(T4C7Ocommoncall.java:61)
at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:491)
at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:3754)
at pe.gob.servir.cat.connection.factory.ConnectionFactory.CloseConexion(ConnectionFactory.java:73)
at pe.gob.servir.cat.persistencia.jdbc.MovimientoActivoDAO.getDatosActivosRemotosComplemento(MovimientoActivoDAO.java:218)
at pe.gob.servir.cat.persistencia.jdbc.MovimientoActivoDAO.main(MovimientoActivoDAO.java:384)

Exception in thread "main" java.lang.NegativeArraySizeException
at oracle.jdbc.driver.T4CMAREngine.unmarshalDALC(T4CMAREngine.java:2341)
at oracle.jdbc.driver.T4C8TTIuds.unmarshal(T4C8TTIuds.java:146)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:200)
at oracle.jdbc.driver.T4CTTIdcb.receive(T4CTTIdcb.java:144)
at oracle.jdbc.driver.T4C8Oall.readDCB(T4C8Oall.java:771)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:346)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:861)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1267)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3493)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
at pe.gob.servir.cat.persistencia.jdbc.MovimientoActivoDAO.getDatosActivosRemotosComplemento(MovimientoActivoDAO.java:198)

Por favor si tuviera alguna idea de a que se puede deber el error, le estaré agradecido me pueda ayudar

Buenas tardes, 

 

   Tengo creado un DB_Link de Sql Server 2012 a Oracle 11g, puedo hacer consultas a las bd que asigne. Pero me da un error al momento de realizar un update desde Oracle, para que me realice el cambio en la Bd Sql Server. el error es el siguiente:  ORA-02070 database does not support update in this context.

 

Por favor si me pueden ayudar se los agradeceria.

 

Saludos,

Y a nivel de ejecución de proc. Almacenados, éstos se pueden ejecutar desde oracle 9i a un 11gr2 vía dblink??
gracias

Tengo un procedimiento X creado en oracle 12c, en oracle 11g se creo un dblink para ejecutar ese procedimiento X, pero en ocasiones genera los siguientes errores:

ORA-04052: se ha producido un error al consultar el objeto remoto SYSTEM.PK_COR@ADMIN.xxx.com.co
ORA-00604: se ha producido un error a nivel 1 de SQL recursivo
ORA-12154: TNS:no se ha podido resolver el identificador de conexión especificado
04052. 00000 -  "error occurred when looking up remote object %s%s%s%s%s"
*Cause:    An error has occurred when trying to look up a remote object.
*Action:   Fix the error.  Make sure the remote database system has run
           KGLR.SQL to create necessary views used for querying/looking up
           objects stored in the database.

 

Carlos, no soy el dba, y no se como ayudar a corregir este error.  

 

gracias

hola carlos disculpa el abuso soy de venezuela y vi en un foro que tu respondes cosas de oracle o si otra persona me puede ayudar le agradezco. bueno te cuento lo que me sucede:

   tengo mi BD en oracle 10g y en otro servidor que no es de nosotros también tiene oracle no recuerdo si es la 10g o la 11g 

bueno el problema es el siguiente tengo una vista de mi servidor al otro servidor a través de un enlace de base de datos y chevere hago la consulta y funciona pero resulta que si por ejemplo:

tengo mi pantalla donde pido una cédula la consulto en la vista que es del otro servidor y trae el nombre y apellido todo bien hasta aquí, termino de llenar los datos ya de mi tabla que esta servidor y bien al momento de guardar revienta dice error de comunicación me di cuenta que es la vista remota hacia el otro servidor, ya que me cree una pantalla mas sencilla sin hacer la consultar hacia esa vista remota y ahi si guarda pero si pongo algo que consulte a esa vista y guardo en mi tabla sale ese error

 

PD no recuerdo si siempre pasa o es a ratos ese error el detalle es que sucede es al consultar una vista remota

 

gracias a todos

Tengo un problema. conectando entre un IBM i V7R1 , mediante DBLink a una DB Oracle me da un error de formato de de fecha.

 

  ORA-28500: la conexión de ORACLE a un sistema no Oracle ha devuelto este mensaje: [Oracle][ODBC DB2 Wire Protocol driver][UDB DB2 for iSeries and AS/400] STRING REPRESENTATION OF DATETIME VALUE HAS INVALID SYNTAX.  16 *N {HY000,NativeErr = -180} ORA-02063: 2 lines precediendo a DBL_PHIDRDA ORA-06512: en "DA_ABA.ABA_SOLICITUD", línea 547 ORA-06512: en línea 38   Alguien le paso esto?   Saludos y gracias por la ayuda

Buenas tarde disculpe las molestias pero estoy necesitando ayuda de un experto como usted. Al instalar Oracle11g Me da a elegir en una opcion si queremos instalar en forma de Escritorio o Servidor .. En cual de esos dos modos instalo para poder crear una DBlink?

In reply to by JonathanBlackgg (not verified)

Hola Jonathan

En principio no te va a influir en la posibilidad de crear DBLinks si haces la instalación en modo Desktop o en modo Server, ya que en ambos casos vas a instalar el mismo motor, solo que en el modo Server el instalador crea opciones de configuración más avanzadas.

Saludos,

Buenos dias, talvez ustedes me pueden ayudar. 

 

Necesito conectarme de un dblink de mi base en mi maquina a otro dblink creado en otra maquina.

 

 En pocas palabras la maquina A tiene un dblink para conectarse consultar tablas de la maquina B. pero la maquina B tiene un dblink para conectarse a una maquina C. 

 

quiero consultar tablas de la maquina C usando el dblink de la maquina B pero de la maquina A

Carlos, buenas tardes. le comento que he instalado dos base de datos Oracle 11g Express XE, y quiero generar un db link entre las dos base de datos. La verdad es que he buscado por todos lados, como hacer la conexion de estas dos base de datos, pero no puedo conectarme. me da error de time out cuando creo el db link. Dichas bases de datos, estan en diferentes servidores fisicos, las dos base de datos se llaman XE dado a que es la unica forma que se instala el 11g express. hay alguna limitante para generar db link entre dos base de datos express? que cosas puedo controlar o hacer, para generar dichas conexion. Desde ya muchas gracias y disculpa las molestias. César.

In reply to by César Heredia (not verified)

Que yo sepa Oracle XE no tiene ninguna limitación en cuanto a la creación de database links. Si lo que obtienes es un error de timeout puede que sea un problema de comunicaciones entre las dos bases de datos. Si están en diferentes servidores o máquinas puede que algún firewall o alguna regla impida que se comuniquen entre sí. Revisa sobretodo que los puertos que tengas configurados en las bases de datos, que estén abiertos.

Por defecto la base de datos utiliza el 1521, y para conexiones http el 8080. Si quieres consultar la configuración de los puertos puedes ejecutar desde linea de comandos con el usuario de sistema con que has hecho la instalación en windows, o un user que pertenezca al grupo de Oracle en Linux/Unix:

> lsnrctl status

Antes de nada recuerda también hacer un tnsping para validar que hay comunicación entre las dos bases de datos

Dejar el puerto 8080 por defecto para las comunicaciones por http de BBDD Oracle puede crearte problemas si ya utilizas este puerto para otras aplicaciones, que es algo bastante habitual.

Te muestro cómo consultar por SQL qué puerto tienes configurado en la base de datos, y cómo cambiarlo por otro, el 8089 por ejemplo:

SQL> select dbms_xdb.gethttpport from dual;
--------
    8080
SQL> exec dbms_xdb.sethttpport(8089);

 

Carlos buenas tardes. Mira tengo este problema con un DBLINK que en su momento funciona, actualmente me manda este error, de favor tus comentarios por donde puedo buscar o ver que es lo que esta pasando, el DBLINK existe. Me conecto a la base del DBLINK y sin problemas. Al utilizar el DBLINK y nada. 09:34:20 Error: ORA-03113: end-of-file on communication channel SALUDOS

Buen dia,

Sabes que ejecute un procedimiento que usaba dblink varias veces por error en la programación.

Ahora tengo el error presente y no puedo acceder a la aplicación.

El error:

ORA-04052: se ha producido un error al consultar el objeto remoto CLIENTEVIR.ANDES@WEB

ORA-00604: se ha producido un error a nivel 2 de SQL recursivo

ORA-02046: ya ha empezado la transacción distribuida

ORA-02063: line precediendo a WEB

He intentado varias cosas de las que refieres aqui y nada.

He probado: reiniciar el servidor, matar todas las sesiones y lo del dblink.

Alguna idea?????

Gracias,

Amigosm estoy haciendo un DBlink de oracle a mysql y en la configuración inicial que es configurar la ODBC.ini y el listener me arroja error por el SID. me podría ayudar a como realizar este procedimiento.

Backups de bases de datos Oracle

Backups de bases de datos Oracle Dataprix Fri, 05/07/2010 - 19:25

Abro este tema a proposito de una consulta de Monica sobre Backups de BBDD Oracle.

Como la creación y gestión de copias de seguridad es un tema muy amplio y puede dar para muchas aportaciones y discusiones mejor dedicarle un tema específico de este foro de BBDD Oracle. 

El tema de los backups de BBDD es demasiado amplio, y la utilización de un método u otro depende mucho de tus necesidades. Seguramente estaría bien escribir un artículo sólo sobre backups de BBDD Oracle, pero ahora mismo no creo que tenga tiempo de hacerlo.

Comentarte sólo que a partir de la versión 10g de Oracle la consola de administración web (Oracle Enterprise Manager) facilita mucho las tareas de backup, y es relativamente fácil preparar un sistema de backup  sencillo ayudándote del asistente.

Trabajar con RMAN, por ejemplo, requiere mucho más conocimiento.

Eso sí, te recomiendo que antes hagas pruebas en un entorno de desarrollo, con los backups no cuesta mucho acabar consumiendo todo el espacio disponible, o saturando los recursos del server de BBDD.

Te indico también algunos enlaces que he encontrado 'googleando', y pienso que te pueden ser útiles para empezar:

http://www.databasedesign-resource.com/oracle-backup.html

http://systemadmin.es/2009/10/realizar-un-export-backup-de-oracle-mediante-exp

 

Otra opción es utilizar Oracle Secure Backup para gestionar los backups de BBDD Oracle. Como mínimo tendrás una documentación muy completa en la web de Oracle sobre cómo utilizar este producto y establecer tus políticas de backups para bases de datos Oracle.

 

In reply to by Carlos

Segun mi propia experiencia, trabajar con RMAN no me parece tan complejo una vez profundizamos un poco. La copia es rápida y autocomprimida ocupa poco espacio.

Las copias desde Enterprise Manager son más sencillas pero a mi personalmente todo lo que se puede hacer desde la consola lo acabo haciendo desde linea de comandos... Es bonita pero no es muy de mi agrado para cualquier cosa que no sea detectar picos de uso en la base de datos.

Por cierto, si dispones de suficiente espacio y ventana horaria no está mal acompañar las copias de rman con un export (copia lógica) de la base de datos como apunta Carlos en su segundo enlace.

In reply to by Carlos

 Hola Carlos,

Tus notas son interesantes. Te cuento que tengo un problema, actualmente uso rman, antes todo funcionaba bien porque mis backups salian a disco y todos felices el catalogo no requeria mucho mantenimento. hace dos meses compraron la solucion del tivoli y ahora los backups salen directo a cinta. Los problemas que tengo son los siguientes:

- Mi escenario es que algunos backups estan en modo expired y otros en modo available.

- Necesito que los backups que estan en modo expired, pasen a modo available.

- Se requiere que se borre solo los backups, de hace un mes, los anteriores no se deben eliminar, es decir quiero que sigan en el catalogo como available. solo se requiere elimnar los del 14 de mayo de este año hasta el 14 de junio de este año.

Se requiere esto, porque tivoli dice que si los borro de mi catalogo, tivoli los borra de cinta.

Lo de borrar por fechas es posible?

He probado los siguientes comandos.

*delete backup tag='numero de tag del backup', pero no lo borra por lo menos en el catalogo sigue apareciendo.

*no quiero hacer delete expired backup, porque va a borrar los del año pasado, y eso aun los necesitamos, dado que ahi esta en backup anual, porque cuando me piden restaurar la data, yo hago un duplicate con rman, y si ese backup se elimina del catalogo, ya no voy a poder hacer el duplicate o si?

Espero me puedas ayudar. Gracias 

Saludos,

Hola me podrian ayudar a como escojer un esquema e impórtelo en otra

base de datos, teniendo en cuenta de solo subir la data y teniendo en

cuenta que el esquema pre existe,

debe subirse la información correspondiente a los

backups del 06 junio 2009, 15 agosto 2009, 01 enero 2010 en un tablespace 

les agradezco mucho el favor su pagina es muy buena

In reply to by monicamaria

Para hacer una exportación/importación de sólo uno o dos esquemas quizás lo más sencillo sea utilizar la utilidad imp/exp de Oracle.

No se la versión de BD que tienes, pero a partir de la versión 10g también se puede usar Oracle Data Pump, que dicen que es más eficiente, pero imp/exp también debería funcionarte bien.

Te pongo un ejemplo de algo parecido a lo que haría yo, pero busca documentación sobre las opciones, haz alguna prueba y adáptalo a tu caso.

 

Desde linea de comandos, y utilizando el usuario propietario de la instalación de Oracle, o uno que pueda ejecutar las utilidades de Oracle, puedes utilizar el comando exp para crear un fichero de exportación con los objetos de los dos esquemas.

1. Exportación de los dos objetos de los dos esquemas en el fichero dosesquemas.dmp

> exp system/password@basededatos file=dosesquemas.dmp full=n
      OWNER=(USER1, USER2) GRANTS=y COMPRESS=y
      log=dosesquemas_exp.log

2. Copia del fichero de exportación al servidor donde se hará la importación

> scp dosesquemas.* oracleuser@servidor:/directorio

3. Abriendo una sesión de terminal en el servidor de la base de datos destino, importación de los esquemas

> imp system/password@basededatos2 file=/directorio/dosesquemas.dmp
      FROMUSER=USER1,USER2 TOUSER=USER1,USER2
      log=dosesquemas_imp.log ignore=yes

 

 
Enlazo algunos sitios donde he encontrado información que te puede ser de utilidad:
 
Manual de Backup y Recuperación con Oracle, Universidad de Valladolid
Import Export FAQ, Orafaq
Oracle export Utility y Oracle Import Burleson consulting

 

In reply to by monica (not verified)

No se si te entiendo bien, pero el backup no se suele hacer por fechas. Hay muchas maneras de hacerlo, pero básicamente consiste en que cada cierto tiempo la base de datos guarda una copia completa de su estado actual, o va haciendo copias incrementales de los cambios.

Si tienes un backup de una copia completa podrás recuperar lo que había el dia que hiciste la copia, y si te interesan sólo registros creados o modificados entre dos fechas, tendrás que crear un campo adicional para almacenar esa fecha, y después discriminar por fecha en la recuperación, pero ya te digo que no se suele hacer así.

Con backups incrementales, después de activar en la base de datos el modo de Archivado (Archive Log), lo que sí puedes hacer es recuperar la base de datos tal como estaba en un momento o fecha determinada, que también podría ser lo que estás preguntando. Pero piensa que tampoco es sencillo, la operación tiene su miga, y tienes que crear una política de backups con todos los valores bien ajustados para no consumir demasiado espacio en el servidor, ni reducir demasiado el rendimiento de la BD.

Por eso te recomiendo que consultes bien la documentación para encontrar lo que necesitas. Para empezar a hacerte una idea general de cómo funcionan los backups de Oracle yo comenzaría por el Manual de Backup y Recuperación con Oracle.

In reply to by Carlos

HOLA 

carlos  seria posible tua ayuda?

 

en mi caso replique el servidor de produccion para generar un servidor de pruebas,  las bases de datos son identicas, hace poco hice un backup en frio que quedo bn de igual manera genere un expotr completo antes del backup : expdp

 ahora solo quiero exportar los datos que se generaron despues de la exportacion a la fecha actual he tratado con el parametro  inctype=cumulative pero me genera error : parametro desconocido , ya valide el  expdp help = y no esta 

 

seria posible de su ayuda para generar el export acumulativo y tambien el import

el servidor es win2003 con oracle 10g

 

gracias 


expdp  system/12345 full=y inctype=cumulative constraints=Y dumpfile=EXP_DIC_15.dmp logfile=log_exprt_DIC_15.log full=y directory=export_1  

Hola,

He encontrado este comando que logra solo correr el crosscheck para ciertas fechas:

 ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE sbt;

CROSSCHECK BACKUP 

  COMPLETED BETWEEN '14-May-10' AND '14-Jun-10';

- Pero ahora tengo el problema, que hay otros backups que estan en estado expirados, hay alguna manera que vuelvan a estar en modo available? Espero que si

Saludos,

Elizabeth

 

 

Hola carlos, la cuestion es esta

 

Soy algo nuevo con esto de las bases de datos, cuando yo tome el rol de DBA estaban las estructuras, usuarios, etc. ya creados y he dado una revisada y mantenimiento a esto en primera instancia, ahora queiro establecer un esquema de respaldos, actualmente solamente se hacen respaldos logicos de manera full diaria con el export, pero no se hacen respaldos fisicos de los ficheros de datos, control file, etc. pienso comenzar a hacer los respaldos en frio de la DB ya que esta en modo NOARCHIVELOG, alguna recomendacion que tengas para hacer este tipo de respaldo o algún sitio donde pueda tener mayor referencia tanto a respaldos en caliente y respaldos en frio,

 

saludos

Hola .. tengo un problema ...

en la universidad me mandaron hacer un proyecto de BDD

Oracle esta instalado en una mquina virtual  y la interfaz esta hecha  en una maquina fisica necesito sacar un respaldo de la base pero no se como hacerlo desde la maquina fisica a la virtual..

podrias ayudarme por favor

Checklist de Seguridad en Oracle

Checklist de Seguridad en Oracle drakon Tue, 10/24/2006 - 21:42

Oracle normalmente no lo acostumbraremos a encontrar en Pymes sino más bien en empresas grandes. Esto hace que nos tengamos que poner las pilas en términos de seguridad, no aplicar una simple configuración sino, como buenos DBA's, realizar un buen y detallado estudio.

Qué mejor que ayudarnos de un checklist de seguridad para poder aplicar una buena configuración y que no se nos pase absolutamente nada.

Es por ello que adjunto uno en formato pdf y que básicamente se divide en cuatro apartados:

  • Reforzamiento
  • Actualizaciones de Seguridad
  • Contraseñas por defecto
  • Puertos por defecto utilizados por Oracle.

Descarga el Checklist de Seguridad en Oracle adjunto.

 

Espero que os guste..

Attachment Size
Oracle_Database_Checklist.pdf 162 bytes

Como obtener la lista de tablas con más movimiento (insert,update) en Oracle

Como obtener la lista de tablas con más movimiento (insert,update) en Oracle il_masacratore Fri, 08/14/2009 - 13:46

A fin de obtener una lista aproximada de las tablas con más movimientos de la base de datos podemos consultar el contenido de la tabla dba_tables y cruzarlo con el estado actual de cada tabla en la bbdd. Esto puede tener sentido cuando queremos confeccionar una lista de tablas a las que se debe actualizar estadísticas periódicamente o queremos controlar la cantidad de información que genera alguna aplicación en concreto. Los datos que obtenemos por cada tabla son siempre respecto al último analisis de la misma.

La siguiente forma de hacerlo es un poco "rupestre" pero útil a la vez:

  1. Nos conectamos a la base de datos como system y ejecutamos la siguiente consulta que nos devolvera una lista de selects con todas las tablas de la base de datos (es mejor filtrar para no incluir las tablas de sistema o incluir solo las de un usuario en concreto). En el ejemplo obtendremos solo las de un usuario en concreto:

    select 'select ''' || table_name || ''' as TABLA, ''' || sysdate ||
           ''' as FECHA_ACTUAL, ''' || last_analyzed ||
           ''' as ULTIMO_ANALISIS, count(*) as RECUENTO,' || num_rows ||
           ' as RECUENTO_ANALISIS ,  to_date(''' || sysdate ||
           ''', ''DD/MM/YYYY'') - to_date(''' || last_analyzed ||
           ''',''DD/MM/YYYY'') as DIAS_DESDE_ANALISIS , count(*) - ' || num_rows ||
           ' as DIFERENCIA_RECUENTO, (count(*) - ' ||
           num_rows || ')/(to_date(''' || sysdate ||
           ''', ''DD/MM/YYYY'') - to_date(''' || last_analyzed ||
           ''',''DD/MM/YYYY'')) as INCREMENTO_DIARIO   from ' || owner || '.' ||
           table_name || ' union '
      from dba_Tables
    where owner = 'USUARIO'


    Ejemplo del resultado con plsql:

     

  2. Copiamos toda la columna en el portapapeles y quitamos el último union. Obtendremos el siguiente resultado:

    Podemos ver la tabla con los datos del último analisis de la tabla respecto a los actuales y la variación con su media diaria en número de registros (teniendo en cuenta que un insert(1row) + delete(1row) = 0movimientos )
     

Si a esto le sumamos otros datos como tamaños de fila, si la tabla tiene índices y lo que se nos ocurra podemos hacer otros "trabajos manuales" como acumular esos resultados en una tabla para ver que se cuece en nuestra base de datos.  Eso sí, cada uno puede adaptar esta técnica a su gusto para cubrir sus necesidades

Como recuperar la contraseña del usuario sys y system (Oracle 9i)

Como recuperar la contraseña del usuario sys y system (Oracle 9i) il_masacratore Fri, 07/17/2009 - 13:15

Si pasais a ocupar el puesto de DBA o administrador de Oracle y la persona saliente no os deja anotadas las contraseñas de los usuarios sys y system de la base de datos se puede proceder de la siguiente manera para intentar recuperarlas. Si tenemos el usuario root, podemos cambiar la contraseña de sys y system de Oracle.

Primero debemos conectarnos con SQLPlus al servidor Oracle con el usuario en el que corre la base de datos o root (conectar as sysdba).

A continuación cambiaremos la contraseña del usuario sys de Oracle:

$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Apr 5 15:32:09 2004
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> show user
USER is "SYS"

SQL> passw system
Changing password for system
New password:
Retype new password:
Password changed
SQL> quit

 

Luego cambiaremos la contraseña del usuario system de Oracle: 

$ sqlplus "/ as system"

SQL*Plus: Release 9.2.0.1.0 - Production on Mon Apr 5 15:36:45 2004
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SP2-0306: Invalid option.
Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
where <logon>  ::= <username>[/<password>][@<connect_string>] | /
 Enter user-name: system
Enter password:
Connected to:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> passw sys

Changing password for sys
New password:
Retype new password:
Password changed

SQL> quit

Ahora ya deberíamos poder conectarnos a nuestra base de datos Oracle como usuario sys y system, utilizando los nuevos passwords que hemos introducido desde SQLPlus.

 


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.


 

Como saber que bases estan corriendo dentro de un Servidor Windows???

Como saber que bases estan corriendo dentro de un Servidor Windows??? solena Wed, 06/30/2010 - 19:55

Como están gente del Foro, les comento que es la primera vez que entro a un foro... me gusto mucho la pronta respuesta del Director...
Tengo el siguiente problema: Estoy en un server Windows, como puedo ver que bases estan corriendo ?
ademas de fijarme por el task manager, en los servicios que estan corriendo.hay alguna consulta SQL? o duda como se si se esta usando RMAN para backupear una base....??? Mil gracias...

El Enterprise Manager te dice qué bases de datos están activas. Una consulta SQL no te servirá porque la consulta la haces desde dentro de una BD, tienes que buscar algo externo a los motores de BBDD, y lo más fiable son los servicios que hay levantados.

Creo que también existen herrramientas específicas (aparte de TOAD y similares) que analizan el servidor y te muestran las BBDD que tienes funcionando, pero ahora no recuerdo ninguna, si encuentro tiempo ya buscaré mejor.

Con respecto a RMAN creo que en windows también tiene su propio servicio RMAN, si no está levantado seguro que no estará haciendo las copias.

In reply to by Carlos

Te agradezco tu repuesta, pero en estos servidores no tenemos ningun software instalado como el TOAD o OEM... no nos permiten instalarlo... alguna otra manera?? se te ocurre... mil gracias

In reply to by Nadia Soledad (not verified)

Podrías consultar el estado del listener desde linea de comandos con el usuario con el que se ha hecho la instalación de Oracle:

> lsnrctl status

Fíjate en las instancias con status READY

 

También te puede ayudar consultar el contenido del fichero 'listener.ora', aquí encontrarás relacionado el nombre de la instancia con el directorio de instalación.

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

Cómo crear un nuevo esquema en Oracle paso a paso cfb Sun, 10/22/2006 - 21:44

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

  • Creación de un tablespace para datos y otro para índices. Estos tablespaces son la ubicación donde se almacenarán los objetos del esquema de Oracle que vamos a crear.

Tablespace para datos, con tamaño inicial de 1024 Mb, y auto extensible

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

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

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

La creación de estos tablespaces no es obligatoria, pero sí recomendable, así cada usuario de la BD tendrá su propio espacio de datos.

  • Creación del usuario que va a trabajar sobre estos tablespaces, y que será el propietario de los objetos que se se creen en ellos
CREATE USER "APP" PROFILE "DEFAULT" IDENTIFIED BY "APPPWD"
DEFAULT TABLESPACE "APPDAT" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;

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

CREATE INDEX mi_indice ON mi_tabla(mi_campo)
TABLESPACE APPIDX;
  • Sólo falta asignarle los permisos necesarios para trabajar. Si se le asignan los roles 'Connect' y 'Resource' ya tiene los permisos mínimos, podrá conectarse a la base de datos y realizar las operaciones más habituales de consulta, modificación y creación de objetos en su propio esquema.
GRANT "CONNECT" TO "APP";
GRANT "RESOURCE" TO "APP";

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

GRANT ALTER ANY INDEX TO "APP";
GRANT ALTER ANY SEQUENCE TO "APP";
GRANT ALTER ANY TABLE TO "APP";
GRANT ALTER ANY TRIGGER TO "APP";
GRANT CREATE ANY INDEX TO "APP";
GRANT CREATE ANY SEQUENCE TO "APP";
GRANT CREATE ANY SYNONYM TO "APP";
GRANT CREATE ANY TABLE TO "APP";
GRANT CREATE ANY TRIGGER TO "APP";
GRANT CREATE ANY VIEW TO "APP";
GRANT CREATE PROCEDURE TO "APP";
GRANT CREATE PUBLIC SYNONYM TO "APP";
GRANT CREATE TRIGGER TO "APP";
GRANT CREATE VIEW TO "APP";
GRANT DELETE ANY TABLE TO "APP";
GRANT DROP ANY INDEX TO "APP";
GRANT DROP ANY SEQUENCE TO "APP";
GRANT DROP ANY TABLE TO "APP";
GRANT DROP ANY TRIGGER TO "APP";
GRANT DROP ANY VIEW TO "APP";
GRANT INSERT ANY TABLE TO "APP";
GRANT QUERY REWRITE TO "APP";
GRANT SELECT ANY TABLE TO "APP";
GRANT UNLIMITED TABLESPACE TO "APP";

Ahora el usuario ya puede conectarse a la base de datos y comenzar a trabajar sobre su nuevo esquema Oracle.


Entrar en SQLPlus como dba sin introducir password

Entrar en SQLPlus como dba sin introducir password Carlos Mon, 03/31/2008 - 23:09

Si tienes el usuario de sistema con el que se ha instalado la base de datos Oracle puedes entrar en SQL plus como usuario DBA y sin introducir ninguna contraseña de la siguiente manera:

  1. Entra en el sistema con este usuario.
  2. Desde la linea de comandos, entra en SQLplus poniendo:
> sqlplus "/as sysdba"

 

Si has necesitado entrar así porque no recordabas la contraseña de algún usuario, ya puedes modificarla/s para poder utilizarlo/s después:

SQL> alter user nombre_usuario identified by nuevo_password;

 

Te puede pasar que haya más de una Base de datos Oracle instalada en el servidor, por lo que tendrás que asegurarte de que las variables de entorno del usuario de Oracle están apuntando a la base de datos que te interesa.

Para comprobar que has entrado en la base de datos correcta antes de tocar nada puedes ejecutar esta sentencia SQL:

SQL> select name from v$database;

 


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.


Hola me gustaria saber como hago lo mismo pero en centos

In reply to by helar (not verified)

No sé si te entiendo bien, no debería haber diferencia por ser CentOS, sólo tienes que abrir la consola de comandos y ejecutar SQLPlus, que lo tendrás disponible si tienes instalada la BD en esa máquina. Dentro de SQLPlus los comandos son SQL de Oracle, independientes del sistema operativo.

Saludos,

In reply to by Carlos

ok gracias lo pruebo,no conozco el tema en linux y necesito ingresar a la base oracle10g, pero desgraciadamente quien estaba encargado tuvo un accidente y no tengo ningun usuario ni contraseña de la base.
gracias por contestarme si tienes alguna sugerencia de como acceder a ella a parte de la que ya mensionaste me serviria de mucha ayuda.

In reply to by Anonimo (not verified)

Es muy sencillo entra al sistem operativo con Root que el usuario dueño con todos los previlegios en Linux, luego lo que tienes que hacer es subleval con el usuario que instalo la aplicacion oracle en linux, por ejemplo: "su oracle" y como eres root no te pide clave , ya estando con el usuario oracle, ejecutas esto: sqlplus '/ as sysdba' y ya estas dentro del manejador de base de datos oracle y ahi cambias el password de system y sys, los dos usuarios mas poderoso de base de datos y listo, puedes conectarte via grafico con cualquier herramientas.

Hola que tal

Trato de conectarme como indicas pero me marca el siguiente error, ya busque y no puedo encontrar por que es:

C:\oracle2\product\10.2.0\db_2\BIN>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on MiÚ Nov 24 10:45:39 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

ERROR:
ORA-12560: TNS:protocol adapter error

Enter user-name:
ERROR:
ORA-12560: TNS:protocol adapter error

Enter user-name:
ERROR:
ORA-12560: TNS:protocol adapter error

SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

C:\oracle2\product\10.2.0\db_2\BIN>

Espero me puedas ayudar

Mil gracias

In reply to by Anele (not verified)

Puede ser porque las variables de entorno no estén bien definidas. Estás utilizando el mismo usuario de Windows con el que se hizo la instalación de Oracle? Con ese no te debería fallar.

Si has de utilizar otro tendrás que definir las variables de entorno para él. Si, por ejemplo, no puedes ejecutar SQLPLUS desde fuera del mismo directorio 'BIN' es que el usuario no las tiene definidas.

También puedes comprobar directamente si existe la variable de entorno ORACLE_SID, que debería contener el valor de la instancia local de Oracle.

Alguien sabe como evitar ese procedimiento de ingreso con el sqlplus.

 

Me explico, como podria hacer para que al momento que se ingrese:

 

>> conn /as sysdba;

 

me pida la contraseña del usuario sys  , si  o si para poder conectarme.

 

 

In reply to by gonware

Buena pregunta. A mi no me suena que se pueda forzar la petición de contraseña a todos los usuarios.

He buscado un poco y creo que directamente no se puede, aunque siempre tienes la opción de dejar sin ningún usuario el grupo Oracle DBA. Si ningún usuario del sistema pertenece a este grupo, nadie tendrá el privilegio de entrar "/as sysdba" sin introducir un password.

Enlazo el foro donde he encontrado el 'tip', con algunas indicaciones para hacerlo en Windows y Unix

 ORA-12560: TNS:protocol adapter error: controlar variables de entorno, los parametros del tnsnames.ora y el listener.ora

En linux: 

             export ORACLE_SID=nombre_SID (nombre de sid de la base de datos)

             lsntcrl (nombre del listener)

          

             Conectar sin saber usuario ni contraseña

 

             usuario :~$ sqlplus /nolog

             sqlplus> conn / as sysdba

 

Espero que les sirva. Saludos

hola!

ante todo saludar a todos ya que soy nuevo en este foro

y nuevo en el tema de bases de datos.

Mi pregunta es: Acabo de llegar al puesto en el que estoy trabajando y ando un poco perdido.

La persona que estaba an el puesto anterior se fue y no dejo la password de acceso mediante toad a una base de datos.

Hay alguna manera de poder "encontrar" esa password para poder entrar? necesito los datos de las tablas, procedimientos y funciones para trabajar.

gracias de antemano y saludos a todos.

Buen dia a todos! Buscamos perfiles ETL-IPC para trabajar en una compañía estadounidense de renombre internacional (Base en el DF.). Si cubres con el perfil y eres bilingüe envianos mensaje privado o envia tu CV a maricruz.martinez@estrategiasdetalentohumano.com  O si conoces de alguien que pueda estar interesado. Asi como este perfil, también tenemos más vacantes en el área de TI. Gracias!!
 

Hola. Necesito su ayuda con el procedirmiento para lo que comenta Carlos mas arriba: "Si has de utilizar otro tendrás que definir las variables de entorno para él. Si, por ejemplo, no puedes ejecutar SQLPLUS desde fuera del mismo directorio 'BIN' es que el usuario no las tiene definidas". Precisamente necesito ejecutar "sqlplus /no log " con un usuario diferente al de instalación. Tampoco es el root. Que debería configurar en el usuario para que pueda ejecutar esto? Muchas gracias

 

Esocola

Me gustaria saber si alguien me puede hechar una manito, tengo en mi pc

Toad for Oracle 9 y oracle 8i, cargo una base de datos automáticas todos los días por la mañana, pero necesito que una query con la cual hago el filtro de esta carga se ejecute de forma automática y no manual como lo hago todos los días. Se que por medio de un bach, una llamada a sql plus, este bach o bat lo invoco con un scheduler de windows y podria funcionar... el tema es como hago el llamado a SQL PLUS con un bat.

Saludos y muchas gracias

Alejandro

In reply to by Alejandro Escobar Q. (not verified)

Alejandro, te has planteado hacerlo con un job de Oracle? Si tienes permisos para crear jobs y procedimientos almacenados puedes programar con un job la ejecución de un procedure que contenga la query de la carga, y lo haces todo desde la misma base de datos.

ayuda instale 2motores de BD,

oracle express edition 11g y ahora
oracle enterprise 11g

y trato de conectarme a oracle por sqlplus

pero tngo el siguiente error

ORA-12560:TNS: error del adaptador del protocolo

que puedo hacer para que se levante oracle
cuando tenia solo express edition no habia problema

saludos Andrés J

Buenos dias Carlos,

soy Fans de DATAPRIX y me gusta todo el conocimiento que aquí exponen.
Carlos la pregunta es la siguiente:

Tengo instalado en estos momentos en el servidor de producción Oracle Database 10g
Release 10.2.0.4.0 - 64bit Production

vamos a actualizar a la versión Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

cual es la mejor forma de actualizar mi Oracle ? algunos me han dicho que instale Oracle 11g en el servidor y que cambie las variables de ambiente y despues apague mi ORacle 10g que actualmente es produccion ?

Tu cual me recomendaría teniendo en cuenta que la compañia solo da una espera de 1 dia para esta labor?

Gracias y felicitaciones por sus aportes a esta comunidad.

In reply to by guillermohaad (not verified)

Hola Guillermo

Hay varios métodos para hacer un upgrade de Oracle, y la utilización de cada uno depende de muchos factores, entre los que se incluye la experiencia que tengas como DBA, o las herramientas de Oracle que domines mejor.

Lo de cambiar las variables de entorno, puede que se pueda hacer en algún caso, pero me parece algo arriesgado, y seguramente tengas que 'toquetear' alguna cosa más. El factor más importante es el tiempo que puedas tener la base de datos parada, si puedes. Si ese día que comentas la base de datos puede estar parada, para mí el método más seguro es hacer un export en frío de la base de datos de producción, y un import sobre la instalación nueva de la 11g.

Si quieres plantearte otras opciones, he encontrado este artículo de la OTN de Oracle que plantea diferentes escenarios, y aconseja qué hacer en cada uno, tiene hasta un diagrama para ayudarte a tomar la decisión.

El método de utilizar el DBUA (Database Upgrade Assistant) de Oracle, que el artículo explica al final con mucho detalle, creo que también podría servir para el entorno que planteas.

Saludos,

En referencia a si se puede forzar la petición de contraseña a todos los usuarios.....

Podeis hacer....

Editar el sqlnet.ora
y poner
SQLNET.authentication_sevices=none

Entonces no podréis conectar directamente desde sqlplus con connect /as sysdba

dará el error ORA-01031: insufficient privileges

Saludos,
Francisco García Colacios
www.colacios.es

Hola a todos,
Me gustaría saber si alguine tiene conocimiento de algun metodo de poder detectar bloqueos en una BD oracle 10g y un comando para liberarlas. es decir existen nuevos comandos 10g a la fecha que hagan este trabajo.

Gracias
Cristian Ampuero

Buenas Tardes, necesito ejecutar varios comandos desde la consola para dar permisios a un rol para gestionar objetos tipo JOBS, ejecuto el primer comando SQLPLUS "SYS/PASSWORD@INSTANCIA AS SYSDBA" pero no me logra abrir el sqlplus, alguien podria ayudarme

#te validas como root su - #cambias a usuario oracle su - oracle #validas que la variable de entorno este bien y corresponda a tu BD. echo $ORACLE_SID sqlplus /nolog conn / as sysdba alter user sys identified by "nuevo_password";

buen dia, trato de conectarme a sqlplus con un usuario distinto a oracle, ya le defini las variables de entorno a el y me sale un error en el momento de coneccion "ora 12547 tns: lost contact

In reply to by yenifer (not verified)

Entiendo que te refieres igualmente a una conexión "sqlplus / as sysdba".

Yo no me encontrado nunca el error "ORA-12547 TNS: Lost Contact" que comentas al conectar con SQLPlus, así que te referencio un par de posts de otros sitios con posibles causas y soluciones para solventar este error de conexión de Oracle:

En Oracle DBA Blog mencionan 5 posibles causas para el error de Oracle ORA12457, y 5 posibles soluciones, basándose en el documento de soporte de Oracle 422173.1

En el blog Oracle en Español explican cómo utilizar la utilidad 'sysresv' para consultar los segmentos de memoria compartida y los semáforos que utiliza una instancia de Oracle:

> $ORACLE_HOME/bin/sysresv

En su caso, eliminando con el comando ipcrm los semáforos y la memoria compartida que le devolvía el comando sysresv, pudieron volver a entrar con SQLPlus /as sysdba sin encontrarse el error ora 12547:

> ipcrm -m [shared_memory_ID]
> ipcrm -s [semaphore_ID]

 

Espero que alguna de estas referencias te ayude a solucionar el error

Hola tengo una duda, resulta que en oracle 11g 2 tengo la siguiente contraseña "pass"(con todo y dobles comillas) al querer conectarme con sqlplus

con el siguiente comando sqlplys usr/"pass"/BD@10.10.10.10/ORACLE, me conecto sin problemas por medio de un .BAT, el problema es que si en ese mismo .BAT agrego lo siguiente no se conecta, no se conecta a la base de datos y por ende no hace la carga del archivo .CTL

 

sqlplus usr/"pass"/BD@10.10.10.10/ORACLE control = C:\Users\xxxx\Documents\Compartida\carga\archivocarga.ctl

 

yo creo que es por la contraseña con esos caracteres, sin embargo alguien sabe como escapar esos carcteres?

In reply to by Anonimo (not verified)

Prueba a escapar las comillas, para que Oracle no las interprete, con una contrabarra. Sería algo así:

sqlplus usr/\"pass\"/BD@10.10.10.10/ORACLE control = C:\Users\xxxx\Documents\Compartida\carga\archivocarga.ctl

 

Necesito una manito please, quiero pasar una consulta ya terminada en Oracle Report 6i a Oracle 11i, pero este me desconfigura el layout y no lo puedo arreglar, ademas no me deja modificar los width y sale todo amontonado.  

 

Saludos Carlos!

 

Te escribo de México, tengo un ERP montado en Oracle 11g y al parecer mi base de datos tuvo un problema, tengo 3 ambientes (test, productivo y practicas) pero solamente mi ambiente productivo esta fuera, las personas que estan revisando el caso me dicen que pueden ver la BD pero no logram ingresar a ella, la pregunta es si se puede ver la BD aun hay posibilidades de ingresar a ella? Tenemos un respaldo, pero es de hace un mes, por consiguiente nos interesa rescatar l aBD actual para no perder informacion.

 

saludos!

In reply to by Anonimo (not verified)

Lo normal es que al menos con SQLPlus desde el servidor local, y con el usuario administrador puedas entrar en la base de datos y revisar los errores que pueda tener si no se levanta. No te puedo decir mucho más, porque eso de que 'se vea' (entiendo que desde otro servidor) no me parece lo más relevante, me parece más importante revisar bien los logs y los errores que te devuelva la BD al intentar levantarla.

 

hola carlos disculpa una consulta me sale un error que no se ha podido realizar la conexion con el servidor verifique la conexion error n.--2147217843 Descripcion Ora-01017 nombre usuario/contraseña no validos conexion denegada.

me puede ayudar ya le cambie la contraseña como dices en e primer comentario pero me sigue saliendo el error alguna solucion. 

Gracias

Buen dia. Como puedo ejecutar un script desde SQLPlus con un usuario X de la Base de datos en un esquema Y. Es decir quiero que el usuario de la BD llamado "Carlos" ejecute un script de un paquete pero este quede en el esquema de Pedro, sin necesidad de cambiar la creación del paquete ni digitar la clave de "Pedro"

GRANT WITH GRANT OPTION: La propiedad transitiva en la concesión de permisos de Oracle

GRANT WITH GRANT OPTION: La propiedad transitiva en la concesión de permisos de Oracle Carlos Sat, 06/23/2007 - 13:40

La instrucción grant se utiliza para conceder determinados permisos genéricos o bien permisos sobre objetos a usuarios de bases de datos Oracle.

La sintaxis de GRANT para conceder permisos genéricos es la siguiente:

GRANT [privilegios_de_sistema | roles] 
TO [usuarios | roles |PUBLIC] {WITH GRANT OPTION } 

La sintaxis de GRANT para conceder  premisos sobre objetos es la siguiente:

GRANT [ALL {PRIVILEGES} | SELECT | INSERT | UPDATE | DELETE] ON objeto 
TO [usuario | rol | PUBLIC] {WITH GRANT OPTION} 

 

La sintaxis de GRANT es muy sencilla, y los privilegios los puede conceder el usuario propietario de los objetos, o un usuario con privilegios de concesión de permisos sobre objetos que no son suyos (DBA's).

Lo que quería comentar es la utilización de la opción de grant WITH GRANT OPTION, que permite que el usuario al que le han concedido permisos pueda a su vez concederlos a otros usuarios.

 

Ejemplo de GRANT WITH GRANT OPTION

Mostraré la utilidad de esta opción con un ejemplo:

Imaginemos que tenemos un usuario 'U_VISTA', que crea una vista con una consulta que consulta información de un objeto de otro usuario 'U_DATOS'. Hasta aquí es sencillo, ya que con un GRANT del usuario 'U_DATOS' al usuario 'U_VISTA' sobre esos objetos el tema está solucionado. U_DATOS:

SQL> GRANT SELECT ON TABLA TO U_VISTA;

El problema vendría si tenemos un tercer usuario 'U_CONSULTA', que tiene que utilizar esta vista. Se podría pensar que con dar permisos de acceso a este usuario a la consulta por parte de 'U_VISTA', y permisos de acceso a los objetos que consulta la vista por parte de 'U_DATOS' ya estaría todo bien: U_VISTA:

SQL> GRANT SELECT ON VISTA TO U_CONSULTA;

U_DATOS:

SQL> GRANT SELECT ON TABLA TO U_CONSULTA;

Pues no, no es suficiente porque para acceder a estos datos a través de la vista ha de ser el propio propietario de la vista quien conceda los permisos a un tercero. Digamos que para la concesión de privilegios no se cumple la propiedad transitiva.

Para que 'U_CONSULTA' pueda trabajar sobre la VISTA sin que la base de datos le devuelva un error ORA-00942, el propietario de los objetos (o un usuario DBA) ha de conceder privilegios sobre esos objetos al otro usuario, pero con permisos para que este pueda a su vez concederlos a otros usuarios (grant with grant option):

U_DATOS:

SQL> GRANT SELECT ON TABLA TO U_VISTA WITH GRANT OPTION;

U_VISTA:

SQL> GRANT SELECT ON U_DATOS.TABLA TO U_CONSULTA;
SQL> GRANT SELECT ON VISTA TO U_CONSULTA;

U_CONSULTA:

SQL> SELECT * FROM VISTA;

 

Y eso es todo, U_CONSULTA ya puede consultar los datos de la vista gracias a la opción WITH GRANT OPTION del GRANT.

Coméntalo en el foro

 


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.


Heterogeneous Services: Conexión desde Oracle a SQLServer - DBA Oracle

Heterogeneous Services: Conexión desde Oracle a SQLServer - DBA Oracle Oscar_paredes Sat, 12/30/2006 - 10:42

Este artículo para DBA's de Oracle explica como configurar los servicios de conexión heterogeneous de Oracle para poder visualizar bases de datos SQL Server desde un esquema Oracle, como si fueran objetos propios de Oracle.

En versiones antiguas de Oracle, esta conectividad se podía realizar a través de “Gateways” que se licenciaban de manera independiente del servidor Oracle, pero la posibilidad de realizar lo mismo en sentido contrario a través de SQL Server, posibilitó la aparición de los “Heterogeneous Services” de manera gratuita en Oracle.

Para poder realizar la configuración es necesario contar con los objetos necesarios del catálogo. Por defecto están instalados, pero en determinadas instalaciones puede ser necesario realizarlo manualmente. Para ello, ejecutar como SYS el fichero caths.sql del directorio %ORACLE_HOME%/rdbms/admin. Después, el DBA de Oracle sólo ha de seguir los siguientes pasos:

  • Crear un conector ODBC de SQL Server (System DSN) en el administrador de ODBC de Microsoft (por ejemplo, “sqlcon”)
     
  • Ajuste del fichero de inicialización de Heterogeneous Services
    Este fichero reside en ORACLE_HOME/HS/ADMIN, y su nombre depende del SID que se asigne al servicio. El nombre usado tipicamente es: hsodbc, de manera que el fichero se llamaría: inithsodbc.ora. Este fichero debe contener como mínimo los siguientes parámetros:

# Nombre de la conexión ODBC
HS_FDS_CONNECT_INFO = sqlmis
HS_FDS_TRACE_LEVEL = 0
HS_OPEN_CURSORS = 300

  • Configuración del fichero TNSNAMES.ORA
    Se debe añadir la siguiente entrada:

hsodbc =
    (DESCRIPTION =
       (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = <IP_SERVIDOR> ) (PORT = 1521))
    )
    (CONNECT_DATA = (SID = hsodbc))
    (HS=OK)
    )

  • Configuración del fichero del Listener
    LISTENER.ORA: Se debe añadir a la SID_List el siguiente descriptor:

(SID_DESC =
    (SID_NAME = hsodbc)
    (ORACLE_HOME = C:\oracle\ora92)    # el ORACLE_HOME correspondiente
    (PROGRAM = hsodbc )
)

  • Reinicio del listener
    En los servicios del servidor reiniciar el servicio del listener.
     
  • Conectarse con un SQL*Plus a la instancia ORACLE, y crear un database link contra el SQL Server a través de HS:

SQL> create database link hsodbc connect to "usuario" identified by "password" using 'hsodbc'

El usuario y el password deben ser los usuarios de conexión a la BBDD de SQL Server. 
Por ejemplo, si el usuario es el “sa” los objetos a los que se llegará serán los objetos de la BBDD de sistema “master”.

 

Una vez configurado se puede acceder desde un esquema ORACLE a las tablas (objetos en general) de una BBDD SQL Server.
A modo de ejemplo, la sintaxis necesaria para realizar una simple join entre 2 tablas una Oracle y la otra SQL Server sería:

SELECT e.name, d.dept
FROM emp e, dept@hsodbc d
where e.id_dept=d.id_dept;

 

 

Oscar Paredes

IT Manager
Oracle DBA

oscar.paredes@dataprix.com

 

 

Attachment Size
XDAT012006.pdf 162 bytes

Este método sirve para cualquier base de datos? Se puede utilizar también con MySQL?

In reply to by Antonio (not verified)

Se puede conectar con el mismo sistema un Mysql a una base de datos Oracle.

Como ves el procedimiento sólo utiliza una conexión ODBC, que podría ser hacia SQL Server o hacia MySQL.

Un saludo,

In reply to by oscapt (not verified)

Realizando la conexión a MaxDB fu exitosa, se realizó siguiendo uno manuales publicados que encontre partiendo de este foro, lo que no he podido es conectarme a varias bases de datos, es decir, se configuran los archivos, pero como hace uno para habilitar un ODBC diferente. Me quiero conectar a una base de datos MaxDB y a otra SQLserver de manera simultánea. Gracias

Alguien sabe como enlazar una base de datos en SQL SERVER con una de ORACLE.

In reply to by ricardo (not verified)

Entiendo que quieres leer o escribir datos desde un SQL Server hacia un oracle.

En primer lugar debes tener el cliente de oracle en la maquina que va ha realizar el enlace. Puede que te sirva el conector OLEDB de SQL Server aunque no puedo asegurarlo puesto que en mi caso tengo las 2 bbdd en la misma máquina.

El nombre de servidor oracle debe ser: nombre_servidor_oracle/SID_oracle (no sirve nombre_servidor_oracle@sid)

usuario y password del schema a usar.

Con esto la conexión desde SQL Server a Oracle funciona perfectamente.

 

Saludos,

 

Sirve este sistema también para SQL Server 2005??

In reply to by Anonimo (not verified)

El hecho de utilizar un ODBC para el enlace con la base de datos destino hace que el sistema sirva para prácticamente cualquier base de datos.

Si en el servidor de la base de datos Oracle puedes configurar un ODBC que se conecte correctamente a otra base de datos, tienes que poder utilizar Heterogeneous Services para definir un enlace de Oracle a esta base de datos.

Con MySQL funciona, lo he podido comprobar personalmente, con SQLServer 2005 aún lo tendrás más fácil para definir el ODBC.

Carlos Fernández

Analista de sistemas

In reply to by Carlos

HOLA

 

sobre............"ejecutar como SYS el fichero caths.sql del directorio %ORACLE_HOME%/rdbms/admin." debo decir que uso el pl/sql ejecute el archivo como usuario sys y funciona mas o menos hasta la mitad del archivo y luego me sale error de sintaxis que no reconoce el comando SQL. como lo soluciono. SE QUE HA PASADO MUCHO TIEMPO DESDE QUE SALIO ESTE TUTORIAL PERO SI ALGUIEN VE ESTO POR FAVOR AYUDAAAAAA!!!!

In reply to by Percy (not verified)

PL/SQL? Lo haces desde una herramienta gráfica? Puede que ese sea el problema. Deberías ejecutarlo con SQLPlus, y dentro de una sesión del servidor donde está instalada la base de datos.

Si estás en linea de comandos con el usuario con el que se ha instalado la base de datos puedes hacer:

>sqlplus "/as sysdba"

Una vez dentro de SQLPLUS ejecutas el script con @ más el camino completo:

SQL>@oracle_home/rdbms/admin/caths

Si lo haces así no te debería fallar.

 Hola muy buena la respuesta de conexion conSqlServer... 

tengo un problema con la conexion Oracle_Access tengo mi base Oracle en Linux y una Base Acces en Windows con una aplicacion.... entonces quisiera saber como hacer la conxion de mi base oracle en Linux hacia la base Access en Windows

 

Gracias

Attm

Roger Reyes 

Buen post, aunque me llevó tiempo resolver un pequeño error.

se trata de la linea del TNSNAMES.ORA siguiente

(CONNECT_DATA = (SID = hsodbc))

que debería ser

(CONNECT_DATA = (SERVICE_NAME = hsodbc))

In reply to by luigi (not verified)

Creo que no es un error. El post se escribió hace tiempo, cuando se trabajaba normalmente con la versión 9i, y hasta esta versión todo funciona correctamente.

Si no me equivoco debes tener una 10g u 11g, y entonces la cadena sí que ha de ser la que indicas.
Resumiendo:

Para versiones <= 9i:
(CONNECT_DATA = (SID = hsodbc))

Para versiones posteriores a 9i:
(CONNECT_DATA = (SERVICE_NAME = hsodbc))

Gracias por la observación, luigi

Saludos

queria preguntar por un problema que me surge, se trata que ya me conecto a MySQL 4.1,
pero el problema es que no me despliega las columnas varchar de MySQL y solo me muestra el primer registro y las dos primeras columnas que son numéricas, la tabla tiene 4 columnas
Id tipo int
sucursal tipo double
nombre tipo text
cedula tipo text
, hago select * from facturas@mysql pero solo muestra Id y sucursal del primer registro,
incluso si hago select "nombre" from facturas@mysql me dice que no se conoce la columna
esta con minusculas igual que el MySQL, talvez saben que me falta configurar?

he hecho agregando la clausula WHERE funciona pero siempre me muestra un registro y no reconoce las columnas text, si por ahi tienen alguna pista les agradezco mucho de antemano

In reply to by Anonim. (not verified)

Me imagino que esto ya se resolvio esto hace mucho tiempo, pero para los que lleguen a leer, a mi me paso lo mismo y era la version del Odbc, utilice el 3.51.27 y listo.

In reply to by Siyulena (not verified)

El problema era de hace tiempo, pero seguro aún sigue pasando, así que gracias por compartir tu solución, seguro que va a ser de ayuda :)

 

 Hola.

Tengo el servidor sqlserver 2008 en windows 7 y el servidor oracle XE 10gen ubuntu linux 10.10

Mi pregunta es:Si quiero obtener datos de sqlserver desde oracle,A la hora de configurar el fichero  tnsnames.ora.

en el apartado (HOST=SERVER_IP) debo copiar la direccion ip del servidor oracle o la del sql server ya que los tengo en distintas maquinas, siendo el uno o el otro tambien influye en el (PORT:)por que el oracle escucha en el 1521, y el

 sql server en el 1433.

 

Gracias

Saludos.

Hola. En mi caso, requiero pasar los datos desde una base de datos MySQL ubicados en un servidor a una base de datos Oracle ubicados en otro servidor diferente o que por el contrario la base de datos Oracle vaya y consulte los datos de MySQL y los inserte en oracle. Qué necesitaría en este caso? es posible? Gracias de antemano.

In reply to by Anonimo (not verified)

Con MySQL también debería funcionarte. La única diferencia es que tendrás que definir el conector ODBC en el servidor de Oracle apuntando hacia MySQL en lugar de hacia SQL Server.

Saludos,
Estoy realizando una consulta desde oracle a una tabla que esta en sql server, pero mi problema es que me dice en oracle que el tamaño de logitud del nombre de la tabla es muy largo, hay manera de solucionar este problema sin que tenga que tener que cambiar el nombre de la tabla que se encuentra en sql server?

Ejemplo:

SELECT e.name, d.dept
FROM emp e, a1235456789012345678901234567899@hsodbc d
where e.id_dept=d.id_dept;

ORA-00972: identifier is too long

In reply to by Anonimo (not verified)

Has probado a crear una vista en SQL Server con el nombre de tabla 'corto' y llamarla desde HS?

create view v_a12354567890 as select * from a1235456789012345678901234567899

Puede que también te dé el error, pero la prueba es muy rápida.

Si esto no te sirve, una opción desde Oracle es utilizar el package de PL/SQL DBMS_HS_PASSTHROUGH, que te permite ejecutar sentencias en otras bases de datos y recibir los resultados sin que Oracle interprete nada.

No me preguntes cómo funciona porque no lo he utilizado aún, pero te enlazo la documentación del paquete por si te sirve de ayuda.

Quisiera saber si con solo poner el ORACLE_HOME funciona o si debo tener alguna libreria en especial. mi BD es ORACLE 11g y la necesito establecer la conexion con un windows server 2008 R2...

gracias

In reply to by Inquietud (not verified)

En principio no hace falta ninguna librería especial para utilizar Oracle heterogeneous services, sólo que existan los objetos del catálogo que dice el post, y seguir todos los pasos de configuración para que puedas utilizar un ODBC para conectar con SQL Server.

Buenas Tardes hay alguna forma de realizar una conexión desde Oracle a sqlserver sin licenciamiento de Oracle Gateway, o los diferentes driver ODBC licenciados que existen? mi caso es entre una bd Oracle 11.2.0.4 en AIX y una bd sqlserver 2008 r2, los 2 sistemas a 64bits

Hola Buenas Tardes Tengo una conexión de oracle a firebird ,pero al realizar un select * from all_tables@DBLINK, no reconoce algunas tablas de firebird ,las cuales las necesito para hacer algunos cruces. Estoy utilizando oracle 10,centos 6. Utilizando oracle 11 en windows funciona correctamente. Gracias

Indices invisibles en Oracle 11g

Indices invisibles en Oracle 11g Oscar_paredes Mon, 09/13/2010 - 20:04

A partir de la versión 11g Oracle permite la creación de índices llamados invisibles que permiten llevar realizar cosas realmente interesantes.

Esta invisibilidad se refiere a que el optimizador no tiene en cuenta la existencia de estos índices para la generación de los planes de ejecución.

Esto puede resultar muy interesante en bases de datos en Producción por ejemplo para:

  • En el caso de probar nuevos índices sin afectar a las sentencias SQL de las aplicaciones que atacan a la base de datos, puesto que se pueden activar/desactivar de manera muy rápida.
  • En el caso de querer probar ciertas sentencias SQL de aplicaciones sin índice sin tener que borrar el índice y perder tiempo recreándolo..

A partir de la versión 11g Oracle permite la creación de índices llamados invisibles que permiten llevar realizar cosas realmente interesantes.

Esta invisibilidad se refiere a que el optimizador no tiene en cuenta la existencia de estos índices para la generación de los planes de ejecución.

Esto puede resultar muy interesante en bases de datos en Producción por ejemplo para:

  • En el caso de probar nuevos índices sin afectar a las sentencias SQL de las aplicaciones que atacan a la base de datos, puesto que se pueden activar/desactivar de manera muy rápida.
  • En el caso de querer probar ciertas sentencias SQL de aplicaciones sin índice sin tener que borrar el índice y perder tiempo recreandolo.

Mientras un índice permanece invisible se va actualizando con las sentencias DDL (insert, update, ...), de manera que, los hace perfectos para este tipo de pruebas.

Un índice invisible se puede crear invisible o se puede alterar para que sea visible o invisible. Se puede consultar en que estado está un índice mediante la columna "visibility" de la vista DBA_INDEXES.

Un nuevo parámetro de inicialización controla la visibilidad o no de los índices invisibles "optimizer_use_invisible_indexes". Es decir, que aunque un índice sea invisible, si esta parámetro tiene el valor TRUE, el optimizador los ve y los puede usar sin problemas. Por lo que, recomiendo dejarlo siempre con el valor por defecto FALSE.
 

Ejemplo:

1) Verificamos el valor del parámetro que controla la visibilidad de los índices invisibles:

SQL> show parameter optimizer_use_invisible_indexes

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_use_invisible_indexes boolean FALSE

2) Creamos una tabla de ejemplo con un indice visible:

SQL> create table prueba as select * from dba_tables;

SQL> create index i_prueba on prueba (table_name);

3) Consultamos su visibilidad

SQL> select index_name , visibility from dba_indexes where index_name = 'I_PRUEBA';

INDEX_NAME VISIBILITY
------------------------------ ------------------------------ ---------
I_PRUEBA VISIBLE

4) Consultamos su plan de ejecución forzando el uso del índice: Al ser visible el índice lo usará sin problemas.

SQL> explain plan
2> select /*+ index(prueba i_prueba) */ * from t where table_name

Explained.

SQL> select * from table(DBMS_XPLAN.DISPLAY);
Plan hash value: 2609566873

----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 18 | 1 (0)| 00:00:02 |
|* 1 | INDEX UNIQUE SCAN |I_PRUEBA | 1 | 18 | 1 (0)| 00:00:02 |
----------------------------------------------------------------------------------------

5) Hacemos invisible el índice

SQL> alter index I_PRUEBA invisible;

6) Consultamos su plan de ejecución forzando el uso del índice con un HINT: El optimizador no tiene en cuenta el índice invisible.

----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 93 | 1008 | 31 (0)| 00:00:20 |
|* 1 | TABLE ACCESS FULL | T | 93 | 1008 | 31 (0)| 00:00:20 |
----------------------------------------------------------------------------------------

 

 

Oscar Paredes

IT Manager
Oracle DBA

oscar.paredes@dataprix.com

 

 

Limitar número de conexiones por usuario

Limitar número de conexiones por usuario cfb Fri, 11/23/2007 - 10:34

Alguien sabe si en bases de datos Oracle hay alguna manera de limitar el número de conexiones por usuario, o el número de cursores abiertos por conexión de un usuario?

El número de sesiones se puede limitar con los profiles. Basta con añadir el número máximo de sesiones en el profile (sea el de por defecto u otro) y asignar al usuario en concreto.

In reply to by Oscar_paredes

Y para ampliar el número de sesiones abiertas en la base de datos?
He probado con la sentencia 'alter system set processes=150 scope=both' con el usuario de sistema, pero la BD me responde que no se puede:
ORA-02095: el parámetro de inicialización especificado no se puede modificar

También he probado a modificar directamente el parámetro en el spfileexe.ora del directorio dbs, pero este parámetro no aparece en el fichero.

Alguien podría decirme lo que puede estar pasando?
La base de datos sobre la que estoy trabajando es una OracleXE (Oracle Database 10g Express Edition Release 10.2.0.1.0)

In reply to by il_masacratore

Contrariamente a lo que me habían explicado se hace de la siguiente manera:
Ejecutamos:
SQL>ALTER SYSTEM SET PROCESSES=150 SCOPE=SPFILE;
y reiniciamos la base de datos.

Parece ser que al ser un parámetro estático y al poner BOTH para cambiarlo como si fuera dinámico falla. Para los estáticos se utiliza SPFILE.

Hasta los programadores de .NET sabemos de oracle!!

Ora10g: Creación de tablas e indices con la cláusula logging / nologging

Ora10g: Creación de tablas e indices con la cláusula logging / nologging il_masacratore Tue, 09/21/2010 - 15:30

 

La cláusula loggin/nologging añadida cuando creamos una tabla, índice, tablespace... determina si se crea registro de la sentencia en los redo log y su correcta restauración desde backup. Tiene guasa porque si creamos una tabla con opción nologging efectivamente no se crea registro pero de alguna manera esta si se tiene en cuenta en el diccionario de datos.

Ejemplo cronológico con malas consecuencias:
06:00 Hacemos backup con rman
09:00 Creamos tabla XXX (nologging)
09:45 Se pierde el datafile de la tabla
09:53 Recuperamos la base de datos (desde la copia, o desde la copia y archive)

Al terminar la recuperación los bloques correspondientes a la tabla/índice son marcados como corruptos y cuando intentemos acceder obtendremos un error como el siguiente:
ORA-01578: bloque de datos ORACLE corrupto (archivo número 43, bloque número 222806)
ORA-01110: archivo de datos 43: '/db/PROD/idatafiles/INDX3_20.dbf'
ORA-26040: Se ha cargado el bloque de datos utilizando la opción NOLOGGING

Casos como el anterior dan que pensar y debemos recapitular para tener más claro cuando hacerlo y cuando no. Debemos tener en cuenta:

  • Recuperación/Standby
    -Si la base de datos trabaja en modo archivelog. Si no es el caso tiene menos sentido usar la opción logging y por temas de rendimiento o volumen nos conviene más "probar suerte" y hacerlo con nologging.
    -Si las copias las hacemos con rman. Si trabajamos en modo archivelog y usarmos rman para hacer backups lo más lógico sería hacerlo todo con la opción logging para reducir la perdida de datos al mínimo.
    -Si tenemos una base de datos standby sincronizada mediante aplicación de archive logs. Es un caso como el anterior pero con más razón. Lo más lógico será hacer logging para que los objetos también se creen en el servidor en standby, tenemos que pensar que aquí podemos partir de una copia rman específica de hace tiempo y seguramente no estamos restaurandola cada semana ni cada mes.
    -Velocidad de recuperación. En la creación de índices podemos precindir del logging pero debemos considerar que luego puede tocar recrearlos en la base de datos restaurada.
     
  • Rendimiento
    -El tiempo necesario para la creación de la tabla/índice. Obviamente si no dejamos log ganamos en velocidad pero aumentamos el riesgo.
    -Lo asumible que es la pérdida de esa tabla índice mientras no sea recuperable. Si es una tabla que puede sobrar o prescindible (tabla de traza de cualquier aplicación) pues no pasa nada.

Con todo lo anterior y alguna cosa más que se queda en el tintero puede que nos decidamos a forzar el logging y quitarle ese poder de decisión al que ejecuta la sentencia de creación del objeto (más vale prevenir que curar, que luego vienen los llantos...). Aunque quizás no esté en sus manos, puede usar un ERP que es el intermediario en la creación de objetos de la base de datos y se los crea sin poder cambiar esa opción.

Mucho cuidado!! No vaya a ser que montemos una base de datos en standby y en el momento de la verdad cuando la vayamos a usar no tenga la mitad de las tablas.

Ora10g: ORA-00060 Deadlock detected (II)

Ora10g: ORA-00060 Deadlock detected (II) il_masacratore Thu, 04/21/2011 - 17:03

Siguiendo con el post anterior creo necesario comentar que existen otros tipos de bloqueo que se producen por un diseño conflictivo que se une a las peculiaridades de oracle.

Dejo primero la traza de ejemplo:

*** ACTION NAME:() 2011-04-21 14:08:01.227
*** MODULE NAME:(MiPrograma.exe) 2011-04-21 14:08:01.227
*** SERVICE NAME:(SYS$USERS) 2011-04-21 14:08:01.227
*** CLIENT ID:() 2011-04-21 14:08:01.227
*** SESSION ID:(1636.58026) 2011-04-21 14:08:01.227
DEADLOCK DETECTED ( ORA-00060 )
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-0001f1b8-00000000        99    1636    SX   SSX       92    1461    SX   SSX
TM-0001f1b8-00000000        92    1461    SX   SSX       99    1636    SX   SSX
session 1636: DID 0001-0063-0003159E    session 1461: DID 0001-005C-000375B1
session 1461: DID 0001-005C-000375B1    session 1636: DID 0001-0063-0003159E
Rows waited on:
Session 1461: no row
Session 1636: no row

 

Aquí lo que primero nos llama la atención es que ya tenemos registros bloqueados como se ve abajo. Además el tipo de bloqueo es distinto (antes X o modo exclusivo, ahora SX o exclusivo compartido?). En la documentación podemos ver más de los tipos.

Aquí el tema está en que deadlocks con bloqueo tipo SX se producen al manipular tablas con claves foraneas donde el campo no está indexado (en la fk, no la pk de la tabla primaria) y estamos intendo hacer update/delete sobre la tabla principal. Por decirlo de alguna manera oracle necesita mantener la integridad referencial y consulta la hija para que se siga cumpliendo.

Solución en este caso? Crear siempre la clave primaria en la tabla principal, un indice y una foregin key en la tabla secundaria. Nada más...

Ora10g: ORA-00060 Deadlock detected

Ora10g: ORA-00060 Deadlock detected il_masacratore Thu, 01/27/2011 - 12:02

De vez en cuando puede pasar que dos sesiones que se pisen se bloqueen al intentar hacer cambios en los mismos datos (a nivel de registro o a nivel de tabla). En sistemas no concurrentes y/o bien diseñados no tiene por que pasar ya que las aplicaciones suelen estar mínimamente pensadas para evitarlo; o en todo caso en pruebas pre-producción ya se detecta y se corrige. El caso es que incluso aunque se planee evitarlos se pueden producir. En la mayoría de casos se resuelven solitos al acabar de realizar los cambios la sesión bloqueante, incluso ni nos daremos cuenta. En otros casos más infrecuentes se producen bloqueos circulares irresolubles, “deadlocks”, donde se acaba haciendo rollback de una transacción y se genera una entrada en el fichero de alerta:

ORA-00060: Deadlock detected. More info in file /opt/oracle/admin/XXX/udump/XXX_ora_28205.trc

Si consultamos el fichero de traza encontraremos información más detallada: sesiones involucradas, objeto, registro, consulta que lo provoca, etc... Aquí incluyo algunas partes de un fichero de ejemplo. En la primera parte del fichero vemos que sesión sufrirá el rollback(marcada en negrita) y más abajo vemos el bloqueo circular (donde la 1706 espera a la 1693 y viceversa):

...
*** ACTION NAME:() 2011-01-27 08:07:36.110
*** MODULE NAME:(Servicio.exe) 2011-01-27 08:07:36.110
*** SERVICE NAME:(SYS$USERS) 2011-01-27 08:07:36.110
*** SESSION ID:(1693.30703) 2011-01-27 08:07:36.110
DEADLOCK DETECTED ( ORA-00060 )
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-00090022-00173f07        82    1693     X             21    1706           X
TX-00030014-0013a2dd        21    1706     X             82    1693           X
Rows waited on:
Session 1706: obj - rowid = 0000CF1C - AAAM8cAA5AAACX+AAF
  (dictionary objn - 53020, file - 57, block - 9726, slot - 5)
Session 1693: obj - rowid = 0000CF1C - AAAM8cAA5AAACX+AAI
  (dictionary objn - 53020, file - 57, block - 9726, slot - 8)
…

Con esta información también podemos saber exactamente que objetos y registro/s es el origen de la disputa. Si es algo que se repite de forma cíclica podemos ayudar al responsable de la aplicación dandole más datos (además de las consultas) para que lo resuelva. Para saber que registro de que tabla:

  1. Convertimos a decimal el obj que se indica al final en hex (0000CF1C->53020)
  2. Obtenemos el nombre del objeto del diccionario de datos:
         SELECT owner, object_name, object_type FROM dba_objects WHERE object_id = 53020;
  3. Consultamos la tabla obtenida buscando el registro por el rowid:
        SELECT * FROM tabla WHERE rowid=’AAAM8cAA5AAACX+AAF’’

Un poco más abajo del fichero también se puede ver que consultas han provocado el deadlock y otra información como la cantidad de “waits” de la session en cuestión etc...

Todo esto me hace gracia comentarlo porque a veces desarrolladores mal acostumbrados nos piden que comprobemos si existen bloqueos entre usuarios porque tienen algo que no va tan rápido como siempre. En contraposición también tenemos a usuarios muy impacientes, que cierran a saco sus aplicaciones... Si a ti te pillan en horario, te vienen a preguntar, lo miras sin renegar, miras si existe y si la sessión bloqueante sigue trabajando... Si es el caso y hay que esperar, ¿que le dices? La primera vez le explicas de que va el tema, la segunda vez se lo recuerdas y la tercera que se vaya a tomar un café...

Saludos Cordiales,

Quisera saber si tiene información para los Deadlock en 9i, tengo los siguientes errores y quisiera saber si es por falta de un COMMIT, trato de mandar por aca el error pero no lo permite

Gracias de antemano...

Oracle 10g: Buscando actividad "extra-ordinaria" en nuestra base de datos

Oracle 10g: Buscando actividad "extra-ordinaria" en nuestra base de datos il_masacratore Mon, 07/05/2010 - 12:11

 

Al administrar nuestra base de datos tenemos que lidiar a veces con aplicaciones de terceros(ERPs, etc...) o desarrolladas dentro de la empresa que a veces pueden tener mal planteados algunos procesos o por el motivo que sea traten la base de datos como si fuera exclusivamente suya. Voy a mostraros un ejemplo:

Entorno:
-servidor con dos puntos de montaje. El del sistema operativo donde también residen los archivos de datos de la base de datos y un disco secundario donde tenemos los archivos de copia rman más los archivelogs.
-base de datos Oracle10g funcionando en modo archivelog.
-política de retención de copias de 3 días y 60 archive logs al día de media.

Sintoma:
-Nos quedamos sin espacio donde metemos los backups de la base de datos debido al crecimiento de la generación de más archivelogs de la cuenta.

Detectar la causa:
Si tenemos bien dimensionada la política de retención de backups pero de repente en nuestra base de datos se estan generando más archivelogs de la cuenta puede ser debido a una acividad "extra-ordinaria" en la base de datos. Para detectarla primero podemos consultar el número de ficheros que se generan por hora consultando la tabla v$log_history:

select to_char(FIRST_TIME,'DY, DD-MON-YYYY') day,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'00',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'00',1,0))) d_0,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'01',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'01',1,0))) d_1,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'02',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'02',1,0))) d_2,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'03',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'03',1,0))) d_3,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'04',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'04',1,0))) d_4,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'05',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'05',1,0))) d_5,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'06',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'06',1,0))) d_6,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'07',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'07',1,0))) d_7,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'08',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'08',1,0))) d_5,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'09',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'09',1,0))) d_9,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'10',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'10',1,0))) d_10,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'11',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'11',1,0))) d_11,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'12',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'12',1,0))) d_12,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'13',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'13',1,0))) d_13,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'14',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'14',1,0))) d_14,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'15',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'15',1,0))) d_15,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'16',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'16',1,0))) d_16,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'17',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'17',1,0))) d_17,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'18',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'18',1,0))) d_18,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'19',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'19',1,0))) d_19,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'20',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'20',1,0))) d_20,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'21',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'21',1,0))) d_21,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'22',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'22',1,0))) d_22,
       decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'23',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'23',1,0))) d_23,
       count(trunc(FIRST_TIME)) Total
 from v$log_history
 group by to_char(FIRST_TIME,'DY, DD-MON-YYYY')
 order by to_date(substr(to_char(FIRST_TIME,'DY, DD-MON-YYYY'),5,15) )

 

(RESULTADO DE EJEMPLO)

Con esto ya vemos que hay un pico el lunes 1 de julio desde horas "intempestivas" hasta las 10:00 de la mañana. Si queremos informarnos más antes de hablar con los responsables podemos consultar la v$sqlarea para detectar consultar repetitivas y pesadas para conocer el sql, número de ejecucuciones, coste , etc... Una consulta ejemplo seria la siguiente:

SELECT sql_text "Sql",
         executions "Ejecuciones",       
         ceil(cpu_time/greatest(executions,1)) "Avg Cpu",
         ceil(elapsed_time/greatest(executions,1)) "Avg Disk",
         ceil(elapsed_time/greatest(executions,1)) "Avg Time"
  FROM v$sqlarea
  ORDER BY ceil(elapsed_time/greatest(executions,1)) desc,
           ceil(cpu_time/greatest(executions,1)) desc,
           ceil(disk_reads/greatest(executions,1)) desc;

De esta manera conoces la tabla que se está "populando" de forma masiva y puedes preguntar al desarrollador cubriendote la espalda de antemano ya que no siempre le conocemos, le tenemos confianza o simplemente sabemos que nos acabará ocultando lo que ha hecho... o peor aún NO SABE LO QUE ESTÁ HACIENDO!!
 

Oracle 10g: Estadísticas artesanales de nuestra base de datos en el tiempo

Oracle 10g: Estadísticas artesanales de nuestra base de datos en el tiempo il_masacratore Wed, 02/10/2010 - 12:20

Normalmente para analizar lo que pasa unas horas antes bastaría con consultar los datos históricos del Enterprise Manager pero no tenemos datos como el detalle de sesiones activas (si la cantidad total) o el estado o programa de cada una de ellas. También consultar las instantáneas en la consola web pero el problema sigue siendo el mismo, la falta de detalle. Pero no todo es insalvable y podemos en tres pasos completar esta información con algo más de detalle.

 

Paso 1: Crear una tabla con los datos que necesitaremos con un campo fecha.

Paso 2: Crear un procedimiento para alimentar la tabla con datos.

Paso 3: Crear un job con el usuario indicado para acumular datos.

 

Esta técnica puede ser “cutre” pero muchas veces sirve para analizar con más detalle y a nuestro gusto ciertas estadísticas que son visibles mediante vistas v$ que muestran el estado actual de la base de datos y que directamente no muestran un estado anterior en el tiempo.

 

Ejemplo para ver que está pasando con la apertura de conexiones y quién las hace:

Os podéis encontrar que en vuestra base de datos que tengáis problemas causados por la mala gestión de conexiones o choque entre aplicaciones que derivan en miles de conexiones abiertas. A esto se le puede sumar que esto ocurre fuera de horario y cuando sucede estamos normalmente en casa, sentados en el sofá viendo la tele.

 

Creación de la tabla:

create table AUDITORIA_SESIONES AS

(

select s.USERNAME, s.MACHINE, s.STATUS, count(*) as SESIONES, sysdate as FECHA
 from v$session s
group by s.USERNAME, s.MACHINE, s.STATUS

);

 

Creación del procedimiento:

create or replace procedure AUDITAR_SESIONES AS

begin

insert into AUDITORIA_SESIONES

(

select s.USERNAME, s.MACHINE, s.STATUS, count(*) as SESIONES, sysdate as FECHA
 from v$session s
group by s.USERNAME, s.MACHINE, s.STATUS

)

commit;

end;

 

En este caso se debe tener en cuenta que solo puede hacerse con el usuario sys y programar el job con su usuario. Ahora ya solo falta crear el job y consultar los datos cuando los necesitemos.

Ahora, ya depende de cada uno el uso que se le quiera dar. Esta manera de proceder nos puede sacar de un apurillo pero no es cuestión de llenar de basurilla la base de datos.

 

Oracle 10g: OPEN_CURSORS y SHARED_OPEN_CURSORS

Oracle 10g: OPEN_CURSORS y SHARED_OPEN_CURSORS il_masacratore Fri, 01/29/2010 - 16:21

Pasos que sigue Oracle para procesar una consulta:

1) Validación Sintáctica
2) Validación Semántica
3) Optimización
4) Generación del QEP (Query Execution Plan)
5) Ejecución del QEP (Query Execution Plan)

En algunos entornos nos podemos encontrar con aplicaciones que realizan ciertas consultas (y digo consultas) de forma muy reetiva de forma continua. Cuando el catálogo es muy amplio, continuo e inevitable debemos tener en cuenta dos parámetros de inicialización de la base de datos: open_cursors y session_cached_cursors.

Open_cursors nos permite establecer el límite de cursores por sesión y su seteo es muy directo. Si se necesitan 1000 y no hay nada que optimizar pues 1000 pondremos. En cambio Session_cached_cursors es algo más complejo y requiere analizarse en base al número máximo de cursores (open_cursors) y la cantidad actual de cursores que se mantienen en "cache" actualmente.

Consulta:

select
'session_cached_cursors'  parameter,
lpad(value, 5)  value,
decode(value, 0, '  n/a', to_char(100 * used / value, '990') || '%')  usage
from
( select
    max(s.value)  used
  from
    sys.v_$statname  n,
    sys.v_$sesstat  s
  where
    n.name = 'session cursor cache count' and
    s.statistic# = n.statistic#
),
( select
    value
  from
    sys.v_$parameter
  where
    name = 'session_cached_cursors'
)
union all
select
'open_cursors',
lpad(value, 5),
to_char(100 * used / value,  '990') || '%'
from
( select
    max(sum(s.value))  used
  from
    sys.v_$statname  n,
    sys.v_$sesstat  s
  where
    n.name in ('opened cursors current', 'session cursor cache count') and
    s.statistic# = n.statistic#
  group by
    s.sid
),
( select
    value
  from
    sys.v_$parameter
  where
    name = 'open_cursors'
) ;

Ejemplo:
PARAMETER              VALUE           USAGE
---------------------- --------------- -----
session_cached_cursors   100            100%
open_cursors             300             57%

Si con el valor actual observamos que el uso es del 100% podemos incrementar de forma moderada el parámetro session_cached_cursors y observar el resultado. Siempre que este por debajo estamos reutilizando todos los que son posibles y estamos optimizando al evitar el "hard parse" de la consulta reduciendo el uso de cpu. Pero cuidado, tampoco vale igualar este parámetro al número máximo de cursores ya que no es oro todo lo que reluce y cuanto más grande sea este valor mayor memoria estamos consumiendo y en servidores cortitos de harware puede pasar factura por otro sitio.

Oracle 10g: Resumir tablespaces transportando tablas e indices

Oracle 10g: Resumir tablespaces transportando tablas e indices il_masacratore Wed, 02/24/2010 - 16:21

Por el motivo que sea nos podemos encontrar que en nuestra base de datos Oracle tenemos muchos tablespace y para hacer un poquito de limpieza decidamos resumir los que estén duplicados. Entoces nos dirigimos a OEM y vemos una maravillosa liista de 50 tablespace con nombres sin sentido, algunos vacíos y otros por triplicado por que han llegado al tamaño que consideran máximo (en lugar de tres datafiles) etc etc... Llega el momento de ponerse manos a la obra.

Recordar que para ver el contenido de un tablespace nos podemos dirigir a Oracle Enterprise Manager y en la sección Administración>tablespaces marcar el que queramos, seleccionar en el desplegable Mostrar Dependencias y luego pulsando Ir. Luego veremos una segunda pestaña Dependientes. Ahí se muestran todos los objetos dependientes del tablespace (contenidos, vamos).

 

Ejemplo a) Solo índices

Nos encontramos que tenemos tres tablespaces IDX1, IDX2 e IDX3 que contiene índices creados por el mismo usuario APL y que son de la misma aplicación; lo que queremos hacer es resumirlos en un único tablespace IDX1. Para hacerlo podemos:

a)Hacer un export/import
b)Modificar indice por índice con la siguiente sql:
ALTER INDEX [indice] REBUILD TABLESPACE [nuevo tablespace]

La opción b) es una buena manera de hacerlo ya que aunque se tarde más el usuario seguro que no se dá ni cuenta.

 

Ejemplo b) Tablas e índices

Tenemos dos tablespace DAT1 y DAT2, y queremos mover las tablas de DAT2 a DAT1. Opciones:

a)Hacer un export/import
b)Modificar tabla por tabla (más sus índices*).
ALTER TABLE [tabla] MOVE TABLESPACE [nuevo tbspace];
ALTER INDEX [indice] REBUILD;

*En el caso de las tablas, al moverlas de un tablespace a otro hay que reconstruir los índices ya que quedan en estado “unusable”. Cualquier inserción posterior al traslado de tablespace sin la reconstrucción del indice producirá un error ORA.

 

Pues sí, con este método se puede hacer limpieza y organizar los tablespaces, y también ayuda a mejorar el rendimiento, ya que la reconstrucción de los mismos elimina la fragmentación de datos que puediera existir.

Oracle global_names

Oracle global_names il_masacratore Thu, 07/02/2009 - 13:26

Hola!

Puede alguien explicarme brevemente la utilidad de los global_names? Por lo que he visto existe un parámetro para activar o desactivar su uso. También existe una variable donde se guarda el nombre global de la base de datos actual.

¿Que se puede ver afectado si los desactivas?

¿Que puede verse afectado si cambias el nombre actual?

 

Buenas,

El nombre global de la base de datos se encuentra en la vista GLOBAL_NAME y está compuesto por el nombre de la base de datos (DB_NAME) más el nombre del dominio (DB_DOMAIN). La utilidad que tiene componerlo con un nombre de dominio es que permite distinguir o referenciar dos bases de datos que se llamen igual, pero que se encuentren en diferentes dominios.

Se me ocurre que yo podría tener, por ejemplo, una base de datos en el servidor de Dataprix, y un réplica de desarrollo en un PC de mi casa, y las distinguiría así:


SQL&gt; select * from global_name;
GLOBAL_NAME
------------------------------------------------------------
MIBD.DATAPRIX.COM

SQL&gt; select * from global_name;
GLOBAL_NAME
------------------------------------------------------------
MIBD.MICASA.COM

 

Si yo definiera un DBLINK a cada una desde una tercera BD, el dominio me permitiría distinguirlas.

Comentar también que a nivel de parámetros, el global database name se almacena en el parámetro SERVICE_NAMES del fichero de parámetros de inicialización.

 

Si cambias el nombre actual, si no estás en el caso que en tu sistema se acceda a dos bases de datos con el mismo nombre y diferentes dominios lo que deberías revisar sobretodo son los DBLINKS que haya definidos contra la BD, y teniendo en cuenta si el parámetro global_names (que no es lo mismo que la vista o sinónimo GLOBAL_NAME que acabamos de ver) está a TRUE o FALSE.

Si está a TRUE, este parámetro obliga a que los database links que se definan contra la base de datos utilicen como nombre el GLOBAL_NAME de la misma, por lo que en este caso, si cambias el GLOBAL_NAME, las sentencias que utilicen los DBLINKS devolverían un error ORA-02085 hasta que redefinieras el DBLINK, o modificaras el valor del parámetro global_names a FALSE.

Si global_names está a FALSE, la BD ya no obliga a que el DBLINK utilice el mismo nombre global que la BD que enlaza, pero el nombre global sigue siendo el mismo.

Si la BD arranca con spfile, para desactivar este chequeo a nivel de sistema basta con ejecutar: 


SQL&gt; ALTER SYSTEM SET global_names=FALSE;

Para evitar problemas, a menos que sea necesario hacerlo de otra manera por las razones que ya hemos comentado, yo suelo poner el parámetro global_names a FALSE, y el valor de GLOBAL_NAME con el mismo dominio que el de mi sistema (cuando creas la BD se suele quedar con el impresionante DB_DOMAIN de Oracle REGRESS.RDBMS.DEV.US.ORACLE.COM, que es fácil que nos de algún problema por su longitud). Modificarlo es tan fácil como:


SQL&gt; alter database rename GLOBAL_NAME to MIBD.DATAPRIX.COM;
Database altered.

 

 

Oracle10g: Cambiar el juego de carácteres de la base de datos

Oracle10g: Change the character set of the database il_masacratore Wed, 03/10/2010 - 10:23

It may happen that after you install or configure a new Oracle database we realize that the character set chosen during installation is not correct. What we may happen in cases like this is to delete the database and reconfigure it or worse ...But you do not. We can change the character set stopping the database, looking up strictly by changing the settings and restart the database. Howto:
 

- First we connect to the database 

$ sqlplus sys/pwd@prod as sysdba
 

- We stop the database 

SQL>SHUTDOWN IMMEDIATE;

 

- We raise strictly * 

SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER DATABASE OPEN;

- Change the character map 

SQL>ALTER DATABASE CHARACTER SET <new characters map>;

- Restart the database and yata 

SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;

To verify that changes have taken effect can query the view v $ nls_parameters and check the value of nls_characterset. We know that according to changes in coding that we can lose data (if any) depending on the change.

* It is also useful to know to get up the database in restricted mode is very useful to carry out maintenance of the database that can be done faster when no user activity (such as rebuilding indexes, reduction of segments , etc).
 

Oracle10g: Manual standby database (planteamiento inicial)

Oracle10g: Manual standby database (initial approach) il_masacratore Wed, 03/24/2010 - 12:15

An Oracle database in Standby is an exact copy of an operational database on a remote server, used as a backup, and copy for reference, disaster recovery, etc..

A database in the Standby mode is more than a normal backup because it can be put into production disaster in less time than if we had to restore a copy (either from a simple rman or export).Restore a copy from file takes time, and during this period the system is unavailable. With an additional database in standby mode there is nothing (or almost nothing to restore) in case of disaster. Within minutes, allowing the change is continuity of service. It offers the performance advantages of a cluster or safety of the mirror but the ratio of costs versus benefits and leave time seems right to me.

From a global perspective:

"We have a copy of the database remotely, we can count as a second set of copies. "Unlike a simple backup, the copy is kept alive and the data is updated more frequently. "In a disaster we can use in minutes, without waiting to restore a full backup, either logical (export) or physical (RMAN). -Serves as a more realistic test environment to test patches and estimated time. The volume of data is identical. "I understand that a standby database can use up to 10 days a year without license fee (though you look at where Microsoft leaves 30 days ...)

From a technical standpoint:

"Changes in the primary database are captured in the redo log files. Redo-files are not permanent, are overwritten by rotation (in this state is not yet copied to the second server). "It makes a copy of redo log. The permanent copy log file is called. "The archive logs (copies of redo log) is transferred to the standby server. In systems such as Linux can do this by rsync. -Apply the archive logs are transferred to the standby database will be updated.

Globally the steps to mount the kiosk can be:

1. Set the primary database to run in archivelog mode.

2. Prepare a script to make a hot copy (using rman).

3. Create a standby control file (control file) in the main database.

4. Copy everything (configuration file, and copy control rman) on the second server (where we mount the database in standby).

5. Reconfiguring routes (DB_FILE_NAME_CONVERT in init.ora or using small hand).

6. Starting the second database mount standby database mode.

7. Restore Data (recover database).

8. Synchronize periodically (cron) transporting (rsync?) And applying the archive logs.

 

In another post I will try to go into more detail with an example ...and utilities that you can give.

 

Oracle10g: Poner la base de datos en modo archivelog y hacer backups con rman

Oracle10g: Poner la base de datos en modo archivelog y hacer backups con rman il_masacratore Thu, 06/17/2010 - 12:05

El modo archivelog de una base de datos Oracle protege contra la pérdida de datos cuando se produce un fallo en el medio físico y es el primer paso para poder hacer copias de seguridad(en caliente!!) con rman. Para poner la base de datos en modo archivelog (sin usar la flash recovery area) debemos hacer básicamente dos cosas, añadir dos parámetros nuevos al fichero de configuración, reiniciar la base de datos y cambiar el modo trabajo a archivelog.

Como poner la base de datos Oracle 10g en modo archivelog

  1. Editamos el init.ora para añadir los siguientes parámetros
    *.log_archive_dest='/ejemplo/backup/'
    *.log_archive_format='SID_%r_%t_%s'
     
  2. Reiniciamos la base de datos para que coja los cambios y nos aseguramos.
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup mount pfile='/ejemplo/pfile/init.ora
    ORACLE instance started.
     
    Total System Global Area  272629760 bytes
    Fixed Size                   788472 bytes
    Variable Size             103806984 bytes
    Database Buffers          167772160 bytes
    Redo Buffers                 262144 bytes
    Database mounted.
    SQL> alter database archivelog;
    Database altered.
    SQL> alter database open;
    Database altered.
    SQL> create spfile;
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup

Backups con RMAN
 
Una vez tenemos la base de datos funcionando en modo archivelog ya podemos plantearnos hacer los backups con rman. Para hacerlos basta con editar un script donde básicamnte hacemos la copia y mantenemos archives en base a cuantos copias queremos mantener y cada cuando ejecutaremos el script. Solo debemos tener cuidado y dimensionar correctamente el número de copias y archivelog que mantemos en base al espacio disponible en el disco. Para saber cuanto espacio necesitaremos podemos aplicar la siguiente formula, suponiendo que la copia sea diaria:

Espacio necesario = (num_backups_rman_mantenidos*tamanyo_backups_rman)+(media_num_redos_al_dia)*(dias_mantenidos).
 

Pasos para empezar a hacer backups:

  1. Editamos el script de sistema para el lanzamiento (/ejemplo/scripts/rman.sh) :
    #!/bin/bash
    export ORACLE_HOME=/opt/oracle/product/10.2/db_1/
    export ORACLE_SID=SID
    /opt/oracle/product/10.2/db_1/bin/rman @/ejemplo/scripts/rman.sql > /backup/scripts/rman.log
     
  2. Script sql que lanzaremos con el sh anterior (/ejemplo/scripts/rman.sql). No hace falta comentarlo porque es muy fácil leer lo que está haciendo en cada paso. Vereis también donde se indica la caducidad de los backups y los archives.

    connect target root/password@SID
    run {
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;

    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/ejemplo/backup/%F';

    CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/ejemplo/backup/%d_%Y%M%D%U';
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET;
    CONFIGURE MAXSETSIZE TO 8000M;

            backup database
            include current controlfile
            plus archivelog;

    CROSSCHECK BACKUP completed before 'sysdate - 4';       
    DELETE NOPROMPT OBSOLETE;                               
    DELETE NOPROMPT ARCHIVELOG UNTIL TIME "SYSDATE - 4";
    delete noprompt expired backup;
    delete noprompt expired archivelog all;
    report schema;
    }
    exit;
     

  3. Programamos la tarea (crontab?) y listo!!
     

Para más información sobre los archive redo logs aquí.

Reducción de Segmentos en Oracle 10g: Shrink Table

Reducción de Segmentos en Oracle 10g: Shrink Table Oscar_paredes Mon, 02/19/2007 - 19:41

En Oracle 10g existe una nueva funcionalidad para DBA's de Oracle para a la recuperación del espacio ocupado por una tabla sin necesidad de recrearla: SHRINK TABLE

Es habitual en versiones anteriores a la versión 10g el problema generado por el borrado de registros de una tabla y la generación de “huecos” a nivel de los bloques que componen esa tabla. A modo de ejemplo: es habitual para un DBA de Oracle la duda tras el borrado masivo de muchos registros de una tabla (o de todos) y la comprobación tras la eliminación de los registros de que la tabla ocupa exactamente lo mismo (misma HWM – High Water Mark).

Esta situación también se da en sistemas OLTP donde con el tiempo, y con las inserciones/borrados de registros en determinadas tablas, se van generando espacio no reutilizables por las nuevas inserciones por falta de espacio en los bloques incompletos, y a la larga caídas de rendimiento en los sistemas.

El método tradicional para recuperar este espacio consistía en realizar periódicamente export/import de la tabla en cuestión o recreación de la misma. Eso conllevaba una serie de problemas en la práctica como invalidación de índices, vistas, procedimientos…

En Oracle 10g surge la funcionalidad shrink table, que no sólo permite la recuperación de este espacio y recuperación del acceso óptimo a la misma, sino que permite realizarlo en 2 fases diferenciadas disminuyendo el tiempo de afectación a los usuarios.

Para que el DBA lleve a cabo esta recuperación de espacio puede seguir los siguientes pasos:

  • Habilitación de movimientos de filas:
SQL&gt; ALTER TABLE tabla ENABLE ROW MOVEMENT; 
  • Movimiento de las filas:
SQL&gt; ALTER TABLE tabla SHRINK SPACE COMPACT; 
  • Reseteo HWM
SQL&gt; ALTER TABLE tabla SHRINK SPACE; 

Tan solo durante el último punto del procedimiento existe bloqueo de tabla, pero sin duda el punto 2 es el más costoso en tiempo y se puede hacer totalmente online.

  

Oscar Paredes

IT Manager
Oracle DBA

oscar.paredes@dataprix.com

 

hola que tal es recomendable si se ha realizado un delete con una gran cantidad de registros... le afecta al performance de la base de datos?

Seguridad en Oracle

Seguridad en Oracle drakon Tue, 01/30/2007 - 22:15

En éste post os adjunto varios documentos PDF relacionados con la seguridad y administración de Oracle. Por una parte, sabiendo que incluso el sistema de contraseñas en Oracle 11g es débil, os linko un documento PDF publicado por NGSSoftware y que trata de ayudar a proteger Oracle bajo los ataques de fuerza bruta contra las contraseñas y además donde presenta la herramienta de fuerza bruta: OraBrute.

Por otra parte os linko otro documento PDF dónde explica cómo proteger Oracle en tan sólo 20 minutos que, aunque no es un sistema para proteger completamente la base de datos, sirve como mínimo para tapar aquellos agujeros más evidentes.

Finalmente una pequeña herramienta para aquellos técnicos que viajan de empresa en empresa y puedan aprovecharla. Se llama WinSID y es un sencillo descubridor de instancias de Oracle pero que para su ejecución no es necesario tener el cliente de Oracle instalado. Permite determinar si un servidor remoto tiene una base de datos Oracle y, en caso de encontrarla, obtiene información de servicios, el SID, estadísticas del listener, conexiones establecidas... y además genera un TSNNAMES.ORA para la conexión encontrada. ¿Qué os parece?

por un lado hablas de la base de datos (Oracle 10g) y por otro de Oracle Applications (Oracle Applications 11i).

Acabo de probar el WinSID, y la encuentro fácil de utilizar y bastante útil, hasta me ha devuelto una instancia de Oracle que yo desconocía en el servidor de desarrollo donde lo he probado!

Tablespaces Encriptados en Oracle 11g - Oracle DBA

Encrypted Tablespaces in Oracle 11g Oscar_paredes Sat, 06/11/2011 - 14:09

Since the release 1 of Oracle 11g, Oracle provides the ability to encrypt tablespaces in full, to protect sensitive data inside and accessible from the OS. That is, the objective of this new functionality is not to protect sensitive data of users of the database, but to protect the information of the tablespace datafiles.

 

To explain the usefulness of this feature, it is best to explain situations in which our data without this functionality would be vulnerable. For example, in the case file of a physical backup of a database tablespace were to wrong hands, could see some data "clear" without problems. For example, a single edition of tablespace (or a simple "cat") containing the Employees table, we show clear varchar2 fields can extract sensitive data (you do not believe, try it!).

 

For this functionality, Oracle uses the TDE - Transparent Data Encryption, by creating an Oracle Wallet that is stored on disk.By default, the location $ ORACLE_BASE / admin / $ ORACLE_SID / wallet, but you should change your location by using the parameter in the sqlnet.ora ENCRYPTION_WALLET_LOCATION.

 

For the creation of the Wallet: 

ALTER SYSTEM SET ENCRYPTION KEY AUTHENTICATED BY "myPassword";

  

The encrypted tablespace can be created as follows:

CREATE TABLESPACE seguro_tbs 
DATAFILE '/oradata/seguro_ts01.dbf.dbf' SIZE 1M
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);

 

Unless stated otherwise, the encryption algorithm used is AES256 (Advanced Encryption Standard), but these algorithms are also allowed:

AES256

AES192

AES128

3DES168

When you restart the database, we open the wallet for consulting data encrypted tablespaces:

 ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY "mypassword"; 

 

We can also close it at any time:

  ALTER SYSTEM SET WALLET CLOSE; 

 

If you don't open a wallet, the result of any query on any table that is the tablespace ORA-28365 error "is not open wallet."

 

Consulting if tablespace is encrypted or not can be made from the same view dba_tablespaces:

 

SQL> SELECT tablespace_name, encrypted FROM dba_tablespaces;
 TABLESPACE_NAME                ENCRYPTED
------------------------------ ---------
SYSTEM                         NO
SYSAUX                         NO
UNDOTBS1                       NO
TEMP                           NO
SEGURO_TBS                     YES

 

I hope you find it useful,

Oscar Paredes

Utilización de sinónimos para compartir objetos

Utilización de sinónimos para compartir objetos Carlos Sat, 11/25/2006 - 00:23

Cómo utilizar los sinónimos de Oracle para que un usuario pueda ver/utilizar objetos de un esquema que pertenezca a otro usuario. Es algo muy sencillo y realmente útil. Lo único que hay que hacer es crear un sinónimo para cada objeto que queramos 'compartir', y después asignar los permisos que interese al esquema que quiere acceder al objeto.

 -- Creación del sinónimo 

CREATE PUBLIC SYNONYM "MI_TABLA" FOR "YO"."MI_TABLA"; 

Utilizamos un sinónimo público para compartirlo para diferentes esquemas. La asignación de permisos sí que es específica para cada esquema que tenga que acceder al objeto

 -- Asignación de permisos para el usuario EL 

GRANT SELECT ON "YO"."MI_TABLA" TO "EL";
GRANT UPDATE ON "YO"."MI_TABLA" TO "EL";
GRANT INSERT ON "YO"."MI_TABLA" TO "EL";
GRANT DELETE ON "YO"."MI_TABLA" TO "EL";
-- Si se quiere dar acceso sólo de consulta a esta misma tabla para otro usuario, bastaría con hacer GRANT SELECT ON "YO"."MI_TABLA" TO "ELLA";

Ahora "EL" y "ELLA" ya pueden trabajar sobre "MI_TABLA" cada uno con los permisos que el propietario de la tabla ha decidido

 

problemas con OEM basicamente con el rol de dba como puedo regenerarlo o reconstruirlo

problemas con OEM basicamente con el rol de dba como puedo regenerarlo o reconstruirlo jimyman Fri, 03/19/2010 - 22:31

hola a todos

 

el problema que tengo con el OEM es que no me guarda las bases de datos conectadas o dadas de alta en el tnsname.ora y al conectarme con mi usuario que tiene privilegios de DBA me  manda select any dictionary que me faltan esos permisos para poderme logear con mi usuario, como puedo eliminar este problema

 

gracias por su atencion

Tienes opción de entrar con el usuario SYS o SYSTEM, o decirle a quien los controle que lo haga? Estos tienen definidos los roles de DBA por defecto y, si no se han modificado te tienen que funcionar perfectamente.
Después puedes utilizarlos para revisar los permisos de tu usuario y encontrar lo que le falte.

Ayuda con Query para consultar los privilegios que tiene asignado un grupo de PACKAGE (Oracle)

Ayuda con Query para consultar los privilegios que tiene asignado un grupo de PACKAGE (Oracle) Erik Olave Thu, 11/17/2011 - 14:41

Buenos Días. Saludos a todos.

Me encuentro con un problema, necesito saber si existe alguna vista o tabla que me permita saber que privilegios tiene asignado un grupo de paquetes. Son 450 paquetes y necesito saber cual de ellos no tiene permisos de Ejecución.

Consultar Permisos de paquetes Oracle

Gracias de antemano.

Saludos.

Por ejemplo, para ver los privilegios de un grupo de tablas, se puede usar la (dba_tab_privs) pero en el caso de los paquetes cual tabla o vista puedo usar? Gracias

In reply to by Erik Olave

En realidad no vas mal encaminado, la vista DBA_TAB_PRIVS es la que contiene los privilegios asignados a los objetos de la base de datos, aunque la nomenclatura es un poco engañosa, ya que lo de TAB no se refiere sólo a las tablas, es para todos los objetos, y el campo TABLE_NAME mejor debería llamarse OBJECT_NAME.

Una manera rápida de localizar los PACKAGES es seleccionar los registros con permisos de ejecución:

select * from dba_tab_privs
where privilege = 'EXECUTE';

 

Aprovecho para recordar algunas sentencias útiles para consultar los roles y privilegios generales del usuario que tiene abierta la sesión:

select * from user_role_privs;
select * from user_sys_privs;

 

También te pueden ser muy útiles estas sentencias obtenidas de esta web para listar recursivamente los privilegios de los usuarios de la base de datos:

Listado de roles y privilegios de sistema de los usuarios

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

 

Privilegios de sistema para roles y usuarios 

select
  lpad(' ', 2*level) || c "Privilege, Roles and Users"
from
  (
  /* THE PRIVILEGES */
    select 
      null   p, 
      name   c
    from 
      system_privilege_map
    where
      name like upper('%&enter_privliege%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      granted_role  p,
      grantee       c
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      privilege     p,
      grantee       c
    from
      dba_sys_privs
  )
start with p is null
connect by p = prior c;

 

Privilegios asignados a los objetos

select
  case when level = 1 then 
     own || '.' || obj || ' (' || typ || ')' else
  lpad (' ', 2*(level-1)) || obj || nvl2 (typ, ' (' || typ || ')', null)
  end
from
  (
  /* THE OBJECTS */
    select 
      null          p1, 
      null          p2,
      object_name   obj,
      owner         own,
      object_type   typ
    from 
      dba_objects
    where
       owner not in 
        ('SYS', 'SYSTEM', 'WMSYS', 'SYSMAN','MDSYS',
         'ORDSYS','XDB', 'WKSYS', 'EXFSYS', 
         'OLAPSYS', 'DBSNMP', 'DMSYS','CTXSYS',
         'WK_TEST', 'ORDPLUGINS', 'OUTLN')
      and object_type not in ('SYNONYM', 'INDEX')
  /* THE OBJECT TO PRIVILEGE RELATIONS */ 
  union
    select
      table_name p1,
      owner      p2,
      grantee,
      grantee,
      privilege
    from
      dba_tab_privs
  /* THE ROLES TO ROLES/USERS RELATIONS */ 
  union
    select 
      granted_role  p1,
      granted_role  p2,
      grantee,
      grantee,
      null
    from
      dba_role_privs
  )
start with p1 is null and p2 is null 
connect by p1 = prior obj and p2 = prior own;

 

Muchísimas muchísimas graciassss.

De verdad esto es justo lo que estaba buscando.

Mil gracias hermano, Dios lo siga bendiciendo en grande.

Saludos cordiales.

 

Hola amigos.

Tengo una consulta. Quisiera saber a que objetos(tables, procedure, functions. etc) tiene acceso un rol determinado. Estaré atento.

In reply to by Carlos

Estimado, por conultar con cierto usuario Oracle 12c en una tabla no puede ver la data completa en una tabla (se tiene *********1234), pero con otro usuario si lo puedo todo el dato. Segun lo explicado son privilegios. Me podrian ayudar indicando como se otorta esto previlegios en Oracle 12C


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.

Los libros que ves a continuación son una selección de los que a mi me parecen más interesantes para aprender administración y desarrollo PL/SQL, teniendo en cuenta precio y temática, espero que te puedan ser de utilidad:

  • eBooks de Oracle gratuítos para la versión Kindle, o muy baratos (menos de 4€):
  • Libros recomendados de Oracle

Hola Espero me puedan ayudar. Tengo 2 consultas. Tengo un esquema con mucha información tablas de mas de 5 millones de registros en ciertos casos y veo que se me han creado automaticamente supongo porque yo no las he creado tablas que empiezan con EPC_..,SMP_..,VBZ_..,VDK_..,VMQ_..' , la consulta seria porque se crearon estas tablas La segunda consulta, cree un esquema a partir de ese esquema muy grande en el nuevo esquema limpie todas las tablas,y le hice un drop a todas las tablas que empezaban con el nombre EPC_..,SMP_..,VBZ_..,VDK_..,VMQ_..' , pero tengo algunas tablas que no las puedo eliminar porque revisando tienen dependencia con otras tablas del esquema original por ejemplo la tabla NUEVOESQUEMA.SMP_VDN_TARGET_TYPE_DEFN tiene dependencia con VIEJOESQUEMA.SMP_VDN_TARGET_LIST como borro esa dependencia para poder hacer el DROP y porque se creo esta dependencia ?

Cómo puedo saber, en Oracle las sentencias que se ejecutan desde una sesión desconectada o conectada.

Cómo puedo saber, en Oracle las sentencias que se ejecutan desde una sesión desconectada o conectada. Juan Calvo Munido Thu, 01/20/2011 - 13:48

Me podeis decir cómo puedo saber las sentencias SQL que se han ejecutado en una sesión de Oracle, la sesión puede estar desconectada o conectada, deseo conocerlo en ambas situaciones.

El objetivo es saber, mediante consultas SQL, desde qué ordenador cliente se han ejecutado qué sentencias SQL.

Hola Juan

Si consultas el tema Recopilación de scripts y consultas útiles de Oracle encontrarás la query que te copio para extraer información sobre las sentencias SQL y el usuario que las ha ejecutado. Ten en cuenta que la consulta te saca las sentencias que se encuentran en la Shared SQL Area, dentro de la Shared Pool, es decir, las que se están ejecutando o se han ejecutado y Oracle almacena para optimizar ejecuciones posteriores. Las que menos se utilizan irán desapareciendo de este àrea.

•• Últimas consultas SQL ejecutadas en Oracle y usuario que las ejecutó:
select distinct vs.sql_text, vs.sharable_mem,
vs.persistent_mem, vs.runtime_mem, vs.sorts,
vs.executions, vs.parse_calls, vs.module,
vs.buffer_gets, vs.disk_reads, vs.version_count,
vs.users_opening, vs.loads,
to_char(to_date(vs.first_load_time,
'YYYY-MM-DD/HH24:MI:SS'),'MM/DD HH24:MI:SS') first_load_time,
rawtohex(vs.address) address, vs.hash_value hash_value ,
rows_processed , vs.command_type, vs.parsing_user_id ,
OPTIMIZER_MODE , au.USERNAME parseuser
from v$sqlarea vs , all_users au
where (parsing_user_id != 0) AND
(au.user_id(+)=vs.parsing_user_id)
and (executions >= 1) order by buffer_gets/executions desc

 
A partir de aquí puedes sacar tanta la información que necesites tanto de v$sqlarea como de all_users. En la documentación online de Oracle tienes todos los campos de estadísticas disponibles para v$sqlarea. Igualmente los copio:
 

Column Datatype Description
SQL_TEXT VARCHAR2(1000) First thousand characters of the SQL text for the current cursor
SQL_FULLTEXT CLOB All characters of the SQL text for the current cursor
SQL_ID VARCHAR2(13) SQL identifier of the parent cursor in the library cache
SHARABLE_MEM NUMBER Amount of shared memory used by a cursor. If multiple child cursors exist, then the sum of all shared memory used by all child cursors.
PERSISTENT_MEM NUMBER Fixed amount of memory used for the lifetime of an open cursor. If multiple child cursors exist, the fixed sum of memory used for the lifetime of all the child cursors.
RUNTIME_MEM NUMBER Fixed amount of memory required during execution of a cursor. If multiple child cursors exist, the fixed sum of all memory required during execution of all the child cursors.
SORTS NUMBER Sum of the number of sorts that were done for all the child cursors
VERSION_COUNT NUMBER Number of child cursors that are present in the cache under this parent
LOADED_VERSIONS NUMBER Number of child cursors that are present in the cache and have their context heap (KGL heap 6) loaded
OPEN_VERSIONS NUMBER The number of child cursors that are currently open under this current parent
USERS_OPENING NUMBER Number of users that have any of the child cursors open
FETCHES NUMBER Number of fetches associated with the SQL statement
EXECUTIONS NUMBER Total number of executions, totalled over all the child cursors
PX_SERVERS_EXECUTIONS NUMBER Total number of executions performed by Parallel eXecution Servers. The value is 0 when the statement has never been executed in parallel.
END_OF_FETCH_COUNT NUMBER Number of times this cursor was fully executed since the cursor was brought into the library cache. The value of this statistic is not incremented when the cursor is partially executed, either because it failed during the execution or because only the first few rows produced by this cursor are fetched before the cursor is closed or re-executed. By definition, the value of theEND_OF_FETCH_COUNT column should be less or equal to the value of the EXECUTIONS column.
USERS_EXECUTING NUMBER Total number of users executing the statement over all child cursors
LOADS NUMBER Number of times the object was loaded or reloaded
FIRST_LOAD_TIME VARCHAR2(19) Timestamp of the parent creation time
INVALIDATIONS NUMBER Total number of invalidations over all the child cursors
PARSE_CALLS NUMBER Sum of all parse calls to all the child cursors under this parent
DISK_READS NUMBER Sum of the number of disk reads over all child cursors
DIRECT_WRITES NUMBER Sum of the number of direct writes over all child cursors
BUFFER_GETS NUMBER Sum of buffer gets over all child cursors
APPLICATION_WAIT_TIME NUMBER Application wait time (in microseconds)
CONCURRENCY_WAIT_TIME NUMBER Concurrency wait time (in microseconds)
CLUSTER_WAIT_TIME NUMBER Cluster wait time (in microseconds)
USER_IO_WAIT_TIME NUMBER User I/O Wait Time (in microseconds)
PLSQL_EXEC_TIME NUMBER PL/SQL execution time (in microseconds)
JAVA_EXEC_TIME NUMBER Java execution time (in microseconds)
ROWS_PROCESSED NUMBER Total number of rows processed on behalf of this SQL statement
COMMAND_TYPE NUMBER Oracle command type definition
OPTIMIZER_MODE VARCHAR2(10) Mode under which the SQL statement was executed
OPTIMIZER_COST NUMBER Cost of this query given by the optimizer
OPTIMIZER_ENV RAW(703) Optimizer environment
OPTIMIZER_ENV_HASH_VALUE NUMBER Hash value for the optimizer environment
PARSING_USER_ID NUMBER User ID of the user that has parsed the very first cursor under this parent
PARSING_SCHEMA_ID NUMBER Schema ID that was used to parse this child cursor
PARSING_SCHEMA_NAME VARCHAR2(30) Schema name that was used to parse this child cursor
KEPT_VERSIONS NUMBER Number of child cursors that have been marked to be kept using the DBMS_SHARED_POOL package
ADDRESS RAW(4 | 8) Address of the handle to the parent for this cursor
HASH_VALUE NUMBER Hash value of the parent statement in the library cache
OLD_HASH_VALUE NUMBER Old SQL hash value
PLAN_HASH_VALUE NUMBER Numerical representation of the SQL plan for this cursor. Comparing one PLAN_HASH_VALUE to another easily identifies whether or not two plans are the same (rather than comparing the two plans line by line)
MODULE VARCHAR2(64) Contains the name of the module that was executing at the time that the SQL statement was first parsed as set by callingDBMS_APPLICATION_INFO.SET_MODULE
MODULE_HASH NUMBER Hash value of the module that is named in the MODULE column
ACTION VARCHAR2(64) Contains the name of the action that was executing at the time that the SQL statement was first parsed as set by callingDBMS_APPLICATION_INFO.SET_ACTION
ACTION_HASH NUMBER Hash value of the action that is named in the ACTION column
SERIALIZABLE_ABORTS NUMBER Number of times the transaction fails to serialize, producing ORA-08177 errors, totalled over all the child cursors
OUTLINE_CATEGORY VARCHAR2(64) If an outline was applied during construction of the cursor, then this column displays the category of that outline. Otherwise the column is left blank.
CPU_TIME NUMBER CPU time (in microseconds) used by this cursor for parsing, executing, and fetching
ELAPSED_TIME NUMBER Elapsed time (in microseconds) used by this cursor for parsing, executing, and fetching
OUTLINE_SID VARCHAR2(40) Outline session identifier
LAST_ACTIVE_CHILD_ADDRESS RAW(4) Address (identifier) of the child cursor that was the last to be active in the group (that is, the child cursor on behalf of which statistics in V$SQL were updated)
REMOTE VARCHAR2(1) Indicates whether the cursor is remote mapped (Y) or not (N)
OBJECT_STATUS VARCHAR2(19) Status of the cursor:
  • VALID - Valid, authorized without errors

  • VALID_AUTH_ERROR - Valid, authorized with authorization errors

  • VALID_COMPILE_ERROR - Valid, authorized with compilation errors

  • VALID_UNAUTH - Valid, unauthorized

  • INVALID_UNAUTH - Invalid, unauthorized

  • INVALID - Invalid, unauthorized but keep the timestamp

LITERAL_HASH_VALUE NUMBER Hash value of the literals which are replaced with system-generated bind variables and are to be matched, whenCURSOR_SHARING is used. This is not the hash value for the SQL statement. If CURSOR_SHARING is not used, then the value is 0.
LAST_LOAD_TIME DATE Time at which the query plan (heap 6) was loaded into the library cache
IS_OBSOLETE VARCHAR2(1) Indicates whether the cursor has become obsolete (Y) or not (N). This can happen if the number of child cursors is too large.
CHILD_LATCH NUMBER Child latch number that is protecting the cursor
SQL_PROFILE VARCHAR2(64) SQL profile
PROGRAM_ID NUMBER Program identifier
PROGRAM_LINE# NUMBER Program line number
EXACT_MATCHING_SIGNATURE NUMBER The signature used when the CURSOR_SHARING parameter is set to EXACT
FORCE_MATCHING_SIGNATURE NUMBER The signature used when the CURSOR_SHARING parameter is set to FORCE
LAST_ACTIVE_TIME DATE Time at which the query plan was last active
BIND_DATA RAW(2000) Bind data
 

 

Muchas gracias, me sirvio mucho, esta super detallado y claro.

Saludos

Gracias por el articulo

 

Me podrias decir como consultar DML de mas de 8 dias con los mismos datos (o similares) que los mostrados en la consulta?

 

Gracias

Buenos días. Tengo una tabla con 82 columnas en donde 80 de estas tienen por nombre col01, col02, col03,....col80. Realizo un fetch y guardo los valores en vcol01, vcol02,...vcol80. Lo que se requiere es poder identificar que columnas tienen valores y cuáles no. Para esto existen dos alternativas: a)preguntar por medio de if en cada columna si es nula o si tiene valor, la otra alternativa es b) en un while construir la variable vcol concatenado con una secuencia(vcol || secuencia) de tal forma que quede vcol01, vcol02, vcol03.... pero ahora requiero saber el contenido de ésta variable para saber si tiene valor o si es nula.

Lenguaje Oracle SQL, PL/SQL y desarrollo

Lenguaje Oracle SQL, PL/SQL y desarrollo Dataprix Tue, 09/08/2009 - 09:49

Cómo hacer o mejorar sentencias Oracle SQL, utilizar PL/SQL y los procedimientos almacenados, o cualquier cosa relacionada con el desarrollo o explotación de bases de datos Oracle

Construcción de scripts Oracle SQL con ayuda del diccionario

Construcción de scripts Oracle SQL con ayuda del diccionario Carlos Thu, 06/07/2007 - 23:12

Es bastante habitual si se trabaja con bases de datos que a menudo se tenga que realizar alguna tarea de creación o alteración de estructuras, análisis, recompilación, etc. sobre objetos de la base de datos. Para ello se suele crear un script con numerosas sentencias DDL, en las que la mayoría de las veces lo único que cambia es el nombre del objeto a tratar.

Crear sentencia Oracle SQL que genera sentencias Oracle

En estos casos puede ahorrarnos mucho trabajo la utilización del diccionario de la base de datos para construir estas sentencias dinámicamente. Pondremos como ejemplo la creación de un nuevo campo para almacenar la fecha de creación de los registros en todas las tablas de un esquema de una base de datos ORACLE. Para ello utilizaríamos la siguiente sentencia de SQL Oracle:

SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME || ' ADD FECHA_CREACION DATE DEFAULT SYSDATE;' 
FROM ALL_TABLES WHERE OWNER ='HR'; 

El resultado de esta sentencia SQL Oracle sería algo como esto, las sentencias SQL que queremos utilizar en realidad:

ALTER TABLE HR.DEPARTMENTS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.EMPLOYEES ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.JOB_HISTORY ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.JOBS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.LOCATIONS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.REGIONS ADD FECHA_CREACION DATE DEFAULT SYSDATE;
ALTER TABLE HR.COUNTRIES ADD FECHA_CREACION DATE DEFAULT SYSDATE;

 

Crear script con Oracle SQL para ejecutar sentencias SQL

Ahora sólo restaría guardar estas sentencias en un script y ejecutarlo, o lanzarlas directamente desde la aplicación que utilicemos para interactuar con nuestra base de datos.

Para el que tenga que (o prefiera) trabajar desde un terminal o linea de comandos, la manera de hacer esto mismo con SQLPLUS sería la siguiente:

SQL> SET HEADING OFF
SQL> SET FEEDBACK OFF
SQL> SPOOL C:\campo_auditoria.sql
SQL> SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME || ' ADD FECHA_CREACION DATE DEFAULT SYSDATE;'
     FROM ALL_TABLES WHERE OWNER ='HR';
SQL> SPOOL OFF;
SQL> SET FEEDBACK ON
SQL> SET HEADING ON 

Y finalmente ejecutar el script generado, aunque es recomendable una revisión previa de las sentencias generadas:

 SQL> @C:\campo_auditoria.sql 

 

Estructura de la Dimension Tiempo y Script de carga con Oracle SQL

Estructura de la Dimension Tiempo y Script de carga con Oracle SQL Carlos Sat, 08/29/2009 - 23:47

Con este script de Oracle SQL se crea una tabla DIM_TIEMPO y se rellena con los valores comprendidos entre las fechas que se indiquen en las variables FechaDesde y FechaHasta. Puede ser muy útil para la creación de la tabla de tiempo de cualquier Data Warehouse.

Esta es la versión para una base de datos Oracle, con Oracle SQL, que se suma a las que han creado anteriormente il_masacratore y Dario Bernabeu para Microsoft SQL Server y Oracle MySQL en sus respectivos blogs:

Estructura de la Dimensión Tiempo y Script de carga para Ms SQL Server

Estructura de la Dimensión Tiempo y Procedure de carga para MySQL

----------------------------------------------------
-- SQL de Creación de la tabla DIM_TIEMPO  --
----------------------------------------------------
drop table DIM_TIEMPO;
create table DIM_TIEMPO
(
    FechaSK number not null,
    Fecha date not null PRIMARY KEY,
    Año number not null,
    Trimestre number not null,
    Mes number not null,
    Semana number not null,
    Dia number not null,
    DiaSemana number not null,
    NTrimestre varchar2(7) not null,
    NMes varchar2(15) not null,
    NMes3L varchar2(3) not null,
    NSemana varchar2(10) not null,
    NDia varchar2(6) not null,
    NDiaSemana varchar2(10) not null
);
------------------------------------------------------------
-- Script Oracle SQL de carga de los datos entre fechas --
------------------------------------------------------------
DECLARE
   FechaDesde date;
   FechaHasta date;
BEGIN
    --Borrar datos actuales, si fuese necesario
    --TRUNCATE TABLE DIM_TIEMPO
    --Rango de fechas a generar: del 01/01/2006 al 31/12/Año actual+2
    FechaDesde := TO_DATE('20060101','YYYYMMDD');
    FechaHasta := TO_DATE((TO_CHAR(sysdate,'YYYY')+2 || '1231'),'YYYYMMDD'); 
    WHILE FechaDesde &lt;= FechaHasta LOOP
      INSERT INTO DIM_TIEMPO
      (
        FechaSK,
        Fecha,
        Año,
        Trimestre,
        Mes,
        Semana,
        Dia,
        DiaSemana,
        NTrimestre,
        NMes,
        NMes3L,
        NSemana,
        NDia,
        NDiaSemana
      )
      VALUES
      (
        to_char(FechaDesde,'YYYYMMDD'),                      
        FechaDesde,
        to_char(FechaDesde,'YYYY'),
        to_char(FechaDesde, 'Q'),
        to_char(FechaDesde,'MM'),
        to_char(FechaDesde,'WW'),
        to_char(FechaDesde,'DD'),
        to_char(FechaDesde,'D'),
        'T'||to_char(FechaDesde, 'Q')||'/'||to_char(FechaDesde,'YY'),
        to_char(FechaDesde,'MONTH'),
        to_char(FechaDesde,'MON'),
        'Sem '||to_char(FechaDesde,'WW')||'/'||to_char(FechaDesde,'YY'),
        to_char(FechaDesde,'DD MON'),
        to_char(FechaDesde,'DAY')
      ); 
      --Incremento del bucle
      FechaDesde := FechaDesde + 1;
    END LOOP;
END;

 

Como cada uno se adaptará el formato de las fechas al que más le convenga, aprovecho para adjuntar esta tabla de ayuda obtenida de Oradev. Contiene descripciones de la sintaxis que se puede utilizar en las máscaras de formato de fechas de las funciones TO_CHAR y TO_DATE de Oracle:

Format mask Description
CC Century
SCC Century BC prefixed with -
YYYY Year with 4 numbers
SYYY Year BC prefixed with -
IYYY ISO Year with 4 numbers
YY Year with 2 numbers
RR Year with 2 numbers with Y2k compatibility
YEAR Year in characters
SYEAR Year in characters, BC prefixed with -
BC BC/AD Indicator *
Q Quarter in numbers (1,2,3,4)
MM Month of year 01, 02...12
MONTH Month in characters (i.e. January)
MON JAN, FEB
WW Weeknumber (i.e. 1)
W Weeknumber of the month (i.e. 5)
IW Weeknumber of the year in ISO standard.
DDD Day of year in numbers (i.e. 365)
DD Day of the month in numbers (i.e. 28)
D Day of week in numbers(i.e. 7)
DAY Day of the week in characters (i.e. Monday)
FMDAY Day of the week in characters (i.e. Monday)
DY Day of the week in short character description (i.e. SUN)
J Julian Day (number of days since January 1 4713 BC, where January 1 4713 BC is 1 in Oracle)
HH Hournumber of the day (1-12)
HH12 Hournumber of the day (1-12)
HH24 Hournumber of the day with 24Hours notation (1-24)
AM AM or PM
PM AM or PM
MI Number of minutes (i.e. 59)
SS Number of seconds (i.e. 59)
SSSSS Number of seconds this day.
DS Short date format. Depends on NLS-settings. Use only with timestamp.
DL Long date format. Depends on NLS-settings. Use only with timestamp.
E Abbreviated era name. Valid only for calendars: Japanese Imperial, ROC Official and Thai Buddha.. (Input-only)
EE The full era name
FF The fractional seconds. Use with timestamp.
FF1..FF9 The fractional seconds. Use with timestamp. The digit controls the number of decimal digits used for fractional seconds.
FM Fill Mode: suppresses blianks in output from conversion
FX Format Exact: requires exact pattern matching between data and format model.
IYY or IY or I the last 3,2,1 digits of the ISO standard year. Output only
RM The Roman numeral representation of the month (I .. XII)
RR The last 2 digits of the year.
RRRR The last 2 digits of the year when used for output. Accepts fout-digit years when used for input.
SCC Century. BC dates are prefixed with a minus.
CC Century
SP Spelled format. Can appear of the end of a number element. The result is always in english. For example month 10 in format MMSP returns "ten"
SPTH Spelled and ordinal format; 1 results in first.
TH Converts a number to it's ordinal format. For example 1 becoms 1st.
TS Short time format. Depends on NLS-settings. Use only with timestamp.
TZD Abbreviated time zone name. ie PST.
TZH Time zone hour displacement.
TZM Time zone minute displacement.
TZR Time zone region
X Local radix character. In america this is a period (.)

Adjunto procedimiento completo de PL/SQL de Oracle al que se le adicionan 3 campos: periodo que no es relevante, fecha de corte que es el ultimo dia del trimestre de la fecha, la fecha de corte anterior que es la fecha del anterior trimestre.

Espero les sirva.

CREATE OR REPLACE PROCEDURE CARGADIMTIEMPO IS
tmpVar NUMBER;
FechaDesde date;
FechaHasta date;
FechaDesdeStr VARCHAR2(8);
err_num NUMBER;
err_msg VARCHAR2(255);
BEGIN
tmpVar := 0;
FechaDesde := TO_DATE('19941231','YYYYMMDD');
FechaHasta := TO_DATE('20181231','YYYYMMDD');
WHILE FechaDesde <= FechaHasta LOOP
FechaDesdeStr := to_char( FechaDesde, 'YYYYMMDD') ;
INSERT INTO DIM_TIEMPO
(
FechaSK,
Fecha,
Año,
Trimestre,
Mes,
Semana,
Dia,
DiaSemana,
NTrimestre,
NMes,
NMes3L,
NSemana,
NDia,
NDiaSemana,
Periodo,
FechaCorte,
FechaCorteAnt
)
VALUES
(
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD') ,'YYYYMMDD'),
FechaDesde,
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'MM'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'WW'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'DD'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'D'),
'T'||to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q')||'/'||to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YY'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'MONTH'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'MON'),
'Sem '||to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'WW')||'/'||to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YY'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'DD MON'),
to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'DAY'),
CASE
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 1 THEN 3
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 2 THEN 6
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 3 THEN 9
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 4 THEN 12
END,
CASE
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 1 THEN TO_DATE('31/03/' || to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'), 'DD/MM/YYYY')
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 2 THEN TO_DATE('30/06/' || to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'), 'DD/MM/YYYY')
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 3 THEN TO_DATE('30/09/' || to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'), 'DD/MM/YYYY')
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 4 THEN TO_DATE('31/12/' || to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'), 'DD/MM/YYYY')
END,
CASE
WHEN to_char(to_date(FechaDesdeStr,'YYYYMMDD'), 'Q') = 1 THEN TO_DATE('31/12/' || to_char(to_number(to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'))-1), 'DD/MM/YYYY')
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 2 THEN TO_DATE('31/03/' || to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'), 'DD/MM/YYYY')
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 3 THEN TO_DATE('30/06/' || to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'), 'DD/MM/YYYY')
WHEN to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'), 'Q') = 4 THEN TO_DATE('30/09/' || to_char(TO_DATE( FechaDesdeStr,'YYYYMMDD'),'YYYY'), 'DD/MM/YYYY')
END
);
-- Incremento del bucle
commit ;
FechaDesde := FechaDesde + 1;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
err_num := SQLCODE;
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error Problemas :'||TO_CHAR(err_num) || ' ' || err_msg );
DBMS_OUTPUT.put_line(err_msg);
END CARGADIMTIEMPO;

Gestionar dos empresas con el mismo usuario

Gestionar dos empresas con el mismo usuario ana.janez Tue, 05/13/2014 - 11:14

Hola a todos.

Soy nueva con oracle y tengo una duda. Necesito crear con forms una aplicacion que gestione dos empresas. Un usuario se conecta y podrá elegir entre dos empresas. Dependiendo de la empresa que elija se le mostraran los datos correspondientes. Las dos empresas tienen las mismas estructura tablas pero con datos diferentes.

Muchas gracias por vuestra ayuda

Independientemente de si se trata de una aplicación de Oracle Forms o no, lo que comentas me parece una decisión de diseño que se ha de tomar al nivel del modelo de datos, de las tablas de la base de datos.
Yo creo que si las dos empresas manejan los mismos datos lo más indicado es incluir en cada tabla un identificador de la empresa, que enlace a una tabla maestra de empresas. Así cualquier aplicación podrá identificar los datos que corresponden a cada empresa para mostrarlos o no a quien corresponda, o en función del entorno o las selecciones que se hayan hecho.

Espero haberte ayudado.

In reply to by Carlos

[quote=ana.janez]

Hola de nuevo,

Lo primero es agradecer tu ayuda. Si he entendido bien la cuestión sería duplicar todas las tablas de la base de datos y añadir un campo extra en cada tabla en el que se indique el nombre de la empresa a la que pertenece. Mi pregunta es, ese campo extra que identifica la empresa debe considerarse parte de una primary key o no es necesario?

gracias de nuevo.[/quote]

In reply to by ana.janez

No del todo, de duplicar nada, cada tabla te ha de servir para las dos empresas, por eso cada registro ha de tener el campo identificador de la empresa y, efectivamente lo normal es que este id de empresa forme parte de la clave primaria.

La opción de duplicar tablas también es factible, pero entonces sería el nombre de la tabla lo que te indicaría si los datos que contiene son de una empresa u otra, y entonces no sería necesario que las tablas tuvieran un campo id de la empresa. De todas maneras, esta segunda opción desperdicia mucho espacio, es muy poco flexible, y a la larga seguro que te complica el mantenimiento, yo te recomendaría la primera, la misma tabla para almacenar los registros de ambas empresas.

Insert entre bases de datos remotas enlazadas por dblink de Oracle

Insert entre bases de datos remotas enlazadas por dblink de Oracle cfb Tue, 08/19/2008 - 22:28

Para hacer un insert con Oracle SQL desde una tabla de una base de datos TablaBD1 a otra base de datos TablaBD2 a través de un dblink debería haber dos maneras:
 

1- Crear el database link en la base de datos origen BD1 y hacer el insert hacia la tabla de la base de datos destino BD2 a través de este dblink

SQL en la base de datos Oracle BD1:

CREATE [PUBLIC] DATABASE LINK BD1toBD2_dblink
CONNECT TO usuario2
IDENTIFIED BY password2
USING 'BD2';

INSERT INTO TablaBD2@BD1toBD2_dblink
(SELECT * FROM TablaBD1);

* Para simplificar suponemos que las tablas tienen la misma estructura
 

2- Crear el database link en la base de datos destino BD2 y hacer el insert seleccionando los registros de la tabla de la base de datos origen BD1 a través de este dblink:

SQL en la base de datos Oracle BD2:

CREATE [PUBLIC] DATABASE LINK BD2toBD1_dblink
CONNECT TO usuario1
IDENTIFIED BY password1
USING 'BD1';

INSERT INTO TablaBD2
(SELECT * FROM TablaBD1@BD2toBD1_dblink);

 

Yo hasta ahora he utilizado siempre el SQL de la segunda opción para enlazar bases de datos Oracle, supongo que porque parece más simple utilizar un dblink para seleccionar datos de una tabla de una base de datos remota que para insertarlos remotamente. Pues parece que lo mejor es buscar las cosas simples porque he podido comprobar que la primera opción no funciona, por lo menos a mi.

He probado a hacerlo creando con SQL un dblink entre dos bases de datos Oracle 10g y la inserción no se realizaba. Lo curioso es que la sentencia SQL, en lugar de devolverme un error me devolvía un mensaje de '0 registros insertados', cuando haciendo la SELECT sí que obtenía registros.

Yo he llegado a la conclusión de que la opción de insertar datos directamente en una tabla de una base de datos Oracle remota a través de un database link no funciona, hay que hacer una SELECT desde la base de datos 'destino'. Para simplificar, la @ ha de estar en la tabla de la sentencia SQL de SELECT, no en la de INSERT.

Si alguien tiene una explicación mejor le agradecería que lo comentara, porque el tema me parece bastante curioso.

 

Saludos Cordiales,
Tengo dos base de datos en Oracle 9i y necesito efectuar replicacion de datos entre ellos, ahora mismo uso DBLINK para mantener actualizada la información, pensamos cambiar a vistas materializadas, pero recientemente eschamos el STREAMS de Oracle, lo ha utilizado? podria sugerirme algunos link o información al respecto? el problema básico es que tengo una TABLA A en una DB 1 que constantemente se incrementa en el número de registros (Ocurren INSERT constantemente) y debemos actualizar la TABLA B en una BD 2. Cuando insertamos en la TABLA B cada vez que se inserte en la TABLA A se quedan conexiones abiertas que nunca se cierran y degrada el performance de la BD 1 y de la BD 2.
Puedes Ayudarnos?
Gracias de antemano

In reply to by Robely (not verified)

Las vistas materializadas pueden ser un buena opción para gestionar esta replicación, pero si las inserciones son muy frecuentes donde vas a notar mejora, con cualquier método que utilices para refrescar, es si en lugar de actualizar cada vez que insertas en la tabla origen, lo haces de manera agrupada, seleccionando los registros que han cambiado cada cierto tiempo para hacer un sólo insert cada x tiempo en lugar de un insert/update por registro creado o modificado.

Sobre STREAMS de Oracle yo no los he utilizado nunca, así que si los pruebas y nos explicas qué tal funcionan te lo agradezco.

Sobre vistas materializadas, te enlazo un artículo que explica cómo utilizar las vistas materializadas, e incluye enlaces a la documentación oficial de Oracle, espero que te ayude.

Y si te quedan dudas, en el foro tenemos abierto un tema sobre vistas materializadas de Oracle.

Saludos,

In reply to by Carlos

Hola, Muy buen aporte!

Sólo me queda una consulta... Haciendo el dblink éste permite que las modificaciones sean bidireccionales? 


Muchas gracias!

Saludos.-

In reply to by Manuel1222 (not verified)

Hola Manuel.

El DBLink es para utilizarlo desde la instancia de base de datos en la que se define, y desde esta poder enlazar con otras, pero de manera unidireccional, tanto para modificaciones como para consultas.

Es decir, que desde las bases de datos que se enlazan con el database link no se puede utilizar ni se ve este mismo dblink para conectar con la primera. Para hacerlo habria que definir un nuevo dblink en la otra base de datos.

Saludos!

 

 Saludos!

Gracias por la información.

Cuando probemos STRWAMS, lo comento por el foro.

 

 

Amigo necesito realizar un insert desde una bd SQL Server a Oracle, como hago para ejecutar o hacer un llamado a un Stored Procedure que realice un insert en la BD Oracle  desde una Bd SQL Server

Oracle 10g: Posible optimización de volcado masivo de datos

Oracle 10g: Possible optimization in massive data dump il_masacratore Tue, 02/16/2010 - 13:59

In batch runs to make a massive data dump into the same table using an INSERT or UPDATE for register within a block, the process can be optimized with the use of parameters (if client supports it) or if we use ODBC with bind variables.
Recall the steps taken by Oracle to process a query:
1) Sintactic Validation 
2) Semantic Validation
3) Optimization 
4) Generation of the QEP (Query Execution Plan)
5) Implementation of the QEP (Query Execution Plan)
Sentences can pick up the parameters by value (where salary > 1000) or once the sentence is compiled using Bind Variables (where salary>: b1). The advantage of the second option is that Oracle compile the sentence only one-time and reuses the compiled code for each of the values for the parameters.
But we must be aware because in the latter case because Oracle can't calculate the degree of selectivity of a query and, instead, apply a degree of selectivity by default (associated with each type of operation), which can give in wrong decisions.
Therefore, is inadvisable to use Bind Variables if you work with costs, except that we work with sentences to be executed repeatedly and not offering many doubts as to the possible access plans.
In proven cases like this, the execution time is reduced by up to 90% on an insert of 100.000 records ...

Creating the necessary table for testing:


create table TEST (  NUM number (22),  TEXT varchar (100) );

Loading parameters by value:


declare v_i number; 
begin
    loop
       INSERT INTO TEST VALUES (3, '50');
       v_i := v_i + 1;
       exit when v_i &gt; 1000000;
    end loop;
    rollback;
  end; 

Loading parameters using bind variables


declare v_i number;
begin
  loop
    execute immediate 'INSERT INTO TEST VALUES (:x, :y)' using 3, '50';
    v_i := v_i + 1;
    exit when v_i &gt; 1000000;
  end loop;
  rollback;
end;

I enclose the test results before applying changes in production (on a Friday afternoon )

 

ROWS BY VALUE WITH BIND VARIABLES
10000 5,3350 0,4370
100000 58,5160 6,1000
1000000 (A)570,1060 (B)54,1950

 

Oracle Flashback Query

Oracle Flashback Query Juan_Vidal Tue, 09/13/2011 - 09:53

 

Revisamos brevemente en este post la funcionalidad flashback query que aporta el gestor de BBDD de Oracle desde su versión 9i.

Básicamente se trata de un tipo de sql de Oracle que accede a datos que existían en la base de datos en un momento anterior, pero que en el momento en el que se ejecuta la sql pueden no existir o haber sufrido modificaciones. Para ello, Oracle utiliza los datos que quedan disponibles durante un tiempo en el segmento de UNDO. Este segmento, como es sabido, almacena los datos anteriores a una serie de modificaciones. Se utiliza para asegurar la consistencia en la lectura de una consulta previa a la confirmación de las modificaciones (commit) y pueden ser utilizados en una posible recuperación (rollback).

Gráfico ejecución flashback query de Oracle

 

La sentencia de Oracle SQL flashback query nos permite ver datos de la tabla que han sido borrados o modificados. Ejecutando una flashback query accedemos a datos de una foto de datos consistentes en un punto determinado, especificando para ello la hora del sistema o bien el número de cambio del sistema (SCN). La base de datos debe estar configurada para trabajar en  Automatic Undo Management (AUM). Para ello revisar los siguientes parámetros de la base de datos Oracle:

undo_management = auto
undo_tablespace = UNDOTBS001   (tablespace que alberga el segmento de undo)
undo_retention = 3600 (tiempo en segundos que tenemos retenido el dato en el segmento de undo)

 

Hay que tener en cuenta respecto al parámetro undo_retention que si el tablespace de UNDO no es lo suficientemente grande como para mantener ese tiempo todas las transacciones, el gestor de base de datos las va a sobreescribir. Igualmente, considerar que para poder ejecutar el comando flashback query de Oracle SQL debemos tener permisos sobre el package BDMS_FLASHBACK. Para ello:

 sys> grant execute on dbms_flashback to usuario1;

 

Veamos un ejemplo. Supongamos que queremos realizar una consulta SQL sobre una tabla que contiene facturas de clientes y queremos acceder a los datos de un cliente que previamente hemos borrado:

sys> select to char(sysdate, ‘dd-mm-yyyy hh24:mi’) fecha_sistema from dual;
fecha_sistema
-------------------------
12-09-2011 12:05

sys> delete from t_facturas where cod_cliente = ‘00125’;
4 registros borrados

sys> commit;

 

Media hora después ejecutamos:

sys> select to char (sysdate, ‘dd-mm-yyyy hh24:mi’) fecha_sistema from dual
fecha_sistema
-------------------------
12-09-2011 12:35
sys>  exec dbms_flashback.enable_at_time (to_date('12-09-2011 12:05, 'DD-MM-YYYY HH24:MI'));

sys> select to char (sysdate, ‘dd-mm-yyyy hh24:mi’) fecha_sistema from dual
fecha_sistema
-------------------------
12-09-2011 12:35
sys> exec dbms_flashback.enable_at_time (to_date(’12-09-2011 12:05, ‘DD-MM-YYYY HH24:MI’)); 
Procedimiento PL/SQL terminado correctamente.

sys> select * from t_facturas where cod_cliente = ‘00125’;
……
……
……
…… 
4 registros seleccionados.

sys> execute dbms_flasback.disable; 

sys> select count(*) from t_facturas where cod_cliente = ‘00125’; 
count(*) 
------ 
0 

 

Se puede obtener lo mismo accediendo por el número de cambio SCN:

sys> select dbms_flashback.get_system_change_number from dual; 
GET_SYSTEM_CHANGE_NUMBER 
------------------------ 
1307125 

sys> exec dbms_flashback.enable_at_system_change_number(1307125); 
Procedimiento PL/SQL terminado correctamente

 

Existe también la posibilidad de emplear la sentencia ‘select ... as of...’

sys> select * from t_facturas where cod_cliente = ‘00125’ as of timestamp to_timestamp (’12-09-2011 12:05', ‘DD-MM-YYYY HH24:MI’);
sys> select * from t_facturas where cod_cliente = ‘00125’ as of scn 1307125; 

 

Hay que tener en cuenta que mientras la sesión está en el modo Flashback Query, solo podemos ejecutar sentencias SELECT. Las sentencias SQL de actualización (insert, delete y update) no están permitidas.

En el trabajo diario con esta opción es útil el uso de tablas temporales para trabajar con los datos recuperados:

sys> create table t_facturas_ant as      (select * from t_facturas       where cod_cliente = ‘00125’       as of timestamp to_timestamp (’12-09-2011 12:05, ‘DD-MM-YYYY HH24:MI’);

 

Otras opciones Flashback Query

A continuación listamos algunas funcionalidades que aporta Oracle relacionadas con operaciones Flashback Query:

  • Flashback Version Query: Acceso al histórico de cambios de una tabla.
  • Flashback Transaction Query: Acceso al histórico de cambios de una transacción determinada.
  • Flashback Table: Acceso a datos anteriores, pero para una única tabla.
  • Flashback Drop: Recuperar una tabla borrada (‘papelera reciclaje’).
  • Flashback Database: Permite dejar la BBDD tal y como se encontraba en un tiempo pasado. Similar a restaurar un backup, pero con las limitaciones temporales de los procesos flashback, aunque mucho más rápido que recuperar la copia del backup.  Es necesario tener el modo flashback activado, así como la flash recovery area.

Algunas de estas opciones requieren que el gestor sea 'Enterprise Edition'.

Se trata, como se ha dicho, de una sentencia de Oracle SQL bastante útil, con múltiples opciones de “rebobinado” y que nos puede sacar de más de un apuro.

www.datademy.es

 

Recopilación scripts y consultas útiles de Oracle

Useful Oracle SQL queries and scripts Carlos Tue, 05/20/2008 - 00:06

Don't you have a chop with useful queries to use in your daily adventures and desventures with the database?

I include in this first post a list of queries, most of them over Oracle metadata dictionary, and extracted from the site Cibermanuales.com.

I encourage everyone that has his own useful queries or scripts to share it answering to this post. The objective is to create a little online repository that we could consult when we are working with the database.

•• Oracle SQL query over the view that shows database state:
select * from v$instance
•• Oracle SQL query that shows if database is opened
select status from v$instance
•• Oracle SQL query over the view that show Oracle database general parameters
select * from v$system_parameter
•• Oracle SQL query to know Oracle version
select value from v$system_parameter where name = 'compatible'
•• Oracle SQL query to know the path and name of spfile
select value from v$system_parameter where name = 'spfile'
•• Oracle SQL query to know the localization and number of control files
select value from v$system_parameter where name = 'control_files'
•• Oracle SQL query to show the database name.
select value from v$system_parameter where name = 'db_name'
•• Oracle SQL query over the view that shows actual Oracle conections. 
•• To use it the user need administrator privileges.select osuser, username, machine, program
from v$session
order by osuser
•• Oracle SQL query that show the opened conections group by the program that opens the connection.
select program Aplicacion, count(program) Numero_Sesiones
from v$session
group by program
order by Numero_Sesiones desc
•• Oracle SQL query that shows Oracle users connected and the sessions number for user
select username Usuario_Oracle, count(username) Numero_Sesiones
from v$session
group by username
order by Numero_Sesiones desc
•• Objects owners number of objects for owner
select owner, count(owner) Numero
from dba_objects
group by owner
order by Numero desc
•• Oracle SQL query over the data Dictionary (includes all views and tables of the database)
select * from dictionary
•• Oracle SQL query that shows definition data from a specific table 
•• (in this case, all tables with string "XXX")
select * from ALL_ALL_TABLES where upper(table_name) like '%XXX%'
•• Oracle SQL query to know tables from actual user
select * from user_tables
•• Oracle SQL query to know all the objects of the connected user
select * from user_catalog
•• Oracle SQL query for Oracle DBA that shows tablespaces, disk used, free space and datafiles:
SELECT t.tablespace_name "Tablespace", t.status "Estado",       ROUND(MAX(d.bytes)/1024/1024,2) "MB Tamaño",       ROUND((MAX(d.bytes)/1024/1024) -       (SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024),2) "MB Usados",       ROUND(SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024,2) "MB Libres",       t.pct_increase "% incremento",       SUBSTR(d.file_name,1,80) "Fichero de datos"FROM DBA_FREE_SPACE f, DBA_DATA_FILES d, DBA_TABLESPACES tWHERE t.tablespace_name = d.tablespace_name AND      f.tablespace_name(+) = d.tablespace_name      AND f.file_id(+) = d.file_id GROUP BY t.tablespace_name,      d.file_name, t.pct_increase, t.status ORDER BY 1,3 DESC
•• Oracle SQL query to know Oracle products installed and version number.
select * from product_component_version
•• Oracle SQL query to know roles and roles privileges
select * from role_sys_privs
•• Oracle SQL query to know integrity rules
select constraint_name, column_name from sys.all_cons_columns
•• Oracle SQL query to know tables owned by a user, in this case "xxx":SELECT table_owner, table_name from sys.all_synonyms where table_owner like 'xxx'
•• Oracle SQL query for the same as last query

SELECT DISTINCT TABLE_NAME
FROM ALL_ALL_TABLES
WHERE OWNER LIKE 'HR'
•• Oracle parameters, actual value and its description.
SELECT v.name, v.value value, decode(ISSYS_MODIFIABLE, 'DEFERRED',
'TRUE', 'FALSE') ISSYS_MODIFIABLE, decode(v.isDefault, 'TRUE', 'YES',
'FALSE', 'NO') "DEFAULT", DECODE(ISSES_MODIFIABLE, 'IMMEDIATE',
'YES','FALSE', 'NO', 'DEFERRED', 'NO', 'YES') SES_MODIFIABLE,
DECODE(ISSYS_MODIFIABLE, 'IMMEDIATE', 'YES', 'FALSE', 'NO',
'DEFERRED', 'YES','YES') SYS_MODIFIABLE , v.description
FROM V$PARAMETER v
WHERE name not like 'nls%' ORDER BY 1
•• Oracle SQL query that shows Oracle users and his data
Select * FROM dba_users
•• Oracle SQL query to know tablespaces and its owner:
select owner, decode(partition_name, null, segment_name,
segment_name || ':' || partition_name) name,
segment_type, tablespace_name,bytes,initial_extent,
next_extent, PCT_INCREASE, extents, max_extents
from dba_segments
Where 1=1 And extents > 1 order by 9 desc, 3
•• Last SQL queries executed on Oracle and user:
select distinct vs.sql_text, vs.sharable_mem,
vs.persistent_mem, vs.runtime_mem, vs.sorts,
vs.executions, vs.parse_calls, vs.module,
vs.buffer_gets, vs.disk_reads, vs.version_count,
vs.users_opening, vs.loads,
to_char(to_date(vs.first_load_time,
'YYYY-MM-DD/HH24:MI:SS'),'MM/DD HH24:MI:SS') first_load_time,
rawtohex(vs.address) address, vs.hash_value hash_value ,
rows_processed , vs.command_type, vs.parsing_user_id ,
OPTIMIZER_MODE , au.USERNAME parseuser
from v$sqlarea vs , all_users au
where (parsing_user_id != 0) AND
(au.user_id(+)=vs.parsing_user_id)
and (executions >= 1) order by buffer_gets/executions desc
•• Oracle SQL query to know all the tablespaces:
select * from V$TABLESPACE
•• Oracle SQL query to know free and used Shared_Pool
select name,to_number(value) bytes
from v$parameter where name ='shared_pool_size'
union all
select name,bytes
from v$sgastat where pool = 'shared pool' and name = 'free memory'
Cursores abiertos por usuario
select b.sid, a.username, b.value Cursores_Abiertos
from v$session a,
v$sesstat b,
v$statname c
where c.name in ('opened cursors current')
and b.statistic# = c.statistic#
and a.sid = b.sid
and a.username is not null
and b.value >0
order by 3
•• Oracle SQL query to know cache hits (it must be more than 1%)
select sum(pins) Ejecuciones, sum(reloads) Fallos_cache,
trunc(sum(reloads)/sum(pins)*100,2) Porcentaje_aciertos
from v$librarycache
where namespace in ('TABLE/PROCEDURE','SQL AREA','BODY','TRIGGER');
•• Complete SQL queries executed with a specific text in SQL sentence.
SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text
FROM v$session c, v$sqltext d
WHERE c.sql_hash_value = d.hash_value
and upper(d.sql_text) like '%WHERE CAMPO LIKE%'
ORDER BY c.sid, d.piece 
•• A SQL query (filtered by sid)
SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text
FROM v$session c, v$sqltext d
WHERE c.sql_hash_value = d.hash_value
and sid = 105
ORDER BY c.sid, d.piece
•• Oracle SQL query to know the database size
select sum(BYTES)/1024/1024 MB from DBA_EXTENTS
•• Oracle SQL query to calculate the size of the database data files
select sum(bytes)/1024/1024 MB from dba_data_files
•• Oracle SQL query to calculate the size of a concrete table excluding the indexes
select sum(bytes)/1024/1024 MB from user_segments
where segment_type='TABLE' and segment_name='TABLENAME'
•• Oracle SQL query to calculate the size of a concrete table including the indexes
select sum(bytes)/1024/1024 Table_Allocation_MB from user_segments
where segment_type in ('TABLE','INDEX') and
(segment_name='TABLENAME'or segment_name in
(select index_name from user_indexes where table_name='TABLENAME'))
•• Oracle SQL query to know the memory used by a column in a table
select sum(vsize('COLUMNNAME'))/1024/1024 MB from 'TABLENAME'
•• Oracle SQL query to calculate memory used by a user
SELECT owner, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by owner
•• Oracle SQL query to calculate size from the diferent segments 
•• (tables, indexes, undo, rollback, cluster, ...)
SELECT SEGMENT_TYPE, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by SEGMENT_TYPE
•• Oracle SQL query to obtain all the Oracle functions: NVL, ABS, LTRIM, ...
SELECT distinct object_name
FROM all_arguments
WHERE package_name = 'STANDARD'
order by object_name
•• Oracle SQL query to calculate the size of all the database objects, ordering from more to less
SELECT SEGMENT_NAME, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by SEGMENT_NAME
order by 2 desc 

 

SSRS: #Error en una celda de importe decimal de reporte utiliza Oracle SQL

SSRS: #Error en una celda de importe decimal de reporte utiliza Oracle SQL il_masacratore Wed, 04/27/2011 - 16:41

Hasta el momento desconozco exactamente como o donde se detalla cada tipo de error en la ejecución de un informe de reporting services de Microsoft SQL Server. He tratado con derivados de falta de permisos, procesados incompletos de cubos pero hasta ahora ningun #Error en una celda por que sí.

El error en cuestión me aparece en la ejecución de un pequeño informe que tira de un origen de datos ODBC contra una base de datos Oracle donde se muestran totales (sumas, no porcentajes) y me ha sorprendido mucho la falta de detalle sobre el error que se produce. Para más dificultad, encima es en una combinación de parámetros concreta (las n ejecuciones anteriores han funcionado) y no en toda la columna sino en una celda. Además arrastra todo subtotal o total en el que se incluya...

Después de mirar el log del servidor de Reporting Services, después de comprobar la consulta en un cliente externo con la misma, tras pensar mal del formato me da por comprobar en el diseñador de informes el origen de datos, me hago una prueba con parámetros al tuntun y bien, pero al poner los valores problemáticos consigo que se al menos aparezca el error:

Error al leer datos del conjunto de resultados de la consulta. OCI-22053: error de desbordamiento.

Pues nada, encontrado esto ya estoy más feliz ya que el error es que ado.net+oracle+odbc no lleva muy bien los números de 38 digitos...

Para esto podemos hacer un workaround que consiste en usar en la consulta la función trunc(número, decimales) de Oracle SQL para que nos trunque el valor en su parte decimal donde nosotros decidamos.

 

Traducción de terminología Oracle - DB2 LUW

Translation of terminology Oracle - DB2 LUW Oscar_paredes Sat, 06/18/2011 - 17:11

With 9.7 DB2 LUW version, IBM makes a nod to all Oracle DBAs, much more numerous in the DB2 market.

For this reason, 9.7 version has introduced Oracle compatibility modes that let you perform tasks in DB2 with the ease and knowledge that all Oracle DBAs have. However, it is important to know the terminology's translation between Oracle and DB2 if you intend to get into the DB2 world.

In this first article, I relate a number of items from which this introduction is simple and can be read DB2 documentation easily, including general terminology, updates, utilities, and views.

 

GENERAL COMPONENTS
ORACLE DB2 LUW
Instance Instance
File/Datafile Container
Database Database
Tablespace Tablespace
Schema Schema
Table Table
Index Index
View View
Trigger Trigger
Packages Modules
Stored Procedures Stored Procedures
SQL Plus DB2 CLP
Data Block Data Page
Dictionary Catalog
Alert Log Diag log
Redo Log Log File
Segments Space Consumming Objects
SGA Instance/DB Shared Memory

 

CATALOG VIEWS
ORACLE DB2 LUW

ALL_ 
USER_ 
DBA_ 
V$ 
GV$

SYSIBM.* 
SYSSTAT.* 
SYSCAT.*

 

UTILITIES
ORACLE DB2 LUW
RMAN 
IMPORT 
EXPORT 
SQL*loader 
DB_VERIFY 
ANALYZE
BACKUP 
IMPORT 
EXPORT 
LOAD 
RESTORE 
REORG 
REORGCHK 
RUNSTATS

 

VERSIONS
ORACLE DB2 LUW
EXPRESS EDITION EXPRESS-C
STANDARD EDITION ONE EXPRESS EDITION
STANDARD EDITION WORKGROUP EDITION
ENTERPRISE EDITION ENTERPRISE SERVER EDITION

 

 

I hope you find it useful.

 

Oscar Paredes

www.db2util.es

 

UPDATE con JOIN en ORACLE SQL

UPDATE con JOIN en ORACLE SQL hminguet Tue, 07/08/2008 - 10:16

Supongamos que queremos actualizar en nuestra base de datos ORACLE el campo de costes de la tabla de hechos FAC_TABLE con el coste unitario de nuestra tabla de COSTES.

Con Oracle SQL podemos hacerlo de dos maneras:

  • Consulta Lenta, pero si es para pocos datos o para lanzarlo esporádicamente nos puede valer
update FAC_TABLE ft set COSTE_UNITARIO =
   (select distinct COSTE_UNITARIO
    from COSTES ct
    where (ft.id_articulo = ct.id_articulo); 

 

  • La mejor manera es esta, y el rendimimento es óptimo si tiene constraints)
UPDATE (SELECT ft.COSTE_UNITARIO AS old_coste,
               ct.COSTE_UNITARIO AS new_coste 
        FROM FAC_TABLE ft INNER JOIN COSTES ct ON ft.id_articulo = ct.id_articulo)
       ) SET old_coste = new_coste;

Para que esta segunda opción funcione necesitamos tener UNIQUE or PRIMARY KEY constraint en ct.id_articulo.

Si no tienes esta constraint, puedes utilizar el hint /*+BYPASS_UJVC*/ después de la palabra UPDATE (bypass update join view constraint).

El rendimiento aumenta si tenemos la constraint pero aún sin ella debe correr mucho más que la primera opción.

 

Espero que os ayude.

Héctor Minguet.

 

He tenido la oportunidad de probar este tipo de update con tablas grandes, de varios millones de registros, y realmente funciona como comentas.
He lanzado un update con la primera opción y he decidido cancelarlo cuando he visto que comenzaba a afectar negativamente al rendimiento de la base de datos. El tiempo estimado que me daba la consola de Enterprise Manager para terminar era de 1 hora y media.

Después de cancelar he probado la segunda opción y me he encontrado con el error ORA-01779 porque no tenía una clave única definida sobre el campo de la tabla con la que hacía la join. Como la tabla era demasiado grande para crear un índice único sin estudiarlo primero, he probado la opción de incluir el hint /*+BYPASS_UJVC*/ (para hacer esto hay que asegurarse antes de que la correspondencia es realmente de 1:1, si no podemos obtener resultados inesperados), y el update se ha realizado correctamente en menos de 15 minutos, una diferencia considerable.

Ahora a ver si alguien se anima y nos cuenta la mejora que se obtiene con la segunda opción, pero creando una clave única en la tabla 'enlazada', y sin utilizar el hint.

In reply to by Carlos

 

Hola Hector y Carlos, 

 

Excelente hint, lo he utilizado por años sin ningun problema.

Pero hoy me paso el sig. error:

 

Tengo una tabla PRIMARIA 

* PREPAQ_MIC

 

Y tambien tengo dos vistas.

* VW_DATACRED

* VW_CNCH_MPIO

 

Esta ultima vista esta definida asiI:

CREATE OR REPLACE FORCE VIEW FIRA.VW_CNCH_MPIO
(CDGPROG, CDGEF, CDGMU)
AS
select CDGPROG, CDGEF, trim(column_value)   CDGMU
              from (    SELECT   CDGPROG, CDGEF, APO.VALORES  CDGMU
                        FROM FIRA.APL_APOYO  APO
                        WHERE CDGPROG = 'CNCH' AND CDGMU = 'VAR'
                        ORDER BY CDGEF, CDGMU
                   ) t,
                   xmltable(('"' || replace(CDGMU, ',', '","') || '"'));

Con el sig. script UPDATE, intento modificar un campo de la tabla primaria (PRE.APOYO) con el valor de la vista anterior

UPDATE /*+BYPASS_UJVC*/
    (
        SELECT PRE.ESQUEMA, PRE.STATUS, PRE.NUMCONTROL, PRE.CLNS, PRE.CDGRG, PRE.CDGCLNS, PRE.CICLO, PRE.CDGCL, PRE.CANTENTRE, PRE.SUSTRAE, PRE.MOTIVORECHAZO, PRE.APOYO AS PRE_APOYO,
               VDC.CDGEF, VDC.CDGMU, VDC.MUNICIPIO, VDC.CDGLO, VDC.LOCALIDAD,  VDC.POB_LOC, VDC.GRADMARG, 
               VDC.ACTIVIDAD, VDC.CVESECTOR, VDC.NOM_SECTOR, VDC.CDGSUBSEC, VDC.NOM_SUBSECTOR, 
               CNCH.CDGPROG AS APOYO_CNCH
            FROM PREPAQ_MIC     PRE,
                 VW_DATACRED    VDC,
                 VW_CNCH_MPIO   CNCH  
            WHERE
                PRE.CLNS = VDC.CLNS AND PRE.CDGCLNS = VDC.CDGCLNS AND PRE.CICLO = VDC.CICLO AND PRE.CDGCL = VDC.CDGCL
                AND VDC.CDGEF = CNCH.CDGEF AND VDC.CDGMU = CNCH.CDGMU
                AND TRIM(PRE.APOYO) IS NULL
    ) SET PRE_APOYO = APOYO_CNCH

Sin embargo al ejecutar el script señala el siguiente error:

ORA-01031: Privilegios insuficientes.

La vista fue creada por el mismo usuario que lo ejecuta (FIRA) y tienen permiso de crear tablas (grant create table to FIRA)

Ojala me puedas ayudar

Saludos!

In reply to by arzamm@yahoo.com

No sé si la manera en que están definidas las vistas puedan influir en algo, y también es importante que te asegures de que la correspondencia de valores en la join es de 1 a 1.

Para localizar el problema yo probaría a simplificar la consulta. Para saber si tiene alguna relación con las vistas podrías crear tablas físicas a partir de los valores de una consulta de las vistas, y validar sobre estas tablas que no tengas registros duplicados antes de probar el update con las tablas.

Otra cosa que te podría afectar es el IS NULL mezclado con las joins. Puedes definir las joins en formato FROM .. INNER JOIN .. ON, como en el ejemplo, y dejar TRIM(PRE.APOYO) IS NULL sólo en la parte del WHERE.

Espero que localices pronto dónde está el problema, y que nos lo expliques.

Un saludo,

In reply to by Carlos

En mi caso me daba el error: 

Error SQL: ORA-01031: privilegios insuficientes 01031. 00000 -  "insufficient privileges".

La causa es que tenia dos esquemas diferentes y en uno de ellos no tenia permisos de escritura sobre una de las tablas. Al sacar los datos del esquema que no tenia permisos, para una tabla temporal en el esquema que si tenia permisos, hizo el update correctamente, ya con las dos tablas en mi mismo esquema.

Hola se agradece este bypass.

Justamente tenía que actualizar unas tablas que tenian correlativos repetidos y tenian que ser secuenciales, realicé una tabla temporal y despues aplicar un update. De igual forma tenia que hacer un procedimiento almacenado pero en fin... con este bypass, todo bien. 

El tiempo de respuesta en la actualizacion el descuebe GRACIAS!!! 

gracias.

atte.

Maricela de CHILE

Gracias.

Lo utilice para una actualizacion de varios campos y se comporto de maravilla.

 

In reply to by Luis H (not verified)

Utilice un script con este hint /*+BYPASS_UJVC*/ y funciona una muy bien... Bajo un script de 9 hs a 6 segungos....
Pero cuando lo quiero utilizar dentro de un Package aparece un error "PL/SQL: ORA-01031: Insufficient privileges"
¿ALGUIEN PUEDE AYUDARME CON ESTE TEMA?

DESDE YA MUCHAS GRACIAS.

In reply to by bardellica (not verified)

Bueno lo mas probable es que sea esto, mira una cosa son los permisos que tienes tu o tu usario y otra los permisos que tiene el paquete por ejemplo digamos que tu tienes el usuario au0001 y cuando corres esto si puedes hacerlo debido a tus permisos, pero cuando pones esto dentro del paquete que esta en el esquema au0002 y dicho esquema no tiene esos priviliegios, pues es claro que te truena aun si tu como usuario au0001 si tengas el permiso y seas tu el que corre el paquete , el paquete truena por ser el o su esquema mejor dicho el que no tiene los permisos.

Hola intente hacerlo de las dos maneras, el update tradicional y con el hint, con el primero se tarda bastante, lo cancele, con el segundo me marca el error ORA-01031 - Insufficient privileges, lo estoy haciendo en el mismo esquema, la tabla de la que quiero actualizar tiene llave unique en el campo que uso para unir con la tabla que tiene la información ¿A que se debe que con uno no me marque el error y con el segundo si?

Muchisimas gracias por tu aporte, estoy iniciando con Oracle y fue muy útil tu ayuda!!!! que tengas un excelente día!

Me ha servido su update con join y el hint, ¡muchas gracias por su aporte!

La explicación es muy buena y me ha servido en varios proyectos cuando la base de datos es Oracle 10g, sin embargo en Oracle 11g el hint ha desaparecido y no se puede utilizar, he leído algo acerca del tema y en todos lados lo que dice es que debo cambiar la instrucción y no utilizar más el hint bypass_ujvc.

¿Como han hecho para mitigar la eliminación del hint? ¿Es correcto mejor hacerlo por merge?

Gracias!

In reply to by Diego (not verified)

Pues sí, si a partir de la versión 11g R2 el HINT BYPASS_UJVC ya no es válido porque Oracle lo ha dejado como deprecated hay que dejar de utilizarlo, y además hay que tenerlo en cuenta en upgrades o migraciones desde versiones anteriores, ya que si se utilizaba este HINT en versiones anteriores a la 11g, al lanzar las queries que contengan el hint BYPASS_UJVC el analizador devolverá un error y la query fallará.

Una buena alternativa, tal como ya apuntas, es utilizar un MERGE para este tipo de operaciones en que se haya recurrido al HINT al no disponer de una clave primaria para el campo por el que se hace la join de la SELECT del UPDATE, aunque si se puede conseguir la clave primaria o única para ese campo, seguramente el UPDATE será más rápido.

Al utilizar el MERGE, hay que asegurarse igualmente de que la JOIN entre tabla origen y destino sea INNER, que no existan duplicados en las tablas para esos registros, porque entonces podemos encontrarnos el error ORA-30926, o efectos inesperados en los resultados. Si se diera el caso, habría que anular los duplicados eliminándolos antes de hacer la join, o modificando la query añadiendo un group by para aplicar un SUM, MAX, MIN u otra operación sobre el campo con valores duplicados.

 


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.


Hola!

Necesito algo de ayuda con un Update de toda una columna..

La idea es actualizar la columna reintegro de la tabla tarjeta, la cual está relacionada con otras tablas (empresa, certificado,persona,institucion) donde ley=S de la tabla institucion

Les comento las consultas que he realizado sin éxito:

==================
update tarjeta set reintegro ='0'
where (select reintegro, ley_anterior from tarjeta , institucion where ley='S')
==================
==================
Update tarjeta SET reintegro= '0'
INNER JOIN empresa on tar_emp_codigo = empcodigo
INNER JOIN certificado on empcodigo = cem_empcodigo
INNER JOIN persona on per_documento = cem_perdocumento
INNER JOIN institucion on per_inscodigo = inscodigo
WHERE (ley='S')
==================

Me podrían ayudar?

Gracias

Hola buenas tardes, no se si este sea el tema correcto pero tengo una problema muy extraño, tengo una tabla la cual si le hago un select con el esquema propietario de devuelve los datos correctamente pero al tratar de hacer un insert o un update con el mismo propietario me dice que tabla o vista no existe. no se si me pueden ayudar a descubrir el problema. tengo oracle 11gR2.

Hola, me ha sido muy útil este foro, acá encontré la solución a mi problema. Gracias! SALUDOS!! ;)

Vistas materializadas de Oracle para optimizar un Datawarehouse

Vistas materializadas de Oracle para optimizar un Datawarehouse Carlos Wed, 08/13/2008 - 09:21

Como las cargas de un Data warehouse se realizan de manera periódica, y además es habitual la creación de tablas agregadas para mejorar la eficiencia y tiempo de respuesta de nuestros informes, un recurso de optimización física que puede aportar grandes mejoras es la utilización de vistas materializadas.

Qué es una vista materializada 

La vista materializada no es más que una vista, definida con una sentencia SQL de Oracle, de la que además de almacenar su definición, se almacenan los datos que retorna, realizando una carga inicial y después cada cierto tiempo un refresco de los mismos.

Vistas materializadas en Oracle Enterprise Manager

Así, si tenemos un Datawarehouse que se actualiza diariamente, podríamos utilizar vistas materializadas para ir actualizando tablas intermedias que alimenten nuestros esquemas de DWH, o directamente para implementar tablas agregadas que se refrescarán a partir de nuestras tablas base. 

La creación de este tipo de vistas con Oracle SQL no es tan compleja como puede parecer, lo más importante es tener claro cada cuánto tiempo queremos actualizar la información de las vistas, y qué método de refresco utilizar.

También tendremos que asegurarnos de que nuestra licencia de base de datos nos permite utilizarlas (ha de ser una versión Enterprise).

 

Sintaxis básica de Oracle SQL para la creación de una vista materializada

CREATE MATERIALIZED VIEW mi_vista_materializada
 [TABLESPACE mi_tablespace]
 [BUILD {IMMEDIATE | DEFERRED}] 
 [REFRESH {ON COMMIT | ON DEMAND | [START WITH fecha_inicio] NEXT fecha_intervalo } | 
          {COMPLETE | FAST | FORCE} ] 
 [{ENABLE|DISABLE} QUERY REWRITE] AS 
     SELECT t1.campo1, t2.campo2 
     FROM mi_tabla1 t1 , mi_tabla2 t2 
     WHERE t1.campo_fk = t2.campo_pk AND …

 

Comentarios sobre las diferentes opciones de la sentencia Oracle SQL de creación de la vista:

  • Carga de datos en la vista

BUILD IMMEDIATE:
  Los datos de la vista se cargan en el mismo momento de la creación

BUILD DEFERRED:
  Sólo se crea la definición, los datos se cargarán más adelante. Para realizar esta carga se puede utilizar la función REFRESH del package DBMS_MVIEW:
      begin
         dbms_mview.refresh('mi_vista_
materializada');
      end;
 

  • Método y temporalidad del refresco de los datos

 Cada cuánto tiempo se refrescarán:

    REFRESH ON COMMIT:
      Cada vez que se haga un commit en los objetos origin definidos en la select 

      REFRESH ON DEMAND:
        Como con la opción DEFERRED del BUILD, se utilizarán los procedures REFRESH, REFRESH_ALL_MVIEWS o REFRESH_DEPENDENT del package DBMS_MVIEW 

        REFRESH [START WITH fecha_inicio] NEXT fecha_intervalo:
          START WITH indica la fecha del primer refresco (fecha_inicio suele ser un SYSDATE)
                          NEXT indica cada cuánto tiempo se actualizará (fecha_intervalo podría ser SYSDATE +1 para realizar el refresco una vez al día)

         

        • De qué manera se refrescarán

        REFRESH COMPLETE:
        El refresco se hará de todos los datos de la vista materializada, la recreará completamente cada vez que se lance el refresco

        REFRESH FAST:
        El refresco será incremental, es la opción más recomendable, lo de fast ya da una idea del porqué.
        Este tipo de refresco tiene bastantes restricciones según el tipo de vista que se esté creando.
        Se pueden consultar en General Restrictions on Fast Refresh de la documentación oficial de Oracle

        Una de las cosas importantes a tener en cuenta es que para poder utilizar este método casi siempre es necesario haber creado antes un LOG de la Vista materializada, indicando los campos clave en los que se basará el mantenimiento de la vista.

        Se utiliza la instrucción de Oracle SQL "CREATE MATERIALIZED VIEW LOG ON":

           CREATE MATERIALIZED VIEW LOG ON mi_tabla_origen      
           WITH PRIMARY KEY      
           INCLUDING NEW VALUES; 

        REFRESH FORCE:
        Con esta opción se indica que si es posible se utilice el metodo FAST, y si no el COMPLETE. 

        Para saber si una vista materializada puede utilizar el método FAST, el package DBMS_MVIEW proporciona el procedure EXPLAIN_MVIEW 

        • Activación de la reescritura de consultas para optimizar el Data warehouse

        ENABLE QUERY REWRITE:
        Se permite a la base de datos la reescritura de consultas

        DISABLE QUERY REWRITE:
        Se desactiva la reescritura de consultas

        La opción QUERY REWRITE es la que más vamos a utilizar si queremos las vistas materializadas para optimizar nuestro Data warehouse.
        Esta opción permite crear tablas agregadas en forma de vistas materializadas, y que cuando se lance una SELECT la base de datos pueda reescribirla para consultar la tabla o vista que vaya a devolver los datos solicitados en menos tiempo, todo de manera totalmente transparente al usuario

        Lo único que hay que hacer es crear las tablas agregadas como vistas materializadas con QUERY REWRITE habilitado.

         

        Ejemplos de vistas materializadas de Oracle

        Son muchas combinaciones, pero la sentencia final no es tan compleja.

         

        Primer paso de la ETL de un Data warehouse

        Si quisiéramos crear con SQL de Oracle una vista materializada de una tabla que se refresque un día a la semana, y de manera incremental haríamos lo siguiente: 

        CREATE MATERIALIZED VIEW LOG ON mi_tabla_origen
        WITH PRIMARY KEY INCLUDING NEW VALUES;
        
        CREATE MATERIALIZED VIEW mi_vista_materializada
        REFRESH FAST NEXT SYSDATE + 7 AS
           SELECT campo1, campo2, campo8
           FROM mi_tabla_origen
           WHERE campo2 > 5000;

         

        Esta vista podría servirnos para alimentar la carga de un Data Mart que se realizara semanalmente. Podríamos programarla para que se refrescara justo antes del inicio del proceso de carga, o como primer paso en la ETL, y ya tendríamos los datos necesarios actualizados, e independientes del origen de datos (no tendríamos que molestar más al operacional). Otra ventaja a tener en cuenta es que si hay algún problema con el acceso a los datos de origen, si no los hemos eliminado, en la vista materializada aún tendremos los datos del último refresco, con lo que aunque el refresco fallara no nos encontraríamos un error que truncara la carga de nuestro Data Warehouse, o una tabla vacía.

        Por supuesto, en las condiciones del WHERE de la sentencia SQL de creación podríamos seleccionar sólo los registros necesarios, sólo los del último mes, etc.

         

        Tablas agregadas para optimizar el Data Warehouse

        Otro ejemplo importante sería la utilización de vistas materializadas para la creación de tablas agregadas. 

        -- Oracle SQL para crear agregadas con materilized views
        CREATE MATERIALIZED VIEW ventas_agregadas_mv
        BUILD IMMEDIATE REFRESH COMPLETE
        ENABLE QUERY REWRITE AS
           SELECT id_producto, sum(importe) total_ventas
           FROM ventas GROUP BY id_producto;

         

        Con esta sencilla sentencia de Oracle SQL se crearía una tabla agregada de total de ventas por producto de una supuesta tabla de ventas que seria la tabla de hechos.

        A nivel de sesión también habría que asegurarse de que la opción QUERY_REWRITE estuviera activada. Por si acaso, desde SQL Plus, se puede habilitar con la sentencia SQL:

        SQL> ALTER SESSION SET QUERY_REWRITE_ENABLED=TRUE;

        Si ahora dentro de esta sesión se ejecuta la sentencia SQL

        SQL> SELECT sum(importe)
             FROM ventas;

        la base de datos preparará el plan de ejecución teniendo en cuenta la vista materializada creada e internamente realizará la selección sobre la vista ventas_agregadas_mv.

        Una manera sencilla de comprobarlo, aparte de examinar el plan de ejecución, o de comparar tiempos antes y después de la creación de la vista, o desactivando el QUERY_REWRITE, es comprobar que esta query SQL devuelve resultados en el mismo tiempo que la query

        SELECT sum(importe)
        FROM ventas_agregadas_mv;

         

        Para consultar más detalles, o la sintaxis SQL completa de la creación de vistas materializadas Oracle, el capítulo Create Materialized View del manual de referencia SQL de Oracle es un buen recurso.

        Con Oracle Enterprise Manager (OEM), o con la consola web de la base de datos también se pueden crear las vistas materializadas de una manera más asistida, pero igualmente es importante tener claros los conceptos antes de hacerlo.

        Vistas materializadas en Oracle Enterprise Manager

         

         


        Libros de Administración Oracle (DBA) y PL/SQL

        ¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.

        Los libros que ves a continuación son una selección de los que a mi me parecen más interesantes para aprender administración y desarrollo PL/SQL, teniendo en cuenta precio y temática, espero que te puedan ser de utilidad:

        • eBooks de Oracle gratuítos para la versión Kindle, o muy baratos (menos de 4€):

        Instalaciones y sistemas

        Instalaciones y sistemas Dataprix Tue, 09/08/2009 - 09:52

        Bases de datos embedded: Apache Derby y Sleepy cat

        Bases de datos embedded: Apache Derby y Sleepy cat alone Fri, 02/09/2007 - 16:19

        Cuando hablamos de bases de datos, normalmente nos imaginamos un gran servidor, com grandes cantidades de información en su interior. Ahora bien, también existen bases de datos minúsculas para entornos donde el espacio, tanto de almacenaje como de proceso, es muy importante.

        Dentro del proyecto Apache existe un proyecto llamado Derby. Derby es una base de datos relacional, implementada totalmente en Java que tiene la particularidad del pequeño tamaño que supone. Sun, a partir de Apache Derby, ha desarrollado su propia base de datos llamada JavaDB.

        Así mismo, Oracle ha adquirido la base de datos Sleepy cat, desarrollada incialmente en la universidad de Berkeley.

        Em ambos casos, sorprende el rendimiento, tanto en velocidad como en capacidad, y la funcionalidad.

        Crear BD Oracle en Windows y Linux

        Crear BD Oracle en Windows y Linux cfb Tue, 02/13/2007 - 01:22

        En el site www.ajpdsoft.com se publica el manual online Instalacion Oracle 9i sobre Windows, donde se explica paso a paso y con captura de pantallas cómo instalar una BD Oracle 9i sobre windows, cómo solucionar algunos de los errores típicos que suelen aparecer durante la instalación, cómo levantar el listener, comprobar el estado de la base de datos, y alguna cosa más..

        Instalación de Oracle 10g Express bajo Debian

        Instalación de Oracle 10g Express bajo Debian sabueso Sun, 08/20/2006 - 04:55

        La gente de Debian Administration nos muestra como instalar en pocos pasos un Oracle 10g Express.
        El proceso de instalacion se realiza via Apt , y tb nos explican como dejarlo a punto para su utilizacion.
        El articulo podemos encontrarlo aqui

        Instalación de una base de datos Oracle sobre Linux

        Instalación de una base de datos Oracle sobre Linux Carlos Mon, 07/14/2008 - 18:14

        Para instalar una base de datos Oracle sobre una distribución Linux lo mejor es seguir las indicaciones de Oracle. En Oracle by example - Oracle database 10g on a single instance Oracle explica de una manera bastante clara cómo hacerlo.

        Una cosa importante a tener en cuenta es que cada distribución LINUX tiene sus peculiaridades, y que no todo sirve para todas. Lo más recomendable es utilizar las que están certificadas por Oracle, eso no garantiza que no surgan problemas, pero por lo menos Oracle los documenta. Oracle suele certificar para distribuciones SUSE en su versión empresarial (SLES) y RedHat.

        Una buena opción, si queremos tener lo más parecido a las versiones empresariales, y poder ir actualizando nuestro SO, puede ser utilizar Open SUSE o CentOS. Otra puede ser utilizar su propia distribución Oracle Enterprise Linux

         

        Saludos, Una consulta tengo un campo tipo long en una tabla,

        como hago para mostrar el contenido de este campo en una instrucción

         select

        Gracias.

        In reply to by Yamil

        Buenas, El tipo de datos long puede quedar obsoleto en futuras versiones de oracle, en la documentación de la versión 9 ya avisaban de ello... http://docs.oracle.com/cd/A91202_01/901_doc/server.901/a90120/ch4_dep.htm En su lugar deberías usar si puedes datos de tipo lob o clob. Para poder seleccionar valores puedes hacer algo como usar uan tabla intermedia donde conviertes el long o a saco con la funcion to_lob... Lo que hacen aqui: nadaenespecial.com.ar/2009/06/10/usar-long-varchar-en-oracle/ Saludos,

        Instalación desatendida Oracle Express Edition - Oracle XE silent mode installation

        Instalación desatendida Oracle Express Edition - Oracle XE silent mode installation Oscar_paredes Fri, 10/12/2007 - 11:42

        Debido a la gratuidad de esta versión de Oracle suele ser común su uso para instalaciones masivas en múltiples PC's, TPV's...

        Este artículo orientado a DBA's de Oracle y desarrolladores resume brevemente como realizar una instalación desatendida de Oracle XE.

        Esta instalación es tan sencilla como ejecutar el instalador de Oracle XE con los siguientes parámetros:

        &gt; oraclexe /s /f1"fichero_respuesta.iss" /f2"fichero_de_log"

        El primer fichero indica los parámetros básicos de la instalación, y el segundo será el log resultante de la instalación.

        Los parámetros configurables en el fichero de respuesta de la instalación son:

        ** szDir - Path de instalación del software y de ficheros de datos

        ** TNSPort - Puerto Listener BBDD

        ** MTSPort - Puerto MTS

        ** HTTPPort - Puerto HTTP consola

        ** SYSPassword - Password del usuario SYS

        ** bOpt1 - 1 or 0 : Ejecución o no al final de la consola a través del navegador

        El resultado de la instalación se puede consultar en el fichero de log. Sin embargo, en caso de problemas este fichero no resulta muy útil, para ello se puede consultar el fichero generado en el directorio %systemroot% (en Windows C:\WINDOWS).

        Además de una instalación desatendida también es posible realizar una desinstalación o reparación desatendida.

         

         

        Oscar Paredes

        IT Manager
        Oracle DBA

        oscar.paredes@dataprix.com

         

         

        Attachment Size
        oraclexe_response.txt 162 bytes

        Y si el valor de los parámetros fuera el mismo en la nueva instalación (path, puertos, etc), funcionaría la nueva base de datos copiando directamente los ficheros de una BD vacía (o con datos, según interese más) en la máquina destino?

        Obviamente antes pararíamos la BD origen.

        A ver, aclarando algunas cosas:

        oraclexe /s /f1"fichero_respuesta.iss" /f2"fichero_de_log"

        oraclexe = el archivo ejecutable, en algunos casos se llama setup.exe

         

        Luego, tener cuidado con el fichero.log, que de forma predeterminada puede que no siga la secuencia de la instalación.

        Para asegurarnos de que la secuencia es correcta, mejor ejecutar: setup.exe /r     

         

        Bajo dicho comando hacemos la instalación y terminada la misma obtendremos un nuevo archivo: setup.iss dentro de la carpeta TEMP o Windows,

         

        LAMP o LAOP

        LAMP o LAOP Oscar Mon, 07/07/2008 - 23:06

        Navegando por la red he encontrado en PHP y otras yerbas un artículo que habla de un manual de PHP y Oracle. Conocía las siglas LAMP, pero no las siglas LAOP.

        Resumiendo, un manual sencillo y creado por el equipo de Oracle para todos aquellos que tienen pensado una posible migración de MySql a Oracle en su gestor de contenidos, sobre todo, los de caracter empresarial.

         

        Qué bueno, también puede ser útil para quien piensa que conectar con Oracle desde PHP es complicado ;)

        Ahora sólo falta que los proveedores de hosting incluyan un Oracle XE en sus paneles de control

        Oracle RAC One Node

        Oracle RAC One Node Oscar_paredes Fri, 05/13/2011 - 12:14

        In Oracle 11g release 2, Oracle introduced a new product Oracle Real Application Clusters One Node (Oracle RAC One Node)

        A rapid definition of the product is:

        An Oracle RAC' s instance but executed in one single node. May be run on different physical servers, not only one (this is common) but a database instance is running only on the same node  simultaneously  (* but we'll see later that this is not completely true).

        It's more easy to understand seeing this diagram:

        One Oracle RAC Node

        In this scheme, we have 3 physical servers containing 5 total instances running on  Oracle RAC One Node .  Each node has an OS, so there aren't different virtual machines.

        The most notable advantages are:

        • It enables high availability of a database instance, both server failure, or DB level (for example, VMware only provide hardware-level server). That is, in the example above, a fall or a problem of unavailability of Server 2, would make the database DB-C moved to another physical server automatically.
        • Allow distribution of physical resources online (Instance Caging). For example, in the example above,  if Server 1 had 4 physical processors, we could allocate 3 to that DB-A instance and only assign 1 to the DB-B instance . Furthermore, it could allocate dynamically without restart, if any instance needs more processor.
        • In case of manteinance of a physical server (eg, by need of applying patches, it may move its instances dynamically and without loss of service. This feature is done by Oracle Omotion. To avoid loss of service, during brief instants, Oracle RAC One Node runs a new instance on target server, so in that period time there are 2 instances on the same database (like Oracle RAC).
        • It can upgrade Oracle RAC at any time without service interruption.

         

        As you can see, the storage should be shared.

         

        Like Oracle RAC, Oracle RAC One Node clustering software uses Oracle Clusterware to control clusterized resources in the different nodes.This does, of course, that compatibility with other clustering software (Veritas, Sun Cluster, etc. ..) is not possible.

         

        To sell the product, Oracle insists on the advantages of having n-physical machines Oracle RAC One Node compared to having them in a VMware farm. These advantages can be summarized as follows:

        • More efficient use of resources, by not using the hypervisor layer.
        • Easy patches installation (except operating systems and ability to change the server that manage the service)
        • CPU Dynamic modification without having to reboot.

        The licensing is cheaper than Oracle RAC, so this product can be seen as a lower-cost approach, and later upgrade to Oracle RAC:

         

        I hope you find it useful.

        Oscar Paredes - oscar.paredes @ dataprix.com

         

        Oracle XE, la base de datos gratuita de Oracle

        Oracle XE, la base de datos gratuita de Oracle Carlos Fri, 12/29/2006 - 00:34

        Oracle ofrece una versión gratuita de su base de datos, con el principal objetivo de introducir en el 'mundo Oracle' a desarrolladores, DBAs, estudiantes y formadores, y vendedores de hardware y software que quieran distribuir junto con sus productos una base de datos sin costes de licencia. El producto es Oracle 10g Express Edition (Oracle Database XE) y, obviamente, tiene sus limitaciones.

        Sólo puede utilizar 1 procesador del servidor donde esté instalada, un máximo de 1 Gb de RAM, y tiene limitado el almacenamiento a 4 Gb de datos de usuario. Cuando se superen estas limitaciones, Oracle ofrece un sencillo proceso de actualización a otras versiones más completas, y en las que sí que hay que pagar licencias.

        De todas maneras es una opción muy válida para quien quiera practicar con bases de datos Oracle, o para quien necesite una base de datos limitada en cuanto a tamaño, pero fiable y eficiente, y gratuita.

        Con la base de datos, Oracle incluye también Oracle Application Express, un entorno sencillo e intuitivo que permite realizar gráficamentes las tareas básicas de administración de la base de datos.

        Se puede descargar esta base de datos, o consultar información más concreta sobre la misma en Oracle Database XE.

        Recomiendo consultar antes de la instalación el Datasheet de Oracle Database XE, y las características de Oracle Application Express.

         

        Oracle sobre Linux

        Oracle sobre Linux Carlos Thu, 08/17/2006 - 21:40

        Tradicionalmente las bases de datos Oracle de una cierta envergadura se han ido instalando sobre servidores con SO UNIX, y también sobre sistemas servidores windows.

        Con el reconocimiento de Linux como un SO suficientemente fiable para su utilización en grandes servidores, las grandes corporaciones comienzan a plantearse la utilización de este sistema por la flexibilidad, y acceso al código fuente que ofrece, y por la ausencia de costes en licencias.

        Así, una opción que cada vez ganará más adeptos es la instalación de BBDD Oracle sobre Linux.

        En el caso de éxito descrito por Oracle en el pdf adjunto se muestra el interesante ejemplo del Grupo Gas Natural, donde se tomó la decisión de migrar la base de datos Oracle que albergaba el Data Warehouse corporativo desde potentes máquinas en plataforma UNIX a servidores más modestos en cluster sobre una plataforma Linux.

        Concretamente, la base de datos se migró a Oracle 9i con Real Application Cluster sobre Linux RedHat.

        Con esta solución se consiguió una reducción de los costes, a la vez que mejoraban tanto el rendimiento como la escalabilidad del sistema.

         

        Oracle-on-Linux VMware Tool Kits

        Oracle-on-Linux VMware Tool Kits drakon Tue, 05/15/2007 - 23:18

        Estaba navegando por la web de Oracle, concretamente unos apartados para principiantes como yo: "Getting Started". Éstos apartados te guían en muchos temas, incluso puedes encontrar un buen checklist de configuración de seguridad, para principiantes.

        Además de ésto he encontrado unos Tool Kits para que en poco tiempo puedas montarte en tu escritorio Windows una VMWare con GNU/Linux y con el Oracle Database 10g preconfigurado. Los Tool Kits están disponibles con Red Hat o Novell. Y además viene acompañado de una guía que explica incluso cómo instalar VMWare.

        Todo ésto bajo licencia de evaluación está claro. Si hay alguien que lo ha probado o que lo va a testear, que exponga sus opiniones al respecto.

        Ya está disponible Oracle 10g para Windows Vista

        Ya está disponible Oracle 10g para Windows Vista Carlos Wed, 05/30/2007 - 22:27

        Para los que quieren estar siempre a la última y para los amantes del riesgo, desde el 4 de mayo está disponible la última versión del servidor de base de datos de Oracle para Windows Vista. Se puede descargar en Oracle Database 10g Release 2 para Windows Vista

        Si alguien se anima y la prueba puede ser interesante cualquier comentario al respecto..

        hola nesecito que me ayuden tengo instlado el oracle 10.2.0.2 y nesecito pasarlo a oracle 10.2.0.3 debido a que se trabajara en windows vista..espero me ayudes

        Resolución de Bugs y Errores

        Resolución de Bugs y Errores Dataprix Tue, 09/08/2009 - 09:55

        10 bugs de Oracle en 10 minutos

        10 bugs de Oracle en 10 minutos sabueso Fri, 09/07/2007 - 19:11

        Cesar Cerrudo, de Black Hat muestra como con herramientas libres buscar bugs dentro de una base de datos.
        La noticia , aqui

        Las herramientas utilizadas para detectar estos bugs son Process Explorer, WinObj, Pipeacl, and Interactive Disassembler (IDA), y la plataforma utilizada un Windows.
        Ahora están investigando si estos problemas de seguridad son de la base de datos o del propio Windows, que nos avise quien se entere de las conclusiones.

        De todas maneras detectar problemas de seguridad en un software que corra bajo esta plataforma es importante, pero no me parece un gran hallazgo.

        A ver si alguien se anima a encontrar otros 10 bugs sobre la versión 10g de Oracle sobre UNIX, o incluso la de LINUX y nos lo cuenta..

        Carlos Fernández

        Analista de sistemas

        El error ORA-30926 como resultado de una operación Merge

        El error ORA-30926 como resultado de una operación Merge Carlos Tue, 02/17/2009 - 22:01

        El error ORA-30926 suele producirse cuando se realizan operaciones Merge, y lo normal es que nos deje algo descolocados, ya que la descripción del mismo no da demasiada información sobre lo que está pasando:
        ORA-30926: unable to get a stable set of rows in the source tables.

        Normalmente este error se produce cuando en la operación Merge a una fila destino que hay que actualizar le corresponden más de una fila en la tabla origen. Como el motor no sabe qué registro escoger devuelve un error. Es un problema de duplicidad en la tabla origen.

        Ejemplo:

        • Tenemos:
          TABLA_ORIGEN con los valores
          ID    Descripcion
          1     'El primer valor'
          1     'El valor con id duplicado'
          2     'Otro valor'

          Y TABLA_DESTINO con los valores
          ID   Descripcion
          1    'Valor a actualizar'
          2    'Este no dará problemas'
          3    'Este se queda igual'
           

        • Queremos hacer un merge utilizando la siguiente sentencia:

              MERGE into TABLA_DESTINO dest 
              USING TABLA_ORIGEN ori ON (dest.ID = ori.ID) 
              WHEN MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;

        Con estos datos obtendríamos el siguiente error sobre TABLA_ORIGEN:
        ORA-30926: no se ha podido obtener un juego de filas estable en las tablas de origen

         

        • Ante este error tenemos 3 opciones:

          1-. Eliminar los registros duplicados de la tabla origen:

               DELETE FROM TABLA_ORIGEN WHERE id=1 AND Descripcion='El valor con id duplicado'
         

        2-. Revisar las claves por las que hacemos la join en el merge:

        Si utilizamos también el campo Descripcion en el enlace ya sólo habrá cero o un registro origen para cada destino:

              MERGE into TABLA_DESTINO dest 
              USING TABLA_ORIGEN ori ON (dest.ID = ori.ID AND dest.Descripcion=ori.Descripcion) 
              WHEN MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;
        

        (En este ejemplo no tiene mucho sentido porque la tabla son sólo estos dos campos, y además la join no encontrará coincidencias)

         

        3-. Utilizar en lugar del MERGE un UPDATE con JOIN y el HINT /*+BYPASS_UJVC */  para saltarnos la validación del motor, y cruzar los dedos:


        UPDATE /*+ BYPASS_UJVC */
        ( SELECT ori.ID ori_ID,
        ori.Descripcion ori_Descripcion,
        dest.ID dest_ID,
        dest.Descripcion dest_Descripcion
        FROM TABLA_ORIGEN ori, TABLA_DESTINO dest
        WHERE ori.ID = dest.ID)
        SET dest_Descripcion = ori_Descripcion;

         

        Obviamente las más recomendables son la primera o la segunda, según el caso. La tercera opción, desde que la versión 11g R2 de Oracle ya no acepta el hint BYPASS_UJVC por considerarlo Deprecated, es ya totalmente desaconsejable para entornos de producción porque aunque ahora funcione por ser versiones anteriores a la 11g, las queries que incorporen este hint fallarán cuando se actualice la base de datos a una versión a partir de la 11g R2.

        Otra buena opción para evitar el error ORA-30926 en operaciones de MERGE es modificar la sentencia aplicando un distinct para evitar los duplicados, o utilizando un group by y una función de agregación Min, Max o Sum, por ejemplo, sobre los campos que contengan los valores duplicados.

         

        ORA-01555 Snapshot too old

        ORA-01555 Snapshot too old il_masacratore Tue, 08/11/2009 - 16:37

        ORA-01555 Snapshot too old

        La base de datos de una compañia normalmente tiene que aguantar algunas transacciones largas y pesadas. Si la base de datos es Oracle, está recien instalada y poco manipulada esas transacciones y sus primeras ejecuciones tienen pocas probabilidades de éxito. Es entonces cuando acaba apareciendo el fatídico ORA-01555, alias "... snapshot to old".

        La gestión de consultas largas en Oracle viene limitada por el tamaño del tablespace de deshacer (undotbs). A mayor tamaño sera posible gestionar las transacciones más largas y pesadas. En Oracle 10g recien instalado el tamaño de este tablespace se reducido y uno no se suele dar cuenta hasta que falla la cosa.

        Si la versión es la 10 se puede modificar directamente desde Oracle Enterprise Manager (consola web) en el apartado de administración, "Gestión de Deshacer". Allí tenemos el tiempo de retención, el tamaño del tablespace y podemos usar también el asesor para ver el tiempo de retención posible en base al tamaño en mb del tablespace.

        Algo así:

        Tunning advisor

         

        En resumidas cuentas, le asignamos un tamaño mayor al tablespace que tengamos de "deshacer" y a ver si vale...

        Para más información dejo aquí el Link de Oracle: http://www.oracle.com/technetwork/oramag/index.html

        Ora10g: TNS-12518 Listener could not hand off client connection

        Ora10g: TNS-12518 Listener could not hand off client connection il_masacratore Mon, 09/13/2010 - 17:07

         

        Cuando se produce este error el listener de nuestra base de datos Oracle está rechazando conexiones y no nos podemos conectar de ninguna manera con la base de datos. Para ver que está pasando podemos consultar el log del listener en /opt/oracle/product/10.2/db_1/network/log/listener.log para ver que nos cuenta el sistema. En el caso que nos ocupa podemos encontrar una entrada como la siguiente:

        "TNS-12518: TNS:listener could not hand off client connection"

        En el caso que me he encontrado este error puede producirse porque el número de procesos actuales de la base de datos está muy cerca del límite establecido en la configuración (por defecto 150). Inmediatamente se puede solucionar reiniciando el listener pero es recomendable revisar el valor del parámetro processes para incrementarlo. El valor máximo que le asignemos a este parámetro es trivial pero si lo modificamos debemos recalcular el valor de transacctions y sessions para que tengan en cuenta las sessiones de sistema de esta manera:

        processes=x
        transacctions=x*1.1
        sessions=(processes*1.1)+5

        Si con esto vemos que no se soluciona o queremos investigar más podemos activar la traza del listener para saber más sobre lo que acontece...

        Oracle 10g - Suse Enterprise Error Consola: java.lang.Exception: Failed to get Number of users

        Oracle 10g - Suse Enterprise Error Consola: java.lang.Exception: Failed to get Number of users Oscar_paredes Tue, 10/02/2007 - 12:48

        Este error de la consola de Oracle 10gR2 con Suse Enterprise (confirmado versión 10) hace que durante la navegación por la consola vayan apareciendo errores en la parte superior con el mensaje:

        java.lang.Exception: Failed to get Number of users

         

        La solución que puede aplicar el DBA de Oracle pasa por realizar los siguientes pasos:

        1. Parar la consola de Oracle:
          &gt;emctl stop dbconsole
             
             
        2. Ir al directorio:
                   &gt;cd $ORACLE_HOME/sysman/admin/scripts
             
             
        3. Realizar backup del fichero osLoad.pl
           
        4. Editar el fichero osLoad.pl y cambiar las siguientes lineas:
          &gt;&gt;&gt; my $loadavg = NIL;
             
          &lt;&lt;&lt; my $loadavg = "0.46, 0.66, 0.61";
             
             
          &gt;&gt;&gt;&gt; my $nusers = NIL;
             
          &lt;&lt;&lt;&lt; my $nusers = 1;
             
             
        5. Grabar el fichero y arrancar la consola
          &gt;emctl start dbconsole

         

        Oscar Paredes

        IT Manager
        Oracle DBA

        oscar.paredes@dataprix.com

         

         

        Pues si que es un incordio que nada mas instalar salga este mensaje de error. Se supone que SUSE esta certificado por Oracle para la version 10g de la base de datos, no?
        Esperemos que en la proxima release ya no pase, no afecta a nada, pero no da muy buena imagen. Es una pena, porque la nueva consola esta muy conseguida y la facilidad de administracion es realmente impresionante..

        Hace tiempo pensaba igual que tu , que una certificacion era una garantia de una "autopista de instalacion".
        Pues no , una certificacion creo que en los tiempos que corren , solo quiere decir que alguien te va a escuchar via telefonica o por correo y van a tener un contrato con la empresa N para que si el producto no tira por causas del sistema operativo , todos trabajen en conjunto para llegar a la solucion.

        Buenas noches al tratar de abrir oraclo10g me manda un error y no me permite accesar al aplicativo de antemano espero me ayuden con este error el error es el siguiente solo en algunas maquinas lo manda gracias

        error (0xc0000008) error de la aplicacion la aplicacion no se ha podido inicializar correctamente

        espero me ayuden de antemano gracias

        In reply to by Anonimo (not verified)

        Hola a todos aquí les dejo un buen link de las estupendas carreras
        ofertadas por una de las mejores universidades de Sudamérica la
        Escuela Superior Politécnica del Litoral, entren y conozcan de
        las diversas novedades q tienen para todos.

        http://www.fiec.espol.edu.ec

        christian armas

        Resolver el error “ORA-1031 – INSUFICIENT PRIVILEGES” - Oracle DBA

        Resolver el error “ORA-1031 – INSUFICIENT PRIVILEGES” - Oracle DBA Oscar_paredes Mon, 01/01/2007 - 22:42

        El error ORA-1031 - Insuficient privileges es uno de los errores más comunes que se puede encontrar un DBA de Oracle durante la conexión como SYSDBA a entornos Windows no administrados de manera cotidiana.

        Además tiene la característica de que siempre aparece cuando más puede molestar ;-)

         

        Oscar Paredes

        IT Manager
        Oracle DBA

        oscar.paredes@dataprix.com

         

         

        Otras herramientas Oracle

        Otras herramientas Oracle Dataprix Tue, 09/08/2009 - 10:00

        Las suites de Business Intelligence de Oracle

        Las suites de Business Intelligence de Oracle Carlos Wed, 10/21/2009 - 23:34

        Oracle, aparte de su famoso gestor de base de datos, dispone de un gran catálogo de productos de software, muchos desarrollados internamente y otros adquiridos mediante la compra de otras compañías. Dentro del entorno del Business Intelligence este hecho es aún más notable, ya que justamente varias de las últimas adquisiciones de Oracle han sido operaciones de compra de fabricantes de software de BI.

        El resultado es que, aunque cada herramienta de BI tiene unas características y un mercado más apropiado, existen muchos solapamientos, y cuesta un poco situarse a la hora de elegir qué software o conjunto de herramientas podríamos utilizar para nuestro proyecto de Business Intelligence.

        Para acabar de complicarlo hay que pensar también en las condiciones del licenciamiento y que el software suele comercializarse en suites que agrupan diferentes herramientas bajo un criterio que puede favorecernos o no.

        Un buen ejemplo del efecto que esta situación puede provocar es el post Confusión con Oracle Business Intelligence, de Business Intelligence fácil

        Yo tampoco soy un experto en el software BI de Oracle, pero voy a hacer un resumen de lo que conozco y me parece importante tener en cuenta de las tres suites que comercializa Oracle para Business Intelligence.

        Cabe decir que este no es el único software de BI de Oracle, y que después de la adquisición de Hyperroll aún se complicará más el panorama, pero creo que con esto analizaremos las soluciones más utilizadas.

        Las suites de BI Oracle siguen la nomenclatura de las diferentes ediciones de bases de datos que ya conocemos, por lo que ayuda mucho si ya estamos familiarizados con ella. Tenemos una Oracle BI Standard Edition 1 (BISE1), que es la más modesta y orientada a pymes. Después viene la Oracle BI Standard Edition (BISE), que en teoría correspondería a la versión intermedia. La versión más completa es la Oracle BI Enterprise Edition Plus (BIEE), orientada a la gran empresa.

         

        Oracle Business Intelligence Standard Edition (BISE)

        Comienzo con la BI Standard Edition porque se diferencia mucho de las otras dos. Esta suite es la que tiene más historia. Es la evolución de las clásicas herramientas de reporting de Oracle, con Discoverer a la cabeza. Es la que tiene el coste menor por usuario nominal, pero no incluye la base de datos. Utiliza IAS para proveer el acceso web a los informes y cuadros de mando.

        Oracle BISE Puede encajar en entornos en los que se trabaja casi exclusivamente con Oracle, y no se quiera hacer una inversión demasiado grande para el BI o el reporting. De todas maneras, aunque Discoverer ha mejorado bastante, y ahora hasta puede funcionar en modo OLAP, creo que sigue estando lejos del nivel de herramientas de BI como BI Answers o Hyperion, que Oracle ofrece en las otras suites, y que son fruto de sus adquisiciones. 

        De hecho, aunque la suite se sigue comercializando, es bastante complicado encontrarla en la web de Oracle, no parece que la intención sea apostar por ella para el futuro. 

         

        Estos son los productos que incorpora:

        Oracle Discoverer de BISE

        Oracle Business Intelligence Standard Edition 1 (BISE1)

        Esta es la suite más modesta, muy asequible para pymes. Incluye todo lo necesario para tener funcionando en poco tiempo un sistema de Business Intelligence. Eso si, se ha de instalar todo en un servidor, y este ha de ser un Windows Server.

        La licencia no permite utilizar más de dos CPU's del servidor y sólo permite utilizar otra fuente de datos directa aparte de la BD que incluye. El licenciamiento es obligatoriamente por usuario nominal, y se pueden licenciar entre 5 y 50 usuarios. La licencia es fácilmente transformable a una Enterprise, ya que esta última incluye el software de la Standard.

         

        La instalación de Oracle BISE1 se realiza fácilmente, y en un sólo proceso instala en el servidor la base de datos, la herramienta de ETL Oracle Warehouse Builder (la versión básica), el servidor de BI y el resto de aplicaciones.

        Este servidor de BI permite acceder por web a la herramienta de reporting analítico y de cuadros de mando, tanto para diseño como para explotación. Todo este entorno viene de la adquisición de Siebel que Oracle hizo ya hace algún tiempo, y su anterior denominación era Siebel Analytics.

        Es un entorno de BI muy completo y fácil de utilizar, aunque no utiliza estructuras propias de OLAP, trabaja directamente sobre el modelo Relacional de la base de datos.

         

        Las herramientas que incluye la suite son las siguientes:

        • Oracle BI Server: Acceso centralizado a los datos y motor de cálculo que se apoya en un modelo lógico de información empresarial común (nivel de abstracción de los metadatos)
        • Oracle BI Server Administrator: Creación de los metadatos y niveles de abstracción
        • Oracle BI Answers: Autoservicio ad-hoc que permite a los usuarios finales crear fácilmente diagramas, tablas dinámicas, informes y cuadros de mando, y navegar con capacidades de drill up/down.
        • Oracle BI Interactive Dashboards: Cuadros de mando interactivos para entornos de análisis.
        • Oracle BI Publisher (también conocido como XML Publisher): Reporting operacional empresarial y distribución de informes con gran nivel de detalle.
        • Oracle Database Standard Edition One: Base de datos
        • Oracle Warehouse Builder (core ETL): Diseño de base de datos y de extracción, transformación y carga (ETL) que ayuda a gestionar el ciclo de vida de los datos y metadatos.

         

        El proceso básico para llegar a crear informes analíticos o dashboards con esta suite sería:

        1. Diseño de la ETL y creación de estructuras dimensionales en tablas con OWB
        2. Definición de metadatos y capas Física, de Negocio y de Presentación con Oracle BI Server Administrator
        3. Creación de informes analíticos y cuadros de mando con BI Answers e Interactive Dashboards

        Para crear y distribuir informes operacionales se puede utilizar de manera autónoma BI Publisher.
        Los informes se diseñan con Microsoft Word o Adobe Acrobat (instalando un add-in) y después también se pueden publicar y editar mediante servidor web WebDav.
        Este software, aunque se integra con el portal de BI Dashboards es propio de Oracle, y es un poco más engorroso de utilizar. No se suele usar a menos que existan necesidades específicas que no se puedan solucionar con BI Answers. 

         

        Se puede obtener más información sobre Oracle BISE1 en la sección del producto de la web de Oracle.

        Para aprender en poco tiempo cómo empezar a trabajar con esta suite, con el apoyo de esquemas de ejemplo que se cargan al instalar el producto, recomiendo especialmente seguir el Tutorial de Oracle Business Intelligence Edition One

        Oracle BI Interactive Dashboards en BISE1

         

        Oracle Business Intelligence Enterprise Edition Plus (BIEE)

        Esta es la suite orientada a la gran empresa y a trabajar con múltiples orígenes de datos.

        Está compuesta por todas las herramientas de Oracle BISE1 (exceptuando la base de datos) más algunas complementarias aplicables al mismo entorno, y que amplian la funcionalidad de la misma con utilidades de CPM, monitorización y alertas o para poder utilizar las funciones analíticas en modo desconectado

        [[ad]] Lo del Plus viene por el software de Hyperion, que se ha añadido para ampliar más aún la funcionalidad disponible, sobretodo en cuanto a utilidades de Reporting Financiero, una de sus mejores bazas. Este software funciona muy bien en modo OLAP, aunque para ello necesita apoyarse en un motor multidimensional, y Oracle BI Server no lo es, aunque con la versión empresarial sí que se pueda conectar a motores OLAP y otros tipos de orígenes de datos . 

        En todo caso, para sacar el máximo partido a las aplicaciones de Hyperion lo más indicado es disponer de o adquirir también una base de datos MOLAP como Essbase. También se pueden utilizar otros orígenes Multidimensionales como SAP BW, o Microsoft OLAP.

         

        Si la suite se licencia por usuarios el mínimo es 50, y también se puede licenciar por procesador. No está limitada en cuanto a número de orígenes de datos, usuarios o CPU's más que por el presupuesto disponible.

        Como contiene todas las aplicaciones de la versión BISE1, especialmente el servidor de BI, el paso de la versión más modesta a la Enterprise es inmediato, aunque si se quieren utilizar las aplicaciones de Hyperion la cosa se complica un poco más.

         

        Este es el listado de aplicaciones que la componen: (marco en gris las que también forman parte de Oracle BISE1)

        • Oracle BI Server: Acceso centralizado a los datos y motor de cálculo que se apoya en un modelo lógico de información empresarial común (nivel de abstracción de los metadatos)
        • Oracle BI Server Administrator: Creación de los metadatos y niveles de abstracción
        • Oracle BI Answers: Autoservicio ad-hoc que permite a los usuarios finales crear fácilmente diagramas, tablas dinámicas, informes y cuadros de mando, y navegar con capacidades de drill up/down.
        • Oracle BI Interactive Dashboards: Cuadros de mando interactivos para entornos de análisis.
        • Oracle BI Publisher (también conocido como XML Publisher): Reporting operacional empresarial y distribución de informes con gran nivel de detalle.

        Más información en la librería de documentación online de BIEE.

        Oracle Hyperion Web Analysis en BIEE Plus

         

        Finalmente, comentar que en cuanto a los procesos de ETL, para trabajar con Oracle BIEE lo habitual es adquirir también Oracle Data Integrator ya que esta ETL está preparada para trabajar con diferentes aplicaciones y orígenes o destinos de datos, y en proyectos que utilicen la versión empresarial éste suele ser el caso.

        Oracle Warehouse Builder funciona bien y se puede utilizar libremente si se tiene alguna licencia de base de datos, pero está bastante limitado en cuanto a conectores con diferentes orígenes de datos empresariales, y el destino ha de ser siempre una base de datos Oracle. 

        Además las referencias a OWB también están comenzando a desaparecer de las listas de productos de la web de Oracle.

        De hecho pasan cosas curiosas como que si sigues un enlace a Warehouse Builder ( http://www.oracle.com/us/solutions/ent-performance-bi/index.html) te redirigen directamente a la sección de Oracle Data Integrator (http://www.oracle.com/us/products/middleware/data-integration/index.html), lo cual nos da una buena pista de la ETL de Oracle que va a evolucionar más.

         

        Coméntalo en el foro

        Como instalar ORACLE SQL DEVELOPER en Mac os x lion?

        Como instalar ORACLE SQL DEVELOPER en Mac os x lion? ades_dj Tue, 05/22/2012 - 18:42

         Hola amigos espero no causar molestias lo que pasa es qe tengoUn problema, Esque quiero instalar sql developer un Mac X lion

        Pero  no tengo idea. No se si puedan ayudarme se los agradecería  De antemano pidiendo una disculpa por mi ignorancia :(  espero me  Puedan ayudar mil gracias 

        There is no installation of SQL Developer.

         

        You simply download it from OTN and extract it to your OSX machine.

         

        To run it, you'll need the Java 1.6 JDK.

         

        To install and run: 

           - Ensure you have a JDK installed, if not, download ( https://developer.apple.com/search/index.php?q=java )(See Note
             (For 64-bit Intel Macs, download Java for Mac OS X 10.5, Update 1, 
             For the latest version of MacOS, use the Software Update feature) 
           - Download the file above 

          -  Double-click the sqldeveloper icon

         

        When you start SQL Developer it will ask where java is installed. Point to the java.exe from the JDK you just installed.

         

        Feel free to email me if you need help

         jeff.d.smith@oracle.com

         

        Product Manager

        Oracle SQL Developer

         

        Yo lo instalé en mi Snow Leopard y es como te comenta Jeff, como va sobre JAVA no debería importar mucho si es un Leopard o un Lion.

        Te enlazo la página de descarga de SQL Developer de la OTN, selecciona la versión 'Oracle SQL Developer for Mac OS X platforms', y asegúrate de tener instalado antes el JDK.

        Por si no lo has visto aún, te recomiendo consultar el artículo Oracle SQL Developer para cuando tengas que crear las conexiones a bases de datos.

         

        Saludos,

        In reply to by Carlos

         Ayuda!! Tu conseguiste instalarte el Oracle SQL Developer en Snow Leopard, como?!! yo tengo un archivo bajado de la página oficial de oracle, que se llama: sqldeveloper -3.2.20.09.87-macosx

        pero no soy capaz de ejecutarlo, tengo la versión 10.6.8

        ¿como lo hiciste tu?

        In reply to by Laila

        Tendrías que explicar el problema que tienes y concretar qué es lo que te falla para que alguien te pueda ayudar, en una instalación pueden pasar muchas cosas..

        Lo que te puedo decir es que yo me lo instalé hace mucho tiempo en un Mac OS Leopard, y la misma instalación ha pasado por las actualizaciones pertinentes hasta el actual Mac OS Lion que tengo ahora, así que no creo que el problema te venga por ahí.

        De hecho acabo de mirarlo y he de confesar que mi versión de SQL Developer es aún la 1.5.4, creo que voy a tener que encontrar un ratito para ponerme al día.

         

         gracias amigos lo acabo de instalar ahora el profesor nos dijo que deberia ahcer una conexion con sql  plus ahora em enfrento frente a otro problema pue no se como  :(

        In reply to by ades_dj

        Supongo que quieres utilizar SQLPlus para conectar con una base de datos Oracle desde el mismo Mac con Lion en el que has instalado SQL Developer.

        Necesitas Instant Client, el software 'cliente' de Oracle que contiene SQL Plus. Te enlazo la página de descarga de Instant Client en OTN, en la que has de seleccionar la versión para MAC OS.

        Configurar SQL Plus en un Mac no es igual que hacerlo en Windows o Linux. Tienes que definir variables de entorno específicas para que te funcione desde el terminal.

        En el blog PrincipiantesMac.com, en el post Instalar SQL*Plus Oracle Client en Mac, explican bastante bien cómo hacerlo. Revisa todos los pasos, pero extraigo la parte de configuración de las variables, que es la más importante:

         

        > DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Applications/instantclient_10_2 > export DYLD_LIBRARY_PATH > TNS_ADMIN=/Applications/instantclient_10_2 > export TNS_ADMIN > PATH=$PATH:/Applications/instantclient_10_2 > export PATH

         

        Espero que te sea de ayuda

         

         ya lo intente amigos lo hice de mil formas y no queda ya me desepere  :( les explico decarge el : instantclient-basic-10.2.0.4.0-macosx-x86.zip(34,109,360 bytes) "desde oracle"

        lo descompirmi en la carpeta de /aplicaciones con el nombre de instantclient_10_2

        copie las lineas mensionadas :

        DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Applications/instantclient_10_2

         

        export DYLD_LIBRARY_PATH TNS_ADMIN=/Applications/instantclient_10_2 export TNS_ADMIN PATH=$PATH:/Applications/instantclient_10_2

         

        pero no puedo sacar ni un archivo tnsnames.ora

        y en la carpeta en donde esta el instanclient solo me salen 10 objetos:

        basic redme

        class12.jar

        genezi

        libclntsh.dylib.10.1

        libnnz10.dylib

        libocci. dylib .10.1

        libociei. dylib 

        libocijdbc10. dylib 

        libocijdbc10. jnilib

        ojdbc14.jar

         

        pues bien amigos este es mi caso :( ahora otro punto si es que pudiera hacer login arrancandolo con los commando sqlplus que usuario le pongo el nombre que esoty usando de mi maguina? o creo uno nuevo,, y en e servido? dice que me lo da la primera linea del archivo tnsname.ora pero no se en donde esta

         

        porfavor amigo esperos que me ayuden soy muy burro :(  

        tengo mac os x version 10.7.4

         

        In reply to by ades_dj

        Vale, te falta descargar otro paquete con el SQL Plus, no recordaba que el Client y las librerías de SQL Plus se instalan por separado.

        En la misma página de descarga de Oracle, busca otro zip que contiene el SQL Plus. Tiene esta descripción:

        *Instant Client Package - SQL*Plus: Additional libraries and executable for running SQL*Plus with Instant Client

         

        Tanto el Client como el SQL Plus te han de servir para conectar con una base de datos Oracle que ha de estar instalada y funcionando en un servidor, o incluso en tu máquina, pero necesitas una base de datos activa para poder conectar con ella, si no SQLPlus no te va a servir de nada.

        En el TNSNAMES tendrás que informar los datos de acceso a la/s base/s de datos con las que podrá conectar SQL Plus o el cliente, pero los datos de conexión te los ha de proporcionar un administrador de la base de datos, por ejemplo. En ningún caso vas a encontrar nada en el instalador, que obviamente no puede saber con qué base de datos quieres conectar.

         

         bueno amigo creo que ya boy por buen camino ya inatle todo en apliccaciones  en instanclient_10_2

         

        para arrancarla le pongo esto:

        DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Applications/instantclient_10_2

        export DYLD_LIBRARY_PATH TNS_ADMIN=/Applications/instantclient_10_2 export TNS_ADMIN PATH=$PATH:/Applications/instantclient_10_2

        luego le pongo esto :

        MacBook-de-Vicente-Juarez:~ ades_dj$ sqlplus                               y me sale esto:

         SQL*Plus: Release 10.2.0.4.0 - Production on Tue May 29 02:23:43 2012

         

        Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

         

        Enter user-name: 

        mi rpegunta es  que usuario le pongo ? si le pongo ades_dj como yo soy ese usuario. me dipe passwor le pongo mi contraseña pero me sale esto :

        Enter user-name: ades_dj

        Enter password: 

        ERROR:

        ORA-12162: TNS:net service name is incorrectly specified

        y ahora cual sera el siguiente paso? mil gracias por su ayuda amigo espero no fastidiarlos :)

         

        In reply to by ades_dj

        Como te comentaba antes, ahora tienes las herramientas cliente Oracle SQL Developer, y SQL Plus, para conectarte a bases de datos Oracle, pero te falta la base de datos.

        Necesitas saber los datos de una base de datos Oracle (nombre de instancia, puerto de acceso, servidor..) para informarlos en el archivo TNSNAMES.ora, y después has de saber los datos (user/password) de un usuario de esta base de datos, que no tiene nada que ver con el usuario local de tu máquina.

        Si no tienes una base de datos disponible, tendrás que instalarte una, una Oracle Express Edition, por ejemplo, que es de libre utilización.

        In reply to by ades_dj

        Oracle JDeveloper? Yo diría que no. Lo que necesitas es una base de datos. No conozco mucho el producto, ni si incluye una base de datos o no, pero JDeveloper es un entorno de desarrollo.

        Te enlazo la página de descarga de OTN con la última versión de Oracle DB XE

        Lo único que verás que sólo tienes una versión para Windows y otra para Linux.

        Tendrás que instalarla en otro ordenador, o en una imagen virtual de tu Mac con Windows o Linux.

         

         gracias amigos por su ayuda se los agradesco muchisimo y saben termine mejor instalando postgres y ese es el que estoy  utilizando  :) gracias a todos por su ayuda .....

        Hola a todos: Tengo el MAC OSX 10.8.05 tengo el ordenador una semana y no se /no puedo instalar el sql developer, se me queda saltando en el dock y no ocurre nada… por lo que he leído en otros foros tengo que ir contenido de paquetes/contest…. hasta que llego a la terminal y ahí es donde debo de escribir la ubicación de java o quizás no tenga que hacer eso, no se que hacer...

        Ficheros como origen de datos en OWB

        Ficheros como origen de datos en OWB cfb Mon, 12/24/2007 - 18:46

        Tengo instalado un Oracle Warehouse Builder que está configurado 'a tres capas', con un Windows Server como BD servidora-repositorio principal, una BD destino sobre LINUX, y el cliente del Centro de Diseño un windows XP.
        He definido un origen de datos de fichero y para la conexión, en la ubicación de archivos he especificado un directorio que 've' la máquina XP.

        Esto me permite hacer todo correctamente, hasta que quiero iniciar la carga, momento en que el centro de control me devuelve el siguiente error:
        Y:\Dimensiones\Geografia\CARGA_POBLACIONES.ctl (El sistema no puede hallar la ruta especificada)

        Supongo que el problema es que hay que definir el origen del fichero con un path al que se pueda acceder desde el servidor del repositorio, o el de destino.

        Estoy en lo cierto? Con copiar los archivos a uno de estos servidores tendría suficiente para poder preparar la carga?

        Gracias por anticipado,

        Pues sí, he probado a crear un directorio en el servidor donde tengo el repositorio de Warehouse Builder, he creado una nueva ubicación de archivo especificando este path, lo he asociado al módulo del fichero, y al ejecutar la carga ya funciona correctamente.
        Problema solucionado!

        In reply to by Anonim. (not verified)

        Crea el directorio directamente desde el sistema en lugar de intentarlo desde dentro de OWB.
        Utiliza la linea de comandos con una conexión SSH o algo así y el comando

        &gt;mkdir nombre_directorio

        Después seguro que desde Warehouse Builder puedes seleccionar la ubicación.

        Instalacion de Oracle Workflow

        Instalacion de Oracle Workflow cfb Fri, 05/16/2008 - 22:48

        Para poder organizar y poder definir y automatizar flujos de proceso con los mappings de OWB hay que utilizar Oracle Workflow.

        En teoría la instalación es muy sencilla, pero yo estoy teniendo bastantes problemas. Alguien conoce una guía sobre cómo hacerlo sobre un Linux?

        Tampoco me aclaro mucho sobre las diferentes versiones que hay. Oracle lo tiene en su web directamente como producto Oracle Workflow Server, o como parte de la base de datos 10g, en el companion CD, aparte de la versión que viene embedida en Oracle E-Business Suite, que no sé si se corresponde a alguna de las anteriores o es otra 'especial'.

        Además está la opción 'stand alone' y la 'middle tier', que no sé exactamente en qué consisten cada una, ni cómo decidir cuál quiero, pero me conformo con una que me funcione en la misma base de datos, y con el Warehouse Builder que tengo también en el mismo servidor, no necesito acceder por web.

        Alguien sabe cómo lo tendría que hacer?

        Como aún no he conseguido instalar OWF en Linux sobre una SLES, he optado por hacerlo sobre un windows server 2003 que utilizo como entorno de desarrollo. Tal como sospechaba no he tenido ningún problema especial.

        He instalado una BD Oracle 10g con la configuración estándar, y después he realizado la instalación del Oracle Workflow que se encuentra en el Companion CD del software de instalación de la base de datos.

        Primero el asistente realiza la instalación del software sobre el home de la BD anterior, y después hay que ejecutar el configurador. Lo único que puede ser menos intuitivo es que donde hay que indicar el 'Descriptor de Conexion TNS' no sirve poner el SID de la instancia de la Base de datos, hay que poner el descriptor completo, tal como lo
        haríamos en el TNSNAMES (recomiendo hacerlo en una única linea, ya que los saltos de linea pueden dar problemas):

        (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =servidor)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = owfbd)) )

         

        Asistente de configuración OWF

        Tras poner correctamente esta cadena todo ha funcionado perfectamente, ahora sólo falta descubrir cómo hacerlo para completar sin errores la ejecución de este instalador en Suse Linux Enterprise Server.
        Realmente, a nivel general, con este SO certificado por Oracle me estoy encontrando demasiados problemas de instalación, y poca documentación. Esperemos que la cosa vaya mejorando..

        Por fin he podido instalar Oracle Workflow sobre Linux, y he visto que el problema no venía del SO (SLES) sino de la versión de OWF. Resulta que la base de datos es una Oracle 10g R2, y el instalador de OWF que yo utilizaba era la versión 2.6.3, y esta sólo va bien para la Release 1. Al instalar la versión 2.6.4 de Workflow todo ha ido perfectamente. Por si alguien se encuentra en la misma situación nota importante:

        • Oracle Workflow 2.6.3 se instala sobre una base de datos Oracle Database 10g Release 1 (10.1.x.x)
        • Oracle Workflow 2.6.4 se instala sobre una base de datos Oracle Database 10g Release 2 (10.2.x.x)

        Tras la instalación, antes de poder desplegar el primer flujo de procesos me ha vuelto a surgir algun problemilla que se resuelve rápidamente, pero que reproduzco para facilitar la vida al próximo que se lo encuentre:

        El idioma español no está activado en el repositorio de workflow.

        RPE-02072: No se ha activado el idioma NLS E de Oracle Workflow en el repositorio de Oracle Workflow. Actívelo utilizando el archivo de comandos del servidor wfnlena.sql de Oracle Workflow.

        Siguiendo las indicaciones del mismo mensaje de error se soluciona el tema. En mi caso el script estaba en D:\oracle\product\10.2.0\db\wf\admin\sql, se ha de buscar en el directorio de instalación de la BD donde tengamos el repositorio de OWF.
        Desde SQLPLUS, con el usuario OWF_MGR (propietario del repositorio) se ejecuta wfnlena.sql, y ya se puede desplegar correctamente:
        E:\oracle\product\10.2.0\db\wf\admin\sql>sqlplus owf_mgr/pwd@owfdb @wfnlena 'E' 'Y'
        'E' --> Idioma español
        'Y' --> YES, para marcarlo como activado

        Si no te apetece buscar donde está el script, puede ser más sencillo entrar en la BD con el usuario de workflow y simplemente ejecutar este update:
        SQL>update WF_LOCAL_LANGUAGES set
                      INSTALLED_FLAG = 'Y'
                 where CODE = 'E';

         

        Privilegios insuficientes para crear dblinks.

        ORA-01031: privilegios insuficientes
        RPE-02207: No se puede crear el enlace de base de datos DWH.DATAPRIX.COM@WB_LK_STG en el usuario de ubicación OWF_MGR. Consulte la excepción mostrada para obtener más información, asegúrese de que se ha otorgado el privilegio del sistema 'CREATE DATABASE LINK' y vuelva a intentarlo.

        Esto se soluciona abriendo una sesión en la base de datos del workflow con el usuario de sistema, y otorgando el permiso a mi usuario de workflow:
        SQL> GRANT CREATE DATABASE LINK TO "OWF_MGR";

         

        Otros detalles

        Por último, recordar que cuando se crea el usuario del workflow en el entorno de OWB hay que quitar la selección de la opción 'Used as target schema?', ya que este usuario no es de destino.

        Otro detalle importante, pero sólo si Oracle Workflow se instala en una BD diferente a la que se utiliza para Oracle Warehouse Builder, es que el usuario de Workflow (en mi caso OWF_MGR) que se crea en el entorno de OWB ha de tener el mismo PWD que el usuario OWF_MGR de la BD donde se ha instalado Oracle Workflow.

        In reply to by cfb

        Me han sido de gran ayuda vuestros posts sobre el OWF, pero ahora al usarlo necesito acceder al Oracle Workflow Manager, que está como opción en el companion CD (OWF middle tier). Pero no hay manera de que se deje instalar. Alguien lo ha instalado alguna vez con éxito ??

        In reply to by Anonimo (not verified)

         Finalmente la solución ha sido muy sencilla y es la de no usar el instalador que viene con el Companion CD de Oracle sino usar el que setup.exe del oracle que ya tenemos instalado,

        $ORACLE_HOME$\oui\bin

        luego le indicamos desde donde queremos instalar, por ejemplo 

        \Oracle 10 Installer\10201_companion_win32\companion\stage\products.xml

        Lo instalamos en un nuevo HOME

        Y listo

         

        Como curiosidad comentar que el botón para matar un proceso se encuentra "oculto" teniendo que ir a la opción de ver diagrama para encontrarlo.

        Espero que sea de ayuda.

         

        Estimados, me pueden ayudar con la instalación de Workflow, estoy en un ambiente Windows7 ... tengo instalada la BD ORACLE STANDAR 11.2.0.1 g

        DENTRO de la casa de OWB en el siguiente directorio se encuentra el asistente de configuración Worflow

        D:\app\Kiuby\product\11.2.0\dbhome_1\owb\wf\install\wfinstall.bat

        Una ves abierto me sale la pantalla q carlos mostro:
        que datos tengo q poner ahi:

        Opción de Instalación: Solo Servidor
        Cuenta de Workflow: owf_mgr ---> esta cuenta es por defecto o tengo q crear el usiario en el asintente de warehouse builder ???

        En descripción de conexion TNS: SOLO EH PUESTO ASI: localhost:1521:orcl
        o tengo q especificar todo como ah puesto carlos
        DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =servidor)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = owfbd)) )

        tengo el siguiente error: java.lang.Exception:Invalid connection (0)

        ayuda por favor

        In reply to by kr Andrés (not verified)

        Hace mucho que no lo toco, y te hablo de memoria, pero la cuenta debe existir en la base de datos.
        Lo que es seguro es que has de poner la cadena completa del descriptor de conexión TNS, seguramente por eso no te conecta, porque la descripción es incorrecta.

        Gracias Carlos

        eh puesto ya el descriptor pero tengo el mismo problema, una duda al conectarme con el usuario owf_mgr por sqlplus me dice q el usuario no existe, estoy un poco confundido
        ese usuario se me crea automáticamente al instalar el motor de BD con la Base orcl,o como?

        eh visto en algunos blogs aconsejan que debo sacar el instalador de worflow fuera de la casa de owb pero no estoy seguro

        ayuda

        Lo eh solucionado despues de romperme un poco la cabeza
        revisando uno de los log de worflow ubicados en:
        D:\app\Kiuby\product\11.2.0\dbhome_1\owb\wf\install\ nombre_del_archivo.log

        me encontre con este error ORA-00604: error occurred at recursive SQL level 1
        ORA-12705: Cannot access NLS data files or invalid environment specified
        este error se debe

        En mi caso, el problema se da cuando tengo el sistema operativo -y el conjunto de caracteres- configurado para Ecuador. Para solucionarlo en las aplicaciones Java, podemos agregar opciones para configurar el locale que queremos que la JVM utilice, de forma que no tome el del sistema operativo. Esto se hace agregando las siguientes opciones al ejecutar el comando java:

        -Duser.region=us -Duser.language=en

        Una 2da opción, válida en Windows es cambiar la configuración regional y de idioma para algún país que Oracle soporte (Estados Unidos, España, México, etc.). Hay que tener en cuenta sin embargo que esta configuración nos puede afectar otros programas, especialmente en la configuración de moneda, formato de fecha o de separación de miles. ---> esta es la q aplique

        En concreto la solución esta en ir a panel de control\configuracion regional y idioma\cambiar formato\ podemos escojer la opcion ingles reino unido

        ejecutar nuevamente el instalador dbhome_1\owb\wf\install\wfinstall.bat
        poner los parametros y listo

        espero que le sirva al alguien :D

        In reply to by krAndres (not verified)

        Me alegra que hayas podido solucionarlo, la configuración regional es algo que siempre da algún problema como no esté todo perfecto.
        Te agradezco que compartas la solución que has encontrado, y seguro que no soy el único que te lo va a agradecer.

        Saludos,

        Lanzamiento de Oracle Data Integrator

        Lanzamiento de Oracle Data Integrator Carlos Wed, 09/26/2007 - 23:02

        Oracle, tras la compra de la empresa Sunopsis, ha lanzado al mercado la nueva herramienta Oracle Data Integrator (ODI), basada en la que comerciaba esta compañía.

        Esta herramienta entra en el segmento de las de E-LT, o de Extracción, Carga y Transformación (una evolución del concepto de ETL), y aporta más flexibilidad, mayor capacidad de integración con diferentes fuentes y destinos de datos, y realiza los procesos de transformación dentro de los mismos servidores de bases de datos, de ahí el cambio en el orden de las siglas E-LT, al realizarse así el proceso de Transformación normalmente después que el de Carga.

        Se puede consultar más información sobre la misma en Lanzamiento de Oracle Data Integrator.

        Con esta noticia queda claro porqué Oracle Warehouse Builder se puede utilizar libremente desde hace ya un tiempo si se ha adquirido la licencia de algún servidor de base de datos Oracle. Tenemos una nueva herramienta que nos va a hacer plantearnos si OWB se ha quedado obsoleto. Ahora sólo falta evaluar hasta qué punto las mejoras que aporta el nuevo software compensan el coste de adaptación y de la licencia.

        Pantalla de Oracle Data Integrator

        Limpieza de datos con Oracle Warehouse Builder

        Limpieza de datos con Oracle Warehouse Builder Carlos Fri, 05/04/2007 - 22:13

        En el enlace Managing Data Quality se puede acceder a un artículo de Ron Hardman sobre cómo realizar procesos de limpieza de datos con Oracle Warehouse Builder.

        El artículo comienza con una introducción a la calidad de los datos y maneras de gestionarla, siendo una de ellas la utilización de las opciones de limpieza de datos de Oracle Warehouse Builder.

        Lo interesante es que se muestra cómo descargar un script con datos de prueba, y cómo configurar la herramienta para probar las utilidades de Profiling, definición de Reglas (Data Rules), y corrección o limpieza de los datos. De esta manera se puede ver y probar de manera sencilla cómo implementar un proceso básico de Data Cleansing con esta herramienta.

        El artículo original está en inglés pero buscando en la web de Oracle he encontrado los 3 documentos que adjunto, traducidos al castellano, y relacionados con OWB y la limpieza de datos:

        • Informe Ejecutivo - Oracle Warehouse Builder 11g Versión 1 Información General
        • Oracle Warehouse Builder Data Quality Option
        • Oracle Warehouse Builder Enterprise ETL Option

         

        Oracle BI Publisher

        Oracle BI Publisher Juan_Vidal Tue, 08/16/2011 - 14:43

        We show a summary of capabilities of this tool integrated in the Oracle BI suite including the features included in version 11g.

        There is also a standalone version of XML Publisher Enterprise independent from Oracle suite. Oracle BI Publisher allows to publish and distribute reports in the field of enterprise-wide operational reporting detail. These reports can be created from the same portal (DHTML editor). It has a graphical interface that greatly facilitates the work. In terms of SQL, allows you to write sentences directly or help a Query Builder. A major advantage of the tool is that the report design can be based on templates made with Microsoft Word, Excel or Adobe Acrobat. Oracle BI Publisher also offers support for Adobe Flex, so you can create Flex templates, format for creating interactive reports and forms. BI Publisher separates the creation of the data (XML) formatting. The engine can deal with any XML data, allowing integration with any system that generates XML as Web services or any JDBC data source. BI Publisher can merge different data sources into a single output document. As for distribution of reports counts with a scheduler that allows us to schedule delivery of the report. We have different distribution platforms as fax, print, mail and published on the site.
        Similarly allows multiple output formats as: pdf, rtf, html, xml, xls, etc.. BI Publisher is based on the W3C XSL-FO standard. BI Publisher is a J2EE application that can be deployed in any J2EE container. To summarize is a great alternative to publish any report of high fidelity.

        Oracle Data Integrator 11g

        Oracle Data Integrator 11g Juan_Vidal Wed, 09/07/2011 - 11:38

        Oracle Data Integrator es la herramienta de integración de datos de Oracle. Es la apuesta de Oracle en cuestiones de integración de datos y sustituye a OWB (Oracle Warehouse Builder). Forma parte de la solución OFM (Oracle Fusion Middleware) y está totalmente integrada con otras soluciones Oracle relacionadas con la gestión de datos:

        • Oracle Data Profiling
        • Oracle Exadata
        • Oracle Business Intelligence
        • Oracle SOA Suite
        • Oracle Database
        • Oracle Data Warehousing
        • Oracle Master Data Management

        Repasamos brevemente las principales funcionalidades y novedades de la versión 11 de esta herramienta:

        Interface de Oracle Data Integrator

         

        Conectividad:

        La actual versión 11g, permite una extensa conectividad con la mayoría de las bases de datos, ERPs, CRMs, sistemas B2B, ficheros planos, ficheros XML, directorios LDAP, conexiones vía ODBC, JDBC y una muy conseguida integración con arquitecturas SOA.

        Funcionalidades de integración de datos:

        ODI simplifica bastante todas las tareas de integración y gestión de datos caben destacar los siguientes puntos:

        • Población y actualización entornos Data Warehouse: Ejecución de procesos con alto volumen de datos, obteniendo excelentes tiempos de respuesta. Actualización de data warehouses, data marts, cubos OLAP y sistemas analíticos en general. Gestiona de forma transparente las cargas totales o incrementales, considera dimensiones SCD (Slowly Changes Dimensions), asegura la integridad y consistencia de datos y facilita la trazabilidad del dato (origen del dato, detalle de transformaciones y destino del dato). Procesos de integración de datos basados en datos de entrada, procesos batch, eventos y ejecución de servicios.
        • Arquitecturas Orientadas a Servicios (SOA): Permite desarrollar servicios de integración de datos (acceso a datos, validaciones, transformación, volcado de datos, etc.) para su posterior integración de forma poco costosa en infraestructuras basadas en arquitecturas SOA, dotando a esta infraestructura de capacidades para gestionar altos volúmenes de datos, alto rendimiento en los procesos y volcados de datos masivos. 
        • Master Data Management (MDM): Facilita la gestión de datos maestros con funcionalidades para la sincronización de datos. Permite la conexión entre los datos maestros y el Data Warehouse, asegurando la integridad entre las dimensiones y jerarquías MDM y las tablas de hechos del Data Warehouse. Actualización de MDM data hubs (concentradores de datos con tablas de referencias cruzadas a todos los sistemas fuente) para cada uno de los dominios de los maestros de datos (ejemplo : cliente, producto, etc..). Integración con procesos BPEL (Business Process Execution Language)y los servicios webs compuestos por este lenguaje de orquestación. 
        • Procesos de migración de datos: Gestiona volcados de datos masivos entre sistemas antiguos y los nuevos sistemas de forma eficiente, pudiendo incluir en el movimiento de datos transformaciones complejas, así como la sincronización de datos entre ambos sistemas durante su periodo de coexistencia.

        Arquitectura E-LT:

        ODI modifica el tradicional concepto ETL (Extract, Transform, Load), pasando a E-LT (Extract – Load, Transform). La arquitectura E-LT extrae los datos de los sistemas fuente, los carga en base de datos y realiza todas las transformaciones en la propia base de datos. En el tradicional ETL el proceso de transformación puede ser realizado en un entorno hardware y software diferente al de la base de datos de destino, mientras que en un esquema E-LT la transformación y el volcado se realizan en una misma plataforma hardware y software. Lógicamente un esquema E-LT reduce el tráfico de datos, pero hay que dotar al motor de la base de datos de destino de capacidades de transformación y movimiento de datos potentes, capacidades que provee ODI. Así mismo, ODI permite realizar dentro de la base de datos transformaciones complejas al mismo nivel que el servidor que realiza la capa de transformación en un ETL convencional.

        Considerar igualmente que una arquitectura E-LT se realiza toda la optimización de recursos (disco, memoria, proceso) en la base de datos, lo cual permite una configuración del rendimiento más centralizada. La propia ejecución de las transformaciones puede ser diferente en una arquitectura y otra, ya que hay herramientas ETL que evalúan las transformaciones registros a registro y en el caso E-LT se realiza por lotes de registros. ODI permite combinar la potencia del motor de la base de datos con las prestaciones hardware que Oracle puede ofrecer alcanzando una arquitectura E-LT de alto rendimiento.

        Alta productividad en el diseño de procesos de integración de datos:

        ODI introduce un entorno de desarrollo basado en JDeveloper que reduce los tiempos de desarrollo y permite diseñar de forma intuitiva procesos de transformación y volcado de datos complejos. Nuevas funcionalidades como ‘quick-edit’ implementan de forma sencilla actualizaciones masivas.

        Uno de los principales objetivos de ODI es centrar a los desarrolladores y a los usuarios de negocio en describir las transformaciones a realizar, sin necesidad de invertir mucho tiempo en los aspectos técnicos relativos a la implementación de estas transformaciones. ODI plantea al desarrollador un diseño declarativo más centrado en las necesidades de transformación que en los procedimientos. Permite centrarse en ‘qué hacer’, en lugar de ‘cómo hacer’. El diseñador describe las fuentes origen y destino y los procesos de transformación e integración, ODI genera los procedimientos y el código necesario para implementarlos.

         

        Alta disponibilidad y escalabilidad:

        ODI se integra con la plataforma Oracle Fusion Middleware. En esta plataforma ODI ofrece sus componentes como aplicaciones Java EE, optimizados para aprovechar al máximo las capacidades de su servidor de aplicaciones Oracle WebLogic. Los componentes ODI están provistos de funcionalidades que permiten su despliegue en un entorno de alta disponibilidad, escalabilidad y seguridad. Los componentes de ODI desplegados en el servidor de aplicaciones WebLogic se benefician de las funcionalidades de este en cuestiones relativas a escalabilidad, pooling de conexiones JDBC y balanceo de carga de trabajo. Igualmente ODI puede beneficiarse de las capacidades de trabajo de bases de datos en grupo (clusters, grupos de máquinas) que permite Oracle RAC (Real Application Clusters), con todas las capacidades que conllevan un motor de base de datos de alta disponibilidad de estas características.

        Gestión y administración centralizadas (consola ODI):

        La consola de ODI se realiza en un entorno bajo un framework Ajax que mejora la experiencia de usuario (ADF Oracle Application Development Framework). Desde esta consola se pueden crear entornos de trabajo, realizar exports e imports de repositorios de datos, controlar procesos, monitorizar sesiones, control y seguimiento de errores, diseñar procesos, realizar informes de trazabilidad, etc..

        Esta interfaz se integra con la Enterprise Manager Fusion Middleware Control y permite a los administradores monitorizar no sólo los componentes de integración de datos ODI, sino todos los componentes de la plataforma Oracle Fusion Middleware.

        ODI Knowledge Modules:

        Los Knowledge Modules son el núcleo de la arquitectura ODI. Proveen a la arquitectura Oracle de flexibilidad, modularidad y fácil ampliación. Soportan plataformas de terceros, heterogéneas fuentes de datos y data warehousing appliances. Los KM implementan los flujos de datos y definen plantillas para generación de código involucrando diferentes sistemas y plataformas. Los KM permiten la creación de flujos de datos sin que la complejidad de las reglas de transformación cambie su diseño. Por otro lado, son muy específicos ya que los procesos y el código generado están orientados y optimizados a la tecnología de base con la que se integran. ODI dispone de una librería de módulos KM para adaptarlos a medida definiendo unas mejores prácticas.

        Lista de KM disponibles:

        Generic SQL,Hypersonic SQL,IBM DB2/400, DB2 UDB, Informix, JD Edwards Enterprise One, JMS, Microsoft Access, Microsoft SQL, Netezza, Oracle Database, Oracle Data Quality for Data Integrator, Oracle E-Business Suite, Oracle Enterprise Service Bus, Oracle GoldenGate, Oracle Hyperion Essbase, Financial Management, Planning, Oracle OLAP, Oracle PeopleSoft , Oracle Siebel CRM , SalesForce, SAP ERP & BW , SAS, Sybase ASE, Sybase IQ  y Teradata.

        Información más extensa sobre la herramienta en la propia site de productos de Oracle: 'http://is.gd/lY8xD9'

         

         

        Justo lo que buscaba, me ha sido muy útil. Muy buen post. Dados los cambios que se producen en los fabricantes de software B.I. por compras fusiones o la aparición continua de nuevas herramientas, se agradecen posts de este tipo que de forma sencilla dan una visión rápida de la herramienta. 

         Que tal Juan

        Tengo una duda, como puedo medir el tamaño de Hardware que necesita mi proyecto, si solo utilizare ODI y es este en donde me piden que dimensione su tamaño. ya que para la parte de reporteo utilizan Cognos.

         

        Segun  yo puedo obtenerlo del no de fac,  tamaño en datos y transacciones que utilizare para cada fac? o debo considerar alguna otra cosa mas?

         

        agradezco de antemano tu atencion y quedo atenta a tus comentarios

         

        Hola Paty,

        No soy experto en temas de hardware, pero necesito más datos para responderte. Dimensionar ODI depende de muchos factores:

        - Tamaño de la BBDD
        - Volumen de procesos ETL a generar (espacio metadata)
        - Disposición de servidores: servidor de metadatos, servidor de ejecución, servidor de BBDD,...
        - Necesidad de recursos en ejecución: paralelismo, necesidad de caché

        Un saludo,

        Oracle SQL Developer

        Oracle SQL Developer Carlos Wed, 04/30/2008 - 23:55

        Oracle SQL Developer es la herramienta gráfica gratuita que proporciona Oracle para que no sea necesario utilizar herramientas de terceros (como el conocido TOAD, o el PL/SQL Developer) para desarrollar, o simplemente para ejecutar consultas o scripts SQL, tanto DML como DDL, sobre bases de datos Oracle.

        [[ad]] La apariencia y funcionalidad es similar a la de otras herramientas de este tipo, por lo que es una buena opción si no tenemos especial predilección por otras herramientas.

        Además en las últimas versiones ha incorporado mejoras como permitir conectar con bases de datos no Oracle, como SQLServer, MySQL o Access. La conexión con MySQL o SQLServer se realiza a través de JDBC, y de manera bastante sencilla. Una vez establecida la conexión se pueden explorar los objetos de las bases de datos como si se tratara de una de Oracle, y ejecutar sobre ellas sentencias SQL, aunque en cuanto a funcionalidades más avanzadas como la creación de estructuras este tipo de conexión estará mucho más limitada.

        Se puede consultar más información o descargar la herramienta en www.oracle.com/technology/software/products/sql/index.html

        Oracle SQL Developer

         

        Conectar Oracle SQL Developer con MySQL

        A modo de ejemplo comentaré los sencillos pasos que se pueden seguir para poder utilizar SQL Developer con una BD MySQL:

        • Descargar y descomprimir el driver JDBC para MySQL, que se puede obtener en la zona de descargas de conectores de la web de MySQL.
        • En el directorio generado localizar el archivo .jar, que es el binario que contiene el conector. El nombre ha de ser algo así como 'mysql-connector-java-...-bin.jar'. Para que lo tengáis aún más fácil adjunto la versión 5.1.7, que es la que yo he utilizado ahora.
        • En la opción de menú Herramientas, entrar en Preferencias.. y abrir las opciones de Base de datos y seleccionar Controladores JDBC de Terceros. Hacer click sobre el botón Agregar Entrada, y con el explorador de archivos seleccionar el archivo .jar que hemos descargado.
        • Después de esto, en la ventana que se abre al agregar conexiones os debería aparecer una nueva pestaña MySQL que permite definir una conexión con MySQL.

        Conectar SQL Developer con MySQL
         

        Conexion de Oracle SQL Developer con MySQL

         

        Conectar Oracle SQL Developer con SQL Server y Sybase

        Comento también los pasos que se pueden seguir para poder utilizar SQL Developer con una BD SQL Server o Sybase, aunque lo único que cambia es el driver que se utiliza:

        • Descargar y descomprimir el driver JDBC para SQL Server/ Sybase. El proyecto open source jTDS proporciona un driver que sirve para ambas bases de datos. Sólo hay que seleccionarlo de la sección de Download
        • En el directorio generado localizar el archivo .jar, que es el binario que contiene el conector. El nombre ha de ser algo así como 'jtds-... .jar'. Para que lo tengáis aún más fácil adjunto la versión 1.2.3, que es la que yo he utilizado ahora.
        • En la opción de menú Herramientas, entrar en Preferencias.. y abrir las opciones de Base de datos y seleccionar Controladores JDBC de Terceros. Hacer click sobre el botón Agregar Entrada, y con el explorador de archivos seleccionar el archivo .jar que hemos descargado.
        • Después de esto, en la ventana que se abre al agregar conexiones os debería aparecer una nueva pestaña MySQL que permite definir una conexión con MySQL.

        Conexión a SQL Server con Oracle SQL Developer

        Coméntalo en el tema Oracle SQL Developer del foro

         

        Oracle SQL Developer

        Oracle SQL Developer Carlos Mon, 05/18/2009 - 10:54

        Oracle SQL DeveloperEn el artículo Oracle SQL developer comentábamos la existencia del software Oracle SQL Developer, la herramienta gratuita de Oracle, que te permite conectar y trabajar a nivel de SQL, desarrollo y de estructura sobre bases de datos tanto Oracle como de otros fabricantes a las que se pueda conectar por JDBC (SQLServer o MySQL, por ejemplo).

         

        Abrimos este tema en el foro para comentar y recopilar temas de instalación, funcionamiento o simplemente opiniones sobre Oracle SQL Developer.

         


        Libros de Administración Oracle (DBA) y PL/SQL

        ¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.

        Los libros que ves a continuación son una selección de los que a mi me parecen más interesantes para aprender administración y desarrollo PL/SQL, teniendo en cuenta precio y temática, espero que te puedan ser de utilidad:

        • eBooks de Oracle gratuítos para la versión Kindle, o muy baratos (menos de 4€):
        • Libros recomendados de Oracle

        Me lo acabo de instalar, lo estoy probando y va estupendo!! Gracias por el post Carlos!!

        Drk

        In reply to by drakon

        Amigo por lo que pude leer en su vinculo, pense que me puede ayudar, disculpeme la molestia, lo que pasa es que el SQL developer me pide eñ PATHNAME para JAVA.EXE, soy muy novato y no se que hacer, me puede ayudar?

        In reply to by Anonimo (not verified)

        SQL developer necesita la maquina virtual de java instalada en el equipo donde se ejecuta. Y sino recuerdo mal... a veces necesita la versión 6 o 7 (pero el mensaje te lo dice). Bueno instalas el JRE ( Java Runtime Environment) y este se instala en C:\Archivos de progrma (x86) \jre (version)\bin si tu SO es de 32 bits. sino simplemente Archivos de programa. Bueno colocas ese PATH cuando el programa te lo pide y listo. Tendría que funcionar.

         

         

         

        Si teneis problemas a la hora de establecer conexiones es porque debéis configurar el fichero "sqldeveloper.conf" y agregar lo siguiente:

        AddJavaLibFile ../../lib/java/api/jaxb-api.jar
        AddJavaLibFile ../../lib/java/api/jsr173_api.jar
        AddJavaLibFile ../../j2ee/home/lib/activation.jar
        AddJavaLibFile ../../lib/java/shared/sun.jaxb/2.0/jaxb-xjc.jar
        AddJavaLibFile ../../lib/java/shared/sun.jaxb/2.0/jaxb-impl.jar
        AddJavaLibFile ../../lib/java/shared/sun.jaxb/2.0/jaxb1-impl.jar

        Saludos,

        Drk

        In reply to by drakon

        [quote=drakon]Si teneis problemas a la hora de establecer conexiones es porque debéis configurar el fichero "sqldeveloper.conf" y agregar lo siguiente:

        AddJavaLibFile ../../lib/java/api/jaxb-api.jar
        AddJavaLibFile ../../lib/java/api/jsr173_api.jar
        AddJavaLibFile ../../j2ee/home/lib/activation.jar
        AddJavaLibFile ../../lib/java/shared/sun.jaxb/2.0/jaxb-xjc.jar
        AddJavaLibFile ../../lib/java/shared/sun.jaxb/2.0/jaxb-impl.jar
        AddJavaLibFile ../../lib/java/shared/sun.jaxb/2.0/jaxb1-impl.jar

        Saludos,

        Drk[/quote]

        Hola Carlos... Soy novato en Oracle PL/SQL Developer..., he tenido el sgte problema hago una nueva y 1ra conexion así (Mac) : 

         

         

         

        create user  db_corona  identified by  db_corona; 

        grant connect, resource to db_corona;

         

        y me manda error:

        Oracle.javatools.db.DBException: java.sql.SQLException: Required property 'hostname' is not set on the DatabaseProvider

        at oracle.jdevimpl.db.adapter.CADatabaseFactory.createConnectionImpl(CADatabaseFactory.java:66)

        at oracle.javatools.db.DatabaseFactory.createConnection(DatabaseFactory.java:534)

        at oracle.javatools.db.DatabaseFactory.createDatabase(DatabaseFactory.java:208)

        at oracle.jdeveloper.db.DatabaseConnections.getDatabase(DatabaseConnections.java:607)

        at oracle.dbtools.raptor.utils.Connections$ConnectionInfo.getDatabase(Connections.java:172)

        at oracle.dbtools.raptor.utils.Connections.getConnection(Connections.java:1064)

        at oracle.dbtools.raptor.utils.Connections.getConnection(Connections.java:1045)

        at oracle.dbtools.worksheet.editor.Worksheet$WorksheetController.testConnection(Worksheet.java:570)

        at oracle.dbtools.worksheet.editor.Worksheet$WorksheetController.access$700(Worksheet.java:422)

        at oracle.dbtools.worksheet.editor.Worksheet$WorksheetController$1.doWork(Worksheet.java:443)

        at oracle.dbtools.raptor.backgroundTask.RaptorTask.call(RaptorTask.java:193)

        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

        at java.util.concurrent.FutureTask.run(FutureTask.java:138)

        at oracle.dbtools.raptor.backgroundTask.RaptorTaskManager$RaptorFutureTask.run(RaptorTaskManager.java:515)

        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)

        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

        at java.util.concurrent.FutureTask.run(FutureTask.java:138)

        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

        at java.lang.Thread.run(Thread.java:680)

        Caused by: java.sql.SQLException: Required property 'hostname' is not set on the DatabaseProvider

        at oracle.jdeveloper.db.adapter.AbstractConnectionCreator.getPropertyOrThrow(AbstractConnectionCreator.java:210)

        at oracle.jdeveloper.db.adapter.OracleConnectionCreator.getConnectionURL(OracleConnectionCreator.java:39)

        at oracle.jdeveloper.db.adapter.AbstractConnectionCreator.getConnection(AbstractConnectionCreator.java:106)

        at oracle.dbtools.raptor.standalone.connection.RaptorConnectionCreator.getConnection(RaptorConnectionCreator.java:195)

        at oracle.dbtools.raptor.dialogs.conn.ConnectionPrompt.promptForPassword(ConnectionPrompt.java:67)

        at oracle.jdeveloper.db.adapter.DatabaseProvider.getConnection(DatabaseProvider.java:321)

        at oracle.jdeveloper.db.adapter.DatabaseProvider.getConnection(DatabaseProvider.java:254)

        at oracle.jdevimpl.db.adapter.CADatabaseFactory.createConnectionImpl(CADatabaseFactory.java:60)

        ... 19 more

         

         

        Agradecería que me pudieras ayudar ya que estoy contra el tiempo en mi nuevo empleo y necesito ensayar en mi casa..

        Se agradece !!.. :D 

         

        In reply to by drakon

        Hola, gracias, yo tengo problemas para establecer conexión, a pesar, por supuesto de tener adsl funcionando perfectamente y las contraseñas correctas de oracle. Cómo puedo llegar al fichero "sqldeveloper.conf"? No lo encuentro por ningún lado

        In reply to by Anonimo (not verified)

        Yo creo que está bien, sobretodo teniendo en cuenta que no hay que pagar por él, pero encuentro que le pasa lo que a la mayoría de los programas hechos con JAVA, que se nota un poco la lentitud. Con el TOAD la respuesta a cada click es instantánea, aparte de que tiene bastantes más opciones, por lo menos la versión de pago.

        Es posible conectarse a base de datos Oracle 8i ??

        Ya lo he probado con una 10g y va excelente, pero tengo otra 8i y no me puedo conectar, existe forma alguna de hacerlo ??

         

        Gracias;

         

        In reply to by Anonimo (not verified)

        Parece ser que como a partir de la versión 1.5 SQL Developer utiliza los drivers JDBC de la versión 11g, y estos ya no soportan la versión 8i de la base de datos. O sea, que las últimas versiones de SQLDeveloper no pueden conectar con Oracle 8i. La última versión de Oracle SQL Developer que te permite conectar con una BD Oracle 8i es la 1.2

        En este foro de Oracle lo discuten, y no parece que haya muchas soluciones, aparte de utilizar en paralelo las dos versiones de esta herramienta. Si al final encontraras alguna solución mejor háznoslo saber.

        In reply to by Carlos

        Hola, estoy intentando conectarme a bases de datos 8i con el SQL Developer.

        probe con todas las versiones disponibles en el sitio de Oracle: http://www.oracle.com/technetwork/developer-tools/sql-developer/downloa…

        Oracle SQL Developer 1.1 Patch 3 (1.1.3.27.66)
        Oracle SQL Developer 1.2.1 (1.2.0.32.13)
        Oracle SQL Developer 1.5 (1.5.0.53.38)
        Oracle SQL Developer 1.5.1 (1.5.0.54.40)
        Oracle SQL Developer 1.5.3 (1.5.3.57.83)
        Oracle SQL Developer 1.5.4 (1.5.4.59.40)
        Oracle SQL Developer 1.5.5 (1.5.5.59.69)
        Oracle SQL Developer 2.1 (2.1.0.63.73)

        En la 1.2 y 1.2 me deja conectarme, pero cuando me conecto me sale el cartel de "Database Versions 9.x and above are supported" y por mas que este conectado, no me deja ver ninguna tabla o ejecutar consultas.

        Alguna idea?

        Muchas gracias,
        Martin

        ya lo descague pero me tengo problemas para ejecutarlo me pide patname for java.exe, no se cual es, alguien sabe?

        In reply to by Anonimo (not verified)

        Debes bajar la versión con JDK, es una aplicación hecha en java.

         

        Oracle SQL Developer for Windows. (This zip file includes the JDK 1.5.0_06)
        (96 M)
        To install and run:
           - Download the file above
           - Extract sqldeveloper.zip into any folder, using folder names
           - Within that folder, open the sqldeveloper folder
           - Double-click sqldeveloper.exe

         

        In reply to by Max Trebor (not verified)

         Hola amigos, soy nuevo en el foro y un gusto poder compartir conocimiento con ustedes

        tambien uso el sql developer para conectarme a una base de datos oracle, pero con la de la inatalcion me pide el java.exe, por eso uso una version anterior, asi que voy a probar bajando el jdk.

         

        lo unico que no ve gusta del sql develope, es que al cargarlo, me desactiva los estilos visuales del windows 7 y cuando uso el scroll en una grilla esta se distorciona y los texto no se ven bien

         

        cuando baje el jdk, voy a probar si soluciona mi problema

         

        saludos cordiales

         

        Eloy

        In reply to by Eloy

        buenas tardes, resulta que al tratar de extraer los resultados de una consulta a un archivo plano se me queda sin trabajar y no me funciona. Esto pasa cuando la consulta es mas de 4000.000 registros.

         

        Ppodrian ayudarme

        Hola desearia que me explicaran como hacer una conexión para empezar a trbajar en esta herramienta

        In reply to by Anonimo (not verified)

        Para una nueva conexion Oracle:

        Vas a connections, click derecho new connection

        connection name : nombre de la conexion ej: LocalHost

        UserName : system ( comunmente es este , si es que tienes el oracle exprr)

        password : la pass que estableciste cuando lo instalaste

        Port y sid dejarlo tal cual.

        El oracle esta en el puerto 8080 , pero si tienes apache tomcat tendra un conflicto entonces deberas cambiarlo

        le pones test para ver si esta funcionando y si pasas conectas eso es todo. 

        Puedes tener mas de una conexion abierta

         

        In reply to by eric (not verified)

        Tenes idea de donde puedo bajar el sql developer en castellano ?

        muchas gracias

        Saludos

        Sebastian

        In reply to by Sebastian (not verified)

        En la web de Oracle sólo hay una versión, no parece que haya más por idiomas. En la documentación de Oracle sobre las features este producto, en la característica 'Globalization', especifica que a partir de la versión 1.5.1 el entorno está disponible para 9 idiomas.

        Yo he probado a instalar la última versión y por defecto ya te coge el idioma que tengas en local, no he encontrado ninguna opción para modificarlo. Lo que sí es cierto es que no lo traduce todo, pero la mayoría sí.

        Se ve chido y es facil de usar, pero es lento..

        Buenas a todo el mundo!

        Resulta que trabajo con esta herramienta y tengo un problema que me está empezando a tocar las narices de verdad. Cuando estoy escribiendo una consulta en el SQL worksheet, no me deja hacer un salto de línea, copiar, pegar, desplazarme con la flechas del teclado, suprimir, borrar... y en general todo lo que no sea escribir. Esto me paso un día de golpe (supongo que presioné alguna combinación rara de teclas), antes podía hacer todo esto sin problemas.

        Lo he reinstalado y sigue igual, solo se me ocurre alguna cosa del java o algo así.  Alguien le ha pasado? y lo mas importante, .. alguien sabe como solucionarlo?

        Gracias de antemano!

        In reply to by Andreu (not verified)

        Contesto yo mismo, ya que por fín he encontrado la solución al problema más desesperante que havia tenido en mucho tiempo.

        Supongo que con alguna combinación de teclas havia activado otro modo de teclado, pero el caso es que se pueden poner los valores por defecto en Tools>preferences>accelerators...  allí haces un load preset... y todo vuelve como antes... por fin!

        In reply to by Andreu (not verified)

        muchas gracias por tu aporte, yo tenia lo mismo y tambien hice la reinstalacion... no se como lo desonfigure, pero tu respuesta lo soluciono... talvez fue un atajo de teclas involutario... pero de cualquier manera muchas gracias...

        In reply to by Marcos (not verified)

        Podría ser problema del tamaño de buffer que utilicen las aplicaciones para exportar los datos, y a lo mejor se puede modificar de alguna manera. También puede ser que la generación del fichero se haga utilizando algún package de Oracle tipo UTL_FILE, y también exista alguna manera de configurarlo.

        Pero todo son suposiciones, a ver si hay suerte y alguien que se haya peleado antes con el problema y lo haya resuelto dentro del SQL Developer (o de Eclipse) nos puede decir algo mas concreto..

        In reply to by Andreu (not verified)

        [quote=Andreu]

        Contesto yo mismo, ya que por fín he encontrado la solución al problema más desesperante que havia tenido en mucho tiempo.

        Supongo que con alguna combinación de teclas havia activado otro modo de teclado, pero el caso es que se pueden poner los valores por defecto en Tools>preferences>accelerators...  allí haces un load preset... y todo vuelve como antes... por fin!

        [/quote] ********* Andrey: Cuando esta configurado en Español tenemos: Preferencias, aceleradores, en el combobox de categoria selecciona Depurar, y busca Ir a fin de metodo. Seleccionas el boton derecho cargar predefinido y luego aceptar y tu editor regresa a estado normal con el teclado.

        En una PC pegamos el SQL Developer 1.5 y ahora no me muestra la pestaña de conexiones que antes me mostraba. ¿Cómo hago para que aparezca?

        In reply to by Adrian (not verified)

        Alguien tiene la respuesta a este problema, yo lo tengo y aun no encuentro como resolverlo; no sé si se deba a la falta de algún controlador o permiso de administrador. Por favor su ayuda. Gracias

        In reply to by Hoover (not verified)

        No sé si lo habéis visto, pero en este mismo tema, Nora comentaba que tenía este mismo error The network adapter could not establish the connection (en el comentario número #61).

        Echad un vistazo, a ver si alguna de las cosas que se comentan os sirven para solucionarlo, pero lo primero aseguraos de que vuestro cliente de Oracle funciona bien conectando desde SQLPlus a una base de datos Oracle.

        Saludos,

        hola a todos, tengo un problema con el SQL DEVELOPER, la primera vez que lo instale (por asi decirlo) corrio sin problemas, pero cuando empece a ver algunas opciones, y no recuerdo bien que modifique, el asunto es que ahora cuando cargo simplemente no se puede cargar la ventana, si veo en el Task Manager veo el proceso sqldeveloper.exe corriendo, pero no lo veo como aplicación.

        Alguien puede ayudarme en verdad me agrado bastante el IDE y me gustaría volver a utilizarlo.

        Ah, borré el programa y todas sus entradas en el REGEDIT, lo volvi a desempaquetar, pero nada, incluso desinstale el JDK y lo volvi a instalar y nada.

        In reply to by Miguel (not verified)

        Buenas,

        tengo una consulta con el SQL Developer. Cuando hago una extracción de datos con la opción INSERT los decimales me los separa con la coma, en vez del punto.

        Si después intento utilizar el INSERT no puede diferenciar la separación de campos y la separación de los decimales. La solución está en separar con puntos los decimales, pero no sé cómo. ¿alguna idea? Gracias.

        In reply to by Configuración_… (not verified)

        Si en el menú seleccionas Herramientas > Preferencias.. , y en la ventana de preferencias Base de datos > Parámetros NLS tienes una caja de texto Separador de decimales donde se puede indicar el carácter que quieras, en este caso cambiar la coma por el punto.

        Preferencias NLS de Oracle SQL Developer

        In reply to by Carlos

        Hola a todos,

         

        Cambie el separador decimal a punto (.) pero igual me sigue mostrando los valores de las variables con coma (,) cuando ejecuto un procedimiento almacenado. Por favor alguien sabe que más falta cambiar???

         

         

         

        Muchas Gracias Andreu, el problema del teclado en oracle sql developer, ya lo he resuelto, era muy desesperante estar así y pude resolver gracias a tí.

         

        Saludos!!

        Qué alegría encontrarme aquí con la solución del problema con el teclado. Gracias Andreu!

        No consigo poner el SQLDEVELOPER en español  he mirado que en el fichero sqldeveloper.conf de la carpeta bin poniendo

        AddVMOption -Duser.language=ES
        AddVMOption -Duser.region=ES

         

        deberia ponerse el ui en español y no lo consigo, que hago mal?

        Hola soy novato y tengo una duda sobre este programa, resulta que necesito pasar una BD completa que tengo en SQL 2005 a Oracle 10g pero no logro poder realizar ninguna conexion ni ocn SQl ni con Oracle.

        POr favor podrian explicar como puedo hacer cada una de las conexiones, que necesito y si puedo migrar datos entre esas BD ya conectadas??

         

        Espero por favor me puedan ayudar...

         

         

        In reply to by Alonso (not verified)

        Sobre cómo realizar las conexiones ya se comentaba en el artículo inicial sobre SQL Developer, o en este mismo tema, y también puedes consultar la propia ayuda de la herramienta.

        Una vez que tengas las dos bases de datos conectadas podrás acceder a los datos de las dos, pero no estarán conectadas entre sí. Para hacer una migración completa deberías utilizar la utilidad de migración que incluye Oracle SQL Developer, que con un asistente te va solicitando los datos necesario para hacer una migración de otros tipos de bases de datos a una base de datos Oracle.

        Asistente de migración de bases de datos de Oracle SQL Developer

        Ok perecto gracias a tu ayuda ya tengo las conexiones de ambas bases de datos. La migracion tenia pensado realizarla de forma Standart y no Quick pero no se si el volumen de los datos califique para Standart ya que aunq si bien el esquema tiene 3000 tablas en general el backup que me generaba SQL era de solo 900 MB. Que me recomendais??

        Muchas gracias por la ayuda..

         

         

        Hola Carlos, prove la opcioin Standart de conversión y funciono bastante bien,lo migro todo perfectamente. Es muy bueno el programa y muy recomendado, ahora mientras realizaba otras pruebas por ignorancia mientras realizaba una conversion del modelo "Model Converted" le aplique en el check de que "Run in Background" algo asi para poder realizar otras acciones y ella siguiera gestionando lo que hacia. El problema es que ahora no me muestra nunca el desarrollo de las actividades por haberle dado click a ese check y no se como remediar esto para que me siga mostrando el progreso de las actividades. Por favor espero me puedan ayudar para volver a la normalidad la aplicacion...

         

        Gracias,

        He intentado de todo desde revisar todas las preferencias del programa para saber cual puede ser hasta comparar esas preferencias con las de otro al que no le cambie la opcion, pero nada incluso si intento correr el programa desde otra maquina en la red, me acepta las conecciones y todo pero de igual manera no me muestra la ventana de procesamiento... claro que lo deje procesando para ver si lo hacia de todos modos pero paso mucho tiempo y nada...

         

        Estoy realmente preocupado por favor su ayuda me sera muy importante.

         

        Gracias

        In reply to by alonso (not verified)

        Alonso, lo siento pero no he trasteado demasiado la utilidad de migración y no he llegado nunca a activar esta opción de 'Run in background'.

        Lo que tampoco entiendo bien es si el problema es que se te quedan para funcionar en background todas las migraciones, o también afecta a cualquier worksheet.

        Otra información importante que puedes proporcionar es la versión de SQL Developer que utilizas, porque en versiones antiguas había algún bug relacionado con las ejecuciones en background.

        Bueno, a ver si alguien que haya probado más las migraciones nos ilumina un poco..

        Carlos, tengo una antigua copia de seguridad de SQLServer 2000, es un archivo con extensión .bak

        Como hago para abrirlo para mis consultas con SQL Developer.

         

        Saludos y felicitaciones por la pagina, cada vez soy más un asiduo visitante.

         

        Eduardo.

        Lima - Perú

        In reply to by Eduardo (not verified)

        Eduardo, SQL Developer trabaja sobre bases de datos activas, por lo que no creo que puedas hacer nada directamente sobre un backup de base de datos.

        Tendrías que recuperar el backup desde una base de datos SQL Server, y después conectar con esta base de datos desde Oracle SQL Developer.

        Una vez hecho esto, con la base de datos de SQL Server funcionando, si quieres prescindir del motor de SQL Server, podrías utilizar la utilidad de migración para importar la BD completa, o sólo lo que necesites a tu base de datos Oracle.

        Hola a todos(as), me descargue la ultima version de oracle sqldeveloper  2.1.1( para 64 bits ) ya que  trabajo en windows 7 profesional de 64 bits, y lo instalo y toda la cosa excelente, me inicia la interfaz y todo, y cuando quiero crear una nueva coneccion a la BD mediante : file>new>Data Base Conecction, supuestamente me tendria que salir una ventana , pero no me sale nada., ni un error no me muestra.

         

        Haber si me pueden ayudar a solucionar eso.            gracias.

        Hola

         

        No se si alguien me puede ayudar. soy nueva con este programa y vengo del Toad, y hay algunas cosas que no encuentro pero sobre todo dos que tienen que estar pero no las encuentro

         

        1- Como puedo saber que paquetes estan correctamente compilados y que paquetes tienen errores??? cuando pulso compilar todo me dice que 4 paquetes tienen errores pero no puedo ver cuales??? en el toad y otras herramientas similares te muestra un icono diferente...

         

        2- Como puedo hacer un expor de toda la base de datos, pero que cada objeto me lo ponga en un archivo,  ahora mismo utilizo la opción Herramientas -> Exportación de base de datos, pero ahi me lo crea todo en un solo archivo txt, y esos como backup es un rollo, por que si tengo que recuperar solo un objeto no es nada comodo.

         

        Muchas gracias.

         

        Hola a todos,

         

        Soy "muy" novato con esta herramienta y tengo el siguiente problema: cuando me intento conectar a la base de datos sucede que si bien podemos ver que el estado es conectado (es decir, si uno se para con el mouse arriba dice nombreconexion Connected) pero no permite descargar el "árbol" de Oracle, queda en estado "Loading..." y el programa queda tomado a tal punto que para cerrarlo lo tengo que hacer con Ctrl + Alt + Supr.

        Desde ya, muchas gracias y ante cualquier duda pregunten asi queda más claro todo.

         

        Saludos,

         

        DiegoteS.

         

         

        buenas.

        tengo un problema.. cuando configuro mi conexion a la base de datos esta se realiza bien pero no me deja ver ni tablas, ni las vistas, paquetes o procedimientos, pero me hace la conexion sin errores y hasta puedo hacer consultas, que puede ser?

        In reply to by Carlos A (not verified)

        Si no tienes problema al conectarte tiene que ser una cuestión de permisos del usuario que utilizas.

        Asegúrate primero de que tenga los roles básicos para trabajar sobre su propio esquema, normalmente CONNECT y RESOURCE:

        SQL> GRANT "CONNECT" TO "USER";SQL> GRANT "RESOURCE" TO "USER";

        Recuerda también que un usuario que no sea DBA normalmente sólo ve sus propios objetos, también puede ser simplemente que el usuario con el que te conectas no haya creado aún ningún objeto en su esquema. Puedes probar a crear una tabla, a ver si luego la ves con el explorador:

        SQL> create table temporal (campo1 varchar2(1));
        

        Hola, bueno te queria preguntar si conoces como puedo importar archivos (.txt, .xls, etc...) a una base de datos sql desde el oracle sql developer, te cuento tengo un macbook y logre conectarme a la base SQL y puedo exportar datos facilmente y consultar, el punto es que no se como importar datos a dicha Base de Datos, desde Windows lo hago sin problemas (manager de sql), pero desde mac no se como realizar dicha importacion, si me puedes ayudar te lo agradeceria

        saludos

        In reply to by Anonim. (not verified)

        Con SQL te refieres a SQLServer? Supongo que te refieres a un asistente de importación que te cargue el contenido de un fichero plano o un XML en tablas. Que yo sepa Oracle SQL Developer no tiene esa funcionalidad, como mucho podrías encontrar algo en la herramienta de migración si la BD destino fuera Oracle.

        Lo que puedes hacer, si los datos vienen de otra BD, es exportarlos en formato SQL, y eso sí que lo podrías importar con SQL Developer.

        Si no vienen de bases de datos tendrás que recurrir a algún script o aplicación más orientada a SQL Server que te permita hacer esta importación. Otra opción que puedes explorar es utilizar el comando BULK INSERT de Transact SQL, que desde el mismo entorno SQL te permite importar datos de ficheros en tablas. Puede importar datos incluso desde ficheros que estén en directorios de red compartidos.

        Gracias Carlos, creo que voy a probar la opción del comando bulk insert, gracias por tu respuesta ha sido de gran ayuda

        Buenos dias

        Acabo de ejercutar una consulta que me arroja mas de 200.000 registros y necesito pasarlo a un archivo txt y que el delimitador sea un Tab o algo diferente a como(,) o punto y como(;) y no se por donde cambiarlo...

        Muchas gracias

        In reply to by Anonim. (not verified)

        Buenas:
        No llevo mucho tiempo usando esta herramienta pero te digo lo que yo se.
        1.- Si son mas de 200.000 registros puede que sobrepases el tamaño maximo (5120 KB).
        2.- Con la exportación en formato txt no se puede elegir delimitador simplemente exporta el resultado tal cual tu lo hayas formateado por lo tanto tendras que montar la consulta para que tenga el formato exacto que quieres que tenga en el fichero.
        3.- El unico formato de exportación que te permite elegir un caracter delimitador el el csv.
        Yo lo que hago es utilizar este como formato intermedio exportando al portapapeles en vez de a un fichero y una vez conseguido el formato lo pego en un fichero txt, xls, word o donde me interese.

        Espero te sirva de ayuda
        Saludos

        una consulta acabo de bajar las version 2.1.1.64, pero cuando me quiero conectar a una base de datos de oracle me dice que el usuario y la clave estan incorrectas
        pero solo cuando entro con un usuario que no es el owner, con el owner no da problem

        gracias de antemano

        In reply to by Luis Quezada (not verified)

        [quote=Luis Quezada]una consulta acabo de bajar las version 2.1.1.64, pero cuando me quiero conectar a una base de datos de oracle me dice que el usuario y la clave estan incorrectas, pero solo cuando entro con un usuario que no es el owner, con el owner no da problem
        [/quote]

        Lo que comentas no creo que tenga nada que ver con la versión de SQL Developer, tiene que ser problema del usuario/contraseña que utilizas, o de permisos del usuario. Para asegurarte prueba a conectar con ese usuario desde otro entorno, por ejemplo desde linea de comandos con SQLPlus.

        Yo lo uso desde hace bastante tiempo y estoy bastante contento con el rendimiento que proporciona.

        El TOAD es altamente desaconsejable por sus fallos de seguridad (de echo el 90% de las empresas

        no trabajan con él) además de sus errores (con un usuario sin privilegios puedes hacer tareas de DBA

        , no diré como porque esto no es un post de hackeos xD)

         

        La verdad quisiera saber cómo insertar múltiples datos por medio de SQL seveloper a una tabla de mi base de datos ya me ha tocado INSERT INTO pauthent_relation(`id`,`user_id`,`group_id`) VALUES (28, 1, 1); uno a uno, soy nuevo en esto de las base de datos Gracias

        Como puedo hacer un select hacia una tabla con un campo que es un objeto?

        el objeto tiene los atributos:  name, phone

         

        Intente de la siguiente manera pero me marca error.

         

        select id_cliente,person.name from cliente

        Hola, a todos,... necesito de vuestra ayuda,......y el problema que tengo es que quiero crear la coneción ya sea para el usuario

        sys o el usuario systema, .... desde la primera vez que instale el oracle 11g establecí la misma contraseña para ambos usuarios, pero se da el caso, que deje unos dias sin aprender sobre este entorno y oracle, y ahora

        que quiero conectarme no me permite conectarme a ninguna de las conecciones que tenía, .... y por el lado del sql *plus si me conecta al menos el usuario system, me conecta correctamente, ...... pero en

        SQL Developer, no me permite conectarme,.... le pongo el nombre de la coneción, el usuario, y la contraseña (con los que me conecta en el sql *plus) y luego me dice: Estado: Fallo- Fallo de la prueba: The

        Network Adapter could not establish the connection.

        Entonces quiero conectarme desde SQL Developer pero no puedo, y desde sql *plus si me conecta, ..... Tambien desde sql *plus cambie la contraseña de el usuario sys para poderme conectar desde el sql developer, pero tampoco me lo permite, ....podrian ayudarme por fis,..........preciso de vuestra ayuda,... gracias

         

         

        In reply to by Nora

        Hola Nora

         

        Es muy probable que los servicios esten apagados o en pausa, tienes que reiniciarlos manualmente

        entra a panel de control / herramientas administrativas/ servicios y buscas por ejemplo OracleOraDb11g_home1TSNListener y

        OracleServicesORCL  y les das reiniciar

         

        Saludos

         

        Espero aya podido ayudarte

         

        Hola de nuevo, antes que nada agradecerte por responder mi interrogante, pero resulta que ya hice lo que tu me indicaste, que subiera los servicios, incluso inicié todos los servicios que corresponden a oracle, pero igual no me permite conectarme a la base, siempre me da el mismo error, ....me conecto como SYSDBA Y TNS, y en En alias de la Red aparece ORACLR_CONNECTION_DATA)  luego le doy probar y me aparece: ---Estado: Fallo- Fallo de la prueba: The Network Adapter could not establish the connectio ---

        Y bueno, si le doy guardar, aunque no me conecte,  en el panel de conexiones aparece el icono de conexión sys o system, pero al momento de querer accesar a las tablas (es decir de dar clik sobre el icono) me aparece el siguiente error ---se ha producido un error al realizar la operacion solicitada: The network Adapter could not establish the connection codigo de proveedor 20 ---.

        Luego no se que hacer, con esto, pues quiero conectarme pero no puedo,.... Por favor, me puede ayudar en esto, de antemano Gracias.

        In reply to by Nora

        Si desde SQL Plus te conectas sin problemas lo que te falla tiene que ser tan sólo la configuración de la conexión desde SQL Developer.

        Puedes buscar el TNSNAMES.ora que está utilizando SQL Plus, y asegurarte de que los parámetros 'host', 'puerto', etc. te coinciden con los que tienes en el tnsnames para esta instancia de BD.

        Gracias por responder, pero es que soy nueva en esto, y estoy luchando con esto que no se, pero, busque el tnsnames.ora y el listener.ora y bueno, me aparecen 2 archivos; uno en la ruta siguiente: C:\app\Administrador\product\11.2.0\dbhome_1\NETWORK\ADMIN, y el otro en C:\app\Administrador\product\11.2.0\dbhome_2\NETWORK\ADMIN. Ahora dime, como se cual es el que está utilizando el sql *plus, no se como se hace, luego, dices que me asegure sobre los parametros del "host", "puerto", etc, y bueno, esos parametros nunca los he utilizado, y bueno, mejor te pongo el codigo que tienen estos dos archivos,

        Mira el listener todo esta igual excepto la ruta que cambia de dbhome_1 a dbhome_2, luego todo es igual

        //*****

        listener.ora

        # listener.ora Network Configuration File: C:\app\Administrador\product\11.2.0\dbhome_1\network\admin\listener.ora
        # Generated by Oracle configuration tools.

        SID_LIST_LISTENER =
          (SID_LIST =
            (SID_DESC =
              (SID_NAME = CLRExtProc)
              (ORACLE_HOME = C:\app\Administrador\product\11.2.0\dbhome_1)
              (PROGRAM = extproc)
              (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrador\product\11.2.0\dbhome_1\bin\oraclr11.dll")
            )
          )

        LISTENER =
          (DESCRIPTION_LIST =
            (DESCRIPTION =
              (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
              (ADDRESS = (PROTOCOL = TCP)(HOST = CASA.lan)(PORT = 1521))
            )
          )

        ADR_BASE_LISTENER = C:\app\Administrador
         

         

         

        En el archivo tnsnames, si hay un cambio en un pedazo de lineas de codigo

         

        //***** tnsnames.ora**

        # tnsnames.ora Network Configuration File: C:\app\Administrador\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
        # Generated by Oracle configuration tools.

        ORACLR_CONNECTION_DATA =
          (DESCRIPTION =
            (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
            )
            (CONNECT_DATA =
              (SID = CLRExtProc)
              (PRESENTATION = RO)
            )
          )

        ORCL =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = CASA.lan)(PORT = 1521))
            (CONNECT_DATA =
              (SERVER = DEDICATED)
              (SERVICE_NAME = orcl.lan)
            )
          )
         

        EL OTRO TIENE ESTO: (LAS ULTIMAS LINEAS DE MÁS)

        # tnsnames.ora Network Configuration File: C:\app\Administrador\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
        # Generated by Oracle configuration tools.

        ORACLR_CONNECTION_DATA =
          (DESCRIPTION =
            (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
            )
            (CONNECT_DATA =
              (SID = CLRExtProc)
              (PRESENTATION = RO)
            )
          )

        ORCL =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = CASA.lan)(PORT = 1521))
            (CONNECT_DATA =
              (SERVER = DEDICATED)
              (SERVICE_NAME = orcl.lan)
            )
          )

         

         

        Luego que hago aqui, desde sql plus, me conecto a todos los usuarios que tenia, : tenia el sh, hr, y otros que habia creado, pero desde  SQL Developer, no puedo conectarme a ninguna:

        siempre para practicar las consultas me había conectado poniendo el nombre de la conexion, el usuario, contraseña, si era el sys o system le ponia el rol de sysdb, en tipo de conexión TNS, en el alias de la Red ORACLR_CONNECTION_DATA y luego probaba y listo. y de igual forma solo que en el rol, no ponia SYSDB, sino que default y luego todo igual y me conectaba.

        Podrias ayudarme de nuevo, necesito tu ayuda, y quiero aprender a hacer esto. Ya entendi, que no se porque tengo 2 archivos tnsnames.ora  pero hay que decirle al SQL Developer que tiene que escoger uno, pero no es como se hace eso, me ayudas??? Gracias

        Seguramente el TNSNAMES que se está utilizando es el último que se ha instalado, supuestamente el de C:\app\Administrador\product\11.2.0\dbhome_2\network/admin. También puedes consultar en las variables de entorno cuál es el path que está utilizando el cliente Oracle de tu máquina.

        Para consultar datos de conexión mejor mírate el Tnsnames.ora, pero es sólo como referencia, porque SQL Developer no lo utiliza. Como desde SQLPlus sí que puedes entrar, los parámetros del tnsnames relativos a la instancia en la que entras tienen que servirte para la definición de la conexión de SQL Developer.

        Por ejemplo, si para entrar con SQL Plus utilizas este comando:

        > sqlplus hr/pwd@orcl

         

        Consultas la entrada del TNSNAMES que define ORCL y verás que tienes HOST=CASA.lan y PORT=1521, que es lo que tendrías que informar en la definición de la conexión de Oracle SQL Developer:

        Conexión de Oracle en SQL Developer

         

        Utiliza el botón 'Probar' para comprobar que la conexión te funcione, así es muy rápido hacer pruebas con diferentes parámetros.

        Hola de nuevo,

        Pues antes que nada gracias por tu orientación, pues a la verdad, ni sabia que existia el archivo tnsnames.ora y los demás para la configuración de la conexion, ni sabia, donde es que estaban, ni nada de eso, más ahora ya lo se, y estuve leyendo algo sobre estos archivos.

         

        Mira, probando probando ya pude conectarme, lo que hice fue que elimine el SQL Developer, y como te conté tenia dos archvos tnsnames.ora en diferentes direcciones pero parecidas, C:\app\Administrador\product\11.2.0\dbhome_1\network\admin\tnsnames.ora,.... y C:\app\Administrador\product\11.2.0\dbhome_2\network\admin\tnsnames.ora ,.....así que borré la carpeta dbhome_2 y luego volví a ejecutar el archivo sqldeveloper.exe luego probé conectarme y me conectó.

         

        Lo que quiero contarte, es que he estado buscando en internet, como se crea los archivos: tnsnames.ora, el listener.ora y el sqlnet.ora,........... es decir, quisiera saber, en que momento se crean estos archivos, si a la hora de instalar la base de datos o al instalar el sql developer, ............ pues tengo la pregunta, de porque es que yo tenia 2 archivos:  tnsnames.ora, el listener.ora y el sqlnet.ora, en diferentes direcciones, en que momento los cree?

         

        Tengo dos versiones de SQL Developer, y recuerdo que al principio ejecuté un sqldeveloper.exe luego un tiempo despues, me dio de ejecutar el otro, .......... entonces, no se si eso fue el motivo por el que ya no me funcionó conectarme a la base de datos, a través del SQL Developer.

        Por favor, si tu puedes explicarme, pues quiero saberlo y auque parezca ignorante en esto, pues a la verdad, lo soy, pues estoy iniciandome en esto, de antemano agradezco mucho tu ayuda.

        In reply to by Nora

        Los archivos que comentas (tnsnames.ora, listener.ora y sqlnet.ora) se crean cuando instalas un cliente de Oracle, es decir, la versión de Oracle que te permite conectarte a la base de datos desde tu máquina, y que también te instala el SQL Plus. Si tienes dos de cada es porque has hecho dos instalaciones del cliente de Oracle, y la que estará activa es la última que hiciste.

        Oracle SQL Developer es otra herramienta aparte que no crea ni modifica ninguno de estos ficheros, el 'tnsnames.ora' sólo te sirve de referencia para definir los datos de la conexión en Developer, y en cualquier otro software que quieras configurar para conectar con una base de datos Oracle, pero no interviene para nada en la instalación.

        Espero haberte ayudado..

         

        Muchas gracias por tu explicación, solo que no recuerdo en que momento ejecuté el oracleCliente, solo estoy segura de que instalé la base de datos de ahi el SQL Developer.

        Mira muchas gracias por todo, ......... a lo mejor, voy a continuar consultadote otras cosas, por ahora ya esta resuelto esto. Gracias por tu ayuda.

        In reply to by Nora

         Si has instalado la base de datos en local, la misma instalación te habrá creado el cliente de Oracle, en este caso para acceder a la misma máquina. Si quisieras acceder a tu base de datos desde otro ordenador tendrías que hacer una instalación de sólo el cliente de Oracle, o acceder con una herramienta como Oracle SQL Developer, que no necesita este cliente.

        Gracias a ti por compartir tu experiencia, no dudes en contarnos cualquier cosa que te parezca de utilidad.

         hola buenas soy estudiante de tics

        apenas estoy comenzando con todo esto

        de los servidores de base de datos

        pero quiero saver de donde puedo descargar

        el motor de sqldeveloper ya que poseo el ide

        masno el motor del gestor espero que me puedan ayudar

        selos agradecere demaciado

        Hola, al inciciar el sql developer no se ejecuta, sale una ventana, en la cual solo puedo interactuar con oel tabulador y el aceptar, ¿Que puede ser?.
        Lo necesito para clase y me estoy retrasando bastante en la asignatura Bases De Datos
        Muchas gracias

        In reply to by esckor5k

        ¿El motor? Te refieres a la base de datos? SQL Developer es sólo un IDE para trabajar sobre bases de datos. 

        Las bases de datos se instalan por separado, y pueden ser Oracle, MS SQL Server o MySQL.

        Si quieres probar puedes instalarte Oracle XE, la versión gratuíta de la BD de Oracle. Te enlazo el post Oracle XE, la base de datos gratuita de Oracle, que tiene algo de info y enlaces para descargarla.

         

        HOla !! tuve tarea y lei nu podia accesar al management de sql soy nueva en esto asik nu tenia ni idea de k se necesitaba descargar aparte enfin me ayudo muxxo tu informacion entregare la tarea jejejeje

         

         hola que tal... bueno espero que me puedan ayudar con mi pequeño problema...

        quiero conectarme a la base de datos mediante el pl/sql developer

        pero que cuando me conecte me salga

         

        mi_usuario@BASEORAC

         

        pero no m sale...

        y tengo q conectarme a 

         

        mi_usuario@EX

         

        osea quiero conectarme con la base de datos

        ORACLR_CONNECTION_DATA

        y no al 

        XE

        espero me puedan ayudar

         

        ES URGENTE...

        POR FAVOR......

         Hola a todos!! tengi una duda necesito conectar SQL Developer a una planilla excel mas especifico a una tabla o grafico dinamico para encontrar alguna automatizacion en mis reportes, y necesito encontrar la forma de unir la BD con la planilla. gracias!!

        Hola, espero que sepas mucho del programa sql developer ya que hace 1 semana me empezó a andar raro, por ejemplo cuando hago clic derecho ya no me sale la opción editar, y al momento de intentar importar datos también me tira error, no se que le sucede y de verdad lo necesito ocupar mucho para la universidad, ya intente borrarlo y cargar otro pero no me funcionó, ayuda porfavor.

        Hola, espero me puedan orientar quiero exportar a excel, Csv o txt una consulta que genere pero a excel se ha hecho muy muy lento.. no me regresa nada son 185,000 registos algun consejo? mi version de developer es 3.2.20.09

        In reply to by James (not verified)

        Con muchos registros los datos formateados siempre consumen más recursos. Seguramente el problema lo tengas más en la parte de Excel que en la de Oracle SQL Dev.

        Prueba a exportar en formato de texto, o csv, y yo creo que no tendrás problemas.

        Si no, la alternativa es hacer la exportación desde fuera de Oracle SQL Developer, con comandos de exportación de la base de datos, o con un script desde Oracle SQL Plus.

        Hola: alguien me puede ayudar, soy un principiante en sql developer, trate de agregar una conexion y no me deja me aroja un error. alguien me puede orientar paso a paso como crear una conexion y lo que se necesita para que el proceso se exitoso.

        In reply to by duarteen (not verified)

        En el artículo Oracle SQL Developer, que referenciaba al principio de este tema, se explica cómo realizar las conexiones de Oracle SQL Dev. Lo has consultado y te da el error que dices o no lo habías visto? Qué error te devuelve el programa?

        Por cierto, acabo de ver que ya se puede descargar la versión 4.0 Early Adopter 2 de Oracle SQL Developer, a ver quién se atreve a probarla y nos cuénta qué tal se comporta :)

        Muy valioso el aporte Carlos, muchas gracias, tengo una pregunta, ¿Cómo puedo realizar una consulta que llame dos tablas de diferentes bases de datos desde el SQL Developer?

        In reply to by Anonimo (not verified)

        Si quieres hacerlo en la misma consulta, y una de las bases de datos es Oracle y la otra tiene un conector ODBC, podrías enlazarlas utilizando un database link de Oracle que enlazara a la otra base de datos utilizando Heterogeneous Services.

        Te enlazo el artículo de Oscar Paredes Heterogeneous Services: Conexión desde Oracle a SQL Server que explica cómo configurarlo. Una vez bien configurado, la nomenclatura es la de un dblink normal.

         

        BUENAS TARDES, He instalado el SQL Developer y me da el siguiente error "The network adapter could not establish the connection" ¿a qué puede ser debido? Muchas gracias

        Hola, he tenido problemas en la migracion, me manda el siguiente error, baje la ultima version de sqldeveloper, sigo los pasos del wizard para migracion pero en el paso de captura es donde me quedo y no se que hacer. Alguien me puede ayudar java.lang.NullPointerException at oracle.dbtools.migration.capture.CaptureCmd.getListOfOnlineSourceDatabases(CaptureCmd.java:1250) at oracle.dbtools.migration.capture.MSSqlServerDatabaseListProvider.getAvailableOnlineDatabaseList(MSSqlServerDatabaseListProvider.java:61) at oracle.dbtools.migration.capture.DatabaseProviderRegistry.getAvailableDBListOnline(DatabaseProviderRegistry.java:41) at oracle.dbtools.migration.workbench.core.ui.quickmigrate.QMWizard$ContextHelper.getAvailableDBListOnline(QMWizard.java:369) at oracle.dbtools.migration.workbench.core.ui.quickmigrate.CapturePageMigration.initPageState(CapturePageMigration.java:307) at oracle.dbtools.migration.workbench.core.ui.quickmigrate.CapturePageMigration.onEntry(CapturePageMigration.java:78) at oracle.ide.wizard.FSMWizard.gotoPanel(FSMWizard.java:765) at oracle.ide.wizard.FSMWizard.setSelectedPage(FSMWizard.java:481) at oracle.bali.ewt.wizard.BaseWizard.selectPage(BaseWizard.java:1966) at oracle.ide.wizard.FSMWizard.selectPage(FSMWizard.java:465) at oracle.ide.wizard.FSMWizard.doNext(FSMWizard.java:340) at oracle.bali.ewt.wizard.BaseWizard$Action$1.run(BaseWizard.java:4033) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) at oracle.javatools.internal.ui.EventQueueWrapper._dispatchEvent(EventQueueWrapper.java:169) at oracle.javatools.internal.ui.EventQueueWrapper.dispatchEvent(EventQueueWrapper.java:151) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) at java.security.AccessController.doPrivileged(Native Method) at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) at java.awt.Dialog.show(Dialog.java:1082) at java.awt.Component.show(Component.java:1651) at java.awt.Component.setVisible(Component.java:1603) at java.awt.Window.setVisible(Window.java:1014) at java.awt.Dialog.setVisible(Dialog.java:1005) at oracle.bali.ewt.wizard.WizardDialog.runDialog(WizardDialog.java:382) at oracle.bali.ewt.wizard.WizardDialog.runDialog(WizardDialog.java:298) at oracle.ide.dialogs.WizardLauncher.runDialog(WizardLauncher.java:51) at oracle.dbtools.migration.workbench.core.ui.quickmigrate.QMWizard.launch(QMWizard.java:1444) at oracle.dbtools.migration.workbench.core.QMLauncher.launch(QMLauncher.java:40) at oracle.dbtools.raptor.controls.sqldialog.ObjectActionController.handleEvent(ObjectActionController.java:196) at oracle.ide.controller.IdeAction$ControllerDelegatingController.handleEvent(IdeAction.java:1482) at oracle.ide.controller.IdeAction.performAction(IdeAction.java:663) at oracle.ide.controller.IdeAction.actionPerformedImpl(IdeAction.java:1153) at oracle.ide.controller.IdeAction.actionPerformed(IdeAction.java:618) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.AbstractButton.doClick(AbstractButton.java:376) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:708) at java.awt.EventQueue$4.run(EventQueue.java:706) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) at oracle.javatools.internal.ui.EventQueueWrapper._dispatchEvent(EventQueueWrapper.java:169) at oracle.javatools.internal.ui.EventQueueWrapper.dispatchEvent(EventQueueWrapper.java:151) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

        buenas, estoy comenzando a usar el sqldeveloper, la cuestion es que necesito crear 1 usuario, y con ese ususario crear 3 tablas, luego crear otro usuario, y con este ultimo insertar datos en las 3 tablas del usuario anterior, saben como puedo hacerlo? algun tutorial por ahi que me puedan recomendar, gracias!

        Se ha producido un error al realizar la operación solicitada: Error de E/S: The Network Adapter could not establish the connection Código de proveedor 17002

        Hola, te comento que soy estudiante de Ingeniería informática, y tengo el ramo de base de datos en el cual tenemos una base de datos de Oracle 10g en una maquina virtual con Windows XP, y en el sistema anfitrión tenemos win8 con sql developer. la pregunta es como conectar sql developer con la base de datos que esta en virtuabox. por ahora te comento que las conecciones de red al parecer están bien, tengo coneccion a internet en el cliente huésped (winXP) y todo funciona bien pero aun no logro conectar developer con la base de datos. me podrias ayudar por favor?

        Quiero saber si puedo compilar scripts PL/SQL con sqldeveloper. Si es posible, quisiera orientación acerca de como hacerlo, ya que lo he intentado y no he podido. Gracias.

        Hola,
        Tengo una duda,
        Me sale una zona en la parte de arriba de color peor unicamente en esta pagina web.
        Pero si entro con el telefono movil no esta.

        Gracias por avisar, pero puedes concretar eso de color peor? No será el aviso de las cookies? En principio está todo bien.
        Te agradezco si nos puedes enviar un email con un pantallazo a admin @ dataprix.com, y así sabremos seguro a qué te refieres, o si te va mejor registrarte y abrir un tema adjuntando el pantallazo en el foro http://www.dataprix.com/forum/general/dataprix, que es para comentar cuestiones sobre el funcionamiento de la web.

        Un saludo,

        Hola,
        Soy novata, y seguro que es una pregunta estupida....

        No encuentro como para publicar las imagenes.

        Gracias. :)

         Que tal Carlos y foro en general,

         

        Es cierto que es poderosa esta herramienta, solo tengo una duda, como se realiza el cambio de contraseña de un usuario que ya expiro, desde sqlplus o toad por ejemplo aparece la ventana de dialogo o pide el cambio de contraseña, cosa que el sqldeveloper solo aparece el mensaje y no te permite cambiarla.

         

        Saludos

        In reply to by OMARE

        Puedes probar a cambiar el password con un comando alter user de una sola línea, así no necesitas ningún diálogo:

        SQL> alter user usuario_bd identified by usuario_pwd; 
        

        Otra opción es hacerlo desde el entorno gráfico. SQL Developer, en el área de conexiones, al hacer click con el botón derecho sobre cualquiera de ellas, te ofrece la opción de cambiar el pasword (Reset password) directamente. El problema es que nosmalmente esta opción sale en gris porque por JDBC no se puede hacer y la herramienta necesita que tengas instalado un cliente de Oracle para hacerlo por OCI.

        Si te sale en gris te va a ser más sencillo probar el alter user (y si tienes privilegios para cambiar el password), o ir por SQLPlus, pero igualmente te enlazo este post donde explican muy bien cómo instalar el Cliente de Oracle para habilitar la opción de resetear passwords en Oracle SQL Developer.

        Saludos!

         

        In reply to by Carlos

        necesito cambiar mi contraseña con el código para una entrega de una práctica
        Sé que es esa línea de código pero no entiendo muy bien como lo tengo que poner con mi usuario y tal.
        ¿Podrías poner un ejemplo?

        Gracias

        In reply to by Giovanni

        Podrías hacer que tu script lance una consulta que te genere los datos en formato CSV, y los guarde en un fichero de teto de extensión .csv, que Excel reconocerá.
        De todas maneras, si tienes la posibilidad, puede que se salga más a cuenta crear en Excel una conexión ODBC hacia Oracle, e importar los datos desde el mismo Excel.

        Buenas tardes expertos.
        Basicamente se me presenta el siguiente error cundo intento conectarme a al base de datos

        Se ha producido un error al realizar la operación solicitada:

        Error de E/S: The Network Adapter could not establish the connection

        Código de proveedor 17002

        la primera vez que lo intale funciono perfectamente pero luego no he podido. Favor si me pudieras ayudar
        Gracias.

        In reply to by Greivin (not verified)

        El error 17002 desde SQL Developer es equivalente al error ORA-12541 de la base de datos, o sea, que por alguna razón la conexión no puede llegar al listener de la base de datos Oracle remota. Tienes que revisar todo lo que puede fallar por el camino, y si el listener de la base de datos está levantado.

        • 1. Si utilizas el tnsnames.ora, lo primero revisa que esté todo correcto, aunque si antes conectabas y no ha habido cambios lo más probable es que ya lo tengas bien.
        • 2. Revisa que las dos máquinas se puedan comunicar, que no haya ningún puerto cerrado y esas cosas.. Para esto te puede ir bien, depués de hacer un ping desde el cliente al servidor, utilizar el tnsping:

        > tnsping nombre_del_servicio

        o también

        > tnsping ‘(ADDRESS=(PROTOCOL=tcp)(HOST=nombre_servidor_o_ip)(PORT=1575))’  
        • 3. Si tienes comunicación desde la máquina cliente, entonces el problema ya debería estar en el servidor, que realmente podría no tener levantado el servicio del listener de Oracle. En este post sobre el listener tienes información para comprobar su estado, y levantarlo si es necesario.

         

         

        que tal, estoy usando varias versiones de la herramienta y he intentado conectarme a una base de datos de un cliente la cual esta en oracle 8i.

        Me aparece el siguiente mensaje.

        Estado: Fallo:Fallo de la Prueba: Versión de Oracle Database no soportada.

        Por favor su ayuda urgente necesito realizar la conexion usando esta herramienta, o en su caso una version free

        Buen día, tengo una pregunta y de antemano muchas gracias por la respuesta.

        Necesito limitar el numero de dígitos decimales en cualquier consulta que haga, actualmente y repentinamente me deja hasta 20 dígitos decimales, por lo cual cuando paso la información a excel este me distorsiona los valores.

        Me gustaría saber si se puede configurar PL SQL Developer para que me limite el numero de decimales a mostrar pero desde la herramienta PL SQL develope y se se puede en que ruta.

        Muchas gracias.

        hola.

        ante todo gracias por la atención prestada,

        mi inquietud es que cuando se generan los archivos planos para generar el pago de nomina por transferencia al banco. uno de los empleados aparece con el número de identificación (cédula de ciudadanía) en 0000000000 y en el banco lo rechazan, agradezco las posibles recomendaciones del caso.

        Buenos días , mi problema es de rendimiento de la aplicación , es muy lenta al conectarse a una base de datos , al hacerle click en la conexión se puede demorar al rededor de 2 minutos en abrirla , tengo al rededor de 30 conexiones en la aplicación configuradas . Hay alguna forma de aumentar el rendimiento ,por ejemplo tengo el toad y la consola de enterprise manager y el mismo numero de conexiones y en esas aplicaciones no tengo problemas .
        SO :window 8 , memoria : 4GB .

        Gracias

        In reply to by Guillermo Lalinde (not verified)

        Tardar 2 minutos por conexión es muy exagerado, realmente has de tener un problema con algún conector, con la configuración o algo así.

        He encontrado un post con consejos para mejorar el rendimiento de SQL Developer con Windows Vista. Es antiguo, pero puede que los consejos que da te sirvan: Post para mejorar el rendimiento de Oracle SQL Developer 

        Saludos,

         

        Hola,

        me gustaría saber si se puede (y en tal caso cómo) configurar que al ejecutar un conjunto de sentencias SQL como script en la hoja de trabajo, cuando falle alguna, te pida confirmación de seguir o no.

        Muchas gracias

        Hola, que tal.
        SQL developer tiene alguna opción para convertir de manera automática a myúscula las funciones y palabras reservadas?
        Ejemplo:
        case
        when
        select
        nvl

        y que al escribirlas sea automático? sin necesidad de oprimir teclas adicionales?
        Gracias!

        In reply to by Reynaldo (not verified)

         Para convertir a mayúscula las palabras clave, en 'Herramientas --> Preferencias --> Base de datos --> Formateador SQL --> Otros' tienes un selector con el que puedes configurar la opción de 'Palabras clave en mayusculas', utilizando esta opción al aplicar formato debería ponerte las palabras clave en mayúsculas.

        Lo que ya no te puedo decir es si existe la opción de que aplique este formateado de mayúsculas 'al vuelo'. Yo creo que no porque en los estilos por defecto del editor de códigos sólo puedes seleccionar para cambiar colores y estilo de fuente, pero no descarto que haya alguna manera de hacerlo. Si la encuentras avisa!

        Configurar editor de Oracle SQL Developer

         

        In reply to by Isaacq652

        Hola Isaac Para poder incluir imágenes tendría que subir el perfil de tu usuario a colaborador, tendrías acceso a un editor con más opciones y también podrás publicar entradas de blog. Si quieres puedo asignarte este perfil, pero con el compromiso de que si publicas alguna entrada de blog ha de ser original, y relacionada con temáticas de Dataprix. Saludos!

        Hola tengo un problema al escribir sentencias en la hoja de trabajo del sqldeveloper, al darle un salto de linea (enter), me cambia la sentencia a minúsculas, me gustaría que toda la sentencia fuera en mayúsculas.

        Tengo una problema, no puedo hacer un enter en el editor de codigo, y no puedo navegar entre las lineas de mis querys, no se realmente que paso, ayer trabaje muy bien y hoy amaneci con este problema.

        Podrian apoyarme, debe ser algun parametro

        Hola, tengo un problema con el host de la base de datos y me gustaria saber si puede ayudarme, la cuestion es que cuando intento tener una conexion a la base de datos, en la parte de la cadena de conexion me aparece un host diferente al establecido en el archivo tnsnames.ora, me gustaria saber a que se debe que cargue un host difeferente al establecido en dicho archivo y como puedo corregirlo, de ante mano gracias por la ayuda

        In reply to by Anonimo (not verified)

        Comprueba que no tengas más de un fichero TNSNAMES.ora en tu máquina, puede que esté cogiendo la información de otro. El tnsnames que developer utiliza por defecto es el que hay en el directorio $ORACLE_HOME/network/admin, o si no el que haya definido en la variable de entorno TNS_ADMIN. Si tu máquina es Windows el problema podría ser que no tengas definida esta variable de entorno. Tendrías que definirla y asignarle como valor el path al directorio donde tienes el tnsnames.

         

        Hola soy nueva con lo que es base de datos y tengo que realizar una consulta entre dos tablas distintas y comparar los datos , entonces si los datos que estan en la tabla A no existen en la tabla B mostrarlos., como se puede realizar esta consulta
        tengo el join de las dos tablas listas, pero no se como comparar los datos que no existen
        gracias por cualquier ayuda...

        In reply to by Anonimo (not verified)

        Te recomiendo revises manuales de sql, especificamente el uso de outer join, ahi podras realizar tu consulta.

        Tengo un servidor con SunOS donde está la BBDD de Oracle y las distintas bases de datos (instancias).

        Entro con un usuario unix normal, llamo a sqldeveloper y puedo ver todas las instancias y entrar en ellas.

        El problema es que no se que usuario de Oracle soy que tngo todos esos permisos...

        ¿Hay alguna forma de saberlo? básicamente para evitar que cualquiera pueda acceder a cualquier dato, (aunque sean todos de desarrollo).

        Un saludo.

        Luis

        In reply to by Anonimo (not verified)

        Me respondo solo. Se entra en sqlplus como sysdba y se ejecuta: SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND'; Y esto da la respuesta INST_ID SID SERIAL# SPID USERNAME PROGRAM ------- ---- -------- ------ --------- --------------- 1 142 39 253 SYS sqlplus@XXXXXX El usuario de SQLPLUS es SYS, pero no conectado como DBA Un saludo. Luis

        Tengo una duda, a la que no he podido dar respuesta aún por mi mismo, cuando hago una consulta en sql developer, quiero copiar el resultado contodo y los encabezados, pero no se copia así, solo se copian los registros que me arroja el resultado. ¿Será que me puedan apoyar diciendome como poder hacerlo? Saludos!

        In reply to by Alan Peña (not verified)

        Apara copiar los encabezados debes dar clic derecho sobre el resultado y poner exportar, ahí te permitirá enviarlo a excel o algún otro formato requerido.

        hola tengo unas consultas y no se si me puedan ayudar, existirá una forma sencilla de insertar consultas en sql developer? es decir, en alguna parte del sql existirá la opción de solo ingresar algunos datos para que el programa me tire como poner los comando y no pensar tanto? porfavor lo necesito saber con mucha urgencia

        In reply to by nataly (not verified)

        ve hacia el árbol de objetos, en la carpeta de tablas selecciona la tabla en la que desean insertar registros en la ventana del editor se desplegará las propiedades de la tabla colócate sobre la pestaña datos y en esta podrás insertar datos de manera manual. Espero haberte ayudado. Saludos.

        Hola, buenas. Necesitaríamos de la bbdd generada en SQL Developer mostrar el diagráma o modelado E/R para tenerlo impreso. No se si es posible realizarlo por esta herramienta, creo que sí, pero no dispongo de suficiente experiencia con ella. Me podrían ayudar? Gracias!

        por que en la hoja de trabajo sql no funciona la tecla para borrar y ctrl X,C dejaron de funcionar

        Cordial saludo compañeros: Tengo dos shp uno de Municipios y otro de Puentes. Alguien me podría ayudar en resolver este ejercicio en bases de datos en ORACLE – sqldeveloper. Necesito es el Script 1 - Cuál es el municipio que tiene más puentes 2 – Cuáles puentes tiene el municipio de HERVEO en el Tolima.

        Buenas noches, estoy tratando de migrar una DB de SQLServer a ORACLE con SQLDeveloper, hago todos los pasos y al final sale un mensaje que dice "Fallo en las acciones de migración", alguien ha resuelto un problema semejante? Quedo muy atenta.

        Hola, existe alguna manera de poner el numero de columnas en el editor(hoja de trabajo) de sql developer, asi como se pone los numeros de filas.

        In reply to by Isaac (not verified)

        Si, dirigite en SQLDev a Tool (Herramientas) luego Preferences, en el arbol desplega la opción Code Editor y buscas la opción Line Gutter, allí del lado derecho marcas la opción: Show Line Number y listo.

        In reply to by Enzo (not verified)

        Estimado esta opcion ya la he seleccionado y solo me muestra el numero de filas mas no de columnas quiero que me muestre numero tanto en X como en Y Para cuando me de un error como este: Error on line 234 column 45 poder verlo rapidamente.

        Como puedo crear tablas en un usuario especifico que no es dba,necesito orientación y si me puede recomendar algún pagina. Gracias

        Hola. me gustaria mucho que me ayudes, cuando entro a mi data developer, me sale una ventana mostaza con comande de to go, herramientas, vista y windows. No se como hacer para arreglarlo, estuve tratando de arreglar el hecho de no poder abrir mi conexion y puse algo que no debia y ahora me sale eso

         Hola

         

        Tengo

         

         -un sistema operativo windows 7 de 64 bits.

        -SQL Developer y me funciona bien me conecto indistintamente a Oracle 10g como 11g.

         

        El problema me surge porque me he incorporado a un nuevo proyecto y me tengo que instalar PL SQL Developer.

        Como no sabía mirar si el cliente que tenía instalado era de 32 o de 64 bits, me he instalado los clientes 11g tanto para 32 como 64 bits.

        Antes y después de instalarme el cliente 11g no podía logarme en las bases de datos con PL SQL Developer.

        Ahora después de instalarme los dos clientes 11g sigo con el mismo problema.

        Desde opciones de tools de PL SQL Developer , voy a ORACLE_HOME tengo la posibilidad de seleccionar OraCliente 11g_home1; OraClient10_home1 y vacío. 

        con todo sigo sin poder logarme en PL SQL Developer y no conozco a nadie que tenga los dos (Oracle Developer y PL SQL Developer ) funcionando.

         

        Saludos

         

        Lourdes

        In reply to by Carlos

        [quote=carlos]¿Y qué mensaje de error te devuelve Oracle SQL Developer al intentar conectar?[/quote] Carlos buenas tardes, necesito ayuda en sql developer, me sale este error: "Se ha producido un error al realizar la operación solicitada: Error de E/S: The Network Adapter could not establish the connection Código de proveedor 17002" no se que hacer he intentado de todo y nada. un saludo y espero tu respuesta anciosamente ^^.

        Yo tengo un problema al conectarme a una base de datos hecha en SQL Server, ya que no me muestra las tablas que existen es dicha Base, pero si puedo hacer consultas exitosas... Cuando intento abrir la estructura de la Base me muestra un error con la siguiente leyenda

         

        Se ha producido un error al realizar la operacion solicitada:

        El nombre de la columna 'suid' no es valido.

        Código del proveedor 207

         

        Ojala alguien pueda ayudarme

        Hola tengo en mi equipo Windows 8, ya instale la Base de datos de Oracle y todo parece que se instalo correctamente ahora quiero instalar sql developer para poder ingresar solo que al bajar la version sqldeveloperx64 que tiene incluido el jdk la ejecuto en mi lap y empieza a cargar pero cierra la ventana y baje tambien el sqldeveloper que necesita jdk pero no me funciona, hay algun truco que desconozca para poder instalar oracle 11g en mi lap? Les agradezco su respuesta.

        Buenos Dias Estimados 

        Favor alguien me puede ayudar:

        Necesito realizar una migracion de Mysql a oracle, saben como hacerlo desde sql developer?

        In reply to by Isaac (not verified)

        Pues dificilmente, porque por ejemplo, las fechas te van a dar más de un dolor de cabeza.

        Lo normal es exportarlos a un fichero y luego importar ese fichero, al que a veces, hay que pasar procesos para adaptar el contenido.

        Además debes tener en cuenta el juego de caracteres de cada BBDD

        Hola buenas tardes carlos quiero hacerte una consulta. Fijate que tengo un modelo entidad-relacion en oracle sql developer data modeler, el cual quiero sincronizar con una base de datos que tengo en oracle sql developer y el problema es que no se como hacerlo, ya he intentado por ejemplo. archivo/importar/modelo de oracle designer. luego selecciono la conexion y le doy importar, me aparece el combo de las conexiones que deseo importar en este caso es una, pero cuando busco no me aparece el archivo del modelado ya que lo tengo registrado con extension.dmd haz de cuenta que el archivo se llama prueba.dmd, pero no me lo reconoce el asistente ya que solo acepta archivos .xml y por lo tanto no puedo subir el archivo donde hice mis correcciones para poder sincronizarlo con mi base de datos ¿ que me aconsejas que haga ? de antemano muchas gracias.

        Hola,

        tengo un problema a la hora de exportar una base de datos de sql

        Si lo exporto a excel, hace todo el proceso pero no exporta ningun dato.

        Si lo exporto a texto me coge un nº de registros muy pequeño. No en todos los casos el mismo nº de registros.

        Si lo selecciono y copio me da un mensaje de COMMAND NO HANDLE

        Comentaros que hasta hace dos dias no tenia este problema, ha sido de un dia para otro.

        Sabeis qué ha podido ocurrir??

         

        Muchas gracias

        En oracle sql Developer en donde puedo encontar el archivo sqlnet.ora?

         

        Saludos:

        Pueden ayudarme con el formato de fecha para importardatos desde csv a oracle, mi fecha es la siguiente.

        17/08/2015 10:30:40,000000000 AM

        De antemano gracias por la ayuda.

         

        In reply to by Jorge Caluquí

        Hola Jorge

        Para convertir un string a fecha en Oracle se suele utilizar la función TO_DATE, que te permite especificar una máscara con el formato que tiene la fecha en la cadena.

        Pero tu formato incluye milisegundos, y el tipo DATE de Oracle sólo llega al 'detalle' de segundos. Si puedes hacer que el csv no incluya milisegundos en la hora sería tan sencillo como hacer algo así:

        SELECT TO_DATE('17/08/2015 10:30:40 AM', 'DD/MM/YYYY HH:MI:SS AM') FROM dual;

        Si no te puedes librar de los milisegundos, puedes hacer primero una conversión a TIMESTAMP con TO_TIMESTAMP, y después convertir el TIMESTAMP en DATE. Algo así como esto:

        SELECT  CAST(TO_TIMESTAMP('2004-09-30 23:53:48,140000000', 'YYYY-MM-DD HH24:MI:SS,FF9') AS DATE)
        FROM    dual

        SELECT  CAST(TO_TIMESTAMP('2004-09-30 23:53:48,140000000', 'YYYY-MM-DD HH24:MI:SS,FF9') AS DATE)
        FROM    dual
        SELECT CAST(TO_TIMESTAMP('17/08/2015 10:30:40,000000000 AM', 'DD/MM/YYYY HH:MI:SS AM',FF9') AS DATE) 
        FROM dual

         

        Ejecutando desde SQL Developer la siguiente sentencia:

         

        export * tablaY where mail=x;

         

        da como resultado : 1 Fila ha sido actualizada

         

        pero no consigo averiguar cual? qué se ha modificado exactamente? Entenderia que esa sentencia exporta todos los campos de la tablaY donde el campo mail vale x pero al no poner fichero ni nada donde lo exporta? y por qué sale el mensaje de fila actualizada?

         

        Cualquier ayuda es grata ! Gracias.

        Hola que tal tengo un gran problema tengo un servidor con windows server 2003 y ya caduco la licencia que compre ahora al encender el servidor me pide que registre la licencia y no me deja ingreasr al sitema que puedo hacer para sacar mi base de datos sin perder la informacion ya intente con modo de prueba pero no me permite para la base de datos

        cada ves que creo una conexion se crea con las tablas creadas de conexiones anteriores, como puedo hacer para crear conexiones totalmente limpias? :C

        Buenas tardes.

        Estoy tratando de hacer un SP delete, y si lo hace pero siento temor de que genere bloqueos ya que son tablas muy muy grandes. Tengo entendido que se puede hacer una depuracion de 500 en 500 para evitar estos bloqueos, he visto unos ejemplos y jugado pero creo son mas orientados a SQLServer que a Oracle.

        Me podrias orientar o saber si tienes alguna entrada sobre este tema, te agradeceria.

        Te comento que lo que he visto y jugado es algo como esto

        SET ROWCOUNT 500 delete_more:
        stmt_str := 'DELETE FROM schema.table WHERE (schema.table.campo_date) BETWEEN TO_DATE('''||start_date||''') AND TO_DATE('''||end_date||''')';
        IF @@ROWCOUNT > 0 GOTO delete_more
        SET ROWCOUNT 0

        Pero no logro hacer un SP.. Tipo.

        create or replace PROCEDURE "SP_DELETE_CC_" AS
        start_date date;
        end_date date;
        stmt_str varchar2(1000);
        BEGIN
         select FECHAINICIO into start_date from SOURCE_SCHEMA.SOURCE_TABLE_CC
         where DESCRIPCION='SOURCE_SCHEMA.TABLE' AND ID_ ='20';
         select FECHAFIN into end_date from SOURCE_SCHEMA.SOURCE_TABLE_CC
         where SUJETO_DESCRIPCION='SOURCE_SCHEMA.TABLE' AND ID_SUJETO ='20';
         SET ROWCOUNT 500 delete_more:
         stmt_str := 'DELETE FROM TARGET_SCHEMA.TARGET_TABLE WHERE (TARGET_SCHEMA.TARGET_TABLE.CAMPO_DATE) BETWEEN TO_DATE('''||start_date||''') AND TO_DATE('''||end_date||''')';
         IF @@ROWCOUNT > 0 GOTO delete_more SET ROWCOUNT 0 EXECUTE IMMEDIATE stmt_str;
         EXECUTE IMMEDIATE 'commit';
        END;

        Muchas Gracias

        Hola a todo@s, tengo la siguiente consulta que ejecuto con : SELECT mar_nu_prov,unidades,familia, replace(round(neto_sin_iva, 2) - rappel,'.',',') AS neto FROM alma, (SELECT lin_codigo, mar_descripcion, LPad(mar_familia, 5, ' ') || ' ' || fam_nombre as Familia, LPad(mar_subfamilia, 5, ' ') || ' ' || subfam_nombre as SubFamilia, mar_pre_costo costo_art, mar_pre_medio medio_art, '' as proveedor, Sum(lin_uni) as unidades, Sum(lin_bonif) as bonif, Sum(lin_bultos) as bultos, Sum(round(round(lin_uni * lin_p_venta,2) * (1 - lin_descuento_t/100), 2)) as ventas, Sum(lin_uni * mar_peso) as kilos, Sum(Round(lin_p_costo * (lin_uni + lin_bonif), 2)) as costo, Sum(Round(lin_p_medio * (lin_uni + lin_bonif), 2)) as pmedio, ((sum(round(round(lin_uni * lin_p_venta, 2) * (1 - lin_descuento_t/100), 2))) - sum(round((lin_uni + lin_bonif) * lin_p_costo, 2))) as BenfBruto, ((sum(round(round(lin_uni * lin_p_venta, 2) * (1 - lin_descuento_t/100), 2))) - sum(round((lin_uni + lin_bonif) * lin_p_medio, 2))) as BenfPM, Sum(round(round(round(lin_uni * lin_p_venta, 2) * (1 - lin_descuento_t / 100), 2) * (1 - glin_dto_pp / 100) * (1 - glin_dto_adicio_01 / 100) * (1 - glin_dto_adicio_02 / 100) * (1 - glin_dto_adicio_03 / 100), 2)) as neto_sin_iva, Sum(round(round(round(round(lin_uni * lin_p_venta, 2) * (1 - lin_descuento_t / 100), 2) * glin_recargo / 100, 2) * (1 + lin_iva_v / 100), 2)) rappel, Sum(glin_descuento_i) glin_descuento_i, Sum(round(Round(round(round(lin_uni * lin_p_venta,2) * (1 - lin_descuento_t/100),2) * (1 - glin_dto_pp / 100) * (1 - glin_dto_adicio_01 / 100) * (1 - glin_dto_adicio_02 / 100) * (1 - glin_dto_adicio_03 / 100), 2) * (lin_iva_v/100), 2)) IVA_V FROM linfac, glinfac, articulo, familia, subfam, proved01, vendedor,client01 WHERE glin_n_fac = lin_n_fac AND glin_estado = lin_estado AND glin_estado IN (1, 6, 8) AND Trim(mar_n_articulo) = Trim(lin_codigo) AND mar_familia = fam_codigo AND mar_subfamilia = subfam_codigo (+) AND mar_familia = subfam_codigo_fam (+) AND glin_fecha BETWEEN To_Date('01/01/2015', 'dd/mm/yyyy') AND To_Date('31/12/2015','dd/mm/yyyy') AND glin_cliente BETWEEN 430010001 AND 430999999 AND glin_alma BETWEEN 2 AND 40 AND glin_vendedor BETWEEN 2 AND 2 AND mar_familia BETWEEN 1 AND 99 AND glin_zona BETWEEN 0 AND 999 AND lin_provee = prove_cuenta (+) AND mcl_vendedor = ven_codigo (+) and glin_cliente = mcl_n_cliente GROUP BY lin_codigo, mar_descripcion, LPad(mar_familia, 5, ' ') || ' ' || fam_nombre, LPad(mar_subfamilia, 5, ' ') || ' ' || subfam_nombre, mar_pre_costo, mar_pre_medio,glin_recargo ) , articulo A WHERE alm_codigo = lin_codigo AND alm_codigo = A.mar_n_articulo GROUP BY lin_codigo, A.mar_descripcion,mar_nu_prov,familia, subfamilia,costo_art, medio_art,unidades, bultos, bonif, ventas, costo, pmedio, BenfBruto, BenfPM, neto_sin_iva, glin_descuento_i, iva_v ,rappel, kilos, A.mar_tipo_arti, A.mar_unid_bulto esta conmsulta me da un resulto como el siguiente: PROVEEDOR UNIDADES FAMILIA PRECIO 400010144 154 1 Tubería de Sanitaria 34,17 400010144 25 1 Tubería de Sanitaria 10,19 400010144 6 1 Tubería de Sanitaria 7,68 400010555 31 1 Tubería de Sanitaria 52,02 400010144 4 1 Tubería de Sanitaria 3,64 400010008 22 3 Abastecimiento PE 55,48 400010008 6 3 Abastecimiento PE 39,65 400010837 4 2 Tubería de Saneamiento 54,28 400010008 6 3 Abastecimiento PE 34,98 400010008 2 3 Abastecimiento PE 142,13 400010664 41 3 Abastecimiento PE 111,69 400010664 9 3 Abastecimiento PE 36,07 400010664 32 3 Abastecimiento PE 179,36 400010364 6 3 Abastecimiento PE 21,42 400010364 6 3 Abastecimiento PE 31,55 400010627 0 3 Abastecimiento PE 0 400010664 6 3 Abastecimiento PE 89,28 400010144 38 1 Tubería de Sanitaria 9,95 400010144 3 1 Tubería de Sanitaria 2,4 400011000 2 4 Abastecimiento PP 33,72 400010751 87 5 Abastecimiento PB Terrain 215,38 400010751 3207 5 Abastecimiento PB Terrain 534,45 400010751 86 5 Abastecimiento PB Terrain 328,7 400010751 1 5 Abastecimiento PB Terrain 2,57 400010751 0 5 Abastecimiento PB Terrain 0 400010833 0 7 Abastecimiento Fund. 0 400010774 -6 8 Abastecimiento CU. -1,8 400010774 1 8 Abastecimiento CU. ,2 400010774 26 8 Abastecimiento CU. 9,86 400010774 8 8 Abastecimiento CU. 6,24 400010774 8 8 Abastecimiento CU. 8,42 400010774 6 8 Abastecimiento CU. 5,3 400010882 127 4 Abastecimiento PP 279,87 400010882 217 4 Abastecimiento PP 92,77 400010308 15 9 Abastecimiento Galvanizado 16,95 400010352 50 10 Fijación 27,38 400010352 49 10 Fijación 65,84 400010944 118 10 Fijación 16,32 400010832 15 10 Fijación 7,2 400010352 11 10 Fijación 18,89 400010180 2 12 Tubería de presión 40,28 400010144 6 12 Tubería de presión 6,46 400010352 10 10 Fijación 22,9 400010540 1 12 Tubería de presión 9,08 400010180 6 12 Tubería de presión 27,92 400010180 1 12 Tubería de presión 5,78 400010751 56 10 Fijación 16 400010751 8 10 Fijación 2,11 400010180 18 12 Tubería de presión 19,15 400010180 8 12 Tubería de presión 42,63 NECESITO POR FAVOR QUE ALGUIEN ME AYUDE, QUIERO AGRUPAR POR PROVEEDOR, FAMILIA Y QUE SUME LAS UNIDADES Y TOTALES DEL PRECIO Y NO TENGO NI IDEA DE COMO HACER ESTO, AGRADECERÍA ENORMEMENTE SI ALGUIEN PUEDIERA AYUDARME. UN SALUDO PARA TODOS DESDE TENERIFE . ESPAÑA

        Hola, quiero establecer una conexión y al hacer la prueba me sale un cartel que me dice "String index out of range:19841", me p'odrían ayudar con eso? Muchas gracias.

        Buenos días

        Me he instalado recientemente el programa SQL Developer, mi idea era crear dos conexiones una a Oracle y otra a SQL Server

        La conexión a Oracle la ha podido realizar sin problemas pero la conexión a SQL Server no la puedo configurar porque en donde esta el círculo rojo no aparece la pestaña SQL Server.

         

        He descargado varios controladores jdbc para SQL Server y los he asignado en Herramientas/Preferencias/Base de datos/Controladores JDBC de Terceros. Pero con ninguno de ellos he conseguido que me aparezca la pestaña.

        La versión de SQL Developer es la: Oracle IDE18.2.0.183.1748

         

        ¿Alguien puede ayudarme por favor?

         

        Gracias.

        Oracle Warehouse Builder 10g disponible sin cargo

        Oracle Warehouse Builder 10g disponible sin cargo Carlos Wed, 05/09/2007 - 22:20

        Si trabajas con bases de datos Oracle y te estás planteando la posibilidad de utilizar una herramienta ETL (Extract, Transform & Load) para la alimentación de un Data warehouse, o simplemente para facilitar integraciones o migraciones de datos, te puede ir muy bien saber que Oracle permite la utilización de la versión básica de su herramienta de ETL Oracle Warehouse Builder 10g Release 2, sin coste adicional de licencias.

        Eso sí, has de disponer de al menos una licencia de Oracle Database Standard Edition One, Oracle Database Standard Edition o Oracle Database Enterprise Edition.

        Para más detalles, consultar el artículo de Oracle Press Oracle Anuncia la Disponibilidad General de Oracle Warehouse Builder 10g Release 2


        Coméntalo en el foro de OWB

        Oracle WorkFlow sobre OWB

        Oracle WorkFlow sobre OWB cfb Thu, 05/29/2008 - 11:14

        Tengo instalado Oracle Workflow, y lo utilizo desde Oracle Warehouse Builder. Para definir los flujos de proceso no hay ningún problema, todo bien, y la validación también me la da como correcta. El problema me lo encuentro cuando quiero desplegar un workflow desde el control center. Parece que cuando tiene que crear el dblink se encuentra un nombre demasiado largo, que sobrepasa los 30 caracteres que permite PL/SQL en los nombres de variables.

        El mensaje de error que devuelve al intentar hacer el despliegue es este:

        Nombre Acción Estado Log
        ODS Crear Error
        ORA-06550: línea 1, columna 29:
        PLS-00114: el identificador 'DWH.REGRESS.RDBMS.DEV.US.O' es demasiado largo
        ODS Crear Error
        RPE-02215: Fallo al probar el sinónimo ODS_WB_RTI_WORKFLOW_UTIL.
        ODS Crear Error
        RPE-02260: Database User OWF_MGR must be a Control Center User.
        Please use the OWB Design Client against the Control Center repository
        to grant the Control Center User role.        
         

        Yo creo que tiene que ver con el churro que la base de datos añade a los nombres de DBLINK en la versión 10g (es la que he utilizado como repositorio de OWF), que hace que este sea demasiado largo.

        Alguien sabe si es este el problema o puede ser otra cosa? Si fuera este, cómo hago para que la base de datos no agregue al nombre el 'REGRESS.RDBMS.DEV.US.ORACLE'. Si el link se llamara sólo 'DWH' seguro que ya no tendría problema.

        Efectivamente el problema estaba en el nombre del dblink que crea OWF. A partir de la versión 10g, las bases de datos Oracle tienen un nombre global compuesto por el nombre de la instancia, lo que siempre hemos llamado SID, y el dominio. Este dominio por defecto es REGRESS.RDBMS.DEV.US.ORACLE.COM, o sea que el nombre global de mi base de datos era DWH.REGRESS.RDBMS.DEV.US.ORACLE.COM

        Al crear cualquier DBLink, la base de datos agrega al mismo el nombre del dominio:

        SQL>create database link mi_db_link connect to scott identified by tiger using 'dwh'; Database link created. SQL> select db_link from user_db_links;

        DB_LINK ------------------------------------------

        MI_DB_LINK.REGRESS.RDBMS.DEV.US.ORACLE.COM

         

         

        Este dominio realmente no sirve de mucho, por lo que no pasa nada si se cambia por otro más corto (con un usuario con privilegios de DBA):

        SQL> select * from global_name;

         

        GLOBAL_NAME --------------------------------------------------------------------------------

        DWH.REGRESS.RDBMS.DEV.US.ORACLE.COM

        SQL> alter database rename global_name to dwh.dataprix.com;

         

        Base de datos modificada.

         

         

         

        Ahora que hemos cambiado el nombre del dominio podemos volver a crear el dblink, y el nombre que le asigna la base de datos ha de ser más corto: SQL> dropdatabase link mi_db_link;

         

        Enlace con la base de datos borrado.

        SQL> create database link mi_db_link connect to scott identified by tiger using 'dwh';

        Enlace con la base de datos creado.

        SQL> select db_link from user_db_links;

        DB_LINK --------------------------------------------------------------------------------

         

        MI_DB_LINK.DATAPRIX.COM

         

        Nuestro database link ahora se llama MI_DB_LINK.DATAPRIX.COM, con una longitud menor que 30 caracteres, por lo que el Workflow ya no tiene ningún problema al hacer el 'deploy'.

         

        Como resumen, por si alguien se ha perdido, lo único que había que hacer era reducir el nombre global de la base de datos con:

        SQL> alter database rename global_name to miBD.mi.dominio.com;

         

        Requerimientos de Targets de Oracle Warehouse Builder

        Requerimientos de Targets de Oracle Warehouse Builder Carlos Wed, 05/14/2008 - 23:02

        Estoy utilizando OWB como herramienta de ETL para la carga de un Datawarehouse, pero también me gustaría utilizarlo para realizar cargas o actualizaciones de datos puntuales en otras bases de datos Oracle.

        El problema es que, por lo que he podido ver, para cada BD en la que quiero tocar o cargar algún dato, tengo que tener instalado un servidor de OWB. Son bases de datos de producción y encuentro algo arriesgado y no muy lógico que para insertar registros en una sola tabla, por ejemplo, tenga que hacer previamente una instalación de la herramienta.

        Alguien sabe si con OWB hay alguna manera de poder definir un esquema destino en otra base de datos sin tener que hacer una instalación del 'runtime' en esa base de datos?

        Hola Carlos.

        No es posible deployar mappings en una bbdd que no tenga instalado el "Control Center" de Warehouse Builder.
        Con lo cual no puedes registrar "targets" fuera de la bbdd donde está WB.

        Puedes crear mappings, tablas, vistas pero nada mas. Todo lo que hagas quedará solamente como metadatos en el proyecto sin poder generar nada en el destino.

        Espero haberte ayudado.

        Saluditos,

        Comparativas y documentación

        Comparativas y documentación Dataprix Tue, 09/08/2009 - 12:58

        Comparativa de MySQL vs Oracle database

        Comparativa de MySQL vs Oracle database cfb Thu, 07/13/2006 - 09:17

        La filosofía del código abierto cada día gana más adeptos, y los sistemas y herramientas que se desarrollan están entrando en las empresas, sobretodo gracias al hecho de que en la mayoría de los casos no es necesario pagar licencias por su utilización.

        Esta clara ventaja competitiva respecto al software de 'código cerrado' que se distribuye bajo costosas licencias hace que las distribuciones de software Open Source estén arrebatando cuota de mercado a importantes empresas como Microsoft y Oracle.

        La cuestión está en si estas herramientas tienen la misma calidad, y pueden garantizar el mismo soporte a las empresas que las utilicen.

        Un ejemplo de este hecho es la utilización de MySQL frente al gestor de bases de datos Oracle. En el artículo que adjunto se realiza una comparativa bastante completa entre ambos.

        Que cada uno saque sus propias conclusiones.

        Para empezar no creo que estas dos gestores de bases de datos esten encuadrados en el mismo sector, pricipalmente porque MySQL no tiene el soporte que tiene Oracle.

        MySQL estaria destinado a pequeñas y medianas empresas que requieren potencia, facilidad pero no estan dispuestos a desembolsar una gran cantidad de dinero en licencias. Ademas, normalmente las aplicaciones tampoco requieren "lo ultimo" en base de datos, asi que MySQL suele ser la mejor eleccion.

        Oracle esta mas orientado a las grandes empresas a las que les gusta olvidarse de los problemas y externalizarlo todo. De esta manera Oracle con sus consultores, con la documentacion disponible y en general con el soporte que otorga a sus clientes consigue con creces el objetivo de que la empresa se "lave las manos" en temas de bases de datos. Eso evidentemente tiene un precio.

        Hblando de rendimiento no creo que la diferencia sea tan grande como nos quieren ahcer creer, MySQL esta preparado para cargas de trabajo muy elevadas y no tiene nada que envidiar nada de Oracle, lo que pasa es que normalmente en temas de hardware a Oracle le dan todos los caprichos y a MySQL le destinan los servidores menos potentes, y asi es normal que Oracle tenga un rendimiento mas elevado.

        Un saludo,
        David

        In reply to by David

        Bueno, tampoco hay que olvidar que MySQL ya dispone de servicios de soporte que ya no tienen mucho que envidiar al ofrecido por Oracle, aunque por supuesto para esto sí que hay que pagar.
        Existe la MySQL Network que ofrece soporte online, MySQL AB ofrece servicios de consultoría, y por supuesto están todos los foros, IRC's y webs de la comunidad. Incluso existen certificaciones oficiales. Además, hay que tener en cuenta que los técnicos que se encuentran tras este soporte son los mismos que han desarrollado el SGBD, y que ante un bug de la aplicación posiblemente podrán reaccionar de manera más rápida, o incluso hacer una adaptación especial del gestor para el problema concreto que un cliente pueda tener.
        Se puede consultar información sobre estos temas en http://www.mysql.org/support/

        Por si la comparativa del documento anterior resulta demasiado extensa, o simplemente para contrastar información, en el archivo al que se puede acceder desde el link adjunto se puede consultar una comparativa más esquematizada (2 páginas) de las principales funcionalidades que ofrecen MySQL, PostgreSQL y Oracle, realizada por un compañero de trabajo. De paso, si alguien quiere consultar su blog, se pueden encontrar cosas muy interesantes, sobretodo sobre el mundo del software de libre distribución.

        In reply to by Carlos

        Hola carlos, estaria interesado en poder ver la comparativa, especilamente entre Oracle y PostgreSQL. Con la direccion que dajastes no me aparece nada. Muchas gracias

        In reply to by eugenio (not verified)

        Hola Eugenio

        He vuelto a adjuntar el documento del artículo inicial, que al parecer se perdió al actualizar la versión de Drupal.
        Sobre la otra comparativa (Oracle y PostgreSQL), efectivamente el blog de 3DES ya no está activo en el dominio indicado. Intentaré averiguar si ha cambiado de dominio y, si es así, actualizaré el enlace en cuanto lo sepa.

        Carlos Fernández

        Analista de sistemas

        PostgreSQL ya no es tan complicada como decian y a partir de su version 8.2.3, las voces que decian que era lenta, se terminaron.

        Mysql corre hasta en un W98, una base de datos que se tilde de tal no podria correr en un sistema asi, PostgreSQL por lo menos en entornos windows requiere NTFS. XP y Windows 2000 serian adecuados.

        Desde 8.2.3 PostgreSQL tiene una velocidad que se pone a tiro, incluso ganando mayores prestaciones, desde su version 5 MySql, aumenta su prestacion, pero seamos sinceros, perdio velocidad. Aunque haciendo un Join de mas de dos tablas siempre tuvo mala performance.

        PostgreSQL hoy por hoy es la unica base de datos capaz de jugar bien en todos los campos.

        Es libre, puede pelear hoy o ser una alternativa para trabajar en esos espacios donde hoy trabaja MySQL, pero MySQL no puede escalar y lograr lo que PostgreSQL logra con multiprocesadores.

        El motor de integridad de Mysql es comprado por oracle

        Es libre y hoy supera a MSSQL aun corriendo en Windows 2000 server, propiedad de la misma empresa que MSSQL. Y tiene toda la funcionalidad de MSSQL.

        Es gratis y pelea a la par con Oracle, siendo la comunidad de PostgreSQL y su pagina oficial una buena fuente de documentacion y soporte.

        Habiendo trabajado 10 años con MSSQL hace 3 pase a PostgreSQL, aun desarrollo en Visual Basic, estoy lejos de una guerra santa, pero antes de elegir PostgreSQL, por la popularidad de MySQL, probe este, con un join de tres tablas no pudo superar a access, en aquel momento.

        Al principio no me fue comodo, hasta que encontre los GUI adecuados, ahora me quedo con PostgreSQL, que si ocupa el lugar que le corresponde, veremos caer mucho software propietario.

        Hasta Luego

        In reply to by Anonymous (not verified)

        La verdad es que todo lo que he oído de esta base de datos es bueno, pero parece que en el entorno Open source, o por lo menos el de web, el que sigue 'triunfando' es MySQL, será cuestión de costubres, marqueting, herramientas, soporte, comodidad, o quizás existan razones técnicas..
        Yo aún no he tenido ocasión de trabajar con PostgreSQL, y me gustaría hacer alguna prueba. Sería de gran ayuda saber cuáles son 'los GUI adecuados', y poder así comparar con otros SGBD.

        Un saludo

        In reply to by Anonymous (not verified)

        Creo que deberias hacer tambien un curso de marketing. Por otra parte si Oracle es tan bueno (que lo es!), por que motivo es muchas veces mas masivo MySQL o es que todos los profesionales informaticos que no lo usan son mediocres?.
        Debes ser cuidadoso con tus comentarios o de lo contrario como ya te dije, estudia Marketing o crea tu propia BD.

        Saludos.

        si en Oracle los usuarios principales son oracle, sys, system para manejo de la base de datos en mysql, cuales serían?

        Documentación online de Oracle database

        Oracle online documentation cfb Sat, 09/23/2006 - 21:21

        If you want to access the Oracle 9i online documentation you can do it following the link

      • Help online Oracle 9i
      • Is the original Oracle Help installed in a public access site.

        Base de datos Oracle 12c: las mejoras

        Base de datos Oracle 12c: las mejoras Natik Ameen Mon, 05/12/2014 - 19:20

         

        Ya está disponible Oracle Database 12c, la primera base de datos diseñada para la nube

        La base de datos Oracle 12c destaca por la gran cantidad de novedades que incorpora con respecto a cualquier otra versión. Como se puede deducir de su nombre, las nuevas características de esta versión se orientan especialmente hacia el Cloud Computing.

        Larry Ellison ya destacó en la sesión inaugural del OpenWorld 2012 que, de hecho, es la release de base de datos más importante que han lanzado en mucho tiempo.

        Para esta versión, se han realizado drásticos cambios de arquitectura que han dado como resultado más de 500 nuevas características!

        En este post vamos a echar un vistazo a las principales mejoras introducidas en la release 12c de la base de datos de Oracle.

        Bases de datos 'conectables'

        La arquitectura multitenant permite que las bases de datos se consoliden en un único servidor a la vez que se mantienen separadas entre ellas. Esta nueva arquitectura permite compartir la SGA, la CPU y otros recursos, reduciendo ampliamente la cantidad requerida de memoria y de CPU, en comparación con la que sería necesaria para mantener las bases de datos por separado.

        Heatmaps de bases de datos

        Oracle database 12c monitoriza la actividad de cada columna de las tablas, determina qué tipo de compresión se adapta mejor a cada una, y puede realizar la compresión.

        Índices duplicados

        Esta característica permite crear índices duplicados sobre el mismo conjunto de columnas. Esto puede ser muy útil en entornos de Data Warehouse en los que se puede mejorar el rendimiento implementando a la vez índices de tipo Bitmap y de tipo B-tree sobre las mismas columnas.

        Result sets implícitos

        Una de las principales utilidades de los tipos de PL/SQL es para devolver result sets desde una función o un procedimiento almacenado. Ahora, con la release 12c, ya no va a ser necesario proceder de esta manera, ya que se podrá devolver por referencia el mismo cursor desde las mismas funciones y procedures.

        Seguridad a nivel de PL/SQL

        Ahora los DBA podemos asignar roles a bloques de código PL/SQL. Parece sencillo pero es impresionante. Oracle se está asegurando de que la seguridad se puede otorgar incluso a nivel de cada bloque.

        Columnas de Identidad

        Esta mejora ha sido tomada otras bases de datos como MySQL y MS SQLServer. Estos gestores de bases de datos ya permiten utilizar desde hace tiempo para las claves primarias columnas de tipo 'identity', que tienen la habilidad de autoincrementar por defecto el valor del campo de clave.

        Mejoras en los valores por defecto de las columnas

        Hay bastantes nuevas formas de definir valores por defecto para una columna. Ahora se pueden utilizar las funciones NextVal y CurrVal de las secuencias. También se pueden especificar valores por defecto para Nulos explícitos proporcionados en sentencias Insert para asegurarse de que determinadas columnas siempre contienen un valor. También ahora se pueden definir valores por defecto de sólo metadatos para campos de columna tanto opcionales como obligatorios.

        Opciones para limitar filas

        Las nuevas cláusulas de limitación de filas, Offset y Fetch, permiten crear consultas de tipo Top N sin saber absolutamente nada de las funciones analíticas. Además estas cláusulas permiten paginar a través de los datos para selecionar ciertos subconjuntos de datos.

        Tipos de datos extendidos

        Los tamaños máximos de Varchar2 y NVarchar2 se han incrementado de 4K a 32K. El tamaño del tipo de dato RAW también se ha ampliado de 2K a hasta 32K. Todos estos tamaños están disponibles con la opción Extended Data Types que puede activarse por medio de un parámetro de inicialización y ejecutando un script.

        Encriptación mejorada

        La encriptación mejorada permite la creación y gestión de 'wallets' por SQL, en lugar de hacerlo a través utilidades de linea de comandos. También permite la gestión remota de una manera sencilla. La función de encriptación se ha incorporado también en los wallets/claves de exports e imports entre bases de datos conectables. El almacenamiento de loss wallets es en ASM, para mayor seguridad.

        Separación de Tareas

        SYSDBA – Super usuario
        SYSOPER – Menos privilegios que SYSDBA, pero con bastante poder.
        SYSBACKUP – Puede utilizarse específicamente para realizar operaciones de backup y restauración.
        SYSDG – Disponible para administración de data guard.
        SYSKM – Habilitado para realizar tareas básicas de mantenimiento.

        Características de Oracle 12c no soportadas en Bases de datos contenedoras

        Estas son algunas de las características de bases de datos Oracle 12c que no están soportadas en la base de datos contenedora de una arquitectura multitenant:

        • Continuous Query Notification
        • Flashback Data Archive
        • Heat Maps
        • Automatic Data Optimization

         


        Imagen de Natik AmeenPor Natik Ameen

        DBA Senior de Oracle RAC, Exadata y GoldenGata

        Blogger experto en VitalSoftTech


         

        Estimado,
        Primeramente felicitaciones por el gran aporte !!!
        Me ha quedado un poco mas claro de las grandiosas funcionalidades de oracle 12c.
        Saludos.