Mit PG auf Oracle-View zugreifen

Alle Fragen und Probleme zu den externen Schnittstellen wie ODBC, JDBC, ...
pgSteffen
Benutzer
Beiträge: 81
Registriert: Di 14. Dez 2010, 09:46

Mit PG auf Oracle-View zugreifen

Beitrag von pgSteffen » Di 25. Aug 2015, 13:40

Hallo Wissende,
ich muss (unter Windows) eine PG-Tabelle mit Daten aus einer Oracle-View aktualisieren.

Mein aktuelles Verfahren PG und Oracle per ODBC in Access zu verknüpfen und (einmal am Tag) zu aktualisieren stößt langsam an seine Grenzen.

Wie könnte man nur mit PostgreSQL das alte Verfahren ablösen?

Gruß Steffen

castorp
Erfahrener Benutzer
Beiträge: 1125
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Mit PG auf Oracle-View zugreifen

Beitrag von castorp » Di 25. Aug 2015, 13:47

Eine Lösung ist ein Foreign Data Wrapper, siehe: https://wiki.postgresql.org/wiki/Fdw#Sp ... e_Wrappers. Dann musst Du eventuell gar nichts mehr "replizieren" weil der Zugriff einfach immer "direkt" zu Oracle geht.

Die andere Alternative ist ein Text ("CSV") Export/Import. Der Import in Postgres dürfte dann am schnellsten via COPY gehen - um vernünftige Text-Exports aus Oracle zu ziehen gibt es viele Tools.

Letztendlich hängt das auch davon ab, über wie viele Datensätze wir hier reden. Hunderte? Tausende? Millionen? Zig-Millionen?
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

pgSteffen
Benutzer
Beiträge: 81
Registriert: Di 14. Dez 2010, 09:46

Re: Mit PG auf Oracle-View zugreifen

Beitrag von pgSteffen » Di 25. Aug 2015, 14:02

Hallo,
vielen Dank für die (rasend) schnelle Antwort.
Es geht nicht um einen reinen Import sondern um eine (tägliche) Aktualisierung einer bestehenden Tabelle. (Löschabfrage+Aktualiserungsabfrage+Anfügeabfrage). CSV ist leider keine Alternative, da ich keine habe.

Den Wrapper werde ich mal einmal anschauen.

Gruß Steffen

pgSteffen
Benutzer
Beiträge: 81
Registriert: Di 14. Dez 2010, 09:46

Re: Mit PG auf Oracle-View zugreifen

Beitrag von pgSteffen » Di 25. Aug 2015, 15:18

Hallo,
ich noch mal :rolleyes: .

Ich habe mich jetzt an der Wrapper Installation versucht.

Ich habe PostgreSQL x64-9.3 und entsprechend oracle_fdw-1.2.0-pg93-win64.zip installiert.

Ich bekomme allerdings beim Anlegen der Extention:

Code: Alles auswählen

CREATE EXTENSION oracle_fdw
den Fehler:

Code: Alles auswählen

FEHLER:  konnte Bibliothek „D:/Programme/PostgreSQL/9.3/lib/oracle_fdw.dll“ nicht laden: unknown error 193

********** Fehler **********

FEHLER: konnte Bibliothek „D:/Programme/PostgreSQL/9.3/lib/oracle_fdw.dll“ nicht laden: unknown error 193
SQL Status:58P01

Vorhanden ist die Datei:

Code: Alles auswählen

 Verzeichnis von d:\Programme\PostgreSQL\9.3\lib

02.02.2015  16:09           140.800 oracle_fdw.dll
               1 Datei(en),        140.800 Bytes
               0 Verzeichnis(se), 100.426.485.760 Bytes frei


Habe es auch schon auf einem anderen Rechner versucht. Im iNet kann ich nichts helfendes zum Fehler finden.

Hat jemand für das Problem einen Ansatzpunkt?

Gruß Steffen

castorp
Erfahrener Benutzer
Beiträge: 1125
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Mit PG auf Oracle-View zugreifen

Beitrag von castorp » Di 25. Aug 2015, 15:45

Der Fehler 193 kommt üblicherweise wenn es ein 32/64bit Durcheinander gibt.

Hast Du auch einen 64bit Oracle client?

Ich nehme bei Problemen mit DLLs immer den DependencyWalker her: http://www.heise.de/download/dependency-walker.html
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

pgSteffen
Benutzer
Beiträge: 81
Registriert: Di 14. Dez 2010, 09:46

Re: Mit PG auf Oracle-View zugreifen

Beitrag von pgSteffen » Di 25. Aug 2015, 16:13

Hallo,
Hast Du auch einen 64bit Oracle client?
Oracle müsste 32bit sein. Greift denn an der Stelle schon Oracle? Nach der Fehlermeldung will er doch (die) eine dll-laden. Geht eigentlich so ein "mixed mode" überhaupt?
Ein Test mit der 32bit-Version bringt übrigens den gleichen Fehler.

