Troels Arvin wrote:
> Hej,
[snip]
> Hvad gør man typisk i praksis, når man vil samle data fra forskellige
> lokationer/DBMS-typer til ét warehouse?
Her er et par eksempler på de metoder, jeg har brugt (DW = MSSQL 7.0/2K):
(Subset af) *Stamdata* -
- metode 1: Der findes normalt oplysninger om oprettelses +
ændringstidspunkt i de operationelle databaser. Her bruger jeg et
job/program, der kører hver dag, og gemmer sidste kørselsdato. Jeg kører
normalt på hele dage, da det ikke er muligt at synkronisere klokken 100%
mellem eks. en mainframe og en PC-server.
- metode 2: (Kræver evt. kontrol over applikationen) Der oprettes en tabel,
der indeholder nøgleværdi, samt en status kode. Når brugeren (op)retter
eksempelvis en vare, skrives der varenummer+status 0 i tabellen.
Der kører så en service på enten DW-serveren eller på en særskilt
Applikationsserver. Denne service udfører følgende pseudokode:
Update 'ændringslog' set status=1
Select Varenummer from 'ændringslog' where status=1
loop..
Select 'DeFelteDuSkalBruge' from varer where Varenr = 'VærdiFraRecordset'
'UdførEnSPMedDeFelterDuSkalOpdatere'
loop.. slut
Delete from 'ændringslog' where status=1
Da der kun er tale om ganske få data, kan denne sagtens køre hvert sekund.
(Subset af) *Dynamiske* data -
- Metode 1:
Ved eksempelvis faktureringsrutiner, dannes der en ouput fil fra
faktureringsrutinen, der indeholder de faktiske tal fra en given
faktureringskørsel. Filen FTP'es over på PC-serveren, og indlæses vha. et
program.
- Metode 2:
For finanstransaktioner, er der normalt altid en unik angivelse af
posteringer. Det kan være en global fortløbende tæller, eller en
kombination af en global fortløbende nummerering af en batch, med
tilhørende fortløbende nummerering inden for batchen.
Her gælder det om at finde de posteringer, der har en værdi større end den
sidst opdaterede, og gemme denne ved afslutning.
> Jeg går ud fra, at man kører
> nogle tidsstyrede SQL-jobs ude på de enkelte produktionsdatabaser, der
> så sender resultatet til et opsamlende warehouse?
Som du kan se af ovenstående, er det ikke altid muligt at køre en push
strategi. Det afhænger af sammensætningen af (R)DBMS'er
> Findes der nogle (gerne
> open source) toolkits, der kan lette arbejdet?
Tvivler?
--
Med venlig hilsen
Stig Johansen
|