Avatar billede ulrikp Nybegynder
15. marts 2003 - 09:02 Der er 13 kommentarer og
2 løsninger

Replikering/Synkronisering

Jeg har et webbaseret tidsbestillingssystem, som kører på en Access database. For at forbedre performance vil jeg en gang i døgnet slette fortidige tidsbestillinger fra produktionsdatabasen, men af hensyn til historik/statistik ønsker jeg at gemme de records, der kan slettes, inden jeg sletter dem.
Jeg har prøvet følgende: Først laver jeg en replika af databasen. Derefter sletter jeg de fortidige tidsbestillinger, og så laver jeg en synkronisering. Det dur bare ikke, for så får jeg de "gamle slettede" records tilbage i produktionsdatabasen...
Jeg har også prøvet med en delvis replika, hvor jeg vælger, at jeg kun vil have overført fortidige tidsbestillinger til den delvise replika, men det duer heller ikke for så sletter den de records, der var i den delvise replika i forvejen...
Er der nogen der kan hjælpe mig?
Avatar billede terry Ekspert
15. marts 2003 - 09:42 #1
ulrikp>I havent done so much with "Replikering/Synkronisering". Replication is normally used to "synchronise" databases so that they end up with the same data, so I cant see HOW you can use this technoloy for this purpose.
So I will suggest another strategy. Make a NEW database with a copy of the tables (without data) which you want to have a history of. Then BEFORE you delete them you read from one (master) and write to the new (history). Then you delete them in the master.
Avatar billede ulrikp Nybegynder
15. marts 2003 - 10:07 #2
Jeg tror du har ret! Det er jeg også selv nået frem til i mellemtiden. Det ville dog være rart, hvis der fandtes en funktion, der kunne gøre dette, for mit problem er, at mine tabeller er forbundet med relationer på kryds og tværs. D.v.s.: Det er ikke bare at lave en "select from 1 - insert into t2 - delete from t1", for så går der ged i det, hvis der eksempelvis er oprettet en ny record i en anden tabel i source-databasen, som er relateret til den post jeg vil slette. Denne record skal så først oprettes i destinationsdatabasen...
Avatar billede terry Ekspert
15. marts 2003 - 10:48 #3
ulrik>How many records a day are we talking about?
There is no function that can do this for you, so there is only one way!
If it is possible to create NEW records which are related to records already deleted then in my opinion you MUST NOT delete them.
Avatar billede terry Ekspert
15. marts 2003 - 10:52 #4
I cant see you tables/realationships, but lets say a "tidsbestilling" in one table is related to a customer in another. Then I see no reason for NOT being able to delete old records in tidsbestilling. But I would NOT delete customer without first deleting tidsbestilling.
Avatar billede nih Novice
15. marts 2003 - 10:54 #5
Jeg har gjort det sådan i en af mine db'er.

De data (Tabeller) der skal være historik på har jeg lavet kopier af (i samme db), således at relationerne er intakte både til alm tabeller og historiktabeller.
På min formular er der en knap til søgning i historikken - den laver bare en UNION mellem aktiv tabel og historiktabel - på den måde kan jeg skifte mellem at søge i 10.000 records og 165.000 records.
Jeg vil tro at det samme kan lade sig gøre i web-løsning.

Niels
Avatar billede nih Novice
15. marts 2003 - 10:56 #6
Hi Terry - :)

Terry har ret i at det oftest er mest hensigtmæssig at slette poster i 'svage' tabeller, og lade de 'stærke' tabeller blive som de er.
Avatar billede nih Novice
15. marts 2003 - 10:59 #7
svage tabeller -> Dem med fremmed nøgler
Stærke tabeller -> Dem uden
Avatar billede ulrikp Nybegynder
15. marts 2003 - 11:08 #8
Egentlig ville jeg gerne have en komplet historik, så man kunne gå tilbage og se på kunder (også slettede) og deres tidsbestillinger, men det kræver så vidt jeg kan se to databaser, og jeg kan sgu ikke rigtigt gennemskue, hvordan jeg får nyoprettede kunder i prod. databasen over i history databasen. Jeg prøvede lige at se på import-funktionen i Access, men den laver bare en helt ny tabel. Det kunne være smart, hvis man kunne definere en destinationstabel og nogle betingelser i.f.m. importen ligesom man kan i SQL serveren, men det kan man vist ikke.
Så prøvede jeg også at skrive mig ud af det i ASP, men det er heller ikke lige til...
Det kan godt være at jeg bare skal gøre som dig, Niels, altså lave en tidsbestillings-history-tabel i samme db og så overføre til den en gang imellem, og så skide hul i at disse også ryger, hvis man sletter en kunde.
Det er nok det nemmeste, og det med at kunne se slettede kunders tidsbestillinger er ikke strengt nødvendigt.

Har I så en idé om, hvordan man laver det der svarer til en stored procedure i Access? Og hvordan man sætter denne til at blive eksekveret automatisk en gang i døgnet?
Avatar billede ulrikp Nybegynder
15. marts 2003 - 11:11 #9
terry: det er ikke muligt at have tidsbestillinger, som ikke hører til en kunde! Hvis en kunde slettes, slettes alle tilhørende tidsbestillinger også!
Avatar billede terry Ekspert
15. marts 2003 - 11:36 #10
ulrik>If you are using Acccess as your database for a web application then you CAN NOT make stored procedures. Access is NOT a database server so CAN NOT do anything without you telling it to. In other words if you want something to happen at a specific time then you have to tell Access to do it at that time.

You open TWO connections, one for the master database/table and one for the history/table. Then in the application you open a recordset, loop through all the records writing them one at a time into the history recordset.
Avatar billede ulrikp Nybegynder
15. marts 2003 - 11:44 #11
terry> Jeg vælger Niels' løsning. D.v.s.: Jeg laver en history-tidsbestillings-tabel i samme database, og denne tabel får samme relationer som den tabel, som indeholder de fremtidige tider. Desuden er jeg nu ved at skrive et program (en asp-side), som overfører gamle tidsbestillinger til history-tabellen. Dermed er der ikke så mange records, der skal søges igennem, når nogle gerne vil reservere en tid.
Nu skal jeg så bare have fundet ud af, hvordan jeg får scriptet aktiveret automatisk en gang i døgnet, så det ikke skal gøres manuelt...
Avatar billede terry Ekspert
15. marts 2003 - 11:52 #12
Ulrik, as I said before YOU must run the script to get access to do do this. You could MAYBE have a task on your local PC which runs at a specif time and opens an asp side, butthis requires that the PC is always on.
Avatar billede terry Ekspert
17. marts 2003 - 10:03 #13
Ulrik>hows it going?
Avatar billede terry Ekspert
17. marts 2003 - 13:55 #14
tak:o)
Avatar billede ulrikp Nybegynder
17. marts 2003 - 13:56 #15
Jeg har lavet et script, som overfører fortidige tidsbestillinger til en history-tabel i samme db, og så ser jeg om jeg ikke kan få dem, der hoster mit site, til at eksekvere scriptet via en "scheduled task".
Tak for hjælpen gutter (-:
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester