Datenbanken verbinden

daiv

AgainstAllAuthority
Ich bin seit längerem auf der Suche nach einer Möglichkeit von einer Postgres Datenbank auf eine Firebird zuzugreifen.
Ich würde gerne bestimmt Daten "synchron" halten. Zuerst dachte ich, dass mein Vorhaben so gar nicht gelingen kann, doch dann habe ich entdeckt, dass so etwas mit dem MSSQL Server geht.
Wenn ich das richtig verstanden habe, kann man bei MS mit einem "Verbindungsserver" auf eine andere Datenbank über ODBC zugreifen (http://www.itrain.de/knowhow/sql/transfer/linked/index.asp)

Ist einem von euch so etwas unter Postgres oder Firebird bekannt?

Ich würde gerne Daten aus zwei unterschiedlichen Programmen die jeweils andere Datenbanken nutzen, "synchron" halten.

Danke

David
 
Solche Synchronisationen sind schon bei identischen DBMS kompliziert genug - bei verschiedenen, würde ich empfehlen, etwas applikationsspezfisch zu entwickeln.

So long...

Der Indy
 
Tag,


unter Oracle mache ich sowas immer mit Datenbank-Links und durch den Datenbank-Scheduler (dbms_job) oder Events/Trigger angeworfene PL/SQL-Funktionen.
Wenn man eine Datenbank nur flach aber besonders effektiv replizieren will, dann kann man das über die Transaktionslogs machen. Das geht aber wahrscheinlich nur zwischen der gleichen Datenbanksoftware.


Postgres hat auch eine dblink-Erweiterung, vielleicht hilft diese:
http://developer.postgresql.org/pgdocs/postgres/contrib-dblink.html


Wahrscheinlich läuft es aber auf die Lösung meines Vorredners hinaus:
Man muss sich irgendwas z.B. auf Basis von JDBC (Java), OTL http://de.wikipedia.org/wiki/Oracle_Template_Library (C++) oder Perl (DBI) programmieren, was die Daten abgleicht.

Solche universellen Schnittstellenbilbliotheken helfen etwas bei dem Problem, dass jede Datenbank in Wirklichkeit eigene nicht kompatiblen Datentypen hat und eine eigene SQL-Syntax.
Selbst mit einem sehr umfassenden Framework wie JDBC muss man z.B. Blobs je Datenbank immer andere Krämpfe programmieren.
 
Danke für eure Antworten.

Es geht wirklich um Simple aufgaben die sicherlich mittels einfachen Triggern gelöst werden können. Die Frage ist eben ob das Ansprechen einer anderen Datenbank wie im MS Beispiel

OPENQUERY ( linked_server ,'query' )

in der Art mit Postgres oder Firebird möglich ist? Habt ihr da schon Erfahrungen gesammelt?

Ich gucke mir dblink an. Ich meine aber dass ich mich damit schon beschäftigt habe. Der Link ist gut, danke!
 
Zum letzten Beitrag von daiv und bezüglich der Lösung mit Datenbank-Links:

So wie das aussieht können die Datenbanklinks von Postgres sich nur mit anderen Postgres-Datenbanken verbinden. Wenn das DBlink-Modul auf andere Datenbanken anderen Typs zugreifen könnte, dann müsste der Postgres-Server in der Lage sein andere Datenbanktreiber/Clients zu laden und zu benutzen. Das dürfte keine Datenbank können. Oracle hat für sowas extra ein Gateway-Produkt.

Im Prinzip ist es aber auch egal, ob das Abgleichprogramm nun als PL/pgSQL in der Postgres-Datenbank läuft oder extern als Java/C++/Perl-Programm.
Mit einem externen Programm hat man es leichter und muss auch seine Datenbank nicht zu sehr "pimpen".

Für Datenaustausch innerhalb der gleichen Datenbankfamilie sind Datenbanklinks jedoch das Mittel der Wahl.
 
Soweit ich das aber verstanden habe, kann MS SQL auch auf andere Datenbanktypen zugreifen. Oder habe ich da etwas falsch verstanden?

Zitat (http://msdn.microsoft.com/de-de/library/ms188427.aspx):
"Führt die angegebene Pass-Through-Abfrage auf dem angegebenen Verbindungsserver aus. Bei diesem Server handelt es sich um eine OLE DB-Datenquelle. Auf OPENQUERY kann in der FROM-Klausel einer Abfrage so verwiesen werden, als ob es ein Tabellenname wäre. Auf OPENQUERY kann auch als Zieltabelle einer INSERT-, UPDATE- oder DELETE-Anweisung verwiesen werden. Dies hängt von den Funktionen des OLE DB-Anbieters ab. Obwohl die Abfrage möglicherweise mehrere Resultsets zurückgibt, gibt OPENQUERY nur das erste zurück."
 
Zurück
Oben