Al hacer una contratación en producción nos da un error al llegar a la parte de hacer el insert en las tablas de Otros Sistema en Otra Base usando un DBlink, hicimos algunas pruebas como ver que si se puede ver la tabla con el dblink, tambien probamos ejecutar la sentencia con el usuario que usa la aplicación en el TOAD y si lo hace el insert, pero cuando lo hace la aplicación da el error mencionado abajo.

ORA-24777: no se permite el uso de un enlace de base de datos que no sea migrable o en ingles

ORA-24777: use of non-migratable database link not allowed

La sentencia es esta.

      insert into helpdesk.abm_bandeja_operaciones@linkabm(tipo_operacion, tipo_empleado, codigo_empleado,
                   codigo_puesto, estado_operacion, fecha_solicitud,
                   usuario_solicitud, id_operacion, codigo_cca, tipo_ejecucion, codigo_ubicacion)
            select 6 as tipo_operacion,
                   1 as tipo_empleado,
                   exp.exp_codigo_alternativo as codigo_empleado,
                   pue.pue_codtpp|| '|' ||plz.plz_codpue as codigo_puesto,
                   0 estado_operacion,
                   sysdate fecha_solicitud,
                   v_username as usuario_solicitud,
                   helpdesk.abm_sec_bandeja_operacion.nextval@linkabm as id_operacion,
                   cpp.cpp_codcco as codigo_cca,
                   'M' as tipo_ejecucion,
                   19 as codigo_ubicacion
                  from exp_exp_expedientes exp 
                  join exp_emp_empleos emp on exp_codigo = emp_codexp
                  join eor_plz_plazas plz on plz.plz_codigo = emp_codplz
                  join eor_cpp_centros_costo_plaza cpp on cpp.cpp_codplz = plz.plz_codigo
                  join eor_pue_puestos pue on pue.pue_codigo = plz.plz_codpue
                 where emp_codigo = v_codemp
                   and length(ltrim(rtrim(exp.exp_codigo_alternativo))) < 10;

asked 25 Mar '15, 20:01

Jaime%20Menjivar's gravatar image

Jaime Menjivar
(suspended)
accept rate: 16%


Se ve complicado que se pueda realizar esta instrucción insert en el SP luego de finalizar o en un trigger.

Lo que sucede es que hay una transacción creada desde el nivel de código fuente (desde el IIS), y que contiene lo que hace Oracle en la base. El problema es que la instrucción ejecutada desde Oracle, es a su vez una transacción distribuida entre dos servidores a través de un DBLink.

Para que eso funcionara, el MSDTC tendría que poder crear una transacción distribuida entre el proceso que ejecuta a Evolution en el webserver, el servidor Oracle donde está la base de datos de Evolution y el servidor Oracle al que apunta el DBLink. Entonces pareciera que debe existir una configuración especial del DBLink para que soporte este comportamiento.

Por supuesto que no va a fallar desde el SQLPlus o el TOAD, ya que el entorno en el que se ejecuta no es el mismo.

Esta es la explicación que Oracle da del error:

ORA-24777: 
use of non-migratable database link not allowed

Cause: 
The transaction, which needs to be migratable between sessions, tried to access a remote database from a non-multi threaded server process.

Action: 
Perform the work in the local database or open a connection to the remote database from the client. If multi threaded server option is installed, connect to the Oracle instance through the dispatcher.

El mismo error da la solución y tiene que ver configuración de los servers Oracle y del DBLink.

Estos son algunos links que hablan de eso:

https://community.oracle.com/thread/599243

https://community.oracle.com/thread/2381655

En conclusión, yo te sugeriría que cambiaras tu estrategia porque no creo que podas resolver el requerimiento con un trigger o con un SP de finalización. Mejor pensa en una alerta que se ejecute periódicamente y que inserte los datos en la tabla del otro servidor.

link

answered 25 Mar '15, 20:31

Fernando%20Paz's gravatar image

Fernando Paz ♦♦
17.3k81635
accept rate: 51%

edited 25 Mar '15, 20:44

Como comentario adicional, este tipo de inserción a otro servidor conectado remotamente, tampoco funcionaría en SQL Server, ya que no es posible incluir en una sola transacción operaciones que involucran a un RemoteServer.

(25 Mar '15, 20:45) Fernando Paz ♦♦ Fernando%20Paz's gravatar image
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Evolution en BitBucket

En este sitio puede acceder al código fuente, centro de descargas y reportar bugs, propuestas y mejoras para Evolution.

Evolution en JIRA

En este sitio puedes sugerir nueva funcionalidad para Evolution, o puedes votar por la funcionalidad ya propuesta por otros usuarios.

Tags:

×34

Asked: 25 Mar '15, 20:01

Seen: 10,102 times

Last updated: 25 Mar '15, 20:45

[Acerca de] [Preguntas Frecuentes] [Privacidad] [Soporte] [Contacto]
Copyright 2013-2018. Asesores en Informática