Heute widmen wir uns in einem ganz kurzen Tipp dem Thema Database Links, diese
können mit Oracle TEXT verwendet werden. Es sind allerdings ein paar Feinheiten zu
beachten:
Angenommen, wir haben eine Tabelle DOK_TAB auf einer entfernten Datenbank. Diese
hat eine Spalte DOK, die auch mit Oracle TEXT indiziert ist.
Auf der lokalen Datenbank können wir nun einen Database Link anlegen ...
create database link {dblink-name} connect to {remote-username} identified by {remote-passwd} using '{connection-string}'
Ein erster Versuch führt nun scheinbar ins Leere ...
select * from dok_tab@{dblink-name} where contains(dok, '$Bahnhof') > 0; * FEHLER in Zeile 1: ORA-20000: Oracle Text error: DRG-10599: column is not indexed
Diese Fehlermeldung kommt, obwohl die Spalte indiziert ist. Oracle TEXT hat die
Eigenheit, dass der Database Link auch bei der CONTAINS-Funktion angegeben werden muss. Damit
wird sichergestellt, dass die CONTAINS-Funktion auch auf der entfernten Datenbank ausgeführt
wird. Also ...
select * from dok_tab@{dblink-name} where contains@{dblink-name}(dok, '$Bahnhof') > 0; ID DOK ---------- ------------------------------ 2 Hauptbahnhof
Eins ist im Zusammenhang mit Database Links noch wichtig: CLOB- oder BLOB-Spalten können
nicht via Database Link übertragen werden. Was geht, sind die ersten 32 Kilobyte - dazu
kann man mit DBMS_LOB.SUBSTR arbeiten. Zur Selektion der ganzen Dokumente kann man
mit Database Links also nicht arbeiten - die Selektion von IDs, URLs oder Titeln ist jedoch
problemlos möglich.