Neu dbo.tlog zu groß / bereinigen (SQL)

Hechti

Aktives Mitglied
17. November 2016
41
5
Hi, ich hab eine dbo.tlog mit 65gb. der worker hat sie innerhalb eines jahres vollgeschrieben. Das problem ist vorerst gelöst aber ich würde jetzt gern eine batzillion einträge löschen (die ansich fast alle gleich sind "Error: Bestellung... wurde bereits als auftrag übernommen.."
Wie könnte ich das realisieren um wieder eine vernünftige größe zu bekommen?

need help ;)
 

Mudla

Neues Mitglied
23. September 2021
22
5
Hallo,

ich würde das über den SQL-Server (SSMS) lösen:
- einmalig mit einer einfachen Query
- regelmäßig über den SQL Server Agent (https://stackoverflow.com/questions/5471080/how-can-i-schedule-a-job-to-run-a-sql-query-daily)

SQL:
SELECT *
  FROM [eazybusiness].[dbo].[tLog]
  where cLog like 'Error: Bestellung % wurde bereits als Auftrag übernommen'
  and
  dDatum < dateadd(mm,-1,getdate())
Das sucht alle Zeilen raus, die den Text enthalten, und älter als 1 Monat sind. Falls das Ergebnis passt, einfach das "SELECT *" durch ein "DELETE" ersetzen, und schon sind die Zeilen gelöscht...

Daniel
 

Mudla

Neues Mitglied
23. September 2021
22
5
Der Text kann auch anders sein, ich hab den jetzt nur mal auf die Schnelle so aus dem 1. Post übernommenund etwas angepasst.

Ob es am Text liegt, kannst du überprüfen, indem du folgendes eingibst:
SQL:
SELECT *
  FROM [eazybusiness].[dbo].[tLog]
  where dDatum < dateadd(mm,-1,getdate())
Das liefert alle Einträge zurück, die älter als 1 Monat sind

SQL:
SELECT *
  FROM [eazybusiness].[dbo].[tLog]
  where cLog like 'Hier den Suchtext rein'
Und das alles, was den Suchtext enthält. Als Wildcard wird in SQL das Prozentzeichen benutzt.
Achtung! Textsuchen mit "LIKE" können bei vielen Einträgen ganz schön langsam sein, da die Spalte cLog nicht indiziert ist (ist ja auch nicht für dieses Manöver vorgesehen :) )
 

Hechti

Aktives Mitglied
17. November 2016
41
5
technisch kann ich im dbo.tlog einträge einfach so löschen? da bricht mir nicht die integrität zusammen? Sie tauchen einfach nur nicht mehr auf im JTL-Wawi Logbuch?

---

In der Wawi Global Debug kann ich das log ja zeitlich kontrollieren habe ich entdeckt - könnte ich da z.b einfach logging deaktivieren für einen wipe? wären die 65gb dann weg?
 
Zuletzt bearbeitet:

Mudla

Neues Mitglied
23. September 2021
22
5
Ich habe da jetzt keine Referenzen darauf gesehen, also ja :) Aber trotzdem vorher immer ein Backup machen...

Die Einstellung unter Debugger -> JTL-WaWi -> nach xx Tagen/Monaten macht warscheinlich genau das, was ich oben geschrieben habe, nur halt einstellbar.

Wusste nicht, dass die Option da schon eingebaut ist, also bitte das Bordmittel nutzen :)
 

Hechti

Aktives Mitglied
17. November 2016
41
5
Die WaWi machen lassen hat gar nicht funktioniert. ich hab auf "logs nur 14 tage" gestellt und bei der umsetzung hat sich der Server gefressen und ich musste backup einspielen. Ich hatte vorher auf 12 Monate getestet da hat es geklappt - das war aber auch noch ein Zeitraum vor dem Logbuchkrebs. Zumindest mit dieser absurden Datenmenge scheint JTL bzw unser Mittelklasse-Server (2x xeon mit 96gb ram) nicht klar zu kommen.
Bin jetzt auch wieder relativ ratlos, wahrscheinlich könnte ich jetzt einfach abwarten und die Wawi räumt täglich ein Stückchen auf und das wäre in 9 Monaten erledigt - das natürlich eine sehr unbefriedigende lösung, da ich auch vorallem die backup größe wieder auf "normalniveau" bekommen will.
 

Mudla

Neues Mitglied
23. September 2021
22
5
Guten Morgen,

da du ja ein Backup hast, würde ich das mit der SQL-Abfrage (DELETE....) mal ganz stumpf versuchen...
 

Hechti

