News zu Microsoft SQL Server

Darauf haben wir gewartet: Contained Avai­la­bi­li­ty Groups im Microsoft SQL Server 2022

Neue­run­gen wie der SQL Ledger oder die ver­bes­ser­te Zu­sam­men­ar­beit des SQL Server 2022 mit Microsoft Azure werden seitens Microsoft intensiv beworben. Al­ler­dings ver­ste­cken sich unter der Haube des SQL Server 2022 noch andere coole und vor allem sehr nützliche Features. Eine we­sent­li­che Ver­bes­se­rung haben wir in unserem Beitrag “Was ist neu und nützlich am MS SQL Server 2022?” im ver­gan­ge­nen Jahr bereits kurz an­ge­ris­sen. Es geht um die Mög­lich­keit, Instanz-Kon­fi­gu­ra­tio­nen an eine Avai­la­bi­li­ty Group zu binden. Damit kann die Gefahr, Kon­fi­gu­ra­ti­ons­ar­bei­ten zu vergessen, erheblich reduziert werden. Im Microsoft SQL Server 2022 heißt diese aus­ge­spro­chen schicke Lösung “Contained Avai­la­bi­li­ty Groups”.

Wir sind der Meinung, dass viele SQL Server Admins (uns ein­ge­schlos­sen) schon jahrelang auf diese Ver­bes­se­rung gewartet haben und möchten heute ein bisschen tiefer in das Thema ein­tau­chen. Wenn du also in der Ver­gan­gen­heit schon mit Always On Avai­la­bi­li­ty Groups ge­ar­bei­tet hast, solltest du dir die folgenden Zeilen nicht entgehen lassen.

Wie sah die Arbeit in einer klas­si­schen Always On Avai­la­bi­li­ty Group bisher aus?

Um den Vorteil der Contained Avai­la­bi­li­ty Groups schätzen zu lernen, braucht man sich nur eine klas­si­sche Always On Avai­la­bi­li­ty Group vor­zu­stel­len. Dort werden alle Inhalte und Ei­gen­schaf­ten einer Nut­zer­da­ten­bank zwischen dem primären Replikat und allen se­kun­dä­ren Re­pli­ka­ten syn­chro­ni­siert. So weit, so gut. Doch es gibt immer auch Inhalte, welche auf In­stanz­ebe­ne angelegt werden. Diese landen somit nicht in der Nut­zer­da­ten­bank, sondern in einer Sys­tem­da­ten­bank. Daraus folgt, dass eine Änderung auf dem primären Replikat auch nur dort wirkt. Die gleiche Aktion muss auf allen se­kun­dä­ren Re­pli­ka­ten separat durch­ge­führt werden. Keine große Sache, möchte man meinen. Doch in der Realität werden die se­kun­dä­ren Replikate sehr oft vergessen. Geschieht dies über einen längeren Zeitraum, geraten die se­kun­dä­ren Replikate (also die Instanzen) in eine Art “Aschen­put­tel-Situation”. Nach dem Motto “Die guten ins Töpfchen, die schlech­ten ins Kröpfchen” wird das primäre Replikat in Punkto Kon­fi­gu­ra­ti­on aktuell gehalten, doch die se­kun­dä­ren Replikate werden re­gel­recht ver­nach­läs­sigt und fallen hinten runter. 

Folgende Inhalte landen besonders häufig in den Sys­tem­da­ten­ban­ken und geraten damit leicht in Vergessenheit:

  • An­mel­dun­gen (besonders, wenn es sich um SQL-Konten handelt)
  • Aufträge (Jobs) des SQL Server Agents (vor­wie­gend mit Benutzerlogik)
  • Ver­bin­dungs-Server


Natürlich ist vielen Admins dieses Problem bewusst, was wiederum zu den er­staun­lichs­ten Selfmade-Lösungen geführt hat, wie:

  • Export der re­le­van­ten Daten in eine Text-Datei auf Pri­mär­sei­te und an­schlie­ßen­der Import jener Text-Datei auf Se­kun­där­sei­te
    oder
  • Auslesen der re­le­van­ten Daten auf der Pri­mär­sei­te und “Wie­der­ho­lung” der Befehle mittels eines Verbindungsservers


