none
geänderte DB erkennen RRS feed

  • Frage

  • Hallo zusammen,

    gibt es eigentlich eine Möglichkeit eine geänderte DB zu erkennen? Beim SQL Server kann ich ja inkrementel über den SQL Agent sichern lassen, nur wie erkennt der Backup-Prozess geänderte Daten?

    Ich möchte aus VisualBasic heraus meine DB's abfragen um eine Änderung zu erkennen um dann weitere Prozesse vornehmen zu können.

    Wäre Euch über ein paar Tipps sehr dankbar.

    Viele Grüsse,
    Maxi

    Freitag, 22. Juli 2011 15:42

Antworten

  • Hallo Maxi,

    ich nehme an, Du meinst ein Differential Backup. Der SQL Server merkt sich im DCM = Differential Change Map, welche Pages (Seiten) seit der letzten Vollsicherung geändert wurden und sichert dann diese Pages; welche Datensätze / Indizes etc darin enthalten sind, interessiert den SQL Server nicht. DCM ist nur ein interner Verwaltungsmechanismus und für exteren nicht zugreifbar; wie gesagt, es geht dabei nur um Pages. Siehe TechNet Protokollieren geänderter Blöcke

    Du könntest jeder Tabelle ein Feld vom Type "rowversion" hinzufügen; bei uns Standard. Mit jedem Insert / Update wird dieses hochgezählt; Löschungen bekommst Du damit aber nicht mit.

    Dann gibt es noch Change Tracking Funktion, die gibt es erst seit SQL Server 2008 und sollte auch in der Express Edition funktionieren, ist aber etwas aufwendiger in der Implementierung. Oder Änderungen durch eigene Trigger protokollieren, ist aber noch aufwendiger.

    Ist halt immer eine Frage von Aufwand zu Nutzen; also wozu so etwas gut sein soll.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Freitag, 22. Juli 2011 16:18
  • Hallo Maxi,

    wenn es Dir nur um das Thema Backup geht, dann empfehle ich Dir: Sichere grundsätzlich immer alle Datenbanken, egal ob was geändert wurde oder nicht, den nur wer sichert ist sicher. Und vergiss die Systemdatenbanken (master, msdb) nicht, die benötigst Du im Desaster Recovery Fall.

    Wenn Du einen SQL Server in der Standard Edition oder höher hast, kannst Du über den zentral alle Backups & Wartungspläne für die SQL Server Express Edition Instanzen ausführen lassen, siehe Automating Administration Across an Enterprise.

    Ansonsten könntest Du über den Windows Scheduler zeitgesteuert per SQLCmd.exe die Backups ausführen lassen.

    Oder Du connectes Dich per SSMS (oder SqlCmd) auf die laufenden Instanzen und führst ein Backupscript aus.

    Oder Du legst in einer zentralen Instanz Verbindung-Server zu allen anderen Instanzen an, dann kannst Du mit einem Script alle sichern lassen.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Sonntag, 24. Juli 2011 06:13

Alle Antworten

  • Hallo Maxi,

    ich nehme an, Du meinst ein Differential Backup. Der SQL Server merkt sich im DCM = Differential Change Map, welche Pages (Seiten) seit der letzten Vollsicherung geändert wurden und sichert dann diese Pages; welche Datensätze / Indizes etc darin enthalten sind, interessiert den SQL Server nicht. DCM ist nur ein interner Verwaltungsmechanismus und für exteren nicht zugreifbar; wie gesagt, es geht dabei nur um Pages. Siehe TechNet Protokollieren geänderter Blöcke

    Du könntest jeder Tabelle ein Feld vom Type "rowversion" hinzufügen; bei uns Standard. Mit jedem Insert / Update wird dieses hochgezählt; Löschungen bekommst Du damit aber nicht mit.

    Dann gibt es noch Change Tracking Funktion, die gibt es erst seit SQL Server 2008 und sollte auch in der Express Edition funktionieren, ist aber etwas aufwendiger in der Implementierung. Oder Änderungen durch eigene Trigger protokollieren, ist aber noch aufwendiger.

    Ist halt immer eine Frage von Aufwand zu Nutzen; also wozu so etwas gut sein soll.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Freitag, 22. Juli 2011 16:18
  • Hallo Olaf,

    wir setzen eine Software eines dritt-Anbieter ein, diese Software legt die Daten auf dem SQL 2008 Express ab. Auf einen PC verbinden etwa 5-15 Mitarbeiter, diese können aber ebenfalls selber DB's halten auf die andere Mitarbeiter zugreifen.

    Hört sich alles etwas nach durcheinander an, aber ist so völlig ok.

    Nun möchte ich aber diese DB's quasi per Backup zentral sammeln und stelle mir dafür ein Tool vor, welches auf den Clients arbeitet. Da die DB's aber nicht so oft geändet werden (und die Express-Version eh kein SQL-Agent anbietet), dachte ich mir nach Veränderungsmerkmale an der DB zu suchen und erst dann das ganze mit Backup und transfer des Backup zum Server anzuwerfen.

    Wie gesagt, war eine Idee und ich wollte im Vorfeld abklären ob sich hier was bietet und vor allem sich dann die Arbeit lohnt ein Tool zu erstellen.

    Könnte man eigentlich die MDF- und LDF-Datei prüfen? Die ändert das Dateidatum evtl auch erst wenn sich was geändert hat?

    Gruss,
    Maxi

    Samstag, 23. Juli 2011 17:15
  • Hallo Maxi,

    wenn es Dir nur um das Thema Backup geht, dann empfehle ich Dir: Sichere grundsätzlich immer alle Datenbanken, egal ob was geändert wurde oder nicht, den nur wer sichert ist sicher. Und vergiss die Systemdatenbanken (master, msdb) nicht, die benötigst Du im Desaster Recovery Fall.

    Wenn Du einen SQL Server in der Standard Edition oder höher hast, kannst Du über den zentral alle Backups & Wartungspläne für die SQL Server Express Edition Instanzen ausführen lassen, siehe Automating Administration Across an Enterprise.

    Ansonsten könntest Du über den Windows Scheduler zeitgesteuert per SQLCmd.exe die Backups ausführen lassen.

    Oder Du connectes Dich per SSMS (oder SqlCmd) auf die laufenden Instanzen und führst ein Backupscript aus.

    Oder Du legst in einer zentralen Instanz Verbindung-Server zu allen anderen Instanzen an, dann kannst Du mit einem Script alle sichern lassen.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Sonntag, 24. Juli 2011 06:13