2017-04-06 4 views
0

Nehmen wir an, ich habe die Hauptdatenbank namens db1. Es gibt auch eine andere Datenbank namens db2. Manchmal muss ich Daten von db2 erhalten. Ist es besser, direkt Daten von db2 zu erhalten oder in db1 anzuzeigen?Lesen von Daten aus einer anderen db

+0

Viele Faktoren zu beachten. Gibt es eine schnelle Verbindung zwischen Datenbanken? Sind es viele Daten? Ist es wahrscheinlich, dass sich eine Datenbank bewegt? Was meinst du mit "make in db1 anzeigen", müsste dies noch auf db2 zugreifen? – JohnHC

+0

Danke für Ihre Antwort! Ich bin nicht wirklich so gut über Datenbanken, aber es gibt 2 Möglichkeiten für mich, dieses Ding zu implementieren. Erstens referenziere ich db2, wenn ich eine Abfrage in db1 mache. SELECT * FROM db2.table1 oder ich den ersten Blick (Ansicht erstellen v_db1 SELECT * FROM db2.table1) erstellen und dann, wenn ich die Tabelle in db2 brauche ich SELECT nur * von v_db1 Ich würde gerne wissen, Wann man den 1. oder 2. Weg benutzt. Und was ist der Unterschied zwischen diesen 2. Ich hoffe, ich habe es deutlicher gemacht, was ich denke – Kristjan

Antwort

1

Wenn Sie Daten von db2 erhalten, sollten Sie für jede Abfrage Ansichten in db2 erstellen. Warum? Um Schnittstellen zu erstellen. Wenn jemand in db2 Änderungen vornimmt, kennt er Ihre Abfragen nicht, die von db1 ausgeführt werden. Ihre Abfragen können nicht mehr funktionieren. Wenn Sie Ansichten für Ihre Abfragen in db2 und in der db1-Abfrageansicht @ db2 erstellen, wird für jeden, der die Struktur in db2 ändert, eine ungültige Ansicht angezeigt, falls seine Änderungen Ihre Abfragen beschädigt haben.
Natürlich meine ich Situation, wenn Ihre Abfragen in Pakete oder Ansichten eingebettet sind. Wenn Sie nur für analytische Zwecke abfragen, macht es keinen Unterschied, wenn Sie es direkt tun, mit Sicht auf db1 oder Sicht auf db2 tun Sie einfach so, wie es für Sie geeignet ist. Aber gute Praxis ist, Schnittstellen zu setzen, also würde ich empfehlen, Sicht auf db2 für Datasets zu erstellen, die später von db1 abfragen. Es kann auch sinnvoll sein, eine zusätzliche Sicht oder ein Synonym auf der Seite db1 zu erstellen, um beide Seiten zu haben.

+0

Großartig. Danke für die Beantwortung meiner Frage. – Kristjan

1

Sie müssen zuerst einen Treiber für die Verbindung mit DB2, einen TNS-Verbindungseintrag für Oracle und eine Datenbankverbindung in Oracle einrichten, um auf die Verbindung zu verweisen.

Wichtig ist, dass Sie so weit wie möglich versuchen, Änderungen in der einen DB von der anderen zu isolieren.

Ich habe dies verschiedene Wege gemacht, aber das hat für mich gearbeitet;

  1. Erstellen Sie für jede Tabelle, die Sie in DB2 abfragen, eine DB2-Sicht von JUST auf die gewünschten Spalten aus dieser Tabelle.
  2. Erstellen Sie in Oracle eine Ansicht, die DB2_VIEW @ DB2_database abfragt. Obwohl es nicht unbedingt notwendig ist, fragen Sie einfach die gewünschten Spalten ab - es ist eine gute Übung.
  3. Erstellen Sie ein Synonym für die Ansicht und führen Sie eine Abfrage durch. Wenn sich die Quelle der Daten ändert und die Ansicht durch eine andere ersetzt wird, können Sie das Synonym so ändern, dass es auf die neue Ansicht zeigt, anstatt den Code zu ändern.

Zusammenfassung: Wenn ich nicht falsch verstanden haben Sie scheinen zu fragen zu sein, sollte ich die Tabelle direkt in DB2 abzufragen oder sollte ich gehen durch Ansichten? Ich schlage vor, dass das Durchgehen von Ansichten dich von Änderungen an jedem Ende bis zu einem gewissen Grad isoliert, also benutze die Ansichten.

+0

toll, danke! Beantwortete alle Fragen, die ich hatte. – Kristjan