Arbeiten am SQL Server

Babsi

SQL-Guru
Beiträge
126
Hallo,

wir sind dabei endlich auf SQL Server umzusteigen, der Zugriff auf die Daten erfolgt über verschiedene Anwendungen unter anderem auch Access.
Wie dem auch sei, ich hatte gerade eine Diskussion, ob die User die Anwendungen verlassen müssen wenn an der SQL Server DB gearbeitet wird oder nicht.
Meiner Meinung nach ist dem so, ich kann doch nicht Tabellenstrukturen(Splate anfügen, löschen...) ändern und der User gibt gleichzeitig Daten ein 😒

Ich habe im Netzt gesucht aber immer nur was über SQL server gefunden aber nicht explizit über dieses Thema, daher hier die eher nicht fachliche Frage.

Liebe Grüße, Babsi
 
Werbung:
Hi.
Das Anfügen von Spalten während des Betriebes ist generell wohl möglich. Access merkt das gar nicht bis die Tabellen neu verknüpft werden. Vorsicht ist aber geboten bei Spalten die befüllt werden müssen, also kein NULL erlauben.
Andere Strukturmanipulationen hängen von der Art ab und können entsprechend auch zu Problemen führen, hängt von der Verwendung und Einbindung ab.
 
An eine leere Tabelle kann man NOT NULL Spalten anfügen, an eine mit Inhalt nicht, das sollte schon von Seiten der DB scheitern. Die NOT NULL-Einschränkung wäre ja sofort verletzt.

Genutzte Tabellen oder Spalten löschen oder umbenennen sollte man nicht im Betrieb machen (der Datenbank ist das egal aber der Anwendung vermutlich nicht), hinzufügen geht aber natürlich. Oder halt Objekte, die von der Anwendung eh noch nicht angesprochen werden.
 
Zum einen macht man solche Änderungen auch nicht gleich an der Produktion, sondern erst in der Dev/Test/QA/... (bzw. jeder hat eine Test-Umgebung, manche haben aber zusätzliche eine Produktive) und zum anderen müssen die Anwender eh "raus", wenn es z.B. Anderungen gibt, die auch im Frontend umgesetzt werden müssen.
 
Meiner Meinung nach ist dem so, ich kann doch nicht Tabellenstrukturen(Splate anfügen, löschen...) ändern und der User gibt gleichzeitig Daten ein
geht sehr wohl. Für solche DDL-Änderungen ist halt ein passender (exclusive) Lock nötig, die DB ist klug genug, dies in die laufenden Prozesse einzupassen - sprich: sie wartet, bis sie diesen Lock bekommt. So macht es zumindest PG.
Auswirkungen auf die Applikation etc. sind nicht relevant - aus Sicht der DB.
 
daher hier die eher nicht fachliche Frage.
Ich denke, das ist eine wichtige, administrative Fachfrage.
Man kann sie nur nicht einfach beantworten.

Es gibt einfache Erweiterungen und Erweiterungen mit weitreichenden Folgen. Es gibt einfach Datenmodelle, die nur aus Tabellenobjekten bestehen und die -aus Gründen- kaum oder wenig Constraints, Trigger usw. nutzen. Im Endeffekt haben einfache Datenmodelle nur wenig Abhängigkeiten der Datenbankobjekte untereinander. Solche Modelle kann man wahrscheinlich relativ unproblematisch erweitern, besonders, wenn es kompatible Änderungen sind, also im einfachsten Fall neue Spalten, die einfach mehr und unabhängige Informationen halten.
Ändert man Tabellen oder Spalten, zu denen es Abhängigkeiten gibt, kann das sehr problematisch werden. Bspw. die Typänderung einer Spalte, auf der ein Primär - oder Foreign Key definiert ist. Dies kann sofort zu Fehlern führen. Oder es kann im Verlauf zu Fehlern führen, wenn die Änderung ein Exclusiv Lock erfordert, das -sobald vergeben- andere Operationen an Updates hindert. Problematisch vor allem, je größer eine Tabelle ist, einfach weil die Dauer der Operationen zu einem Problem wird.

