Was passiert bei der Konvertierung nach 2009 genau

20. April 2010 13:35

Seit meinem ersten Versuch, meine 5.1 (BW 4.2) Navision DB nach 2009 zu konvertieren, wollte ich immer gerne wissen, was denn unmittelbar an der Datenbank selber verändert wurde. Gewundert hatte mich einfach, dass diese Konvertierung bereits nach 3 Sekunden fertig ist.

Da ich auch nach längerem Suchen in diesem Forum nichts passendes finden konnte, habe ich mir per SQL statement auf dem Server
selber einen Vergleich gebastelt, der alle Felder aus Datenbank A in Datenbank B sucht (habe ich natürlich in beiden Richtungen laufen lassen)
Code:
select o.name, c.column_id, c.name, c.max_Length from bos2009.sys.columns c
join bos2009.sys.objects o on o.object_id = c.object_id
where NOT EXISTS
(select * from bosfood.sys.columns bc where bc.name = c.name)


Lange Rede, kurzer Sinn: 2009 scheint zusätzlich über die folgenden Felder zu verfügen:
Code:
name   column_id   name   max_Length
Object Tracking   4   Object Key   16
Object Tracking   5   Object Timestamp   8
Object Metadata   4   Metadata   16
Object Metadata   6   User Code   16
Object Metadata   7   Object Key   16
Profile   2   Profile ID   30
Profile   3   Owner SID   119
Profile   5   Role Center ID   4
Profile   6   Default Role Center   1
User Personalization   2   User SID   119
User Personalization   3   Profile ID   30
Profile Metadata   2   Profile ID   30
Profile Metadata   3   Page ID   4
Profile Metadata   4   Personalization ID   40
Profile Metadata   7   Page Metadata Delta   16
User Metadata   2   User SID   119
User Metadata   3   Page ID   4
User Metadata   4   Personalization ID   40
User Metadata   7   Page Metadata Delta   16
Web Service   3   Service Name   240
Web Service   5   Published   1
Client Add-in   2   Control Add-in Name   220
Client Add-in   3   Public Key Token   20
Page Data Personalization   2   User SID   119
Page Data Personalization   5   Personalization ID   40
Page Data Personalization   6   ValueName   40
Record Link   14   Notify   1
Record Link   15   To User ID   132
$ndo$dbproperty   28   enabledforserver   4

Da dies alles nur System-Tabellen oberhalb 20000000 sind, scheint sich an den eigentlichen Tabellen nichts geändert zu haben. Bis auf Record Link liegen diese Tabellen alle in dem Bereich ab 2000000069, und in Record Link sind die beiden Felder "Notify" und "To User ID" dazu gekommen. Vergleicht man anders herum, sind auch keine Felder weggefallen! Also werden sämtliche Datenstrukturen anscheinend ausschließlich beim bw Update verändert oder erweitert,und ein technisches Update auf 2009 ist tatsächlich kein großes Ding.

"Schaut" man dann noch in diese Tabelle(n):
Code:
select databaseversionno from bosfood.dbo.[$ndo$dbproperty]
select databaseversionno from bos2009.dbo.[$ndo$dbproperty]

zeigt sich, dass meine Datenbank-Version von "95" auf "150" verändert wurde ... Setzt man dieses Feld in der konvertierten DB wieder auf den alten Wert (bei mir also 95) kann man auch wieder mit der alten Version (bei mir 5.1) auf die Datenbank zugreifen ... und DAMIT ARBEITEN. Das soll aber bitte keine Empfehlung sein, seine Echtumgebung hin und her zu konvertieren.

Pidi

Re: Was passiert bei der Konvertierung nach 2009 genau

20. April 2010 18:21

Hallo Pidi,

Die Datenstrukturen müssen sich auch nicht unbedingt ändern, damit ein technisches Update Probleme bereitet. Es können sich auch interne Schnittstellen der mitgelieferten Komponenten ändern.
Mir fallen da zwei Beispiele ein:
  • Ab einem bestimmten Build von NAV5.0Sp1 wurde die Struktur der XML-Dateien und Stylesheets geändert, die beim Senden an Word bzw. Excel verwendet werden, weil der Client die Daten ab da in einem anderen Format ausgab. Wer diese Stylesheets selbst angepasst hatte, durfte die dann trotzdem überabeiten.
  • Es ist ein Fix verfügbar, mit dem man Mails per SMTP auch an Mailserver versenden kann, die nicht auf Port 25 hören. Wenn der zum Standard wird, funktionieren Programme nicht mehr, die die alte Version benötigen.
  • Bei einem Hotfix in der 2er oder 3er- Version funktionierten plötzlich Reports für Generic TextDrucker nicht mehr, weil NAV den linken Rand anders interpretierte

Sicherlich fallen anderen noch weitere Beispiele für Probleme ein, die auftreten können, obwohl man nur ein technisches Update gemacht hat.

Deshalb muss man bei allen technischen Updates sehr vorsichtig sein, wenn sich auch keine Daten oder NAV-Programme ändern, kann das ganze System danach trotzdem Probleme bereiten.

Gruß, Fiddi

Re: Was passiert bei der Konvertierung nach 2009 genau

20. April 2010 19:02

Fiddi - ich bin vollkommen Deiner Meinung, dass dies hier nur ein kleiner Teil der gesamten Betrachtung "technisches Update" ist. Warum bin ich also überhaupt auf diese Schnaps-Idee hier gekommen?

Ich konnte kleider (mal wieder) seitens meines Systemhauses keine vernünftigen Aussagen darüber bekommen, warum die Konvertierung mit CREATE USER [] FOR LOGIN [] abbricht, dabei sogar den Client mit (Senden/Nicht Senden)
beendet, ob danach die Datenbank denn nun trotzdem korrekt konvertiert ist, wielange eine solche Konvertierung eigentlich dauern sollte (bei mir ca. 3 Sek.) und was überhaupt hinter dieser Konvertierung steckt. Stattdessen riet man
mir, eine FBK-Sicherung zu erstellen und in eine neue SQL DB einzulesen ... das sei sowieso "der einzig korrekte Weg ..."
Also wie ich es kenne; "Keep the Customer stupid"

Nachdem was ich jetzt weiß, kann ich aber beruhigt daran gehen, meine Navision Lösung mit allem Drum und dran und möglichst vielen und von Automations abhängigen Funktionen zu testen. Wenn ich mir die Liste der HotFixes zum
2009 SP1 anschaue, dann werde ich wohl sowieso besser noch warten, bevor ich mit 2009 technisch live gehe.

Abgesehen davon war mein SQL Statement so auch nicht korrekt, denn ich muss ja zumindest noch die Tabellennamen mit einbeziehen, und darf nicht nur schauen ob ein Feld gleichen Namens enthalten ist:
Code:
select o.name, c.object_id, c.column_id, c.name, c.max_Length from bos2009.sys.columns c
join bos2009.sys.objects o on o.object_id = c.object_id
where NOT EXISTS
(select * from bosfood.sys.columns bc
 join bosfood.sys.objects bo on bo.object_id = bc.object_id
 where c.name = bc.name and bo.name = o.name)


Das ändert am beschriebenen Ergebnis nichts, und man sollte noch der Vollständigkeit halber erwähnen, dass die Tabelle $ndo$dbproperty ein zusätzlich Feld "enabledforserver" erhalten hat.

Thanks

Pidi