2016-05-08 4 views
1

Es gibt eine Oracle-Datenbank (Version 8), die als PL/SQL-API fungiert und Zugriff auf verschiedene Prozeduren und Tabellen in dieser Datenbank bietet.
Ich habe eine andere Oracle-Datenbank (Version 10g), die diese Prozeduren und Tabellen über Datenbankverbindung verwendet.
Ich habe meine Datenbank auf Version 12g aktualisiert, aber anscheinend gibt es Kompatibilitätsprobleme mit der Datenbankverbindung zwischen den Versionen 8 und 12g. Also kam ein Plan auf, eine dritte Datenbank mit Oracle Version 10g zu erstellen und zwischen 8 und 12g als "Proxy" zu setzen.
Datenbankverbindungen von v12g zu v10g und von v10g zu v8 erstellt. Erstellt Synonyme in der "Proxy" (v10g) -Datenbank für Tabellen und Prozeduren in der v8-Datenbank. Ich kann eine Standard-SELECT-Klausel von v12g machen:PL/SQL-API über zwei Datenbankverknüpfungen verwenden

select column from [email protected]; 

Aber es in anonymen Block setzen:

declare 
    sVar varchar2(200); 
    begin 
     select column into sVar from [email protected]; 
     dbms_output.put_line(sVar); 
    end; 

gibt einen Fehler: „PL/SQL: ORA-00980: Synonym Übersetzung ist nicht mehr gültig". Gibt es eine Möglichkeit, auf v8-Prozeduren und -Tabellen von v12g über v10g zuzugreifen - also über 2 Datenbanklinks?

+2

Und der Grund, warum Sie die v8-Datenbank auf eine Version aus diesem Jahrtausend nicht aktualisieren können, ist ....? – APC

+0

Es gehört zu einer anderen Firma :) – Tanel

+0

Eine andere Lösung, abhängig davon, wie aktuell die Daten sein müssen, besteht darin, materialisierte Ansichten auf der 10g-Datenbank zu erstellen, die regelmäßig die Daten aus den 8 über ihre DB-Verknüpfung abrufen und dann diese MVs von 12g abfragen . –

Antwort

2

Angenommen, es gibt ein großes Hindernis, das verhindert, dass die Oracle 8 (8.0/8.1.x) -DB aktualisiert wird, denke ich, dass Sie die Datenbanklinks vergessen müssen. Selbst wenn Sie viel Mühe darauf verwenden, dass es nur ein bisschen länger funktioniert, haben Sie keine Garantie, dass es beim nächsten Patch funktioniert.

Ich würde einen Java-Wrapper rund um die Oracle 8-Funktionalität erstellen. Ihre 12c-Datenbank ruft einfach die Java-Ebene auf (vielleicht sogar als Java-Stored Procedure).

Wenn Sie dblinks verwenden müssen, können Sie versuchen, DG4ODBC zu betrachten, so dass Sie die Oracle 8 DB als generische "fremde" Datenbank und nicht als Oracle-DB behandeln würden.

+0

Vielen Dank für Ihre Gedanken. "Vergessen Sie die Datenbank-Links" (dh dblinks durch 2 dbs werden nicht funktionieren) scheint in diesem Fall die richtige Antwort zu sein. – Tanel