Domanda

Abbiamo 2 basi di dati - DB1 e DB2

.

Posso creare una tabella in DB1 che ha una relazione con una delle tabelle in DB2? In altre parole, posso avere una chiave esterna in mia tabella da un altro database?

mi collego a queste banche dati con diversi utenti. Tutte le idee?

In questo momento, ricevo l'errore:

ORA-00942: tabella o vista non esiste

È stato utile?

Soluzione

No, Oracle non consente di creare un vincolo di chiave esterna che fa riferimento una tabella tramite un collegamento di database. Si dovrà utilizzare i trigger per far rispettare l'integrità.

Altri suggerimenti

Un modo per affrontare questo sarebbe quello di creare una vista della tabella master materializzato sul database locale, quindi creare il vincolo di integrità che punta alla MV.

che funziona. Ma può portare ad alcuni problemi. In primo luogo, se mai hai bisogno di fare un aggiornamento completo della vista materializzata, è necessario disabilitare il vincolo prima di fare do. In caso contrario, Oracle non sarà in grado di eliminare le righe della MV prima di portare nelle nuove righe.

In secondo luogo, si può incorrere in alcuni ritardi di temporizzazione. Per esempio dire si aggiunge un record alla tabella master sul sito remoto. Poi si desidera aggiungere un record bambino al tavolo locale. Ma la MV è impostato per aggiornare tutti i giorni e che non è ancora successo. Otterrete una violazione di chiave esterna, semplicemente perché la MV non ha rinfrescato.

Se si va questo percorso, il metodo più sicuro è quello di impostare la MV di aggiornamento rapido sul commit della tabella master. Questo vorrà dire mantenere un DB di collegamento aperto quasi tutto il tempo. E avrete lavoro di admin da fare se mai hai bisogno di fare un aggiornamento completo.

Tutto sommato, abbiamo generalmente scoperto che un trigger è più facile. In alcuni casi, abbiamo semplicemente definito l'FK nel nostro modello logico, ma implementato manualmente attraverso la creazione di un lavoro quotidiano che verificare la presenza di violazioni e il personale avviso. Naturalmente, siamo abbastanza attenti in modo queste segnalazioni sono estremamente rari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top