Ich verwende SQL Server 2005. Ich habe zwei Tabellen, die aggregierte Informationen enthalten. Die Informationen werden ständig aktualisiert und generieren täglich fast 5 GB Protokolldaten. (Das ist größer als die gesamte Datenbank!) Ich möchte die Protokollierung für diese Tabellen deaktivieren, da ein Zurücksetzen nicht unbedingt erforderlich ist. Ich möchte mich jedoch weiterhin bei den anderen Tabellen in der Datenbank anmelden.
Ist es möglich, die Protokollierung für bestimmte Tabellen in der Datenbank zu deaktivieren? Wenn nicht, kann ich die beiden Tabellen im selben Schema platzieren und dann die Protokollierung für das Schema deaktivieren? Ist die einzige Möglichkeit, die beiden Tabellen in eine separate Datenbank zu verschieben und die Protokollierung dort zu deaktivieren?
Update: Ich denke, ich werde erklären, warum ich die Aktivität in diesen Tabellen wirklich nicht protokollieren muss.
Die beiden Tabellen sind mit GPS-Daten gefüllt, sodass sie ziemlich groß werden. In der ersten Tabelle werden Rohstandorte aus sechs Android-Tabellen im Feld erfasst. Neue Daten von jedem der Tablets kommen alle 5-10 Sekunden. Diese Informationen werden dann als locationA, locationB, travelTime zusammengefasst. Ziel ist es, letztendlich die kürzesten Fahrzeiten zwischen allen Standorten zu haben, basierend auf den tatsächlichen Fahrdaten. Die Daten gelten nur für eine kleine Stadt und sind nur auf vier Dezimalstellen genau, sodass sie verwaltet werden können. Wenn jedoch neue Rohdaten eingehen, müssen langsamere Reisezeiten aktualisiert und neue eingefügt werden.
Sobald die Rohdaten aggregiert sind, werden sie gelöscht. Wir gehen nicht rückwärts zu längeren Reisezeiten, deshalb ist das Zurückrollen in diesen Tabellen nicht so wichtig.
quelle
Antworten:
Die Protokollierung von Benutzervorgängen kann nicht deaktiviert werden.
Es gibt eine Klasse von aufgerufenen Operationen minimal protokollierte Operationen , die eine Transaktion gerollt erlaubt nur wird wieder (im Gegensatz zu auch zu rollen in der Lage , nach vorne ). Es hört sich jedoch nicht so an, als würde das, was Sie tun, die Kriterien dafür erfüllen, und ich denke auch nicht, dass dies das Problem ohnehin lösen würde.
Die SQL Server-Lösung würde darin bestehen, die Staging-Tabellen in der
SIMPLE
Wiederherstellung in einer neuen Datenbank zu landen , getrennt von der Aggregationsergebnisdatenbank, von der ich annehme, dass sie wiederhergestellt wirdFULL
. Während dies das nicht verringert Volumen der Protokollierung, würde es die Notwendigkeit beseitigen , sichern das Protokoll durch die Datenlasten erzeugt. (Weitere Informationen zur Protokollierung und zu einigen Faktoren bei der Auswahl des Wiederherstellungsmodells einer Datenbank finden Sie in meinem Blogbeitrag hier .)Das Trennen der Tabellen in eine andere Datenbank bietet die Flexibilität, die Protokolldatei auf einem schnelleren E / A-Subsystem zu landen, wahrscheinlich einem kleinen Array lokal angeschlossener Solid-State-Laufwerke.
Bedenken Sie auch, dass SQL Server allein möglicherweise nicht die beste Lösung zur Lösung des Problems ist. Es gibt andere RDBMS-Lösungen, die die Möglichkeit bieten, die Protokollierung für bestimmte Tabellen vollständig zu deaktivieren. Die Daten könnten in einem anderen System bereitgestellt und aggregiert werden, und die Ergebnisse könnten in die vorhandene SQL Server-Datenbank zusammengeführt werden, die durch vollständige Protokollierung und Sicherungen gut geschützt ist.
quelle
Nein, es gibt keine Möglichkeit, die Protokollierung in SQL Server unabhängig von Schema-, Tabellen- oder Datenbankebene zu verhindern.
Tatsächlich wird jede Transaktion protokolliert, die Änderungen oder Modifikationen in der SQL Server-Datenbank vornimmt, mit Ausnahme von Transaktionen im Zusammenhang mit dem Versionsspeicher, an denen TempDB beteiligt ist, wenn die Snapshot-Isolation verwendet wird. (Das Anmelden im Transaktionsprotokoll garantiert, dass die Transaktion zurückgesetzt werden kann. (Für bestimmte Vorgänge können Sie die Protokollierung reduzieren (dies wird als minimal protokollierte Vorgänge bezeichnet), indem Sie das Wiederherstellungsmodell in BULK Logged ändern. Weitere Informationen hierzu finden Sie in den SQL Server-Onlinedokumenten hier
quelle
Die Antwort ist wie immer, es kommt darauf an.
Als Sie sagten:
Was ist das für eine Aggregation?
Versuchen Sie stattdessen, eine ANSICHT zu verwenden, ohne dass eine Aktualisierung erforderlich ist und keine Protokollierung erforderlich ist.
Wenn dies keine Option ist, versuchen Sie, kürzere Transaktionen zu verwenden und das Protokoll zwischen ihnen zu sichern.
Die Verwendung einer anderen Datenbank bedeutet Verwaltungsaufwand für die Sicherheit usw. und verfügt über ein eigenes Transaktionsprotokoll (selbst mit dem SIMPLE-Wiederherstellungsmodell wird das Protokoll geschrieben, SQL Server schneidet das Protokoll einfach automatisch ab, gibt jedoch keinen Speicherplatz frei), sodass ich diese Option nicht empfehlen würde .
quelle