AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Löschen großer Datenbanken
Thema durchsuchen
Ansicht
Themen-Optionen

Löschen großer Datenbanken

Ein Thema von bernhard_LA · begonnen am 25. Apr 2016 · letzter Beitrag vom 26. Apr 2016
Antwort Antwort
Seite 1 von 2  1 2      
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.121 Beiträge
 
Delphi 11 Alexandria
 
#1

Löschen großer Datenbanken

  Alt 25. Apr 2016, 16:34
Datenbank: MSSQL • Version: ADO • Zugriff über: 12
mit diesem Code
Delphi-Quellcode:
    with MyQuery do
    begin
      Close;
      SQL.Clear;
      SQL.Add('delete from ');
      SQL.Add(TableName);
      TADODataSet(MyQuery).CommandTimeout := TimeOut;
      ExecSQL;
      result := true;
    end;
  except
    result := false;
  end;

komme ich bei großen Datenbanken nicht immer zum Erfolg. Gibt es eine Lösung in n-Abfragen immer nur einen kleinern Teil zu löschen, geht vielleicht sogar dann insgesamt schneller ?
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 16:40
Stored Proc ?
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 16:47
Wenn du eine Datenbank löschen willst, kannst du das mit drop database machen. Wenn du dagegen Tabellen in einer Datenbank löschen willst, solltest du die Überschrift anpassen.
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#4

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 17:05
beim MS SQL kannst du die Tabellen - ohne Prüfungen - mit TRUNCATE löschen
https://msdn.microsoft.com/de-de/lib...=sql.120).aspx
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 17:22
Zitat:
Löschen großer Datenbanken Tabellen
Trigger, Indize usw. deaktivieren?

Parameter?
https://xkcd.com/327/
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Apr 2016 um 17:28 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 17:43
Definiere bitte, was Du unter dem Löschen einer Datenbank verstehst.

Die Datenbank löschen - also alles: drop database

Tabellen löschen: drop table

Inhalte von Tabellen löschen: delete from tabelle

Inhalte von Tabellen unwiderruflich löschen: truncate table

Bei Delete werden die Löschungen erstmal ins Rollbacksegment geschrieben, da die Datenbank ja nicht weiß, ob am Ende statt des Commit doch ein Rollback kommen könnte.

Truncate macht das nicht: Was weg ist ist weg.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 18:46
moderne RDBMS sind per default sehr darauf getrimmt, den Tagesbedarf zu erledigen. Insert, Update, Select
Delete gehört nicht dazu.
Sie bieten u.U. konfigurationsprofile an, die das Löschen im großen Stil beschleunigen.
Die Standardbremse sind aber idR wie schon tw. geschrieben:
Indizes nachpflegen, aufräumen
Das Logging der Löschung für Rollback.
ref.Konstraints prüfen, verfolgen, u.u. noch mehr Löschen in abhängigen Tabellen.
Trigger, die irgendwas harmloses machen (wenn nur alle 3 Tage ein Satz gelöscht wird, z.B. "lieber noch mal in Datei schreiben, bevors ganz gelöscht wird und noch gebraucht wird")

Dann gibt's noch exotischere Sachen, die vielleicht im Rauschen untergehen.
Locks, die im Löschprozess verwickelt sind. Entweder von fremden Zugriffen oder sogar von eigenen (Selbstreferenz).

Was davon zutreffen könnte, kannst Du sicher am besten selbst beurteilen.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 21:22
Um eine Datenbank in den Auslieferungszustand zu bringen lösche ich die ganz einfach, erstelle diese wieder und lasse dann die Scripts drüber laufen, bis ich auf der Zielversion der Datenbank bin.

Das geht ganz unkompliziert und auch schnell.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Löschen großer Datenbanken

  Alt 25. Apr 2016, 22:06
Um eine Datenbank in den Auslieferungszustand zu bringen lösche ich die ganz einfach, erstelle diese wieder und lasse dann die Scripts drüber laufen, bis ich auf der Zielversion der Datenbank bin.

Das geht ganz unkompliziert und auch schnell.
Und das Schöne daran ist: Man hat einen klar definierten Zustand und nicht nur hoffentlich alles korrekt aufgeräumt und damit dann den erhofften Zustand.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: Löschen großer Datenbanken

  Alt 26. Apr 2016, 08:21
Naja, was der TE zu Anfang postet ist nicht die Löschung einer DB, sondern einer Tabelle.
Da er hier noch irgendwo einen Thread rumfliegen hat, wo es um irgendwas mit großen Tabellen geht (50 Mio), kann ich mir gut vorstellen, dass er hier beim Testen auf die Problematik des Löschens von Testdaten gestoßen ist. Oder verwechsele ich das?
Und zum Thema Legendenbildung:
Wenn ich eine DB habe und 5 Tabellen reintu mit Daten und die später lösche, habe ich auch einen klar definierten Zustand. Zumindest bei halbwegs ernst zu nehmenden Systemen. Daran ändert sich auch nichts, wenn noch Trigger, Views, SP dabei sind und die auch wieder gelöscht werden.
Ich schalte ja auch nicht meinen Rechner aus, wenn ich ein Programm beendet habe, um die RAM Riegel in einen definierten Zustand zu bringen.
Und wie gesagt, falls ich die Threads bzw. den Ersteller nicht verwechsele: Wenn wirklich größere Tabellen im Spiel sind, dann ist immerhin schon mal das/die File/s angelegt. Das kann auch etwas Zeit sparen, wenn im Rahmen der Tests sowieso wieder Millionen von DS da reingeblasen werden. Das gilt besonders, wenn man sich mangels Bedarf oder Kenntnis noch nicht mit den physikalischen Einstellmöglichketen für Tabellen auseinandergesetzt hat.
Was da konkret bei MS SQL Server 2014 geht, kann ich allerdings mangels Erfahrung nicht sagen.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz