Announcement

Collapse
No announcement yet.

SQLServer Transaktionsprotokoll

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQLServer Transaktionsprotokoll

    Ich habe eine D5-Anwendung, die via ADO temporäre Tabellen auf dem SQL-Server anlegt und diese temporär mit Daten befüllt. Anschließend werden diese Tabellen wieder gelöscht. Beim Befüllen dieser Tabellen kann man zusehen, wie er den Speicher des Transaktionsprotokolls verwendet. Das Dumme ist nur, dass er den Speicher anschliessend nicht wieder freigibt, bis ich das Transaktionsprotokoll manuell abschneide. Wie kann ich erreichen, dass der Speicherplatz wieder freigegeben wird ? Muss ich da mit BeginTrans und CommitTrans arbeiten ? Bitte um dringende Hilfe.
    Danke
    Gruss
    Holger

  • #2
    Hallo,

    aus Performancegründen wird die Logdatei nicht automatisch verkleinert, so dass später bei Bedarf eine ausreichend grosse Datei vorgefunden wird. Bei den heute üblichen Festplatten sollte das kein wirklicher Nachteil sein (von der Datensicherung einmal abgesehen).

    Will man von Hand aufräumen, könnte man die Datenbank kurzzeitig aushängen und die Logdatei zwischendurch löschen: <br>
    1. EXEC sp_detach_db 'IBImport', 'True' <br>
    2. Alte Logdatei löschen <br>
    3. EXEC sp_attach_single_file_db @dbname = 'IBImport', @physname = 'C:\MSSQL7\Data\IBImport.mdf

    Comment


    • #3
      Naja, das beantwortet meine Frage nicht wirklich. Sorry für das doppelte Posten erst mal... ist nur leider wirklich dringend, weil ein Kunde von mir meint, das Transaktionsprotokoll würde wegen meiner Anwendung vollaufen... Kann ich denn von Delphi über ADO überhaupt steuern, ob das Transaktionsprotokoll verwendet wird, oder ist das eine Sache, die der SQL-Server selbst regelt ? Ich will natürlich nicht das Logfile physikalisch löschen, aber vielleicht ist das nur ein Verständnisproblem von mir..

      Comment


      • #4
        Das beste wäre es wohl, wenn der Server-Admin es so einrichtet, daß die Datenbank täglich gesichert wird und dann das Transaktionsprotokoll gelöscht wird. Oder braucht deine Anwendung wirklich so viele Transaktionen, daß eine tägliche Löschung nicht mehr genügt

        Comment


        • #5
          Hallo,

          alternativ könnte man über <b>sp_tableoption</b> die Option <i>table lock on bulk load</i> aktivieren und somit den Sperraufwand, den der SQL Server treiber muss, minimieren. <br>
          In die gleiche Richtung geht der kombinierte Einsatz der Sperrhinweise <b>TABLOCK</b> und <b>HOLDLOCK</b>

          Comment


          • #6
            Nein, so massig viel ist das nicht, was sich da im Protokoll ansammelt, aber der Kunde hatte vorher einen SQLServer 6.5 und da war keine automatische Vergrösserung drin... daher kam meine Frage, ob ich es steuern kann, wie mit dem Transaktionsprotokoll umgegangen wird. Haben denn die Commands BeginTrans und CommitTrans überhaupt etwas damit zu tun

            Comment


            • #7
              Hallo,

              nur indirekt. Mit BeginTrans wird der Beginn einer Transaktion gekennzeichnet. Alle Aktionen danach werden im Log mitprotokolliert, sobald CommitTrans aufgerufen wird, ist diese Transaktion abgeschlossen und die Daten müssen permanent in der DB liegen. Es wäre ineffizient, mit dem Ende der Transaktion ständig die Log-Datei über das Betriebssystem zu verkleinern, statt dessen wird nur der logische Inhalt dieser Logdatei abgeschnitten. Eine grosse Logdatei bedeutet nicht, dass dort noch umfangreiche "unerledigte" Transaktionsdaten rumliegen, sondern nur, dass dort viel Platz für neue Transaktionsdaten vorrätig ist

              Comment

              Working...
              X