Arduino mit Visual Studio programmieren

 

Vor relativ kurzer Zeit habe ich mir einen Arduino Uno R3 gekauft und ich will euch hier in mehreren Blog Artikeln regelmäßig meine Erfahrungen und Erlebnisse schildern. Für alle, die nicht wissen, was ein Arduino ist, habe ich hier eine kurze Erklärung:

Arduino ist eine plattformunabhängige OpenSource Physical-Computing Plattform, die sich aus Software- und Hardwarekomponenten zusammensetzt.
Die Hardware besteht aus einem einfachen Board mit Ein / Ausgängen in analoger und digitaler Form. Unter anderem ist auch je nach Modell ein anderer Mikrocontroller auf dem Board verbaut. Als Software wird standardmäßig eine Entwicklungsumgebung verwendet, die auch Personen, die keine Entwicklungsvorkenntnisse haben, Zugang zur Arduino-Programmierung bietet. Ein Beispiel dafür wären Header Dateien, die vollautomatisch im Hintergrund eingefügt werden.
Doch was macht den Arduino so besonders? Mit dem preislich sehr günstigen Arduino kann man relativ leicht eigenständige Objekte steuern oder elektronische Schaltungen realisieren. Kunsthochschulen und auch diverse Hersteller von Filmsets verwenden häufig den Arduino als Mikrocontroller um interaktive Installationen aufzubauen oder um zum Beispiel Lichter von Anzeigetafeln blicken zu lassen. Auf dem Arduino wird über eine auf Java basierende IDE in C und C++ programmiert, als Compiler wird hier der “gcc” mit eingebunden. Um die Programmierung zu erleichtern, ist auf dem Arduino Uno R3 eine eigens entwickelte USB-Schnittstelle als „Serial Converter“ verbaut. Mithilfe dieser Schnittstelle ist es möglich, den Arduino über USB mit der IDE zu programmieren. Der Bootloader, der hierfür benötigt wird, ist praktischerweise schon standardmäßig auf dem entsprechenden Controller installiert und kann manuell über die serielle Schnittstelle des Boards konfiguriert werden.

Nach meinen ersten Programmierversuchen mit der mitgelieferten IDE lernte ich Visual Studio wieder sehr zu schätzen. Allein die fehlende Auto-Vervollständigung sowie das bessere Syntax Highlighting fehlen einem sehr schnell. Weitere Features, die ich sofort vermisst habe, waren IntelliSense und die Tatsache, dass in VisualStudio Fehler direkt angezeigt werden. Also suchte ich gleich nach meinen ersten Programmierversuchen nach entsprechenden Libaries für Visual Studio. um zumindest den Quellcode in Visual Studio schreiben zu können. Durch einen glücklichen Zufall entdeckte ich im Visual Studio “Extensions”-Menü bei der Wortsuche nach „Arduino“ ein komplettes Plugin, mit dem ich sogar das kompilierte Programm auf den Ardiuno laden konnte.

Als erstes muss das erste Projekt her namens “Blink” was man in konventioneller Programmierung mit “Hello World” vergleichen kann. Es besteht darin eine LED blinken zu lassen. Dazu baue ich mir folgende Schaltung bestehend aus einem Arduino Uno R3, 1x Roter LED und einem 220 Ohm Wiederstand.

1LED

Zum erstellen dieser Bildes habe ich die Open Source Software Fritzing verwendet mit der mit einfach Schritten solche Steckbilder erstellt werden können und auch als Ätzvorlagen exportiert werden können. 

So, die Schaltung steht: Jetzt muss ich nur noch das Programm dazu schreiben:
Arduino-Programme müssen immer mindestens aus zwei Teilen bestehen:
Einmal dem “void setup()” Teil, in dem die Pins konfiguriert werden, und dem Bereich “void loop()”, dessen Codebereich wiederholt ausgeführt wird. Im ersten Bereich weise ich dem digitalen Pin 13 den Typ OUTPUT zu. Im Loop Bereich setze ich den Ausgang von Pin 13 mit der Funktion digitalWrite auf High. Wenn ich jetzt direkt mit der Funktion digitalWrite den Pin wieder auf Low setzen würde, würde er so schnell blinken das wir es nicht als blinken wahrnehmen könnten. Deshalb nehme ich mir die Funktion “delay(1000)” zur Hilfe, die die Schleife 1 Sekunde lang pausieren lässt. Das ganze sieht dann in fertiger Form folgendermaßen:

