Jump to content

schuppsl

Members
  • Gesamte Inhalte

    5
  • Registriert seit

  • Letzter Besuch

Fortschritt von schuppsl

Apprentice

Apprentice (3/14)

  • Erste Antwort
  • Erster eigener Beitrag
  • Eine Woche dabei
  • Einen Monat dabei
  • 1 Jahre dabei

Neueste Abzeichen

0

Reputation in der Community

  1. Hallo Ihr beiden und vielen Dank für die wahnsinnig schnelle Antwort. Ich denke, dass die DB einen Rollback gemacht hat wie zahni geschrieben hat. Der Client macht einen Autocommit, aber die Verbindung zur DB wurde getrennt, dies hat der Client mit einer Fehlermeldung quittiert (Communication Link Failure). Die Informix ist sehr starr und man kann leider nur die komplette DB wiederherstellen und das auch nur auf den gleichnahmigen Server... Für den Notfall müssten wir alles entsptechend einrichten, aber ich denke dass dies nicht nötig sein wird. So habe ich nun wenigsens eine Erklärung, warum auch auf dem Klon die Datenmenge wieder ansteigt nach dem DELETE und Abbruch. Das beruhigt mich doch sehr und ich denke genau so ist es. Vielen Dank!
  2. Hallo Leute. Ich weiss, dass das hier ein MS SQL Forum ist, aber wir haben ja auch haufenweise SQL Server :) Ich wende mich an Euch, da Ihr immer sehr kompetent seid! Also: Wir haben hier auch noch eine alte IBM Informix Datenbank, welche unser altes ERP darstellt. Unsere SQL Befehle setzen nicht mit dem Management Studio ab, sondern mit einem Hilfsprogramm, welches auch hervorragend von jedem Client in der IT funktioniert. Heute habe ich auf eine Tabelle den DELETE Befehl abgesetzt und vergessen eine weitere WHERE Klausel anzugeben. Sofort habe ich die Ausführung abgebrochen. Und wie es aussieht Glück gehabt, denn wie es scheint sind keine Daten verloren gegangen. Jetzt bin ich mir aber trotzdem noch unsicher ob das sein kann und wie das Ganze abläuft. Warum ich mich nun an Euch wende, hat folgenden Hintergrund: Kann ich mir sicher sein, daß keine Daten gelöscht wurden? (Ich weiss: Nein) Doch von vorne: Die Tabelle hat ca. 850 000 Datensätze. Setze ich einen SELECT * Befehl ab, dauert es ca. zwei Minuten bis das Hilfsprogramm die Datensätze anzeigt. Setze ich einen DELETE Befehl ab, erscheint die im Programm Meldung, dass es läuft mit einem Abbrechen Button. Diesen habe ich sofort gedrückt, trotzdem lief es noch ca. zehn Sekunden weiter. Der DELETE Befehl lautete: DELETE FROM meinetabelle WHERE meinezeile <> 'test' Hier fehlt noch eine weitere, einschänkende WHERE Bedingung. Nachdem ich den Schock überwunden hatte, haben wir festgestellt, dass es von der Datenmenge her auf jeden Fall aktuell sein müsste, ich meine in 10 Sekunden werden ja schon zehntausende Datensätze gelöscht. Hat das System ein Rollback ausgeführt? Laut Entwickler des Hilfsprogrammes, wird bei Klick auf Abbrechen die Funktion cancel() ausgeführt. Einen Rollback gibt es laut ihm eher nicht. Meine Theorie ist, daß der DELETE Befehl erst alle Datensätze selektiert und dann, wenn er die Datenmenge hat auf die die WHERE Bedingung zutrifft anfängt mit dem Löschen. Laut Entwickler fängt es gleich an mit Löschen. Zum Test habe ich die Tabelle geklont und auf dem Klon denselben Befehl ausgeführt und sogleich abgebrochen. Mit COUNT(*) zähle ich nach dem Abbruch die Datensätze des Klons, welche Tatsächlich um ca. 10 000 weniger waren. Führe ich den COUNT Befehl nach ein paar Sekunden dann nochmals aus, ist die (Anzahl) Datensätze wieder vollständig! Also wird doch irgendwo ein Rollback ausgeführt??? Oder wird das Ergebnis zuerst irgendwo zwischengespeichert? Kann sich das jemand erklären? Wie ist der Ablauf eines DELETE Befehles? Wird zuerst selektiert und dann gelöscht? Meine o.G. Anfrage löscht nahezu 100 % Der Datensätze, also er findet sofort passende Sätze zum Löschen! Danke schonmal!
  3. Hallo liebes Forum, da ich zwar schon einen Anfänger-SQL-Kurs gemacht habe, aber der wohl zu anfängerisch war, suche ich bei Euch etwas Hilfe. Also hier ein Beispiel was ich gerade versuche, mein reales Problem, ist ähnlicher art. Mal angenommen ich bin Webhosting Reseller und kaufe meinen Webspace bei verschiedenen Webhostern ein. Ich möchte nun eine Tabelle als Grunddaten Pflegen in der die Daten des jeweiligen Hosters drinstehen, unter anderem den Speicherplatz den ich einkaufe. Darüber hinaus gibt es Spalten mit dem restlichen Speicherplatz der noch übrig ist. Ändert sich mein eingekauftes Paket, kann ich den Speicherplatz an einer einzigen Stelle ändern. Eine Zweite Tabelle ist die Kundenverwaltung in der u.a. den dem Kunden zugesicherten Speicherplatz gelistet werden. Da die Grunddaten auch wirklich nur Grunddaten sein sollen, stehen die beiden tabellen nicht in Beziehung miteinander. Die Grunddatentabellen könnte so aussehen: ID (PK) Hostername Speicherplatz Speicherplatz Rest Preis ... Die Kundentabelle so: ID (PK) Name, Paket Speicher zugesichert Preis ... Jetzt folgendes: Die Spalte [speicherplatz Rest] soll automatisch den restlichen Wert berechnen aus: Speicherplatz - Summe des zugesicherten Speichers aller Kunden für diesen Hoster. Ich möchte mir eben den übrigen Speicherplatz anzeigen lassen den ich noch habe um zu entscheiden ob ich mehr einkaufen muss oder nicht. Ich habe nun überhaupt keine Ahnung wie ich das machen soll und wie ich da anfangen muss. tSQL- mässig kann ich in der Abfrage SUM(Speicher zugesichert) gruppieren, aber ich da die Grunddatentabelle anspreche...großes Fragezeichen. Wahrscheinlich geht das eh nur über eine Funktion? Danke für die Anfängerhilfe, cuborg Ich habe es nunmal so gelöst, die ID 20261 ist nur fiktiv bzw. die ID des Hosters, damit ich einen Bezug habe: UPDATE Test.dbo.Grunddaten set [Speicherplatz Rest] = (( SELECT Speicherplatz FROM dbo.Grunddaten WHERE ID=20261)- (SELECT SUM(k.Speicherplatz) AS SpeicherGesamt FROM Test.dbo.Kunden k) ) where ID=20261 Ist das so richtig und überhaupt praktikabel?
×
×
  • Neu erstellen...