Könnte ich hierzu einmal bitte ein Beispiel bekommen wie ich so etwas zaubern kann ? So etwas habe ich schon mal benötigt aber niemals hinbekommen. Ich hoffe ich habe es richtig verstanden habe. Ich habe hier zwei Datenbanken mit jewals einer Tabelle. Nun mache ich eine Suche und wenn der Datensatz nicht in der 1.
DB ist wird in der 2.
DB nachgesucht. Dises geht mit einem
SQL ?
hier der reale sp quelltext aus unserer BRP Software, aber du solltest schon wissen, nach welchem Blob PK du suchst, weil du den parameter id an die sp brpgetdatei übergibt. In der Spalte TEXT haben wir aber immer den Volltext aus den PDFs extrahiert, so das man darüber mit containing gut und vergleichsweise schnell beliebige Suchen kombinieren kann. Es liesse sich aber auch das ggf noch in eine andere
DB auslagern, die man dann auf einer ramdisk liegen hat oder andere lustige verfahren, wie zum Beispiel n superserverinstanzen, jeweils an die cores gebunden, die jeweils nur die volltextdaten zu einem teil der gesamt
db haben und so weiter, haben wir alles schon mal so gemacht. In IMG ist übrigens ein preview des pdfs, so das ich in einer vorschau zumindest schon mal die vorschau als kachel anzeigen kann, ohne einen pdf client starten zu müssen, der ja meistens auch nur eine datei zur zeit kann.
Code:
--info: diese tabelle gibt es in beiden datenbanken
CREATE TABLE DATEI (
ID BIGINT NOT NULL PRIMARY KEY,
TXT VARCHAR(80),
TS TIMESTAMP,
DATEI BLOB SUB_TYPE 0 SEGMENT SIZE 1024,
TEXT BLOB SUB_TYPE 1 SEGMENT SIZE 1024,
IMG BLOB SUB_TYPE 0 SEGMENT SIZE 1024
);
--die proozeduren sind nur in der produktivdb
create or alter procedure BRPMOVEDATA (MAXDATE date)
as
declare variable ID bigint;
declare variable DATEI blob sub_type 0 segment size 1024;
begin
for
select datei.id, datei.datei
from datei
where datei.ts<:maxdate
and datei.datei is not null
into :id,:datei
do
begin
execute statement ('update or insert into DATEI (ID, DATEI) values (:ID, :DATEI) matching (ID)') (ID:=ID,DATEI:=DATEI)
on external 'brpdat';
update datei set datei.datei=null where id=:id;
end
end;
create or alter procedure BRPGETDATEI (
IDX bigint)
returns (
ID bigint,
TXT varchar(80),
DATEI blob sub_type 0 segment size 80,
TS timestamp)
as
begin
select
datei.txt,
datei.ts,
datei.datei
from datei
where datei.id=:idx
into :txt, :ts, :datei;
if (datei is null) then
execute statement ('select datei from datei where id=:id') (ID:=IDX)
on external 'brpdat'
into datei;
id=idx;
suspend;
end
brpdat ist ein serverseitiger alias in der alias.conf, der auf die archiv
db verweist. das könnte auch ein connectionstring auf einen ganz anderen server sein. Mit dre Prozedur BRPMOVEDATA kannst du einen zeitpunkt festlegen, ab dem alle älteren PDFs in die archiv
DB wandern. Wir rufen die per aufgabenplanung am monatsanfang auf und übertragen die dateien, die älter als 30 tage sind. vorher wird per batch und gfix die
db auf readwrite und danach wieder auf readonly gesetzt.