image

Hier nochmal in schriftlicher Form für die Leute die sich den Code kopieren wollen:

1 void setup() 2 { 3 pinMode(13, OUTPUT); 4 } 5 6 void loop() 7 { 8 digitalWrite(13, HIGH); 9 delay(1000); 10 digitalWrite(13, LOW); 11 delay(1000); 12 }

Also fassen wir das Ganze noch einmal zusammen: Der Arduino ist wie im obigen Bild mithilfe einer Steckplatine verkabelt. In Visual Studio haben wir unseren fertigen Code geschrieben. Jetzt müssen wir diesen letztendlich nur noch auf unseren Arduino übertragen. Dazu müssen wir im Visual Studio nur noch unsere Programmversion der Arduino Software (in meinem Fall 1.6), den Arduino Typ (Arduino Uno) sowie den COM Port (COM3)  angeben, der automatisch generiert wird, sobald wir den Arduino über die USB Schnittstelle verbinden. Da wir jetzt unser Programm ohne Stoppunkte ablaufen lassen wollen, müssen wir jetzt noch als Kompilierungstyp “Release” auswählen und anschließend den “Local Windows Debugger” starten. Das ganze sieht dann folgendermaßen aus:

vs Kopie

Im Output Fenster können wir sehen, dass unser Programm erfolgreich kompiliert wurde und über den COM3 Port hochgeladen wurde. Wenn wir jetzt auf unseren Arduino schauen, können wir beobachten, wie die LED langsam blinkt.

20150630_101603

Für all die Leute die sich bisher noch nicht mit Development beschäftigt haben oder aus anderen Programmiersprachen wie der C Familie kommen würde ich den Kurs C++ Einführung in die Programmierung empfehlen für den leichteren Einstieg in die Programmierung, da dort die Grundkenntnisse über die Datentypen usw vermittelt werden.

In meinem nächsten Artikel werden wir uns dann Programmierung von komplexeren Anwendungen beschäftigen.

Windows 10 – Neue Preview-Build 10159 verfügbar

Seit heute Morgen ist eine neue Build (10159) von Windows 10 verfügbar, somit also innerhalb weniger Tage schon eine zweite Build kurz vor der finalen Veröffentlichung.

Die neue Version kommt für Teilnehmer am Insider-Programm automatisch über die Updates.

Alternativ lässt sich eine ältere Version (Build 10130) als ISO in verschiedenen Sprachen unter folgendem Link herunterladen (und dann per Update auf 10159 aktualisieren):

http://windows.microsoft.com/de-de/windows/preview-iso

Win10_9

Weitere Details siehe http://blogs.windows.com/bloggingwindows/2015/06/30/whoa-another-pc-build/

Schritt für Schritt: SQL Server 2016 – temporal tables

Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables und dergleichen. Im Gegenteil, die Daten  einer temporal table bleiben bestehen – auch nach Neustart. Also was sollte denn dann der Zweck sein? Kurz und einfach gesagt, stellen temporal tables den historischen Verlauf von Datensätze dar. In SQL auch "System versioning" genannt.

Das Prinzip dahinter ist schnell erklärt: Tabellen, für die ein Verlauf der Datensätze organisiert werden soll, benötigen zwingend 2 Spalten vom Typ datetime2, die den Gültigkeitszeitraum eines Datensatzes markieren. Zu diesen Tabellen wird außerdem eine weitere Tabellen benötigt, die über dasselbe Tabellenschema verfügt und den historischen Verlauf der Datensätze speichert.

Weder die Tabelle mit den historischen Werten, noch die Funktion, welche eine Änderung der Daten abfängt und die "alten" Datensätze in die Verlaufstabelle schreibt müssen tatsächlich selbst geschrieben bzw. angelegt werden.

Wollen wir mal einen Blick darauf werfen..

System_Versioning aktivieren

Das Aktivieren des SYSTEM_VERSIONING geschieht als Erweiterung des CREATE TABLE Statement.

