Wie kann ich die *.LDF reduzieren?

  • C#
  • .NET (FX) 4.0

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Rattenfänger.

    Wie kann ich die *.LDF reduzieren?

    Hallo,

    habe grad mit SQL Datenbanken Angefangen und gleich ein kleines Problem für mich endeckt. Habe Testweise 1000000 Datensätze anlegen lassen.
    Die *.mdf hat ne größe von 100MB und die *.ldf 1GB. Wie kann ich das verhindern bzw. evtl. gleich beim erstellen der Database ausschalten das die Transportation log so groß wird.

    C# oder VB.net egal!?

    Danke im Vorraus
    ja aber ich würde das gerne automatisieren, und die codes die ich gefunden habe sind leider nicht wirklich funktional. da die log gleich heist wie die database. deshalb ja meine frage habe ich beim erstellen was falsch gemacht. aktuell erstelle ich diese manuell. Die datenbank größe habe ich schon per sql auf 10gb vergrößert :P .
    Dann schau noch mal in den MS Artikel. Da steht wie man die LDF verkleinern und auch in der Größe begrenzen kann.

    Dies ist, imho, eine Aufgabe des DB-Admin und nicht durch ein Client Programm zu triggern.

    Nachtrag: man kann beim Anlegen einer DB schon die maximal Größe des Transaction Log festlegen.
    Zudem kann man Einstellen wie granular geloggt werden soll. Geht auch nachträglich.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Ok, das hört sich doch schon mal gut an MrTreborn. Gib mir mal einen klein Tipp wo nach ich googeln soll. Weil ich egtl. brauch ich die Log bzw Backup funktion nicht, zumindest für die eine Database. Die anderen sollten auf jedenfall ein Backup haben :-). Also ich möchte die Databases Manuell erstellen und evtl später erst per Code erstellen wenn nötig.

    Gruß
    Wenn die Sicherung der DB nicht so minutiös sein muss kannst du das Recovery Model auf Simple stellen. Dann sollte nicht so viel geloggt werden.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Also unter dem SQL Manager läuft dieser Code Perfekt, das Transportprotokoll ist kleiner.

    SQL-Abfrage

    1. USE RealTimeDatabase;
    2. GO
    3. ALTER DATABASE RealTimeDatabase
    4. SET RECOVERY SIMPLE;
    5. GO
    6. DBCC SHRINKFILE (RealTimeDatabase_Log, 1);
    7. GO
    8. ALTER DATABASE RealTimeDatabase
    9. SET RECOVERY FULL;
    10. GO


    jedoch wenn ich das im c# Code anwenden will, bekomme ich immer eine Fehler meldung, das "GO" falsch ist. Oder mache ich im Code irgendwas falsch bzw. ist der SQLCommand dafür nicht geeignet.

    C#-Quellcode

    1. private void button3_Click(object sender, EventArgs e)
    2. {
    3. SqlConnection con = new SqlConnection
    4. {
    5. ConnectionString = "Data Source= *********\\SQLEXPRESS;" +
    6. "Initial Catalog = RealTimeDatabase;" +
    7. "Integrated Security= True;"
    8. };
    9. con.Open();
    10. SqlCommand command = new SqlCommand("USE RealTimeDatabase; " +
    11. "GO ALTER DATABASE RealTimeDatabase SET RECOVERY SIMPLE; " +
    12. "GO DBCC SHRINKFILE (RealTimeDatabase_Log, 1) ; " +
    13. "GO ALTER DATABASE RealTimeDatabase SET RECOVERY FULL; " +
    14. "GO " , con);
    15. command.ExecuteNonQuery();
    16. con.Close();
    17. }
    Warum auch immer du das in deinem Programm machen magst, der SQL Server hat Ausführungspläne um das selbst zu machen.

    Wenn du das Statement als Stored Procedure ablegst, kannst du diese aufrufen.

    Vielleicht hilft dir dieser Artikel auch weiter.
    codeproject.com/Tips/873677/SQ…kup-and-Restore-in-Csharp
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.