Letzten Endes läuft es darauf hinaus, dass die Inhalte einiger Sys­tem­ta­bel­len manuell ab­ge­gli­chen wurden. Man könnte von einer Art “Syn­chro­ni­sa­ti­on durch Re­pli­ka­ti­on” für Sys­tem­da­ten­ban­ken sprechen. Tat­säch­lich erfolgt ja eine Art Wie­der­ho­lung auf den se­kun­dä­ren Re­pli­ka­ten. Wie man in jedem Falle sieht, war der Wunsch vieler Ad­mi­nis­tra­to­ren nach einer simplen Lösung für die Kon­fi­gu­ra­ti­ons­gleich­heit aller Instanzen groß. Aus unserer Sicht absolut verständlich.

Microsoft hat sich dieser Thematik an­ge­nom­men und eine aus­ge­spro­chen elegante Lösung ent­wi­ckelt:
Die Contained Avai­la­bi­li­ty Groups. 

Contained Avai­la­bi­li­ty Groups im Microsoft SQL Server 2022: Was ist das ei­gent­lich genau?

Zunächst einmal sei gesagt, dass es sich um voll­wer­ti­ge Avai­la­bi­li­ty Groups handelt, so dass man keine lieb ge­won­ne­nen Ei­gen­schaf­ten verliert. Alle bekannten Fä­hig­kei­ten und Features, wie etwa au­to­ma­ti­sches Seeding oder die be­vor­zug­ten Replikate für Datenbank-Backups, sind enthalten.

Es handelt sich vielmehr um eine Er­wei­te­rung zur ver­bin­dungs­ab­hän­gi­gen In­stanz­kon­fi­gu­ra­ti­on. Sofern man sich gezielt (sprich mittels AG-Listener) zur AG verbindet, erhält man ge­wis­ser­ma­ßen einen anderen Blick auf die Instanz. Der Clou dabei ist, dass die ge­wünsch­ten Objekte mit der AG zusammen umziehen. Ge­wünsch­te Objekte können in dem Falle sein:

  • An­mel­dun­gen (Konten)
  • Server-Rollen
  • SQL Server Agent Jobs
  • Database Mails
  • und ähnliches


Das heißt also, eine Contained Avai­la­bi­li­ty Group kann de­di­zier­te Kon­fi­gu­ra­tio­nen der Instanz enthalten.

Wie funk­tio­niert der Umgang mit den Contained Avai­la­bi­li­ty Groups im Microsoft SQL Server 2022?

Die ei­gent­li­che Nut­zer­da­ten­bank, welche man in einer Contained Avai­la­bi­li­ty Group hoch­ver­füg­bar betreiben will, wird nicht verändert. Die Methodik basiert vielmehr auf einer Art Layer-Prinzip, wie man es von Views auf Tabellen kennt. Und erneut: Es ist von ent­schei­den­der Bedeutung, dass man mit dem Listener der AG verbunden ist. Denn – und das ist der ei­gent­li­che Trick – im Hin­ter­grund werden in­di­vi­du­el­le Exemplare der Sys­tem­da­ten­ban­ken erstellt. Diese legen sich an­schlie­ßend trans­pa­rent über die echten Sys­tem­da­ten­ban­ken und nehmen die ge­wünsch­ten Kon­fi­gu­ra­tio­nen auf. In der Kon­se­quenz bedeutet dies, dass bei­spiels­wei­se neu angelegte Konten (Anmeldungen/Logins) nicht tat­säch­lich in der Instanz erstellt werden, sondern statt­des­sen (durch Umleitung) in einer Art “Schatten-Sys­tem­da­ten­bank”. Und genau diese Da­ten­ban­ken sind (von Beginn an) Mitglied der Contained Avai­la­bi­li­ty Group und wechseln daher bei jedem Failover mit. Das Verfahren ähnelt dabei einer Über­la­ge­rung. Verbindet man sich zum Listener der AG, so sieht man die in­di­vi­du­el­len System-Da­ten­ban­ken, nicht die echten.

Zum besseren Verständnis:

Man könnte sagen, der SQL Server 2022 “schummelt” beim Anlegen von An­mel­dun­gen. Neue Logins werden nicht in der echten master-Datenbank und neue SQL Server Agent Jobs nicht in der echten msdb-Datenbank abgelegt. Aber: Der Zweck heiligt die Mittel.

Was passiert dann mit der Ver­wal­tung einer in­di­vi­du­el­len Instanz?

An der Ver­wal­tung einer in­di­vi­du­el­len Instanz hat sich nichts geändert. Denn der Effekt wirkt nur dann, wenn man sich von Beginn an zum Listener der AG verbindet. Baut man hingegen eine Ver­bin­dung zu einer der in­di­vi­du­el­len Instanzen auf (ohne auf primäre und sekundäre Rollen der AGs zu achten), so bleibt alles beim Alten. Man arbeitet wie gewohnt mit den echten Systemdatenbanken.

