Danjo's two cents NAV, Powershell, Android, C#, Lync, Win8, …

3Nov/170

Docker – eine neue Welt?

Nachdem nun auch Dynamics in der Dockerwelt ankommt, habe ich mich die letzten Tage mit dem Thema Docker als Ablösung für Virtuelle Maschienen beschäftigt.

In diesem Beitrg möchte ich lediglich meine ersten Schritte aufzeigen.

 

Schritt 1 war hierbei die Installation von Docker.

Hierbei wird die Docker MSI in einen temprären Ordner heruntegeladen und gestgartet.

Im Anschluss installiere ich ich noch die beiden Windows-Features Hyper-V und Containers.

Beide sollten bereits durch die MSI installiert worden sein, aber sicher ist sicher.

Auch die Powershell-Module für Docker werden im Anschluss gleich mit installiert.

Ab jetzt ist es mir möglich über Request-ContainerImage aus Powershell heraus neue Container-Images abzurufen bzw. zu aktualisieren.

In meinen Augen hat Docker zwei Stufen.

Es gibt Container-Images, das sind vorgefertigte Templates.

Aus diesen Container-Images kann man nun Container erstellen, diese sind eine Kopie des Images und bekommen durch Docker bei der Anlage einen eindeutigen Namen.

 

Kommen wir nun zu Schritt 2, dem starten eines SQL-Containers.

Über Powershell lade ich das Standard-Image für MSSQL herunter.

Und im Anschluss erzeuge ich mir einen neuen Container auf dieser Grundlage.

Über --ip vergebe ich dem Container eine feste IP, mit -d lasse ich ihn im Hintergrund laufen.

Durch -p 1433:1433 wird der Port 1433 auf 1433 gemappt. (1433 ist der Standardport für MSSQL)

Mit Hilfe von --env vergbe ich noch ein Passwort (123456) für den sa-Benutzer und akzeptiere die EULA.

In der Ausgabe erhalte ich nun den eindeutigen Namen meines Containers.

Bei mir ist dies romantic_hermann.

Ab jetzt bin ich in der Lage mich z.B. über das SQL Server Managment Studio meines loaklen Rechners (Host) auf den SQL-Server innerhlab des Container zu verbinden.

Die IP-Adresse ist 172.22.10.1, der Benutzer ist sa, das Kennwort 123456.

veröffentlicht unter: Docker, NAV, Powershell keine Kommentare
24Okt/140

NAV 2013 R2 – Änderungen werden erst nach Neustart des ServiceTiers aktiv

Diese Woche bin ich auf ein eher störendes Phänomen bei der Entwicklung in einer NAV 2013 R2 CU12 Datenbank gestosen. (Das verhalten konnte ich inzwischen auch in älteren Build-Versionen nachstellen)

Ich lege eine neue Tabelle an, erzeuge eine Page dazu und klicke auf RUN.

SQL-Fehler: Tabelle kann nicht gefunden werden.

Kurzer Blick auf dem Server, die Tabelle fehlt tatsächlich.

Export -> Lösche -> Import -> Tabelle fehlt

Sync-NAVTenant im Powershell aufrufen -> kein Fehler -> Tabelle fehlt

Neustart NST -> Tabelle fehlt -> Start RTC -> Tabelle wird angelegt

 

Diese Verhalten war Problemlos jederzeit reproduzierbar. Doch wo kam es her? An CU12 scheint es nicht zu liegen.

Fragen wir doch mal das Internet: Keine der üblichen Suchen bringt etwas das helfen könnte.

Dann hat es mir doch noch gedämmert: Es sieht so aus als ob der Trigger in der Object Metadata Tabelle fehlt.

Kurzer Blick: Stimmt, der ist nicht da.

 

Wie habe ich das den geschafft?

Mein Vorgehen war so:

- Neue Datenbank über SQL anlegen

- Import einer NAVDATA-Sicherung inkl. aller Objekte und Daten

 

In der Dev-Enviroment sieht alles gut aus. Der RTC läuft auch stabil.

 

Zum Schluß dann noch wie das ganze zu korrigieren ist:

