ioioio
Goto Top

Asynchrone Replikation für MSSQL Datenbank innerhab der gleichen Instanz

Guten Tag zusammen,

das sollte für die richtigen SQL Experten überhaupt kein Problem darstellen!

Ein Kunde hat eine riesige SQL Datenbank ca. 1TB groß.
Diese Datenbank wird nächtlich gesichert und zusätzlich tägl. alle 10 Minuten über LogBackups.

Nun ist es so das der Kunde immer wieder mal Tabellen wiederherstellen muss. Im Moment stellt der Kunde das letzte Backup der Datenbank wieder her
und exportiert / importiert dann entsprechende Daten. Problem an dieser Vorgehensweise ist die Wiederherstellungsdauer!


Ich würde nun gerne eine Art Spiegelung der Datenbank durchführen wollen in eine zusätzliche Datenbank in der gleichen Instanz.
Spiegelung fällt aber weg da diese wohl nur Instanz übergreifend konfiguriert werden kann.
Zeitplan gesteuerte Datenbankkopierauftrag erscheint mir doch sehr ineffizient da ja hierbei immer wieder komplett alles geschrieben würde.
Zudem kommt das das System 24/7 läuft und somit in dieser Zeit bisl. mit Performance Problemen zu kämpfen hätte

Ich hätte nun gerne einfach zusätzlich zur bisherigen Sicherung einen Replikationsauftrag in eine Richtung. ProduktivDB -> KopieDB (asynchron) auf der gleichen Standardinstanz "MSSQLSERVER"


SQL Server Version und Betriebssystem:

Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64)
Jul 3 2017 02:25:44
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)


Ich bin schon total gespannt auf eure Antwort face-smile


Liebe Grüße und vielen Dank.

Content-Key: 352813

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

Printed on: April 16, 2024 at 09:04 o'clock

Member: sabines
sabines Oct 25, 2017 at 10:41:38 (UTC)
Goto Top
Moin,

ich würde eher an der Ursache als an den Symptomen ansetzen.
Warum müssen immer mal wieder Tabellen wiederhergestellt werden?

Gruss
Member: rzlbrnft
rzlbrnft Oct 25, 2017 at 12:06:48 (UTC)
Goto Top
Wie soll dir denn eine Spiegelung bei dem Problem helfen?

Die Spiegelung schreibt auch alle Fehler in die gespiegelte Datenbank, du hast dann also den selben Stand da drin wie in der ursprünglichen DB.

Eine Wiederherstellung einzelner Tabellen sollte eigentlich nicht so lange dauern, es muss nicht die ganze Datenbank wiederhergestellt werden.

Nutzt ihr fürs Backup einen Wartungsplan?
Member: ioioio
ioioio Oct 26, 2017 at 07:40:05 (UTC)
Goto Top
... face-smile

Danke für eure Antwort.

Also die Tabellen müssen manchmal wiederhergestellt werden wenn etwas schiefgegangen ist. Anwenderseitig!
Der Administrator vor Ort wünscht einfach das Backup des Vortags angebunden zu haben.
Für den Fall das etwas gelöscht wird. Das System läuft ja dann unter umständen Stunden weiter bevor das erkannt wird. Das heißt er kann unmöglich alles wiederherstellen.
Die Datenbank des Vortags würde dann helfen. Diese allerdings wiederherzustellen dauert lange.

Klar werden Wartungspläne genutzt. Einmal Vollbackup in der Nacht und dann in kürzeren Abständen über Transaktionsprotokoll Sicherung.
Aber diese Backups helfen ja hier nicht wirklich weiter.
Member: sabines
sabines Oct 26, 2017 at 08:41:33 (UTC)
Goto Top
Moin,

so wie ich das sehe, würde es doch reichen die gesicherte DB bspw. nachts immer wieder einzuhängen.
Damit verkürzt sich diese Zeitspanne ja schon mal.

Nach wie vor behebt das ja nicht die Ursache, welche Anwender können denn bei einer ordentlichen Programmierung Tabellen verhuntzen? Und wenn's immer die selben Tabellen sind, würde ich eher diese per Trigger in eine weitere DB wegschreiben.

Sinds immer die selben User, ist wohl klar was zu tun ist.
Daneben gibt es u.U. auch Backupsysteme bei denen nur eine Tabelle extrahiert werden kann, da kenne ich mich aber nicht gut aus.
Eventuell kann damit auf die Zeitspanne verkürzt und der Aufwand reduziert werden.

Gruss
Member: ioioio
ioioio Oct 26, 2017 at 09:13:14 (UTC)
Goto Top
Es kommt ja auch nicht täglich vor. nur eben immer wieder mal. Und Veeam Backup macht ja auch noch Sicherung
der gesamten Maschine inkl. Application Aware processing. D.H. die Datenbank des SQL Servers wieder hierbei auch konsistent gesichert. Aber auch hierbei dauert die Wiederherstellung bzw. das Mounten der Datenbank einfach zu lange.

