Pregunta

Tenemos 2 bases de datos - DB1 y DB2.

¿Puedo crear una tabla en DB1 que tenga una relación con una de las tablas en DB2? En otras palabras, ¿puedo tener una clave extranjera en mi tabla de otra base de datos?

Me conecto a estas bases de datos con diferentes usuarios. ¿Algunas ideas?

En este momento, recibo el error:

ORA-00942: la tabla o la vista no existe

¿Fue útil?

Solución

No, Oracle no le permite crear una restricción de clave extranjera que haga referencia a una tabla a través de un enlace de base de datos. Tendría que usar desencadenantes para hacer cumplir la integridad.

Otros consejos

Una forma de lidiar con esto sería crear una vista materializada de la tabla maestra en la base de datos local, luego crear la restricción de integridad que apunta al MV.

Eso funciona. Pero puede conducir a algunos problemas. Primero, si alguna vez necesita hacer una actualización completa de la vista materializada, deberá deshabilitar la restricción antes de hacerlo. De lo contrario, Oracle no podrá eliminar las filas en el MV antes de traer las nuevas filas.

En segundo lugar, puede encontrarse con algunos retrasos de tiempo. Por ejemplo, diga que agrega un registro a la tabla maestra en el sitio remoto. Luego desea agregar un registro infantil a la tabla local. Pero el MV está listo para refrescar diariamente y eso aún no ha sucedido. Obtendrá una violación de la clave extranjera, simplemente porque el MV no se ha refrescado.

Si sigue esta ruta, su enfoque más seguro es establecer el MV para actualizar rápidamente la confirmación de la tabla maestra. Eso significará mantener un enlace de DB abierto casi todo el tiempo. Y tendrá que hacer un trabajo administrativo si alguna vez necesita hacer una actualización completa.

En general, generalmente hemos descubierto que un desencadenante es más fácil. En algunos casos, simplemente hemos definido el FK en nuestro modelo lógico, pero lo implementamos manualmente estableciendo un trabajo diario que verifique las violaciones y alerta al personal. Por supuesto, tenemos bastante cuidado, por lo que esas alertas son extremadamente raras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top