Christian Seiler: Abfrage ueber mehrere DATENBANKEN

Beitrag lesen

Hallo,

MSSQL

Da kenne ich mich nicht mit aus.

Wie siehts mit PGSQL order Oracle aus, weiss das wer?

Postgresql: Postgresql kennt Datenbanken und Schemata. Datenbank ist das, was man beim Verbinden angibt. Jede Datenbank ist nochmal in Schemata unterteilt, das Default-Schema ist 'public'. Jedes Schema enthält dann die Tabellen. Zugegriffen auf verschiedene Tabellen wird per datebankname.schemaname.tabellenname. Allerdings: Postgres kann KEINE Datenbankübergreifenden Abfragen DIREKT durchführen, d.h. ein SELECT * FROM db1.public.tabelle1, db2.public.tabelle2 wird in PostgreSQL fehlschlagen. Es gibt in PostgreSQL allerdings eine Alternative: Die dblink-Erweiterung. Zuerst einmal: Du musst auf der Datenbank, auf der Du die Abfragen laufen lassen willst, erst einmal ein SQL laufen lassen, das die nötigen Funktionen erstellt. Das heißt 'dblink.sql' und findet sich irgendwo in der Postgres-Installation. Wenn das gelaufen ist, kannst Du Abfragen der Art SELECT * FROM dblink ('dbname=anderedb', 'SELECT spalte1, spalte2 FROM tabelle') AS t1(spalte1 typ1, spalte2 type2) absetzen - und dann natürlich auch mit JOINs arbeiten. Allerdings musst Du hier explizit die Typen der zurückgegebenen Abfrage definieren. Außerdem ist's möglich, sich das als VIEW zu definieren, damit man sich beim Abfragen Aufwand spart.

Oracle: Oracle unterteilt Datenbanken in Instanzen und Schemata. Eine Instanz ist im Prinzip das, was man unter anderen DBMS als 'Datenbank' besteht, wenn auch Oracle da ein paar Eigenheiten hat. Jede Datenbank ist in Schemata unterteilt - und die ergeben sich aus den Nutzern, die auf die Datenbank Zugriff haben. Das heißt: Wenn ich einen user USER01 anlege in Oracle in einer Instanz, dann wird für den automatisch auch ein Schema USER01 angelegt. Ich kann innerhalb einer Instanz problemlos per 'schemaname.tabellenname' auf andere Tabellen innerhalb andere Schemata (d.h. von anderen User angelegte) zugreifen - WENN die entsprechenden Zugriffsrechte (GRANT) gesetzt sind. Wenn ich von Oracle aus auf eine andere Instanz (!) zugreifen will, dann gibt es sogenannte Database Links - auf der Seite wird auch erklärt, wie man dann per SELECT auf die Tabellen zugreift. Zudem ist es bei Oracle eine Überlegung wert, ob man nicht aus Performancegründen (sofern man nicht immer 100%ig aktuelle Daten benötigt) noch zusätzlich mit sogenannten "Materialized Views" arbeitet, d.h. sich die Daten in regelmäßigen Abständen von der anderen Datenbank synchronisieren lässt.

Viele Grüße,
Christian