5

Ich suche Informationen über die folgenden:Best Practice für SQL Server 2008 Schemaänderung

Was sind die besten Praktiken für die Aktualisierung des Schemas meiner dev DB meiner Produktion DB oder sogar kurz und bündig DB-Schema Änderungen Im Algemeinen.

Die Produktionsdatenbank ist das Back-End für zwei verschiedene ASP.NET-Websites.

Unser Schemaänderungsprozess ist relativ stabil, da jede "Migration" tatsächlich eine CS-Datei ist, die die Schemaänderungen enthält. Wir werden dann ADO.NET verwenden, um die Schemaänderungen auf die Datenbank anzuwenden.

Meine Frage ist mehr über die Konnektivität der Datenbank.

Sollte ich die zwei Websites stoppen, die auf die db zugreifen. Ich nehme an, ich sollte. Sollte ich die DB in den Single-User-Modus versetzen. Es sieht so aus, als ob ich sollte, aber ich bin nicht ganz sicher darin.

Was könnte ich vermissen? Was sind Dinge, die Sie in die Hand gebissen haben, bevor Sie Änderungen am DB-Schema vornehmen?

Antwort

5

Wenn die Aktualisierungen Dinge wie Spaltennamen, gespeicherte Prozessparameter usw. ändern, müssen Sie die Apps immer offline schalten, bevor Sie ein Schema-Update durchführen.

Wenn die Updates nur für Dinge sind, die die normale Verarbeitung der Daten nicht beeinträchtigen, dann können Sie in der Lage sein, dies "heiß" zu tun. Diese Kategorie wird verwendet, wenn Sie Dinge wie Indizes, Tabellen usw. hinzufügen.

Wenn jemand die App während der Verarbeitung eines Schema-Updates verwendet, befinden Sie sich möglicherweise in einer Situation, in der die Datenkonsistenz beeinträchtigt ist.

Wenn dieses Update ein entsprechendes Update für Ihre Webanwendungsdateien erfordert, nehmen Sie die Site (s) offline, bevor Sie das Update durchführen. Sie wissen nicht, wer eine Seite anzeigt und nur auf Senden klickt, um einen Fehler zu erhalten ...

In der Regel wird die Wartung dieser Art während Ihrer Nebenzeiten durchgeführt. Sie möchten den Benutzern im Voraus mitteilen, wann und wie lange die Website nicht verfügbar ist.

Wir verwenden auch Tools wie Redgate's SQL Compare, um unsere db Updates zu schreiben. Dies wird auf einem Staging-Server praktiziert, der vor dem eigentlichen Push-Vorgang aus den Produktionsdaten aktualisiert wurde, um sicherzustellen, dass es keine Überraschungen gibt und dass dies sehr schnell durchgeführt werden kann.

In Bezug auf den Einzelbenutzermodus verwenden Sie dies normalerweise, um den Zugriff auf eine Datenbank auf eine einzelne Management Studio-Instanz zu beschränken. Dies ist normalerweise nicht Teil unserer Bereitstellungen.

0

Ideale Situation, aber nicht immer erreichbar: Sie machen Schemaänderungen, die kompatibel sind mit V <alten> Version Ihrer Website. Sie geben dann V <neu> an Ihre Webserver frei. Sobald alle Ihre Webserver bis zu V <neu> sind, können Sie dann alle Aufräumarbeiten durchführen (fehlende Werte auffüllen usw.) und dann geeignete NULL-Änderungen vornehmen.

3

Ich habe die .cs/ado.net-Route nicht berücksichtigt, um Schemaänderungen vorzunehmen. Was wir tun, ist "Delta". SQL-Dateien erstellen - SQL, um die Änderungen vorzunehmen. Diese werden für ein Schema der bekannten Revision ausgeführt, um die Änderungen vorzunehmen, und das Ausführen der .SQL ist Teil einer Bereitstellung.

So gut wir können, versuchen wir auch, diese mehrmalig sicher zu machen, indem wir das Schema auf bestimmte Dinge wie das Vorhandensein einer Spalte, eines Index usw. überprüfen. Auf diese Weise könnten sie "versehentlich" mehrfach ausgeführt werden.

Bei der Bereitstellung haben wir bestimmte Zeiten des Tages/der Woche, warnen Benutzer/Kunden, schließen Websites usw. Mit "Praxis" -Einstellungen laufen die letzten Tage vor einer Veröffentlichung fast jeden Tag auf Dev- und Staging-Servern Das Vertrauen in die endgültige Bereitstellung ist hoch.

Wenn Sie Schemaänderungen in SQL beibehalten, sehen sie eher wie das 'Master'-Schema aus, das sie modifizieren und daher leichter zu verfolgen sind. Weniger zu debuggen auch!

Sie werden auch in TFS zusammen mit dem Rest des Codes verwaltet.

+1

Tangential, um mehrere Male sicher auszuführen: Diese Eigenschaft wird Idempotenz genannt. Ihre .SQL-Dateien sind idempotent. –