Cuestiones sobre los dblinks de Oracle

90 replies [Último envío]
Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

christian (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

Puedes ver como entrar en SQLPlus con un usuario Oracle con rol sysdba en:
http://www.dataprix.com/entrar-en-sqlplus-como-dba-sin-introducir-password

Carlos Fernández

Analista de sistemas

Anonimo (no verificado)

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,  v

 

 

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

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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
 

ADRES (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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;

 

 

kmilo666 (no verificado)

 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.

 

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

kmilo666 (no verificado)

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.

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

Ivan (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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,

ANDRES (no verificado)

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

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

Jonathan (no verificado)

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.

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

ANDRES (no verificado)

carlos no sirve mi db link ya hicimos todos como nos indicaste

y nada pero marca el mismo error.

 

el db link si lo crea pero al hacer la consulta marca el mismo error no se que sea gracias por la ayuda.

 

Andres.............

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

Elena (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

Elena (no verificado)

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 :)

Damian (no verificado)

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.

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

Jose (no verificado)

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

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

 

Imagen de arzamm@yahoo.com
Joined: 24/06/2014
Puntos: 5

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!

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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,

Offline
Joined: 22/03/2010
Puntos: 2

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

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

Offline
Joined: 22/03/2010
Puntos: 2

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

Offline
Joined: 06/04/2010
Puntos: 1

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

Juan (no verificado)

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.

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

 

Offline
Joined: 10/06/2010
Puntos: 18

 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.

Offline
Joined: 10/06/2010
Puntos: 18

[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

 

 

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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))’  
Offline
Joined: 10/06/2010
Puntos: 18

 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.  

 

 

 

 

 

 

Offline
Joined: 12/07/2010
Puntos: 1

 

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.

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

Offline
Joined: 20/07/2010
Puntos: 2

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.

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

Si se puede acceder a Adabas por ODBC, puedes crear el Database Link de Oracle utilizando Heterogeneous Services. 

Échale un vistazo al artículo Heterogeneous Services: Conexión desde Oracle a SQLServer.

Se pone como ejemplo cómo se hace con SQLServer, pero puedes hacerlo de la misma manera con otras bases de datos.

Laila (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

 

Anonim. (no verificado)

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?

myf
Offline
Joined: 01/09/2010
Puntos: 1

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.

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

 

 

Offline
Joined: 10/06/2010
Puntos: 18

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.

 

Rolando (no verificado)

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

Alberto (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

ilmarcito (no verificado)

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.

Hugo (no verificado)

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

Anonim. (no verificado)

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

Offline
Joined: 07/02/2011
Puntos: 2

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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

Offline
Joined: 07/02/2011
Puntos: 2

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

 

 

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

 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.

Offline
Joined: 17/02/2011
Puntos: 1

 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!

 

Offline
Joined: 03/03/2011
Puntos: 1

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.

Joined: 10/03/2011
Puntos: 1

hola estoy tratando de hacer un dblink como lo dice en la guia y me encuentro que cuando hago un select a la base remota me sale el siguiente error:
ora-12560:TSN:error del adaptador de protocolo
cual sera el problema, desde ya muchas gracias

Offline
Joined: 10/06/2010
Puntos: 18

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.

 

 

Offline
Joined: 29/04/2011
Puntos: 1

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

Imagen de Oscar_paredes
Offline
Joined: 23/07/2006
Puntos: 136

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

Offline
Joined: 27/09/2011
Puntos: 1

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.

Offline
Joined: 25/11/2011
Puntos: 1

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.

 

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

 

yajaira Pardo (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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.

 

Caro (no verificado)

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.

Javier (no verificado)

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

saludos

Offline
Joined: 29/10/2013
Puntos: 1

 

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.

 

Oscar Castaño (no verificado)

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

MAITE (no verificado)

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

Hasan (no verificado)

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

Wilmar (no verificado)

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

Jonathan Torres (no verificado)

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

Joseph (no verificado)

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,

Offline
Joined: 27/11/2015
Puntos: 1

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

Anonimo (no verificado)

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

Luis Sanchez (no verificado)

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

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

¿Puedes copiar el texto completo del error, y la consulta que haces con el dblink remoto?

 

RF (no verificado)

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
JonathanBlackgg (no verificado)

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?

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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,

Anonimo (no verificado)

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

César Heredia (no verificado)

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.

Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1586

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);

 

Ricardo (no verificado)

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

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.

Si no estás registrado recuerda que tu comentario entrará en una cola de aprobación.

Más información sobre opciones de formato

Enviando este formulario, acepta la política de privacidad de Mollom.

 



 

  BI   |    CRM     |    CMS    |    Tendencias en software empresarial    |    Cloud computing  |    Software libre    |   Internet    |    Movilidad y apps