Wie soll ich die gesicherten DBs Nachts einhängen. Ich habe lediglich eine BAK Datei.
Ja Tabellen auslagern ist eine super Idee. Aber das muss dann bitte der Softwarehersteller tun!


Ich will einfach einen asynchronen. Von mir aus mit Log Shipping. Kennt sich jemand gut aus mit SQL Server und Log Transfer an eine andere Datenbank. Das wäre das effizienteste. Den Transfer und die Wiederherstellung würde ich dann nur einmal um 1 Uhr machen.
Member: sabines
sabines Oct 26, 2017 at 09:50:58 (UTC)
Goto Top
Moin,

lass Dir das von Deinem Dienstleister oder dem Hersteller einrichten.

Grundsätzliche SQL Befehl zum Einhängen der Test DB findest Du hier:

https://docs.microsoft.com/de-de/sql/t-sql/statements/restore-statements ...
Member: ioioio
ioioio Oct 26, 2017 at 10:02:47 (UTC)
Goto Top
Das geht leider nicht. Der Kunde will das wir das machen. Der Hersteller ist im da zu unzuverlässig / Überlastet und der Kunde will die Kompetenz bei sich haben.

ich schaue mir aber mal an was hinter deinem Link steckt face-smile


-> Weiterhin wäre der Ansatz Log Shipping für mich sehr interessant. Also wenn hier jemand was zu diesem Thema weiß :D
Member: ioioio
ioioio Oct 26, 2017 at 10:10:38 (UTC)
Goto Top
Also ja das ist ja schön und gut aber ich befürchte das wird mein Problem nicht lösen.
1. Ich weiß im Vorfeld nicht welche Tabellen / Zeilen / Daten benötigt werden.
2. Ich will auf keinen Fall einen kompletten Restore einer BAK Datei ausführen.
3. Der Kunde will nicht mit SQL Anweisungen arbeiten sondern bequem über Export / Import
Er will einfach jeden Morgen eine Kopie der produktiven Datenbank mit dem Stand vom Vortag im Management Studio vorfinden ohne das Dabei unnötig viel geschrieben wird.
Member: sabines
sabines Oct 26, 2017 updated at 10:52:37 (UTC)
Goto Top
Zitat von @ioioio:

2. Ich will auf keinen Fall einen kompletten Restore einer BAK Datei ausführen.
Er will einfach jeden Morgen eine Kopie der produktiven Datenbank mit dem Stand vom Vortag im Management Studio vorfinden ohne das Dabei unnötig viel geschrieben wird.

Das widerspricht sich, vielleicht überlegst Du nochmal was Du willst.

Und eine Kopie der Datenbank wird immer über SQL Anweisungen oder die GIU neu angehängt.
Daran führt kein Weg vorbei und das kann bequem automatisiert werden.

Mir scheint, dass weder Du noch Dein Kunde auch nur rudimentäre Kenntnisse von SQL hat, was nicht schlimm ist.
In diesem Fall sollte sich jedoch jemand damit beschäftigen, der sich damit auskennt. Oder willst Du haften, wenn was schief läuft.

Alles weitere gerne gegen Berechnung und PN
Member: rzlbrnft
rzlbrnft Oct 26, 2017 updated at 14:42:34 (UTC)
Goto Top
Zitat von @ioioio:
Also ja das ist ja schön und gut aber ich befürchte das wird mein Problem nicht lösen.
1. Ich weiß im Vorfeld nicht welche Tabellen / Zeilen / Daten benötigt werden.
2. Ich will auf keinen Fall einen kompletten Restore einer BAK Datei ausführen.
3. Der Kunde will nicht mit SQL Anweisungen arbeiten sondern bequem über Export / Import
Er will einfach jeden Morgen eine Kopie der produktiven Datenbank mit dem Stand vom Vortag im Management Studio vorfinden ohne das Dabei unnötig viel geschrieben wird.

Was du brauchst ist eine ordentliche Backup Software die Granular Restore beherrscht.
Mit dem Veeam SQL Explorer kann man sowas z.B. machen.
https://www.veeam.com/de/microsoft-sql-server-explorer.html

Solche Lösungen gibt es von fast jedem Hersteller. Die stellen dann aus dem Index einzelne Tabellen wieder her.

Zitat von @ioioio:
Es kommt ja auch nicht täglich vor. nur eben immer wieder mal. Und Veeam Backup macht ja auch noch Sicherung
der gesamten Maschine inkl. Application Aware processing. D.H. die Datenbank des SQL Servers wieder hierbei auch konsistent gesichert. Aber auch hierbei dauert die Wiederherstellung bzw. das Mounten der Datenbank einfach zu lange.