Create table contacts 
(
Cid int identity primary key,
Lastname varchar(50),
Firstname varchar(50),
Birthday date,
Phone varchar(50),
email varchar(50),
ValidFrom datetime2 Generated always as row start not null,
ValidTo datetime2 Generated always as row end not null,
Period for system_time (Startdatum, Enddatum)
)

with (system_Versioning = ON (History_table=dbo.Contactshistory))
  

Essentiell sind natürlich die Zeile, die den Gültigkeitsbereich definieren. ValidFrom gibt dabei den Zeitpunkt an, seit wann dieser Datensatz in der Form existiert und ValidTo bis wann er gültig ist. Im Falle der Originaltabelle wird das datum auf das Jahr 9999 gesetzt, was für die meisten einen gewissen beruhigenden Charakter darstellt. Die Spaltennamen dürfen sind frei wählbar. Die Option GENERATED ALWAYS kann auch mit dem Merkmal HIDDEN verwendet werden. Das ist dann erforderlich, wenn Sie die beiden Spalten für den Gültigkeitsbereich standardmäßig immer versteckt halten wollen. Zumindest thereotisch.. in der aktuellen CTP2 wurde das wohln noch nicht implementiert und quittiert daher mit einem Syntaxfehler.

ValidFrom datetime2 GENERATED ALWAYS AS ROW START HIDDEN not null,
ValidTo datetime2 GENERATED ALWAYS AS ROW END HIDDEN not null,


PERIOD gibt die zu verwendenden datetime2 Spalten für den Gültigkeitsbereich an

Period for system_time (ValidFrom, ValidTo)

..und folgende Zeile definiert die Versionstabelle. Diese kann bereits vorher erstellt worden sein. Falls nicht wird Sie in dem moment erstellt. Gibt man gar keine Versionstabelle so weist der Name folgendes Muster aus: MSSQL_TemporalHistoryFor_<objectid>

with (system_Versioning = ON (History_table=dbo.Contactshistory))

Und so sieht das Ergebnis im SSMS aus:


Natürlich kann auch nachträglich eine Tabelle als SYSTEM_VERSIONING initialisiert werden.


Aktivierung des SYSTEM_VERSIONING bei bestehenden Tabellen

Die Initialisierung von temporal tables bei bestehenden Tabellen vollzieht sich ebenfalls rel. Einfach und ist mit obiger synteax auch recht gut naschvollziehbar:

Fall 1: Eine Tabelle hat bereits, warum auch immer, zwei Spalten die für den Gültigkeitsbereich stehen:

CREATE
TABLE Demo2

(

SP1 int identity primary key,
SP2 int,
StartFrom datetime2 not null, EndTo datetime2 not null

);

--Aktivierung der PERIOD

ALTER
TABLE demo1
ADD PERIOD FOR SYSTEM_TIME(StartFrom,EndTo)

--Aktivierung des SYSTEM_VERSIONING

ALTER
TABLE demo1
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.demohistory, DATA_CONSISTENCY_CHECK = ON))
 

Fall 2: Die Spalten für das SYSTEM_VERSIONING sind noch nicht vorhanden..

--Alternativ, wenn die Start und End-Zeitstempelspalten noch nicht vorhanden sind

CREATE
TABLE Demo3
(
SP1 int identity primary key, SP2 int
)
 

ALTER
TABLE demo3
ADD PERIOD FOR SYSTEM_TIME (StartFrom, EndTo),
StartFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL DEFAULT GETUTCDATE(),
EndTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL DEFAULT CONVERT(DATETIME2,'9999.12.31');
     

ALTER
TABLE demo3
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.demo3history, DATA_CONSISTENCY_CHECK = ON))
 

Arbeiten mit temporal tables

Nun wollen wir mal mit dem SYSTEM_VERSIONING arbeiten. Zuerst ein paar Datensätze zum Spielen

insert
into Contacts
(Lastname,Firstname,Birthday, Phone, email)

select 'Kent', 'Clark','3.4.2010', '089-3303003', 'clarkk@krypton.universe'

insert
into Contacts
(Lastname,Firstname,Birthday, Phone, email)

select 'Wayne', 'Bruce','3.4.2012', '08677-3303003', 'brucew@gotham.city'

Und nun die Änderungen, die zu einer Versionierung der Datensätze führt

update contacts set email = 'wer@earth.de' where cid = 1
update contacts set Phone = 'w3434' where cid = 1
update contacts set Lastname = 'Wayne' where cid = 1

