lukluk
Goto Top

SQL Server 2016 - "Scripts generieren" mehrfach verwenden

Hallo zusammen

beim Thema SQL-Server bin ich nicht allzu fit, es kann also sein, dass die Lösung sehr naheliegend ist, ich aber nur auf dem Schlauch stehe.
Ich habe in einer Testumgebung einen SQL Server 2016 (auf Win Srv 2016) mit dem passenden MS SQL Server Management Studio laufen.
Hier habe ich eine DB mit mehreren Tabellen eingerichtet und ein paar Daten reingedumped.

Um Datenbanken auf Text-Basis zu exportieren kann man sich ja ein Script erstellen: Rechte Maustaste auf DB > Tasks > Scripts generieren
Daraufhin wird ein Wizard geöffnet, in dem man sich nun diverse Wünsche zusammen klicken kann. Also z.B., dass Man die Daten und das Schema haben will und, dass man es in eine oder mehrere Dateien schreiben will.

Beim Ausführen werden die Skripts generiert und passend nach Wunsch abgelegt.

Ich würde gerne diesen Wizard mit denselben Optionen täglich ausführen (als Task)..... bin aber übertragt, wie ich das anstellen soll.

Ziel soll es sein eine tägliche Sicherung der Datenbank auf Textbasis hinzubekommen (inkl. INSERT-Befehle etc). Gerne auch per Powershell zu starten.


Hinweis:
Der Befehl "Backup-SqlDatabase" ist mir bekannt und läuft parallel ebenfalls per Task. Darüber wird die DB als One-File exportiert und gesichert.
Die oben erwähnte Lösung soll zusätzlich laufen um hier und da mal eine Zeile wiederherzustellen ohne das Backup erst einbinden zu müssen.

Ich kann mich entsinnen, dass ich das vor vielen Jahren (SQL Srv 2005) schon mal gemacht hatte, hier gab es ein Tool "SQL Pub Wiz". Das Ding ging aber bei 2016 nicht mehr.

Grüße
LL

Content-ID: 356492

Url: https://administrator.de/contentid/356492

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

ukulele-7
ukulele-7 30.11.2017 um 08:30:13 Uhr
Goto Top
Da keiner antwortet tue ich es mal. Ich denke es ist eher unüblich zusätzlich zu einer vollwertigen DB-Sicherung noch etwas derartiges zu fahren und wenn dann kann man sich das natürlich selber bauen und macht das vermutlich nur für bestimmte Tabellen / Daten, nicht für die ganze DB. Das soll aber nicht heißen das es zwigend nutzlos ist oder nicht zu machen wäre.

Mir würde da SSIS einfallen, damit geht das eventuell. Ich habe aber keine Erfahrung weil ich fast nur SQL Express Instanzen nutze (dort ist es nicht enthalten) und SSIS daher leider seit es noch DTS hieß nicht angerührt habe. Vielleicht hast du eine entsprechende SQL Edition:
https://en.wikipedia.org/wiki/SQL_Server_Integration_Services
sabines
sabines 30.11.2017 um 08:43:42 Uhr
Goto Top
Moin,

lies Dich mal in den SQL Agent ein, hier kannst Du Aufträge automatisiert laufen lassen.
https://docs.microsoft.com/de-de/sql/ssms/agent/create-a-job

Die SQL Abfrage dynamisch erstellen lassen, geht damit eher nicht, aber das brauchst Du bei diesem Task auch nicht.

Gruss
lukluk
lukluk 30.11.2017 um 11:45:31 Uhr
Goto Top
Hallo und Danke für die Antwort.
Nehmen wir an die DB ist irgendwann 10GB groß und beinhaltet unter anderem mehrere Tabellen in der Daten laufend erstellt und gelöscht werden.
Wenn jetzt der falsche Datensatz gelöscht wird wäre der Workflow, dass man die Sicherung rauskramt, als neue DB anhängt, die Zeile raussucht und in die Produktiv-DB überführt.

