SQL pomoč

mare92

Pripravnik
17. avg 2007
941
0
16
Ljubljana
Hej.

Imam 2 ogromni SQL bazi, staro in novo. Sedaj pa bi rad naredil skripto/poizvedbo, ki bi mi vrnila razlike(nove vpise in stare spremenjene)v določeni tabeli. Še 1x, bazi sta enako sestavljeni, le v novejši je v eni tabli več rezultatov, nekateri stari pa so spremenjeni - te bi rad dobil in to poizvedbo večkrat uporabljal.

Kakšen nasvet?

Hvala!
 
Nazadnje urejeno:

Snaga1

Pripravnik
3. sep 2012
257
0
16
Sicer ne vem o kateremu dialektu SQLa govorimo, splošni nasvet bi bil, da ne delaš preveč poizvedb preko dblinka, ker je to počasno, ampak najprej preneseš vse podatke na isto bazo.
Ob predpostavki Oracle baze in vzpostavljenega primarnega ključa, bi iz stare baze na novo prenesel v neko začasno tabelo vse PK iz stare tabele in na novi tabeli naredil query z not exists pogojem čez seznam starik PKjev.

OK, zdaj vidim tudi možnost sprememb zapisov, torej ideja prenosa samo PK odpade, torej toliko več podatkov itd... Tu bi bilo že dobro malo poznat strukturo tabel in podatkov, za kakšen bolj pameten nasvet.
 

erikson

Guru
25. avg 2007
22.693
6.460
113
Obe tabeli izvoziš v tekstovno obliko (bcp v MSSQL / mysqldump v MySQL) in čez poženeš diff. Najhitreje.
grin1.gif
 

KrNeki99

Fizikalc
3. sep 2007
886
25
28
Ljubljana
1. Blo bi potrebno definirat kaj pomeni ogromno (1GB, 5GB, 10GB, 25GB, 100GB, ...)
2. O kateri bazi je govora
3. Sta bazi na istem SQL serverju

lp
 

mare92

Pripravnik
17. avg 2007
941
0
16
Ljubljana
Red Gateov SQL Data Compare 10 je super. Vendar vseeno bi rad imel svojo proceduro/skripto, ki pa je v programu seveda ne dobis... Plus po dveh tednih je licenca 1500€.
 

Snaga1

Pripravnik
3. sep 2012
257
0
16
Z MSSQL sicer nimam praktično nič izkušenj, ampak verjetno bo veljalo tudi zanj:
Če imaš primarni ključ, ki se vedno polni iz ene sekvence, potem lahko nove zapise dobiš na podlagi tega. Vzameš greatest(id) v stari tabeli in v novi daš pogoj v query, da je ID večji od maksimalnega starega.
Če imaš kolono, kamor zapisuješ datum spremembe zapisa in veš, da je 100% zanesljiva, potem lahko spremenjene stare zapise dobiš tako, da daš pogoj, da je datum spremembe večji od največjega v stari tabeli. Seveda je dobro (beri "obvezno"), da je to polje indeksirano.
Če tega ni, potem ti ostane samo kot je zapisano višje, brute force primerjanje vseh podatkov, queryNovi minus queryStari.
5 GB ni tako dosti, če rabiš to za enkratno primerjavo ne bi smelo bit prehud zalogaj za količkaj normalen strežnik, če pa hočeš v živo spremljat spremembe, potem bo zadeva malo bolj zapletena...
 
Nazadnje urejeno:

KrNeki99

Fizikalc
3. sep 2007
886
25
28
Ljubljana
Če sta na istem serverju delajo normalno JOINi med različnimi bazami/tabelami.

Odvisno sicer kaki so podatki. Jest bi naredil join in primerjal podatke o zadnjem popravku. Če je podatkov prevec narediš loop pa se sprehodiš po indexu. Vsakič update na par 1000 zapisih.

Kaksne podatkovne tipe imas notri na Primarykey ?