--etwas später

update contacts set email = 'asas@earth.de' where cid = 1
update contacts set Phone = 'w34sasaa34' where cid = 2
update contacts set Lastname = 'Smith' where cid = 1

Das Ergebnis:

select * from contacts
s
elect * from ContactsHistory


In der Originaltabelle findet man logischer Weise den aktuell gültigen Datensatz wieder. Die Zeitstempelspalten geben den Bereich an, seit wann der Datensatz gütlig ist. In den Verlaufstabellen dagegen, befindet jeder geänderte Datensatz – ebenfalls mit den Zeitstempelspalten für seine Lebensdauer.

Versionen finden

Das Praktische wollen wir natürlich nicht außer Acht lassen: Die Suche nach einer bestimmten Version.

Entweder man frägt die temporal table direkt ab:

--Abfrage auf Versiossverlauf

select
*
from contactshistory

where

    Startdatum >= '2015-06-28 09:17:04'

    and

    Enddatum <= '2015-06-28 09:17:50'


Das ist natürlich dann empfehlenswert, wenn man den Verlauf eines Datensatzes sehen möchte.

Sofern nur die letzte gütlige Version zu einem Zeitpunkt gesucht wird, kann man das auch direkt von der Originaltabelle erfahren.

--Coole Abfrage: direkt auf Originatabelle

select
*
from contacts

    FOR SYSTEM_TIME AS OF '2015-06-27 15:49:11.1448833'
    where cid =1


Nachträgliches Ändern von SYSTEM_VERSIONING Tabellen

Haben wir was vergessen? Ach ja: kann man versionierte Tabellen auch nachträglich ändern? Klar! System_Versioning ausschalten, Änderungen auf beiden Tabellen ausfürhren, SYSTEM_VERSIONING wieder einschalten. Guggste..

--SYSTEM_VERSIONING deaktiveren

Alter
Table contacts set (system_versioning= off)

--Beliebige Spalten auf beiden Seiten hinzufügen

Alter
Table contacts add Fax varchar(50)

Alter
Table contactshistory add Fax varchar(50)

--und wieder einschalten

ALTER TABLE contacts

SET (system_versioning=on (History_table=dbo.Contactshistory))

Deaktivieren des SYSTEM_VERSIONING bzw Löschen der Verlaufstabelle


Und was, wenn ich die Versionierung nicht mehr haben will. Dann SYSTEM_VERSIONING ausschalten und Tabellen jeweils löschen.

alter
table Contacts Set (system_versioning=OFF)

GO

drop
table contacts

drop
table Contactshistory

Randnotizen

Abgesehen Davon, dass ich teporal tables extrem einfach in der Anwendung finde, bleiben noch ein paar Details zu erwähnen übrig.

  • Temporal tables sind per default zeilenkomprimiert
  • Die Originaltabllen müssen einen Primary key haben
  • Löscht man den Clustered IX der temporal Tabelle, dann kann man auch Clustered Columnstore IX verwenden –absolutly perfect! 12 Punkte!!
  • Geht nicht bei Filetables
  • Kein truncate table bei SYSTEM_VERSIONING = ON
  • Kein instead of Trigger
  • Support für AlwaysOn

Coole Sache..

Demnächst mehr mit Schritt für Schritt: SQL 2016

Windows – Speicher neigt sich dem Ende zu (mklink)

Meine heutige Challenge: entpacke eine 90GB HyperV VM auf deine SSD (256GB).

Ausganssituation: 34GB freier Speicher

Gemütslage: Kurz vor Mord (Spaß!)

Erhoffte Chancen auf Erfolg: 0.001% – 0.1%

So geht es vermutlich einigen Usern dort draußen. Zu wenig Speicher auf der Platte, egal ob SSD, HDD oder Hybrid. Es gibt kleine Tools wie z. B. CCleaner welche temporäre Daten löschen und somit schon (je nach Nutzung) mehrere GB an Speicher freischaufeln können. Wenn dies jedoch darin endet, von 1GB freien Speicher auf 10GB, oder lasst es 20GB freien Speicher sein, zu springen ist das zwar schon ein ordentlicher Schritt, ABER da geht noch mehr.