Der Trigger lässt sich über SQL anlegen:

/****** Object: Trigger [dbo].[$ndo$objecttracking] Script Date: 23.10.2014 08:38:20 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER [dbo].[$ndo$objecttracking] ON [dbo].[Object Metadata] FOR DELETE, INSERT, UPDATE AS SET NOCOUNT ON DECLARE @delCount INTEGER, @insCount INTEGER, @updatedRows INTEGER, @currentDBTS BIGINT SELECT @delCount = COUNT(*) FROM DELETED SELECT @insCount = COUNT(*) FROM INSERTED SELECT @updatedRows = 0 SELECT @currentDBTS = CAST(@@DBTS AS BIGINT) IF (@insCount > 0) BEGIN UPDATE [dbo].[Object Tracking] SET [Object Timestamp] = @currentDBTS FROM INSERTED AS I JOIN [dbo].[Object Tracking] AS T ON (T.[Object Type] = I.[Object Type] AND T.[Object ID] = I.[Object ID] AND T.[Change Type] = 0) SELECT @updatedRows = @@ROWCOUNT IF (@updatedRows < @insCount) BEGIN INSERT INTO [dbo].[Object Tracking] ([Object Type], [Object ID], [Change Type], [Object Timestamp]) SELECT I.[Object Type], I.[Object ID], 0, @currentDBTS FROM INSERTED AS I LEFT OUTER JOIN [dbo].[Object Tracking] AS T ON (I.[Object Type] = T.[Object Type] AND I.[Object ID] = T.[Object ID] AND T.[Change Type] = 0) WHERE T.[Object Type] IS NULL AND T.[Object ID] IS NULL END END IF (@delCount > 0) BEGIN IF (@updatedRows = 0) BEGIN UPDATE [dbo].[Object Tracking] SET [Object Timestamp] = @currentDBTS FROM DELETED AS D JOIN [dbo].[Object Tracking] AS T ON (T.[Object Type] = D.[Object Type] AND T.[Object ID] = D.[Object ID] AND T.[Change Type] = 0) SELECT @updatedRows = @@ROWCOUNT END IF (@updatedRows < @delCount) BEGIN INSERT INTO [dbo].[Object Tracking] ([Object Type], [Object ID], [Change Type], [Object Timestamp]) SELECT D.[Object Type], D.[Object ID], 0, @currentDBTS FROM DELETED AS D LEFT OUTER JOIN [dbo].[Object Tracking] AS T ON (D.[Object Type] = T.[Object Type] AND D.[Object ID] = T.[Object ID] AND T.[Change Type] = 0) WHERE T.[Object Type] IS NULL AND T.[Object ID] IS NULL END END GO

31Jan/120

CMD Vervollständigung

Gestern hatte ich einen dieser Aha-Effekte, der Erstaunen bei einem selbst oder seinem Gegenüber auslöst während der andere etwas für ihn alltägliches tut.

Was genau ist also gestern passiert? Während ich in der Windows-Kommandozeile geschrieben habe, wurden dir Pfade und Dateinamen wie von Zauberhand eingefügt. Einige von euch werden jetzt sagen: "Das kenne ich schon. Was ist daran denn neu? Wir arbeiten ja nicht mit MS-DOS."

Für die jenigen unter euch die nicht so antworten, werde ich kurz erklären was passiert ist: In der Kommandozeile (und natürlich auch in Powershell) ist es möglich die Ordner- und Dateinamen nur anzufangen zu tippen und automatisch vervollständigen zu lassen. Das funktioniert in dem man die ersten Buchstaben noch eintippt und anschliessend die <TAB>-Taste drückt. Gibt es hierbei mehrere mögliche Vervollständigungen, so wird die erste verwendet. Um jetzt aber eine der anderen Möglichkeiten zu bekommen, drückt man noch einmal die <TAB>-Taste und die Ergänzung wechselt zur nächsten Möglichkeit, ...

In der Hoffnung damit einigen da draussen die Tipparbeit zu erleichtern 😉

 

 

   
%d Bloggern gefällt das: