Frage

Wenn Sie einen Oracle-Datenbanklink erstellen, können Sie nicht direkt auf LOB-Spalten in den Zieltabellen zugreifen.

Sie erstellen beispielsweise einen Dblink mit:

create database link TEST_LINK 
  connect to TARGETUSER IDENTIFIED BY password using 'DATABASESID';

Danach können Sie Dinge tun wie:

select column_a, column_b 
from data_user.sample_table@TEST_LINK

Außer wenn es sich bei der Spalte um ein LOB handelt, erhalten Sie die Fehlermeldung:

ORA-22992: cannot use LOB locators selected from remote tables

Das ist eine dokumentierte Einschränkung.

Auf derselben Seite wird vorgeschlagen, die Werte in eine lokale Tabelle abzurufen, aber das ist ...irgendwie chaotisch:

CREATE TABLE tmp_hello 
AS SELECT column_a 
from data_user.sample_table@TEST_LINK

Irgendwelche anderen Ideen?

War es hilfreich?

Lösung

Ja, es ist chaotisch, ich kann mir allerdings keinen Weg vorstellen, es zu vermeiden.
Sie könnten einen Teil der Unordnung vor dem Client verbergen, indem Sie die temporäre Tabellenerstellung in einer gespeicherten Prozedur ablegen (und „sofort ausführen“ verwenden, um die Tabelle zu erstellen).
Eine Sache, auf die Sie achten müssen, sind verbleibende temporäre Tabellen (sollte in der Mitte einer Sitzung etwas fehlschlagen, bevor Sie Zeit zum Bereinigen hatten) – Sie könnten einen Oracle-Job so planen, dass er regelmäßig ausgeführt wird und alle verbleibenden Tabellen entfernt .

Andere Tipps

Die beste Lösung ist die Verwendung einer Abfrage wie unten, wobei „columne_b“ ein BLOB ist:

SELECT (select column_b from sample_table@TEST_LINK) AS column_b FROM DUAL

Sie könnten materialisierte Ansichten verwenden, um die gesamte „Cache“-Verwaltung zu übernehmen.Es ist nicht perfekt, funktioniert aber in den meisten Fällen :)

Für Abfragedaten ist die Lösung von user2015502 die intelligenteste.Wenn Sie LOBs einfügen oder aktualisieren möchten BEI In der entfernten Datenbank (einfügen in xxx@yyy ...) können Sie dafür problemlos dynamisches SQL verwenden.Sehen meine Lösung hier:

Haben Sie ein bestimmtes Szenario im Sinn?Wenn das LOB beispielsweise Dateien enthält und Sie sich in einem Firmenintranet befinden, können Sie möglicherweise eine gespeicherte Prozedur schreiben, um die Dateien in ein bekanntes Verzeichnis im Netzwerk zu extrahieren und von dort aus darauf zuzugreifen.

In diesem speziellen Fall können die beiden Systeme nur über den Dblink kommunizieren.

Außerdem ist die Tabellenlösung nicht so schlimm, es ist nur chaotisch, die Daten auf meiner Seite des Dblinks „zwischenspeichern“ zu müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top