Natürlich kommt das ganze auf die Nutzung des PC’s an. Ich werde dies (leider ohne Werbeeinnahmen) anhand der wohlbekannten Musikapplikation Spotify durchführen. Diejenigen unter Ihnen mit einem Spotify Premium Abo sind dazu in der Lage, die gewünschte Musik als Offline-Playlist abzuspeichern. Natürlich nimmt dies auch einiges an Speicherplatz ein.

Meine Offline Spotifyplaylists:

  • Anzahl Playlists: 11
  • Anzahl Titel insgesamt: 910

Nun vermutlich wie bei den meisten sind um die 50% davon sowieso nicht mehr in “Gebrauch”, aber hey…. wir haben ja den Speicherplatz dafür (nicht).

Nach einigen Suchanfragen in diversen Suchmaschinen und kurzer Überlegung war die Antwort relativ schnell klar. Verknüpfungen! Entweder von Hand, was in dem entsprechend viel herum geklicke resultiert, oder über die Kommandozeile (als Admin ausführen).

Der Befehl hierzu lautet:

  • mklink /j

Dies erzeugt einen sog. hard Link auf ein Verzeichnis.

mklink /j “<ZielOrdnerDerVerknüpfung>” “<OrdnerVonWelchemDieVerknüfungErzeugtWird>”

Dies würde für was Spotify Beispiel etwa so aussehen:

  • mklink /j “C:\Users\<DeinBenutzerName>\AppData\Local\Spotify” “D:\Spotify\Data”

Und siehe da, in meinem Fall satte 8.1 GB Speicher freigeräumt! Das kann man mit so gut wie jedem Verzeichnis machen, an welches man sich herantraut. TIPP: Wild irgendwelche Files/Folders aus dem AppData Verzeichnis lösche ist entweder:

  • glücklicherweise Erfolgreich
  • sinnlos, weil die Daten beim nächstmaligen öffnen erneut erzeugt werden
  • sorgt für Fehlverhalten einiger Programme

Nachdem noch diverse Temporäre Daten und andere Verzeichnisse welche nicht unbedingt auf der SSD liegen mussten bereinigt/verschoben wurden, war das Endergebnis eine Ersparnis von ~80GB! 

2015-06-15_19-03-07

Dies ist natürlich wie bereits erwähnt stark vom Gebrauch und der verwendeten Programme des PC’s abghängig und keine 100% Garantie wie man 80GB Speicher los wird. Dies ist mehr als ein Wegweiser zu verstehen.

Und nun, viel Spaß beim Verknüpfen!

WPF Kachel Liste

Mit Visual Studio 2013 ist das formals Expression Blend genannte XAML UI Design Werkzeug als Beigabe gratis. Die Nachfrage nach Schulungen zu Blend für Visual Studio 2013 ist nach wie vor vorhanden. Eine Blend Kurs Teilnehmer Frage lautet “Wie kann man eine Mehrzeilige oder mehrspaltige Liste erstellen. Ala einem METRO Gridview.

Im ersten Schritt wird einem WPF Window ein Listbox Steuerelement hinzugefügt. Um Daten anzuzeigen wird eine Sample Data Source erzeugt.

image

Die Collection wird umbenannt in Sessel (pural und singular ident). Die Eigenschaften werden per Click in den Namen umbenannt und je Property der Typ (Image, String und Number) zugewiesen.

image

Per Drag und Drop der Sessel Collection auf das Listbox Steuerelement im Blend Designer wird die Bindung (Datacontext) erzeugt. Gleichzeitig wird das Datatemplate für die Darstellung der Listitems erzeugt.

image

Das Datatemplate lässt visuell editieren. Das Kontext Menü Edit Additional Templates – Edit generated Item Templates- Current wechselt den Editor in den Template Modus.

image

Dort kann z.B, die orientation des Stackpanels auf horizontal geändert  oder das ganze in eine Border mit runden Ecken gruppiert werden.

image

Etwas diffizieler ist eine mehrspaltige Darstellung. Dazu muss das Template für das Itemspanel per Kontext Menü generiert werden. Edit Additional Templates- Edit Layout of items- edit a copy.

Man erkennt nun das die Liste per VirtualizingStackpanel gebildet wird.

image

Die vor allem aus Performance Gründen bei langen Listen. Als nächstes wird per Kontext Menü des VirtualizingStackPanels dieses in ein Wrap Panel umgewandelt. Change Layout Type – Wrappanel.

