Novosti

29

Z buildom 55.58.00 (12.9.12) se je v kodo za vzdrževanje referenčne integritete podatkov prikradla napaka, ki sicer v precej omejenih okoliščinah povzroča, da sistem za cascade update napačno posodobi tuje ključe (foreign keys), vezane na ta primarni ključ oz. povzroči napačno referenčno integriteto. Napaka se zgodi, kadar se na tabeli spremeni podatek iz primarnega ključa, ki je sestavljen iz več kot enega polja in ga referencira tuj ključ. Napako povzroča MS SQL Server anomalija. Združevanje nizov s pomočjo lokalne spremenljivke je odvisno od trenutnega izvedbenega načrta (execution plan), ki je odvisen od mnogih dejavnikov (strukture tabel, indeksov, statistike, uporabe določenih funkcij itd.). Zato se lahko zgodi, da včasih poizvedba deluje, kot smo načrtovali, drugič pa ne. SQL Server, kljub temu, da je znano, da rezultat poizvedbe ni determinističen, ne poda opozorila ali prepreči poizvedbe zaradi združljivosti za nazaj. Podroben opis vzroka lahko preberete na povezavi:
https://connect.microsoft.com/SQLServer/feedback/details/606786/concatenation-into-a-scalar-variable-using-linked-server-in-from-clause-fails-when-casting-or-converting-data

Prizadeti so podatki, kjer se je nadgradilo na verzijo 55.58.00, 55.58.10 ali 55.58.11 in se je hkrati naredil popravek kateregakoli sestavljenega (= iz več polj) primarnega ključa. Da pa pride do brisanja takih podatkov, se lahko zgodi z nadgradnjo na katerokoli od omenjenih verzij, ker mehanizem v nadgradnji PANTHEON-a odstranjuje podatke osirotelih tujih ključev (orphan foreign key). Pogost znak težav na teh dveh tabelah so netočnosti v trdih rezervacijah, spiskih neizdobavljenega blaga ipd.

Torej: napaka se ne more pojaviti v nobeni obliki, če ni bilo nadgrajeno na verzijo 55.58.00 ali 55.58.10. Napaka se tudi ne pojavi, če je bilo nadgrajeno iz katerekoli verzije PRED 55.58.00 na VSAJ 55.58.11. Nadgradnje na verzijo 55.58.12 in naslednje ne povzročajo anomalij in tudi v sklopu nadgradnje diagnosticirajo potencialne anomalije, ki bi jih lahko povzročile PREJŠNJE verzije. Verzija 55.58.20 zapiše možne nepravilnosti v log nadgradnje. Verzija 55.58.21 (ki izide v petek 26.10.2012) te nepravilnosti sporoči Datalabu, zato priporočamo takojšnjo nadgradnjo na to verzijo.

Dne 27.9.12 smo dobili prve informacije o podrtih strukturah, tako da smo začeli z diagnostiko. Vzrok napake smo precej hitro ugotovili, zato smo takoj umaknili verziji 55.58.00 in 55.58.10, izdan je bil popravek 55.58.11 (28.9.12), ki to anomalijo odpravlja. Pregledali smo log nadgradenj in ugotovili da je prizadetih 192 podjetij. Zaradi omejene razširitve problema, onemogočitvijo nadaljnega razširjanja in vidnim načinom rešitve smo z polno objavo počakali, saj bi lahko generirala nepotreben preplah.

S popravkom 55.58.12 (9.10.12) in naslednjimi nadgradnjami pa so v log napak iz nadgradnje dodani rezultati testa, ki ob nadgradnji preveri, ali je do katere od zgoraj opisanih napak v podatkih res prišlo. Ta log se pošilja v slučaju napak k Datalabu, da preverimo stanje in opozorimo na morebitno možnost napak v podatkih in pomagamo pri odpravi.

Pripravljali smo postopke za ureditev teh napak ter na izbranih podjetjih certificirali pravilnost rešitve. Zahvala podjetju T-Ipsilon za sodelovanje pri diagnostiki. Danes imamo potrebne informacije in pripravljena orodja za avtomatizirano ureditev teh napak s 100% zanesljivostjo.

Priporočamo, da se takoj nadgradi na zadnjo verzijo programa in tako izogne potencialnim možnostim za nastanek težav, kot smo že obveščali na Uporabniških straneh v času, ko so bile zaznane te napake in izdani popravki.

Do sedaj ni bilo veliko primerov in do zdaj so bili vsi podatki uspešno urejeni, ker sestavljeni primarni ključi obstajajo na omejenem številu tabel (sprememba podatkov takega ključa pa je predpogoj, da sploh pride do napake v podatkih). Ni pa nujno: v primeru, da je tuj ključ nastavljen kot »on update cascade«, do napake ne pride. Zato priporočamo, da v kolikor je možno, aktivirate backup kopijo in iz nje prepišete vsebine prizadetih tabel s pomočjo pripravljenih poizvedb, za manjkajoče zapise pa uporabite pripravljena orodja.

SQL skripte z navodili za pomoč pri reševanju podatkov so na ftp na lokaciji na naslovu ftp://ftp.datalab.si/Scripts/555800_555810/

Za nastalo napako in neprijetnosti se vsem najgloblje opravičujemo. Napake, ki bi brisala podatke so redke, tole je tretja  (1999 brisanje pozicij dokumentov, 2004 prepis napačnih DDV stopenj) v 15-letni zgodovini. Vemo da ni zadnja, a upam da bo naslednja še podaljšala sedanji 8 letni cikel.

Lep pozdrav in hvala za razumevanje

Dare Rihter, direktor razvoja
Andrej Mertelj, izvršni direktor

 

P.S.: Na tem mestu ponovno apeliramo tudi, da se ob nadgradnjah izvajajo redne arhivacije podatkov, da se zagotovi zadostna varnost podatkov v splošnem in bistveno olajša reševanje podatkov, če pride do anomalij, kakršna je tudi zgoraj opisana, ker je najhitrejša pot do osvežitve podatkov tudi v tem primeru iz backupa. Pravilna backup strategija na podlagi precejšnjih izkušenj je sledeča: 7 dnevni tekoči backup, zadnjih 30 dni = 4 tedenski backupi, zadnje leto = 12 mesečnih backupov. Če zmanjka prostora za pretekla leta potem priporočamo, da ohranite vsaj kvartalne backupe.

P.P.S.: Pozivamo uporabnike, da vnesejo veljavne elektronske naslove pri nadgrajevanju. Na tak način vas bomo lažje obvestili o napakah.

  • Pojasnilo za nedavni umik nekaterih nadgradenj

Zadnja sprememba: 29. 10. 2012 @ 13:58

Komentiraj

Trenutno ni komentarjev. Bodi prvi!

Napiši komentar

Only registered users may post comments.

Add Content...