2010-06-04 20 views
7

Posiadamy 2 bazy danych - DB1 & DB2.Czy mogę tworzyć klucze obce w bazach danych?

Czy mogę utworzyć tabelę w DB1, która ma związek z jedną z tabel w DB2? Innymi słowy, czy mogę mieć klucz obcy w mojej tabeli z innej bazy danych?

Łączę się z tymi bazami danych z różnymi użytkownikami. Jakieś pomysły?

Teraz otrzymuję błąd:

ORA-00942:Table or view does not exist

Odpowiedz

8

Nie, Oracle nie pozwalają stworzyć klucz obcy odwołujący się do tabeli bazy danych za pomocą łącza. Aby wymusić integralność, musisz użyć wyzwalaczy.

+1

Należy pamiętać, że tworzenie kopii zapasowych/przywracania obu baz danych może przerwać to "ograniczenie". –

8

Jednym ze sposobów radzenia sobie z tym byłoby utworzenie zmaterializowanego widoku głównej tabeli w lokalnej bazie danych, a następnie utworzenie ograniczenia integralności wskazującego na MV.

To działa. Ale może to prowadzić do pewnych problemów. Po pierwsze, jeśli kiedykolwiek będziesz musiał odświeżyć zmaterializowany widok, musisz wyłączyć ograniczenie przed zrobieniem tego. W przeciwnym razie Oracle nie będzie w stanie usunąć wierszy w MV przed wprowadzeniem nowych wierszy.

Po drugie, możesz napotkać opóźnienia. Na przykład powiedz, że dodajesz rekord do tabeli głównej w witrynie zdalnej. Następnie chcesz dodać rekord potomny do lokalnej tabeli. Ale MV jest ustawione na odświeżanie codziennie i to się jeszcze nie stało. Dostaniesz naruszenie klucza obcego, po prostu dlatego, że MV nie odświeżyło się.

Jeśli wybierzesz tę trasę, najbezpieczniejszym sposobem jest ustawienie wartości MV na szybkie odświeżanie przy zatwierdzaniu tabeli głównej. To będzie oznaczać, że DB Link będzie otwarty prawie przez cały czas. Będziesz mieć pracę administratora, jeśli kiedykolwiek będziesz musiał wykonać odświeżenie.

Ogólnie uważamy, że wyzwalanie jest łatwiejsze. W niektórych przypadkach po prostu zdefiniowaliśmy FK w naszym modelu logicznym, ale wdrożyliśmy go ręcznie, ustawiając codzienne zadanie, które będzie sprawdzać pod kątem naruszeń i personelu alarmowego. Oczywiście jesteśmy dość ostrożni, więc te alerty są niezwykle rzadkie.

+0

Wiem, że to jest stare, ale warto wspomnieć, dla tych, którzy znaleźli tę odpowiedź za pośrednictwem google tak jak ja, że ​​nie można odświeżyć przy zatwierdzaniu przez dblink. –

Powiązane problemy