Um die Ergebnisliste von links nach rechts scrollbar zu gestalten, wird die Eigenschaft Orientation des Wrappanels auf vertical geändert.

Bis jetzt sieht die Liste noch aus wie bisher. Das liegt an den Standard Werten der Scrollviewer Einstellungen. Die horizontale Scrollbar ist ausgeblendet und die vertikale sichtbar. Wir brauchen es genau anders herum.

image

Nun das Ergebnis der laufenden WPF Anwendung. Horizontales Scrollen, auch per Touch.

image

Umstieg von Windows 7 auf Windows 10: Diese Funktionen fallen weg

windows-10-logo

Mit Windows 10 kommt am 29. Juli 2015 ein modernes und leistungsstarken Betriebssystem auf den Markt. User von Windows 7 und Windows 8/8.1 können im ersten Jahr kostenlos umsteigen (außer Enterprise). Mit dem Upgrade kommen allerdings nicht nur neue Funktionen hinzu, es fallen auch welche weg – die Meisten waren jedoch schon in Windows 8 nicht mehr dabei:

Kein Windows Media Center mehr
Das mit Windows Vista eingeführte Windows Media Center, das u.a. den Windows Media Player erweiterte oder das Verteilen von Multimedia-Files im Netzwerk erleichterte. In Windows 8 war es schon nicht mehr dabei – konnte jedoch für rund 30 Euro in Form des Media Center Packs für Pro-User erworben werden. Mit Windows 10 wird das Windows Media Center nun endgültig beerdigt!

Keine Video-DVDs mehr
Seit Windows 8 ist es nicht mehr möglich mit dem Windows Media Player Video-DVDs abzuspielen. Der entsprechende MPEG2-Codec fehlt, um Lizenzgebühren zu sparen. Windows 8 Pro-User können für rund 30 Euro das Media Center Pack (siehe oben) erwerben – damit können die Silberscheiben wieder im Microsoft-Player abgespielt werden. Mit Windows 10 wird auch diese Option verschwinden. Damit kommt man um eine Installation eines Codec-Packs oder eines Media-Players eines Drittanbieters nicht herum.

Keine Gadgets mehr
Die sog. Windows 7 Desktop Gadgets - kleine Tools auf dem Desktops wie Wetter oder Uhr - wurden ebenfalls schon mit Windows 8 entfernt und kommen jetzt auch nicht wieder zurück

Keine USB-Floppy-Laufwerke mehr
Wer noch USB-Diskettenlaufwerke im Einsatz hat, kann diese ab Windows 10 nicht mehr so einfach verwenden – es wird kein Treiber hierfür mitgeliefert. User müssen sich damit den Treiber selbst besorgen (z.B. über den Hersteller).

Keine Deaktivierung von Windows Update mehr
Windows 10 Home-User werden die automatische Windows Update-Funktion nicht mehr deaktivieren können. Damit will Microsoft sicher gehen, dass der “Normaluser” in Sachen “Sicherheit-Updates” immer auf dem neusten Stand ist. Pro- und Enterprise-User betrifft diese Einschränkung nicht!

Keinen Leistungsindex mehr
Unter Windows 7 und Windows 8 konnte man in der Systemsteuerung seine PC-Hardware analysieren und daraus einen Leistungsindex berechnen lassen. Mit Windows 8.1 wurde dieses Feature entfernt – und wird auch in Windows 10 fehlen.

windows10-games-1

Für Liebhaber der klassischen Windows-Spiele wie Solitaire, Minesweeper und Hearts gibt es jedoch eine gute Nachricht: Die seit Windows 8 verbanten Spiele werden in Windows 10 in Form von Apps wieder zurück kommen!

SQL Server 2016 Schritt für Schritt–Installation und First Look

SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde?

Wollen wir mal Schritt für Schritt den neuen SQL Server unter die Lupe nehmen.

Installation

SQL Server 2016 läßt sich wie gewohnt installieren. Allerdings fallen natürlich ein paar Dinge gleich ins Auge:

Zu den Instanzfeatures zählt nun PolyBase.

clip_image001

Allerdings muss dazu auch die Java Plattform installiert werden..

clip_image002

