Home › Forum › Allgemeines › Allgemeines zu Nuclos › SQL Server 2016, Nuclos Upgrade und Neuinstallatio
- Dieses Thema hat 1 Antwort und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 2 Jahren, 10 Monaten von
caf.
-
AutorBeiträge
-
21 Dezember 2017 um 18:04 Uhr #9798
Peter Kampmann
TeilnehmerHallo zusammen,
die Nutzung von Nuclos ab 4.18.1 zusammen mit MS SQL Server 2016 scheitert aufgrund mehrerer SQL-Fehler während der Installation.
A) Neuinstallation von Nuclos 4.18.1 oder 4.21.2 oder 4.23.0 scheitert aufgrund einer fehlerhaften Definition eines Foreign Key Constraint.
Create foreign key constraint T_MD_PREFERENCE.XR__HM27LK75WB2TWMAPQZT56MLJB4 (STRUID_T_MD_USER) references T_MD_USER (STRUID): org.nuclos.server.dblayer.DbException: com.microsoft.sqlserver.jdbc.SQLServerException:
Introducing FOREIGN KEY constraint ‚XR__HM27LK75WB2TWMAPQZT56MLJB4‘ on table ‚T_MD_PREFERENCE‘ may cause cycles or multiple cascade paths.
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Die Ursache für das Problem ist, dass der Foreign Key Constraint die Klausel ON DELETE CASCADE enthält.
In der Nuclos Version 4.13.0 wurde hier noch ON DELETE NO ACTION verwendet.MS SQL Server 2016 ist hier möglicherweise sorgfältiger im Umgang mit Foreign Key Constraints als PostgreSQL und sperrt sich aus den in der Fehlermeldung angegebenen Gründen (ich habe nicht geprüft, ob dies wirklich zutrifft).
B) Upgrade von Nuclos 4.13.0 auf Nuclos 4.18.1 oder 4.21.2 oder 4.23.0 scheitert aufgrund eines fehlerhaften Primary Keys.
Beim Versuch, in die Datenbank die neue Release-Nummer einzutragen, entsteht folgender SQL-Fehler:
Insert into T_AD_RELEASE…
Violation of PRIMARY KEY constraint ‚PK__4I7U5BQXMWME3OYXZIYABCZUAT‘.
Cannot insert duplicate key in object ’nuclos.T_AD_RELEASE‘.
The duplicate key value is (40000000).:Die Ursache liegt vermutlich daran, dass die Sequence ID-Factory beim MS SQL Server nicht (wie in PostgreSQL) mittels einer Datenbank-Sequenz „ID_Factory“ gelöst wurde, sondern mit einer eigenen Tabelle „T_AD_SEQUENCEIDFACTORY“ und einer Stored Procedure „IDFACTORY“.
Dieses Konstrukt scheint während des Schema-Upgrades beim ersten Start der neuen Version nicht zu funktionieren, d.h. es werden keine IDs > 40000000 erzeugt.
Die Tabelle „T_AD_SEQUENCEIDFACTORY“ enthält im übrigen in der Version Nuclos 4.13.0 keinen Eintrag!PS: Das Problem mit dem Primary Key Constraint lässt sich lösen, wenn einfach in der Tabelle T_AD_RELEASE für den existierenden Eintrag INITID=39999999 gesetzt wird. Leider nützt das aber nichts, da dann das Problem A) der Neuinstallation (fehlerhafter Foreign Key Constraint) zuschlägt.
C) Genereller Eindruck
Ich habe ein wenig den Eindruck, dass die Nuclos Adaption für MS SQL Server einer generellen Überarbeitung bedarf. SQL 2016 (und vermutlich auch die beiden Vorgänger SQL 2014 und SQL 2012) beherrschen das Thema Sequenz in derselben Weise wie PostgreSQL und Oracle 10 bzw. 11.
Ferner sollte es nicht mehr notwendig zu sein, alle DDL- und SQL-Befehle in Upper-Case zu wandeln. SQL 2016 kann hier mit den selben Befehlen wie PostgreSQL gefüttert werden. Damit liessen sich dann weitere unangenehme Fehler wie bei der Definition von Datenquellen vermeiden, da hier ja „initid“ immer klein geschrieben werden muss und die Nuclos SQL Server Implementierung „INITID“ daraus macht, was dann dazuführt, dass die Datenquelle in einem Report bzw. Maskenlayout nicht mehr funktioniert.Die Verwendung von SQL Server wird nun nicht so häufig sein, allerdings ist SQL Server im Windows Umfeld leichter zu benutzen (speziell beim Thema Backup) als PostgreSQL und in der Version SQL Express auch nicht teurer.
9 Februar 2021 um 12:00 Uhr #26288caf
AdministratorHallo EW11,
besteht bei Ihnen der Fehler immer noch?
Vg
AGni -
AutorBeiträge