Sorry aber dann macht ihr es einfach falsch.
Bist du sicher das die Datenbank wirklich so groß ist, oder ist da nur Müll drin der eigentlich gar nicht reingehört?
Wenn die kompletten 1 TB in einer einzigen oder wenigen relational verbundenen Tabellen liegen, bringt dir eine teilweise Wiederherstellung dann auch keine Zeitersparnis. Dann hilft nur noch ein Hardware Upgrade, z.B. Kiste mit PCIe SSDs.
Member: ioioio
ioioio Oct 27, 2017 at 08:04:31 (UTC)
Goto Top
Ich bin wirklich dankbar über eure Teilnahme an der ganzen Sache.

... ABER (das böse Wort)


Ich habe mit der Datenbank nichts zu tun!
Wir stellen nur die IT-Infrastruktur und kümmern uns um die Backups aller VMs

Wir verwenden für das Backup der VMs Veeam Backup und zusätzlich an den SQL Server noch
den SQL Agent also die Wartungsverträge für VollBackups 1xtägl. und LogBackups alle 15 Minuten.

Das ganze wird über einen separaten Backupserver in anderem Brandschutzbereich gesichert.
Dort dann auch nochmal via Veeam BackupCopyJob auf exteren Festplatten für die Mitnahme außer Haus!

Ich empfinde das als solide und ausreichend!

Es sind hier 3 Seiten involviert:
Wir der Dienstleister für alles vor Ort und zuständig für die Hardware
Kunde
Softwarehersteller

Der Softwarehersteller soll nicht involviert werden was diese Lösung betrifft.
Der Kunde selbst stellt Daten wieder her. Wie erwähnt mittels Export / Import Funktion.

Und ja die Datenbank ist tatsächlich 1 TB groß.

Spielt das alles überhaupt eine Rolle? Ich möchte doch lediglich die erbetene Lösung.
Der Hintergrund der ganzen Anforderung darf ignoriert werden!

Ich bin mir darüber im Klaren das die Datenbank und die gesamte Software optimiert werden sollte.
Aber wer bin ich. Das wurde dem Kunden vorgeschlagen und er hat abgelehnt diesen Weg zu gehen.

Meine Argumente waren die Gleichen. Zusätzlich warnte ich vor Konsistenzproblemen in der Datenbank
die ja durchaus vorkommen könnten bei diesem Import / Export Spielchen.
Aber Kunde will was Kunde will. Mir doch dann egal solange ich Ihn aufgeklärt und über möglich Risiken aufgeklärt habe.
Die Entscheidung trifft er!

<- Hintergrund


Mein Anliegen ->

Bitte lasst uns bitte den Hintergrund soweit vergessen. Ich benötige einfach eine asynchrone Replikation der Datenbank mit
Stand des Vortags um 22Uhr ohne das jedes mal ein kompletter Restore stattfindet!
Das ganz in der selben SQL Server Instanz.
Member: sabines
sabines Oct 27, 2017 at 08:23:28 (UTC)
Goto Top
Bist Du BWLer? face-wink
Member: ioioio
ioioio Oct 27, 2017 at 08:35:49 (UTC)
Goto Top
Nein. Ich bin Fachinformatiker für Systemintegration in einem kleinen IT Systemhaus.

Wieso? :D
Member: rzlbrnft
rzlbrnft Oct 27, 2017 updated at 11:02:02 (UTC)
Goto Top
Zitat von @ioioio:
Der Softwarehersteller soll nicht involviert werden was diese Lösung betrifft.
Der Kunde selbst stellt Daten wieder her. Wie erwähnt mittels Export / Import Funktion.
Und ja die Datenbank ist tatsächlich 1 TB groß.
Spielt das alles überhaupt eine Rolle?

Ja das spielt eine Rolle. Wenn die Software so mies programmiert ist das alle Daten in einer Tabelle sind, kannst du schlichtweg nicht schneller zurücksichern, auch wenn du dich auf den Kopf stellst. Eine Replikation repliziert in Echtzeit, also auch alle Fehler. Eine Sicherung sichert eben, muss aber auch wieder zurückgespielt werden, was man mit Commandline Befehlen automatisieren kann, das scheint dir aber auch nicht zu gefallen, oder du bist schlichtweg nicht interessiert dich mit T-SQL zu beschäftigen. Wenn du doch in diese Richtung gehen willst,
https://www.mssqltips.com/sqlservertip/2842/how-to-automate-sql-server-r ...

Eine Klickibunti Lösung die genau auf die Datenbank passt die dein Softwarehersteller hat, wird es nicht geben.

