Gå til innhold

Anbefalte innlegg

Folkens...

 

Vi opplever et merkelig problem:

 

Vi har laget et program i Clarionfor Windows som benytter MS SQL 2005 som database motor. Frem til nå har dette fungert helt smertefritt, men nå står vi i en litt vanskelig situasjon. Vi begynner å miste data!

 

Det som er forskjell fra "før og etter" er to ting:

1. Vi har kjørt en Windows Update på alle servere

2. Vi har rekompillert programmet i en ny versjon av Clarion

 

Vi har bedt noen folk om å reversjere til eldre versjon av programmet vår for å se om feilen er der fremdeles, men siden denne feilen er veldig sporadisk så har jeg en dårlig magefølelse. Det har kansje skjedd to eller tre ganger i løpet av måneden.

 

Jeg tenker at jeg kansje skal lage en eller annen logging for å følge med på hva som skjer, men er litt usikker på fremgangsmåten.

 

Programmet vårt bruker sql serveren kunn som data lagring. Det vil si at all logikk utføres av klienten og ingen relasjoner og slikt er definert på serveren.

 

Alikevel mener jeg det bør være mulig å lage en eller annen form for logging både på SQL siden og klient siden. Selve loggingen på Klient siden er ikek noe problem for jeg har full kontrol på programmet, men hvordan kan jeg sette opp en logging på SQL serveren som viser alle hendelser i klartekst? Det jeg trenger er tidspunkt, tabell, innhold i gitte felter og hendelsestype (ny, endre, slett)

 

Takker for alle tips.

Lenke til kommentar
Videoannonse
Annonse
Programmet vårt bruker sql serveren kunn som data lagring. Det vil si at all logikk utføres av klienten og ingen relasjoner og slikt er definert på serveren.

Hvis det betyr at dere ikke bruker databasens muligheter til å opprettholde dataintegritet så er det veldig dumt.

 

Men så til saken, det er litt vanskelig å si hva som er lurt bare utifra at dere «mister data». Dersom det går an å isolere det til noen få tabeller ville jeg definert triggere på disse og fått disse til å logge hva som skjer når til en egen logg-tabell. Dersom du har hundrevis av tabeller og mister data i alle blir den fremgangsmåten litt tungvint, men da høres det på den andre siden ut som du har et generelt problem, og det vil kanskje klare seg å definere triggere på noen få tabeller da også.

 

Ellers kan det hende det er mulig å få mellomvaren/databasedriveren til å logge all trafikken også, men her må du nok google deg fram selv.

 

Til slutt ville jeg vel kanskje vridd hjernen et par ekstra omdreininger for å finne ut om det kan være noe annet enn disse to oppgraderingene som har skjedd. Min erfaring er at det som regel er jeg selv som har rota det til ... har du f.eks. kontroll på kildekoden din s.a. du kan se på endringer som er commitet omkring det tidspunktet feilen har oppstått? Har du googla etter andre brukere av Clarion/MSSQL i samme versjoner som opplever samme problem etter samme oppgradering?

Endret av quantum
Lenke til kommentar

Vet det er dumt å ikke benytte SQL serveren skikkelig, men dette er et gammelt program som tidligere brukte flatfiler og den kjappeste måten å få til SQL på er å endre driveren til SQL, men medaljens bakside er at logikken i klienten fortsatt kjører på gamle måten.

 

Foreløpig er det kunn rapportert problemer i to tabeller så en trigger her kunne vært en god ide. Jeg har forøvrig blitt fortalt at feilen har forløpt seg slik:

 

Bruker har scannet inn dokuemnt og importert i system. Dermed har en record i tmp_Documents blitt opprettet med en filreferanse til temp filen. SÅ har brukeren gått igjennom dokumentene for å bekrefte importen. Dermed blir det opprettet en ny record i tabellen Documents som også inneholder fil referansen til samme dokuemnt, men da på et annet sted. Recorden i tmp_Documents blir så slettet. Når brukeren da var ferdig så opplevde han at recorden i Document var borte og at recorden i tmp_Document plutselig var tilbake igjen. Dette forteller meg at en eller anne COMIT ikke har funnet sted, men at en Rolback må ha blitt trigget. Jeg har hørt av andre at dette kunne være en situasjon i en tidligere versjon av Clarion, men ingenting om dagens versjoner, og at dette var relatert til threading. Dette har nok ingen her noen mulighet til å svare på for dette blir veldig Clarion relatert, men det du/dere kansje kan svare på er om en slik trigger vil kunne fange opp en slik situasjon.

 

Jeg ser kansje for meg at jeg legger inn triggere på disse tabellene både på server siden og i klienten. Dermed skal jeg kunen sammenligne når feilen dukker opp.

 

Jeg har minimal kunnskap om SQL servere så et tips om hvordan en slik trigger kan se ut vilkle vært veldig fint...

Lenke til kommentar

Det er dessverre umulig lage en audit trigger, da en rollback utført av klientet også vil rulle tilbake audit-data.

 

Jeg gjetter, som du selv sier, at programmet kjører en rollback eksplisitt, eller at connection lukkes uten av commit blik kjørt. For å logge ROLLBACK så må du bruke SQL Profiler og trace rollback events. Les mer her : http://msdn.microsoft.com/en-us/library/ms180976.aspx.

 

Jeg skal garantere deg at SQL Server ikke mister data, med mindre IO subsustemet er korrupt. Forslår at du ogs sjekker at diskene er i orden.

 

Kjør også DBCC CHECKDB for å eliminere korrupt database (som følge av ødelagte disker).

Lenke til kommentar
Det er dessverre umulig lage en audit trigger, da en rollback utført av klientet også vil rulle tilbake audit-data.

 

Du kan vel komme rundt det med å logge til «noe» som ikke støtter transaksjoner vil jeg tro ... f.eks. en fil? Men - SQL Profiler høres ut som et mye greiere alternativ.

Lenke til kommentar
  • 2 uker senere...

Har kommet litt lenger i denen saken og det viser seg at den nye versjonen av utviklingsverktøyet tøyser med oss her...

 

Det som faktisk skjer er at en del av programmet går i heng under transaksjonen og dette resulterer i at brukeren terminerer programmet. Når brukeren så igjen starter programmet igjen så er postene reversert. Er nok en eller annen transaction som får en rollback her.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...