Ein Stickwort wäre "Breaking Change" oder "Non Braking Change", was aber eigentlich eher schon eine inkompatible Änderung beschreibt (Typänderung, Spaltenlöschung, ...)

Ich habe mit MS SQL da keine relevante praktische Erfahrung. In Oracle ist es bspw. so, das abhängige Objekte (automatisch!) neu kompiliert werden. Das ist jedoch nur dann erfolgreich, wenn die Änderung kompatibel zu dem bestehenden Modell ist. Das kann sogar die Änderung eines Spaltentyps sein, wenn der neue Typ mächtiger (kompatibel) zum alten ist (int auf bigint oder sowas). Das gilt aber nicht mehr, wenn die betroffenene Tabelle in einer Procedure verwendet wird, die mit statischen Variablen über die geänderten Spalten arbeitet. Hat man guten Code geschrieben, so sind diese Variablentypen so deklarieren, dass ihr Typ über den Typ der zugrundeliegenden Spalte definiert wird. Ansonsten gibt es Fehler. Das automatische Rekompilieren schlägt dann fehl. Die Prozedur wird unbrauchbar. Wird die Prozedur von weiteren Prozeduren verwendet -das macht man ja gerne so-, werden auch alle abhängigen Prozeduren unbrauchbar.
Bei anderen Herstellern muss man abhängige Objekte u.U. manuell(oder gescriptet) neu anlegen/refreshen (aus einem Script neu einspielen).

Wie es sich in MS SQL genau verhält, weiß ich nicht. Man sollte diese Änderungen auf jeden Fall testen, wie @Dukel schon schrieb. Man kann auch gute Annahmen treffen, welche Änderungen problematisch sein können, indem man sich bei betroffenen Tabellen die abhängigen Objekte ausgeben lässt.
 
Hallo,

wir sind dabei endlich auf SQL Server umzusteigen, der Zugriff auf die Daten erfolgt über verschiedene Anwendungen unter anderem auch Access.
Wie dem auch sei, ich hatte gerade eine Diskussion, ob die User die Anwendungen verlassen müssen wenn an der SQL Server DB gearbeitet wird oder nicht.
Meiner Meinung nach ist dem so, ich kann doch nicht Tabellenstrukturen(Splate anfügen, löschen...) ändern und der User gibt gleichzeitig Daten ein 😒

Ich habe im Netzt gesucht aber immer nur was über SQL server gefunden aber nicht explizit über dieses Thema, daher hier die eher nicht fachliche Frage.

Liebe Grüße, Babsi
Grundsätzlich hast Du recht @Babsi . Alles was mit DML zu tun hat sollte nicht gemacht werden wenn User das System benutzen (wie schon geschrieben in deiner DEV Umgebung und der SQL Server Developer Edition ist kostenlos). Das meiste mit DDL kannst Du im Prinzip machen wenn User angemeldet sind. Aber bei DDL ist in deinem Fall eigentlich nur das CREATE relevant. Alles andere (ALTER, TRUNCATE, DROP) eher nicht. Im laufenden Betrieb kannst Du Indizes anlegen, löschen, rebuild, Stored Procedures erstellen, Tabellen komprimieren, die Datenbank shrinken (wenns denn sein muss), neue Datenfiles hinzufügen, andere Datenfiles löschen (dazu müssen sie aber leer sein) usw. Das geht alles während des Betriebs mit sogut wie keiner Auswirkung auf den Benutzer.
 
Werbung:
Alles was mit DML zu tun hat sollte nicht gemacht werden wenn User das System benutzen (wie schon geschrieben in deiner DEV Umgebung und der SQL Server Developer Edition ist kostenlos
Häh?
Ist das nicht letztendlich die Aufgabe einer Datenbank DML Befehle auszuführen? Und das für viele konkurrierende Transaktionen?
 
Zurück
Oben