none
DacServices deployment soll neue Constraints und bereits vorhandene Werte in der DB überprüfen. RRS feed

  • Frage

  • Hallo zusammen,

    ich arbeite derzeit an einer C# Anwendung mit dem Micorsoft.SqlServer.DacFx.x86 NuGet , die Version des NuGet ist aktuell die 150.4316.1.

    Kurz wozu ich das DacFx benötige:
    Eine bereits bestehende Datenbank soll mithilfe eines DacPackage umgebaut werden. Die bereits vorhandenen Daten im SQL Server könnten teilweise gegen die neuen Constraints verstoßen. Deshalb sollen diese Verletzungen bereits zuvor überprüft werden. Im Dac deployment report gibt es keine Meldung über die entstandenen Constraint Verletzungen. Lediglich beim deployment erscheint eine Exception die auf die Verletzung hinweist. Gibt es eine Möglichkeit diese Fehler vorher durch das Dac herauszufinden?

    Wenn diese Exception auftritt wird das Deployment korrekt zu Ende geführt oder kann es sein, dass das Deployment korrupt ab diesem Zeitpunkt ist? 
    In meinem Testfall wird nach der Exception das DacPackage dennoch deployed, daraufhin sind invalide Daten in der DB, aufgrund der neuen Constraints. Ist dies in allen Fällen reproduzierbar? Somit könnte ich die Exception catchen und anschließende die Datenbank auf invalide Datensätze abprüfen. (Mir ist durchaus bewusst, dass eine solche Behandlung von Fehlerfällen nicht ideal ist und normalerweise nicht durchgeführt werden sollte)

    Mit freundlich Grüßen 

    ObiLanKenobi

    Montag, 1. April 2019 05:31

Antworten

  • Hallo Dimitar, 

    vielen Dank für deine Antwort, der Benutzer hat die sysadmin-Rolle. 

    Ich habe allerdings inzwischen das Problem gelöst. Wenn man in den Deployment Optionen das Property "IgnoreWithNocheckOnCheckConstraints" auf true setzt und "ScriptNewConstraintValidation" auf false, dann werden die neuen Constraints in die Datenbank geschrieben, ohne sie mit den bereits vorhandenen Daten abzugleichen. 

    Im Nachgang kann man dann mit dem TSQL Befehl "DBCC CHECKCONSTRAINTS" herausfinden, welche Daten gegen Constraints verletzen.

    Die Tatsache, dass die Datenbank ohne diese Optionen und trotz der auftretenden Exception, dennoch deployt werden kann ist ein eindeutiger Bug, den ich an Microsoft melden werde. 

    Gruß

    ObiLanKenobi

    Mittwoch, 3. April 2019 08:22

Alle Antworten

  • Hallo ObiLanKenobi,

    Wird das Paket von einem Benutzer mit der sysadmin- oder serveradmin-Rolle oder von einem Login mit der dbcreator-Rolle bereitgestellt? Sieh Dir dazu folgende Anleitung:
    Bereitstellen einer Datenebenenanwendung

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 2. April 2019 05:27
    Administrator
  • Hallo Dimitar, 

    vielen Dank für deine Antwort, der Benutzer hat die sysadmin-Rolle. 

    Ich habe allerdings inzwischen das Problem gelöst. Wenn man in den Deployment Optionen das Property "IgnoreWithNocheckOnCheckConstraints" auf true setzt und "ScriptNewConstraintValidation" auf false, dann werden die neuen Constraints in die Datenbank geschrieben, ohne sie mit den bereits vorhandenen Daten abzugleichen. 

    Im Nachgang kann man dann mit dem TSQL Befehl "DBCC CHECKCONSTRAINTS" herausfinden, welche Daten gegen Constraints verletzen.

    Die Tatsache, dass die Datenbank ohne diese Optionen und trotz der auftretenden Exception, dennoch deployt werden kann ist ein eindeutiger Bug, den ich an Microsoft melden werde. 

    Gruß

    ObiLanKenobi

    Mittwoch, 3. April 2019 08:22