Die Idee, bereits bei der Installation, die best practice Gedanken umzusetzen, wurde bereits sehr gut in SQL den vorherigen Versionen umgesetzt. Trennung der Daten von den Logfiles und Tempdb eigenes Laufwerk. Nun wird ebenfalls gleich empfohlen, der tempdb mehrere Datein zuzuweisen..

clip_image003

Ansonsten bleibt des Setup identisch.

Database

Auf den ersten Blick fällt dann auch gleich auf, dass Eigenschaften einer Datenbank eín wenig zugelegt haben. So läßt sich der QueryStore in den Settings der DB aktivieren.

clip_image005

Interessanterweise ist Mirroring immer noch Bestandteil des SQL Server 2016. Ein Wegfall würde mir allerdings nicht mehr allzu schwer fallen, da AlwaysOn Availability Groups nun auch in der Standard Version enthalten sind. (Begrenzt auf 2 Knoten)

clip_image007

Innerhalb der Datenbank finden sich nun die neuen Features, wie External Ressources für External Tables, sprich Polybase, Query Store, der die Top Queries bzw schlecht performanden Queries anzeigen kann.

clip_image009

image

QueryStore

Anstatt mühseelig den Plancache per TSQL abzufragen bzw. die Pläne sogar zu archivieren und zu analysieren, steht nun der QueryStore zur Verfügung.

image

Mit verschiedenen vorgefertigten Berichten, kommt man so den teuersten, oder sich verschlechternden Abfragen auf die Schliche.

image

Temporal Tables


Versionierung der Daten via Temporal Tables: Ohne großen Aufwand , den verlauf der Daten speichern.

image

Live Query Statsistics

Wunderbar zu beobachten, an welcher Stelle die Abfrage gerade arbeitet. Pro Operator die Anzeige der Dauer in Sekunden und % Abgeschlossen.

image

Super.., oder?

Nächstes Artikel:Temporal Tables.

SQL Server 2016 – CTP2

Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server 2016 ist nun endlich als Download in der CTP 2 Version verfügbar. Den Link zum Download finden Sie hier: https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016.

SQL 2016 Logo

Natürlich erwartet man von einer neuen Version viele schöne neue Dinge.. und ich muss sagen, enttäuscht worden bin ich nicht:

Hier mal eine kleine Liste mit Neuigkeiten des Datenbankmoduls, die für mich am spannendsten sind:

  • Live Query Plan / Statistik

    Ausführungspläne live beobachten. Pro Operator Sekunden und Status in %.

  • Query Store

    Historisierung der Abfragepläne, Performance Data, Erkennung teurer bzw. auch schlechter werdenden Pläne). Nicht mehr umständlich den flüchtigen Plancache per T-SQL analysieren müssen.

  • Availability Groups

    nun auch für Standard Edition – yeah!! limitiert auf 2 Knoten

  • Polybase

    eigtl aus Parallel Data Warehouse stammend. Unstrukturierte Daten direkt aus dem Datenbankmodul abfragen

  • Stretch Database

      “Warme” Daten bleiben auf dem System, kalte können automatisch in Azure Datenbanken abgelegt werden

  • JSon Support

    keine umständlichen Programmierung mehr mit CLR, sondern nativer Support

  • Row Level Security
    Mittels einer Securitypolicy werden bei Abfragen auf Tabellen nur noch die Zeilen ausgegeben, die per Richtlinie erlaubt sind. Die Richtlinie selbst besteht aus ein Funktion, die das Filterprädikat vorgibt und einer der einer Tabelle zugewiesenen Richtlinie. Die Daten werden anschliessend nur noch maskiert ausgegen. Also keine Sicht oder ähnliches Notwendig.

  • Always Encrypted
    Nicht zu verwechseln mit TDE, aber gleicher Gedanke. Daten sind nie im Plaintext einsehbar, sondern auch bei Abfragen und im Netzwerkprotokoll verschlüsselt.

  • InMemory Verbesserungen

    Columnstore Index auf inMemory Tables—Wau!!
    benutzerdefinierte Skalarwertfunktionen. 
    ALTER TABLE  Juhuu! Ändern des Bucket count, hinzufügen, Ändern, Löschen von Spalten oder contraints
    ALTER PROCEDURE für native kompilierte Prozeduren
    Fremdschlüsselbeziehungen auf inMemory Tabellen .. endlich kann man von DB Design sprechen!

  • Columnstore Index

    Non-Clustered IX nun auch updatebar
    Auch bei einem Clustered Columnstore IX zusätzlich B-Tree Indizes möglich
    Gefilterte Indizes
    IX Reorganize supportet
    Snapshot und Read Cmommited Snapshot Isolation Support

