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.

 

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

 

 

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.

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

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

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,

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.