Evtl. könnten es noch mangelnde Reche sein - allerdings läuft ja der Rest problemlos :-(.

Gruß Steffen

castorp
Erfahrener Benutzer
Beiträge: 1125
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Mit PG auf Oracle-View zugreifen

Beitrag von castorp » Di 25. Aug 2015, 16:44

pgSteffen hat geschrieben:Oracle müsste 32bit sein. Greift denn an der Stelle schon Oracle?
Ja, Wenn oracle_fdw.dll geladen wird, dann lädt die DLL wiederum die oci.dll vom Oracle Client nach. Wenn die nicht geladen werden kann, dann kann auch die oracle_fdw.dll nicht geladen werden.

Geht eigentlich so ein "mixed mode" überhaupt?
Nein, natürlich nicht. Es muss alles durchgängig 32bit oder 64bit sein, Postgres, FDW und Oracle Client (also die Oracle Client Software die auf dem Rechner liegt auf dem Postgres läuft)

Ein Test mit der 32bit-Version bringt übrigens den gleichen Fehler.
Du meinst ein Test mit 32bit Oracle Client, 32bit Postgres und 32bit FDW?

Wie gesagt, lad' dir den DependencyWalker runter und öffne damit die oracle_fdw.dll, dann siehst Du warum die DLL nicht geladen werden kann.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

pgSteffen
Benutzer
Beiträge: 81
Registriert: Di 14. Dez 2010, 09:46

Re: Mit PG auf Oracle-View zugreifen

Beitrag von pgSteffen » Di 25. Aug 2015, 16:54

Hallo,
also wenn PGx64 und Oracle 32bit nicht zusammen geht, dann ist für mich hier leider Feierabend :-(.
PG auf 32bit zurück ist mir zu aufwändig/zu unsicher und Oracle 64bit werde ich hier nicht "durchbekommen".

DependencyWalker werde ich mal privat testen. Hier bekomme ich nix so einfach installiert :-(.

Trotzdem vielen Dank für die schnelle und kompetente Hilfe.

Gruß Steffen

castorp
Erfahrener Benutzer
Beiträge: 1125
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Mit PG auf Oracle-View zugreifen

Beitrag von castorp » Di 25. Aug 2015, 17:17

pgSteffen hat geschrieben:Hallo,
also wenn PGx64 und Oracle 32bit nicht zusammen geht, dann ist für mich hier leider Feierabend :-(.
PG auf 32bit zurück ist mir zu aufwändig/zu unsicher und Oracle 64bit werde ich hier nicht "durchbekommen".
Du musst nicht Oracle auf 64bit bekommen, Du musst nur den Client auf 64bit bekommen (ein 64bit Client kann mit einem 32bit Server "reden")
Der Instant Client ist das einfach eine ZIP Datei die ausgepackt wird: http://www.oracle.com/technetwork/topic ... 89540.html
Mit Ausnahme von ein paar Umgebungsvariablen muss da nichts weiter "installiert" werden.

Läuft den Oracle auf dem gleichen Rechner wie Postgres? Wenn ja, dann müsste man dafür sorgen, dass der Postgres Service eben den Instant Client "sieht" und nicht die "richtige" Oracle Installation. Am einfachsten ist das wenn der Postgres Service als eigener Windows Benutzer läuft (also nicht "Lokaler Netzwerkdienst" bzw. "Lokales System") dann kann man die Umgebungsvariable (PATH, ORACLE_HOME, ORACLE_SID usw) entsprechend nur für diesen Benutzer setzen.

DependencyWalker werde ich mal privat testen. Hier bekomme ich nix so einfach installiert
Das ist auch nur eine ZIP Datei die ausgepackt werden muss. Da muss man nichts installieren. Aber wenn Du nur einen 32bit Oracle Client hast, dann muss man gar nicht weiter probieren, das kann nicht funktionieren.

----

Als Alternative kannst Du mal den SQL Client versuchen den ich verwende (http://sql-workbench.net/). Der hat ein (proprietären) Befehl mit dem man Daten von einem DB System zu einem andere kopieren kann (http://sql-workbench.net/manual/command-copy.html). Am einfachsten wäre es damit die Daten der View 1:1 in eine Zwischentabelle zu kopieren, und dann via SQL die eigentlichen UPDATE, INSERT, DELETE Statements von der Zwischentabelle in die "richtige" Tabelle zu machen. Das geht auch im Batchmodus (z.B. über eine geplanten Task in Windows)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

pgSteffen
Benutzer
Beiträge: 81
Registriert: Di 14. Dez 2010, 09:46

Re: Mit PG auf Oracle-View zugreifen

Beitrag von pgSteffen » Di 25. Aug 2015, 17:47

Hallo,
Du musst nur den Client auf 64bit bekommen
Schon klar ;-).
Aber es ist ein recht großer Anwendungsserver auf welchem die PG-DB läuft und da ist (im Moment) unsicher was ein Wechsel des Ora-Clients auf andere Applikationen für einen Einfluss hat. Der Oracle-Server selbst läuft woanders.
PG selbst läuft unterm Systemkonto, so dass auch die Anpassung der Systemvariablen nicht so einfach geht.
DependencyWalker ....Das ist auch nur eine ZIP Datei die ausgepackt werden muss.
Ja versuch macht klug. Hatte nur gelesen "nicht portabel - da Registryeintragung".

Also werde ich zunächst mal eine private "Versuchsanordnung" aufbauen. Ich habe nicht so den extremen Druck, da die Aufgabe im Moment mit MSAccess und odbc bis auf eine Kleinigkeit zuverlässig gelöst ist.

Letztendlich ist die Frage ob ich mit der "Wrapper"-Lösung eine aktuelle Lösung hinbekomme. Eine "Livesicht" geht nicht, da die Daten zwingend in eine bestimmte pg-Tabelle geschrieben werden müssen. Ein Trigger wird nicht funktionieren, da dieser die Änderungen in der View wohl nicht mitbekommt. Bliebe noch ein fester Aktualisierungszyklus ....
Aber das ist dann ein ganz anderes Thema für welches ich im Fall der Fälle einen neuen Thread aufmache.


Vielen Dank
Steffen

Antworten