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