Spørger
Opgradering fra C5 3.0 til C5 4.0 SP1

Spørgsmål
-
Jeg prøver at opgradere en C5 3.0 SP3 til en C5 4.0 SP1, men jeg får en
DDL Resource busy.
I c5sql.log står dette:
Dato...........: 29/09-17, 19:06:06, "Supervisor", 4.4.2.447, Windows 32 SQL, [c5sqldsn], "DAT" USRID=95927
-zsrvr=xxx.xxx.xxx.xxx -zdsn=c5sqldsn -zuxal_supervisor -zpxal_supervisor_psw -q400 -zdb=xxxxx -T
Fejlkode.......: 9999 / SQLSTATE=
Fejltekst......: [XAL] DDL resource busy(xxx-værdierne har jeg sat ind)
Det virker som om, den melder fejlen ved Parametre-kartoteket, men jeg kan ikke se,
at der er noget galt med dette kartotek.
Alle besvarelser
-
Hej Tommy
I dokumentet "Microsoft Dynamics C5 SQL Best Practices", som idag er indeholdt i senere C5 hjælpefiler står der bl.a.:
"Fejlmeddelelser ved rettelse af DBDUnder rettelser i DBD kan der komme fejlmeddelelser fra SQL-serveren. Det er meget vigtigt at få identificeret og afhjulpet disse fejl med det samme. Følgende er nogle af de mest almindelige, samt løsningen til dem.
‘Column names must be unique’
Fejlen skyldes at man har to eller flere felter i det samme kartotek, som kommer til at hedde det samme i tabellen på SQL-serveren. F.eks. hvis man har oprettet et felt 'LÅS', og der i forvejen fandtes et felt i kartoteket, der hedder 'LØS' eller 'LÆS'. Alle tre felter vil komme til at hedde 'LXS' på SQL-Serveren. Når man går ud af DBD/RET/Kerne, vil kernen synkronisere med SQL-serveren og fejlen komme. Her skal man, som sagt, være opmærksom på, at feltet er blevet oprettet i c5direct.c5s, men ikke på SQL-serveren, og man har derfor inkonsistens mellem c5direct.c5s og SQL-serveren. Det er derfor meget vigtigt at få omdøbt det sidste felt med det samme, da læsninger/skrivninger til feltet 'LÅS' og feltet 'LÆS' begge vil foregå til feltet 'LXS' på SQL-serveren.
’[XAL] DDL Resource Busy’
Denne fejl kan komme ved ændringer i kartoteksstrukturer, og skyldes at der er en post åben på det kartotek som skal ændres. Fejlen sås for det meste på Parameters eller UserInfo kartotekerne i versioner før C5 2008, men kan optræde hvor som helst. Fejlen er ikke en kernefejl, men kan fremprovokeres i applikationen ved f.eks. at INTRODUCE en buffer og derefter prøve at f.eks. reindexere samme kartotek:
#MacroLoad(C5UTIL)
INTRODUCE Parameters[UserNameIdx == 0,'Version']
PROCESS #Proc_DbRun 'MODE=REINDEX FILE='+FileStr(Parameters)
Det er nødvendigt at sørge for at kartoteket ikke har scope inden der ændres i skrukturen. Dette eksempel kan rettes ved at indføre et scope:
#MacroLoad(C5UTIL)
IF 1 THEN
INTRODUCE Parameters[UserNameIdx == 0,'Version']
ENDIF
PROCESS #Proc_DbRun 'MODE=REINDEX FILE='+FileStr(Parameters)
Fejlen kan også fremprovokeres i konsol kernen, hvis der er flere sessioner (Ctrl+F10) aktive og en af dem har fat i en post og den anden session forsøger at rette i definitionen af det tilhørende kartotek. "
Så du skal måske skele til hvordan den tilsvarende kode ser i C5 2008.
Venlig Hilsen Henrik Hansen Senior Software Engineer Microsoft Dynamics C5
-
Hej Henrik.
Mange tak for dit svar.
Jeg får meldingen ved at køre DBDAutoMerge ved opdateringen af databasen fra v. 3.0 til v. 4.0
ved at køre standard opdateringen. Jeg går ikke ud fra, at Parametre er åben på et tidspunkt,
men jeg tjekker lige koden af. Nu har jeg noget at gå efter, så det hjælper mig.
Mvh.
Tom Troelsen