Die CTP2 macht bereits einen sehr gute Eindruck und enthält viele Neuerungen, die einerseits längst überfällig waren, wie Rowlevel Security oder Always Encrypted (der Administrator kann die Daten nicht mehr im plain text sehen) oder auch sinnvolle Ergänzungen, die einem das Leben mit SQL Server leichter machen. Weiter so!

SCDPM meldet “Replikat inkonsistent” wenn man einen Exchange 2013 Server sichert

Beim Versuch die Mailbox-Datenbank(en) eines Exchange 2013 Server zu sichern, kann es vorkommen, dass der System Center Data Protection Manager 2012 R2 meldet:

“Replikat inkonsistent” bzw. “Replica is inconsistent”

Das schaut dann in etwa so aus:

exch_dpm_1

Was kann man nun also dagegen tun?

Zunächst einmal muss sichergestellt sein, dass die Dateien “ese.dll” und “eseutil.exe” vom Exchange Server auf den DPM Server kopiert wurden – und zwar immer in der auf dem Exchange aktuell verwendeten Version – also nach größeren Updates neu kopieren!

Die Dateien befinden sich im Exchange-Verzeichnis unter “Bin”, also z.B. unter “D:\Program files\Microsoft\Exchange Server\V15\Bin” und müssen in den Bin-Pfad vom DPM, also z.B. nach “D:\Program files\Microsoft System Center 2012 R2\DPM\DPM\bin” kopiert werden.

Nach Updates sollte unbedingt die Version bzw. das Dateidatum kontrolliert werden!

exch_dpm_0

Weiterhin muss eine aktuelle Version des “Visual C++ Redistributable for 2012” auf dem Exchange Server installiert sein! Dieses lässt sich z.B. hier herunterladen: https://www.microsoft.com/de-de/download/details.aspx?id=30679 

Zur Sicherheit lässt sich auch eine Reparatur-Installation ausführen. Anschließend ist ein Reboot nötig.

exch_dpm_3 exch_dpm_4

Wenn diese Voraussetzungen geschaffen worden, dann kann entweder nur eine Konsistenzprüfung durchgeführt oder direkt die Sicherung fortgesetzt werden (was dann auch zunächst zu einer Konsistenzprüfung führt).

exch_dpm_5

exch_dpm_6

Wenn diese Abgeschlossen ist (was eine Weile dauern kann), sollte die Schutzgruppe wieder den Zustand “OK” (grün) annehmen.

Windows 10: Taskleisten-Bug behoben

Vor knapp 2 Wochen veröffentlichte Microsoft die Build 10130 der Windows 10 Insider Preview. Diese Version wurde zuerst über den “Fast-Ring” verteilt. Mittlerweile kann man auch eine ISO-File für eine Neuinstallation herunterladen – die Verteilung über den “Slow-Ring” ist nicht mehr vorgesehen.

Neben Detail-Verbesserungen und neuen Features (siehe hier) kamen auch Bugs hinzu. Ein Bug ist richtig nervig: Es kommt immer wieder vor, wenn man auf verschiedene Icons in der Taskleiste klickt (Start, Cortana, Benachrichtigungen, Netzwerk, ect.), dass sich nichts öffnet bzw. nichts passiert. Erst ein Ab- und Anmelden (oder alternativ ein Neustart) beseitigt das Problem – allerdings nur vorübergehend!

Microsoft liefert seit kurzem über Windows Update das Update KB3070365 für Build 10130 aus, dass das beschriebene Problem löst.

Weitere Updates, die Bugs in Build 10130 beheben, sind wohl nicht mehr vorgesehen. Laut Gerüchten arbeitet Microsoft statt dessen an einer neuen Preview-Version, die bald veröffentlicht werden soll – eventuell die Letzte vor dem Release der finalen Version von Windows 10 am 29. Juli 2015.

windows-10-logo

Training, Schulung, Juli Aktion

Month List