Ich möchte doch lediglich die erbetene Lösung.
Das meint die Kollegin mit BWLer. Ich möchte haben, Kosten darf es nichts, und Zeit investieren mag ich auch nicht.
Wenn dir jemand die Lösung komplett erstellt könnte er sie auch gleich selber an deinen Kunden verkaufen.
Member: ioioio
ioioio Oct 30, 2017 at 08:00:44 (UTC)
Goto Top
Das stimmt dock überhaupt nicht. Replikationen lassen sich in vielen anderen Anwendungen Zeitlich steuern. Wenn ich diese 1x tägl durchführe
habe ich da überhaupt keine Fehler mit repliziert.

z.B.

1.1 - 22.00Uhr, Replikation

2.1 - 9.00 Uhr, Wird etwas vom Anwender gelöscht verändert verhauen

So nun habe ich zwei Datenbanken vorliegen. Die von gestern 22.00 Uhr und die produktiv befindliche Datenbank mit den vom Anwender
gelöschten Daten ...

?

Ich habe nie nach einer Echtzeit Replikation gefragt! Ich möchte eine täglich einmalige Replikation.
Das beschriebene Szenario kann ich auch mit eine Datenbankkopie erreichen aber ich möchte schlichtweg vermeiden das jeden Abend die gesamten 1000GB als Kopie geschrieben werden sondern nur Änderungen.

Soll ich dem Kunden jetzt sagen. Nein ich mach das nicht ist mir zu blöd such dir jemanden anderen?


Ich möchte doch nur wissen (bitte ohne die Vorgeschichte zu beachten):
Ist es möglich täglich 1 Replikation durchzuführen, dies aysnchron und innerhalb einer Instanz.


Und wer hat den gesagt das es nichts kosten darf? So wenig wie nötig und das gilt immer. Du und deine Kollegin arbeitet wohl aufm Amt da spielt Zeit und Geld natürlich keine Rolle! Oder in einer riesen Firma wo deine Ressourcenverschwendung von fleißigen Kollegen abgefangen wird!
Ich bin mit meinen Kenntnissen einfach am Ende und deshalb suchte ich hier Hilfe.
Ich will keine Abstimmung über die Software oder Optimalvorstellungen führen!

Und wer sagt ich will keine Zeit investieren? Nur so viel wie nötig!
Wer hat gesagt das ALLE Daten in einer Tabelle sind? Es sind ganz unterschiedliche Tabellen und manchmal auch nur einzelne Datensätze.

Ihr könnt mir ja gern mal sagen wie ich vorgehen soll als Dienstleister.
Soll ich dem Kunden sagen. Ne mach ich nicht weil die Software ist so beschießen damit will ich nix zu tun haben.
Oder soll ich einfach sagen ok wir machen eine teure Lösung und wenn er fragt, würde das auch günstiger gehen antworte ich einfach mit
nein!
Was natürlich blöd ist wenn sich dann irgendwann andere Fakten zeigen sollten.


Also eine Datenbankreplikation innerhalb einer Instanz ist eurer Meinung nach unmöglich?


Mfg
Mitglied: 134464
Solution 134464 Oct 30, 2017 updated at 08:34:56 (UTC)
Goto Top
Mach doch einfach einen Snapshot der Datenbank, das ist genau für sowas gedacht...
Funktioniert ähnlich wie mit Schattenkopien on the fly ohne Beeinträchtigung der Nutzer im Hintergund und Speichersparend:
https://docs.microsoft.com/de-de/sql/relational-databases/databases/crea ...
Und die DB lässt sich dann bei Bedarf ganz einfach auf diesen Status zurückrollen.
Member: ioioio
ioioio Nov 02, 2017 at 08:37:09 (UTC)
Goto Top
Hallo Specht,

das hört sich doch nach genau der Lösung an die ich / mein Kunde gebrauchen kann.


Ich probiere das aus und teile anschließend meine Ergebnisse mit euch.


lg
Member: ioioio
ioioio Nov 07, 2017 at 08:44:23 (UTC)
Goto Top
Hallo Specht und Co,

also ich habe das mit den Momentaufnahmen nun ausgiebig getestet. Super geile Sache und erfüllt zu 100% meine Wünsche.
Also kann ich an dieser Stelle sagen. Mir wurde zu 100% geholfen und ich bin total froh über die die Hilfe!


SQL Server Standard bietet diese Funktion erst ab 2016 inkl. SP1. Mit welchen Edition das vorher bereits funktioniert kann ich
an dieser Stelle nicht sagen da hierfür kein Grund zur Recherche bestand.
Der Kunde hatte nämlich bereits das Update von 2014 auf 2016 geplant!


Danke Specht!