Aktives Mitglied
17. November 2016
41
5
soweit ich verstehe is mein aktuelles problem dass ich die daten aus der dbo.tlog nicht in die eazybusiness. log krieg weil JTL es nicht hinkriegt mit den eingebauten boardmitteln die 65gb logfile selber zu trimmen. sobald ich es in der eazybusiness.log hab könnt ich wenn ich die datenbank "simple recovery" geh kurzfristig das eazybusiness.log aushebeln, ein neues logfile beginnen und dann wieder auf Full recovery stellen.
Das geht jedenfalls schon alles weit über den 0815 user hinaus :(
Ich werds wahrscheinlich nochmal über ein JTL ticket versuchen, auch wenn die wohl wieder sagen "melden sie sich bei ihrem SQL Systemhaus" :(
 

Mudla

Neues Mitglied
23. September 2021
22
5
soweit ich verstehe is mein aktuelles problem dass ich die daten aus der dbo.tlog nicht in die eazybusiness. log krieg weil JTL es nicht hinkriegt mit den eingebauten boardmitteln die 65gb logfile selber zu trimmen. sobald ich es in der eazybusiness.log hab könnt ich wenn ich die datenbank "simple recovery" geh kurzfristig das eazybusiness.log aushebeln, ein neues logfile beginnen und dann wieder auf Full recovery stellen.
Das geht jedenfalls schon alles weit über den 0815 user hinaus :(
Ich werds wahrscheinlich nochmal über ein JTL ticket versuchen, auch wenn die wohl wieder sagen "melden sie sich bei ihrem SQL Systemhaus" :(
Ich versteh jetzt grad nur Bahnhof von dem, was du da schreibst...

In deiner Datenbank (eazybussines) sind in der Tabelle "dbo.tlog" Millionen von Einträgen, was die ganze Datenbank "aufbläht".
Genau diese Tabelle wird auch im JTL-Log angezeigt (Admin -> JTL-WaWi Logbuch).
Wenn du jetzt diese Einträge löscht, dann verkleinert sich deine Datenbankgröße, Punkt. Da wird nichts von der dbo.tlog in die eazybussines.log (was ist das überhaupt?) kopiert/verschoben/geschrieben...

Ich denke mal, dass das Problem nicht bei JTL liegt, sondern die Ausführung einfach zu lange dauert und deshalb das Script einen Timeout verursacht.
 

Hechti

Aktives Mitglied
17. November 2016
41
5
die dbo.tlog is das was gewuchert ist, als die wawi versucht hat das zu lösen is die eazybusiness. log explodiert (340gb, bis die festplatte voll war und der server abgeraucht is).

Ein "Rausschneiden" wie skalpell sei technisch nicht so einfach wurde mir erklärt, weil die calls einfach in die eazybusiness.log wandern und somit keinen platz bringen dürfte (das läge wohl daran dass wir nicht im simple mode sind und immer zu jedem zeitpunkt recovern können. Sprich einfach daten löschen in der sql tabelle bringt uns nichts weil dann eben die wiederherstellungsinformationen anstelle der gelöschten daten gespeichert werden - von einem log ins andere log
 

Mudla

Neues Mitglied
23. September 2021
22
5
Also ist bei euch die "eazybusiness. log" so eine Art stetiges Backup der Datenbank "easybusiness"?
Wenn dem so ist, dann hast du in der Tat "Pech gehabt", da du ja dann für jeden Eintrag ein Backup hast, welches du nicht löschen kannst....

Da muss sich dann dein SQL-Admin damit beschäftigen, wie er die DB "verkleinert". Das ist kein Problem von JTL.

Als "Workaround" würde ich folgendes versuchen:
- Eine neue SQL-Instanz nur für WaWi machen
- Den Backup-Modus auf Single stellen (für WaWi finde ich Full etwas überzogen, meine Meinung!)
- die Datenbank aus der alten Instanz exportieren und in die Neue importieren
- die dbo.tlog leeren
 

Hechti

Aktives Mitglied
17. November 2016
41
5
die eazybusiness. log is das transaction log der eazybusiness ;)

Ich hab das Problem jetzt erfolgreich behoben indem ich mit JTL im kleinstmöglichen takt die daten aus der dbo.tlog gelöscht habe, dann das eazybusiness.log abgeschnitten und repeat und danach mit SHRINK die dbo.tlog wieder auf ihren platz verwiesen habe.
Sieht vorerst gut aus und ich denke es is erstmal solved.
 
  • Gefällt mir
Reaktionen: Mudla

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.597
484
Das Transaktionsprotokoll ist etwas vollkommen anderes, als die Datentabelle [eazybusiness].[dbo].[tLog].

In die Datentabelle schreibt JTL bei manchen Aktionen einen Text zur Protokollierung was wann verändert wurde.

In das Transaktionsprotoll des SQL-Servers aber schreibt der SQL-Server vereinfacht gesagt alle Änderungen an der Datenbank, bevor er sie wirklich in die Datenbank schreibt.
Das macht er deshalb so, weil die wirkliche Änderung an der Datenbank zeitintensiv ist und dadurch, dass er die Änderung erstmal ans Transaktionsprotokoll anfügt, kann er dem Client schon sofort nach der Protokollierung diese Transaktion bestätigen und der Client muss nicht erst auf die wirkliche Änderung an der Datenbank warten.

Den Inhalt der Datenbanktabelle [tLog] kannst du bearbeiten und einzelne Datensätze rauslöschen.
Das Transaktionsprotokoll des Servers kannst (und solltest du nicht!) selektiv bearbeiten. Der Server wird es selber abschneiden (Beim Backup).

Wahrscheinlich bist du deshalb durcheinandergekommen, da dein Server das Transaktionsprotokoll mit dem Namen eazybusiness. log erzeugt.
Im Normalfall läßt man den Server das Transaktionsprotokoll mit der Standarderweiterung ldf erzeugen, also eazybusiness.ldf
Du kannst dich mit den Namen aber frei entscheiden (du kannst es auch eazybusiness.xyz benennen) ....nur solltest du es niemals mit Datentabellen verwechseln ;)

EDIT:

uuuups, das Thema ist ja schon über ein halbes Jahr alt.
Sorry - hatte das Datum falsch gelesen ....wahrscheinlich interessiert das ja dann niemanden mehr.