Dazu hier eine kurze Ge­gen­über­stel­lung. Stellt man sich eine simple Always On Umgebung aus zwei Teilnehmern …

1. Stan­dard­in­stanz auf Host SERVER1

2. Stan­dard­in­stanz auf Host SERVER2

… vor, welche gemeinsam eine Contained Avai­la­bi­li­ty Group namens ALWAYSON bilden, die wiederum den Listener HASERVER verwendet, und legt bei­spiels­wei­se eine neue SQL-Anmeldung (ein Login) an …

CREATE LOGIN                   [TestAccount]
 WITH  PASSWORD              = 'SimplePassword4Test!',
       DEFAULT_DATABASE      = [master],
       DEFAULT_LANGUAGE      = [English];

… so gilt:

bei Ver­bin­dung zu SERVER1
(dediziert)

Die Anmeldung existiert an­schlie­ßend real in der [master]-Datenbank von Instanz SERVER1.
Die Nutzung dieser Anmeldung ist wie gewohnt möglich. 

bei Ver­bin­dung zu SERVER2
(dediziert)

Die Anmeldung existiert an­schlie­ßend real in der [master]-Datenbank von Instanz SERVER2.
Die Nutzung dieser Anmeldung ist wie gewohnt möglich. 

bei Ver­bin­dung zu HASERVER
(als Listener der AG)

Die Anmeldung existiert in keiner der [master]-Da­ten­ban­ken, sondern in den “Schat­ten­da­ten­ban­ken” der Contained Avai­la­bi­li­ty Group ALWAYSON, welche von der Syn­chro­ni­sa­ti­on erfasst werden. 

Die Nutzung dieser Anmeldung ist nur im Kontext der Contained Avai­la­bi­li­ty Group möglich.

Instanzen verwalten ohne Umgewöhnung

Somit ist si­cher­ge­stellt, dass man ohne jegliche Um­ge­wöh­nung die einzelnen Instanzen verwalten kann. Glei­cher­ma­ßen können Kon­fi­gu­ra­ti­ons­aspek­te ge­wis­ser­ma­ßen an eine Avai­la­bi­li­ty Group gebunden werden, welche auf allen teil­neh­men­den Re­pli­ka­ten identisch sind. Und genau das ist schließ­lich auch das Schöne an dieser Implementierung.

Übrigens:

Jene Art der Ein­bin­dung geht sogar so weit, dass man nicht nur neue Sachen in den “Schat­ten­da­ten­ban­ken” anlegen kann. Es ist darüber hinaus möglich, vor­han­de­ne Kon­fi­gu­ra­tio­nen zeit­wei­lig zu über­schrei­ben, indem man bereits exis­tie­ren­de Objekte mit gleich­na­mi­gen über­la­gert. So funk­tio­niert der zuvor be­schrie­be­ne Trick nicht nur mit dem (neu an­zu­le­gen­den) Konto “TestAc­count”, sondern sogar mit dem ab Werk vor­han­de­nen sa-Konto.

Fazit und Ausblick 

Zur Arbeit mit Contained Avai­la­bi­li­ty Groups gäbe es noch viel mehr zu schreiben. Doch der wich­tigs­te Punkt ist klar: Sie sind eine zu­ver­läs­si­ge Mög­lich­keit, um einzelne In­stan­zei­gen­schaf­ten und ‑kon­fi­gu­ra­tio­nen an einer Avai­la­bi­li­ty Group fest­zu­ma­chen. Somit wird die Kon­fi­gu­ra­ti­ons­gleich­heit aller Instanzen sichergestellt.

Die neue Art der Contained Avai­la­bi­li­ty Groups ist ein höchst will­kom­me­ner Schritt im Hinblick auf eine lang­fris­tig sinnvolle Nutzung des Avai­la­bi­li­ty Group Konzepts. Egal, ob man eine Datenbank in einer kleinen und schlich­ten Avai­la­bi­li­ty Group aus zwei Instanzen, oder 20 große Da­ten­ban­ken in einer Dis­tri­bu­ted Avai­la­bi­li­ty Group aus vier Instanzen betreibt. Es lohnt sich allein schon wegen dieses Features, auf den Microsoft SQL Server 2022 zu wechseln.

Bei Fragen zur Arbeit mit den Contained Avai­la­bi­li­ty Groups oder zum Upgrade auf den Microsoft SQL Server 2022 helfen wir dir gern weiter.

Hier findest du weitere Beiträge rund um Microsoft aus unserem News & Insights Bereich.

icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email