Wenn man die "heiklen" Tabellen zusätzlich textbasiert liegen hat spart man sich doch einiges an Aufwand, wenn es wirklich nur um eine Zeile geht.


Natürlich ist das auch eine Sache von unsauberer Programmierung, dass man Zeilen überhaupt so löschen kann statt sie als gelöscht zu markieren, aber das Thema gehört wo anders diskutiert.

Grüße
lukluk
lukluk 30.11.2017 um 11:47:25 Uhr
Goto Top
Hallo sabines. Danke für den Hinweis zum Agent. Habe mir das mal angeschaut und an und für sich ist das schon was gutes. Würde mir ersparen einen Windows Task zu erstellen. Trotzdem müsste ich hier selbst das TSQL bauen, wovon ich nicht den leisteten Schimmer habe. Per "Sktipts generieren" geht das ja alles per Wizard und läuft problemlos durch. Es muss doch eine Möglichkeit geben diesen Wizard auch automatisiert mit den Vorgaben anzustoßen und direkt auszuführen =/

Grüße
ukulele-7
ukulele-7 30.11.2017 um 12:14:06 Uhr
Goto Top
Es gibt auch Backup Software die einzelne SQL Elemente direkt in der DB widerherstellen kann, nutzen musste ich das bisher aber auch nicht.

Eine andere Möglichkeit wäre eine Log Tabelle, so ließe sich leicht ein Rollback machen. In den meisten Fällen wirst du aber um SQL Code nicht herum kommen.
sabines
sabines 03.12.2017 um 11:36:49 Uhr
Goto Top
Moin,

Du kannst das generierte Skript doch immer wieder verwenden, sofern es sich nicht ändert.
Stehe ich auf'm Schlauch oder verstehe ich das Problem grad nicht.

Gruss
lukluk
lukluk 03.12.2017 um 13:13:04 Uhr
Goto Top
Hallo sabines,
das dachte ich mir auch, aber da hat MS wohl eine eigene Definition.

Über den Wizard generiert man keine "Daten" oder "Export" sondern ein "Script", das die Daten beinhaltet (sofern entsprechend ausgewählt).

Das "Script" ist also lt. deren Definition der exportierte Befehlssatz in *.sql, den man dazu nutzen kann die Insert/Create/etc-Befehle abzufeuern.
Und sofern man Schema+Daten exportiert beinhaltet das "Script" ebendiese zum Stand des Exports.

Ich hoffe ich hab mich verständlich ausgedrückt, verstehe mich da zum Teil selbst nicht bei der Erklärung face-smile

Grüße
sabines
sabines 03.12.2017 um 13:21:19 Uhr
Goto Top
Moin,

ja, das ist doch auch gut so. Dieses *.sql Script kannst Du doch jederzeit wieder verwenden.
Einfach per Agent regelmäßig abfeuern.

Vielleicht solltest Du das aber in Absprache mit eurem Systemhaus/SQL Wissenenden besprechen face-wink

Gruss
lukluk
lukluk 03.12.2017 um 13:31:46 Uhr
Goto Top
Ja aber beim Generieren der Scripts mit der Option "Schema und Daten" werden die Daten Stand Knopfdruck in die SQL-Datei reingeschrieben.

Und genau diesen "Knopfdruck" möchte ich mehrfach, automatisiert ausführen. Diese *.sql muss also lediglich verwendet werden, wenn ich eine Zeile wiederherstellen möchte - also im besten Fall nie face-smile.

"Leider" ist das SQL-Zeug bei mir nur Spielerei und nicht produktiv. Da kann und will ich niemanden für bezahlen. Besonders in Anbetracht dessen, da es nur zukünftige Arbeitserleichterung wäre, da ein "normales" Dateibasiertes Backup per Script unabhängig davon gemacht wird.

Trotzdem vielen Dank für diene Mühe.

Grüße