C.A: Teil- Volllöschung

Hallo alle mit einander,

Ich bin einer Löschung bei meine Teillöschung geht relativ schnell aber die Volllöschung ist sehr lang.

Ich habe ein neues Recordset aufgebaut und die ID verglich ob die aufn Exchange Server vorhanden sind wenn ja soll es sie löschen. So habe ich das bei der Teillöschung auch gemacht und er löscht sie in 10 schritten was bei der Volllöschung nicht möglich ist.

wenn es so mache wie bei der Teillöschung, rödelt  er mal eine ganz weil und sagt mit Unbekannter Fehler. was ich befürchte dass das Recordset bei ca. 7000 Daten überläuft oder dass der  Server ein Time out  schmeißt.

Was sagt ihr dazu oder was würdet ihr anders machen um die Volllöschung hinzubekommen ohne das man noch einkaufen gehen kann und er immer noch nicht fertig ist.

Die Löschung geht ja nur viel zu langsam.

was haltet ihr da von?

Gruß

Corinna

  1. Hallo Corinna,
    jetzt bitte Luft holen, nochmal den Text überfliegen, ob du das so schreiben wolltest, und prüfen, was du schreiben wolltest, und dann repost. ;)
    Ich hab nämlich kaum verstanden was Du uns mitteilen willst?

    Schöne Grüße

    Alex

  2. Hi,

    Ich bin einer Löschung bei meine Teillöschung geht relativ schnell aber die Volllöschung ist sehr lang.

    cool!

    Ich habe ein neues Recordset aufgebaut und die ID verglich ob die aufn Exchange Server vorhanden sind wenn ja soll es sie löschen. So habe ich das bei der Teillöschung auch gemacht und er löscht sie in 10 schritten was bei der Volllöschung nicht möglich ist.

    Du solltest keinen neuen Thread aufmachen, wenn Du noch einen laufen hast. Keine Sorge, Du wirst schon betreut.

    Was sagt ihr dazu oder was würdet ihr anders machen um die Volllöschung hinzubekommen ohne das man noch einkaufen gehen kann und er immer noch nicht fertig ist.

    Einkaufen ist nicht verkehrt.

    Gruss,
    Ludger

  3. Ich komme nicht ganz mit...und weiß nicht ob meine Antwort die Frage beantwortet.
    Was möchtest Du löschen und mit was machst Du das??

    Also wenn ich größere Dinge auf meinem Web-Server entfernen mächte, mach ich das über den shell-Zugang (putty) und nicht über das FTP-Programm. Über shell geht das ruckzuck.

    Code: rm -r Verzeichnis

    Gruß
    Chris

    1. hi,

      Code: rm -r Verzeichnis

      Mit dem Briefbeschwerer auf der Entertaste...nö. Versuchs mal so:

      rm -r -f .

      SCNR ;-)

      Viele Grüße, Rolf

      1. Hallo Rolf,

        Mit dem Briefbeschwerer auf der Entertaste...nö. Versuchs mal so:
        rm -r -f .

        Sorry, aber wenn du darauf anspielst, dass rm dich fragt, bevor es etwas loescht, liegst du falsch. Das tut es nur, wenn du das -i Flag mitgibst. (u.U. macht deine Distribution das aus Sicherheitsgruenden mit einem alias rm="rm -i" automatisch.)

        Viele Gruesse,
        Gero

        1. hi Gero,

          Mit dem Briefbeschwerer auf der Entertaste...nö. Versuchs mal so:
          rm -r -f .

          Sorry, aber wenn du darauf anspielst, dass rm dich fragt, bevor es etwas loescht, liegst du falsch. Das tut es nur, wenn du das -i Flag mitgibst. (u.U. macht deine Distribution das aus Sicherheitsgruenden mit einem alias rm="rm -i" automatisch.)

          Hmm.

          Ich werds nachlesen und auch mal ausprobieren - nächste Woche ;-)

          Viele Grüße, Rolf

          1. Hi,

            Sorry, aber wenn du darauf anspielst, dass rm dich fragt, bevor es etwas loescht, liegst du falsch. Das tut es nur, wenn du das -i Flag mitgibst. (u.U. macht deine Distribution das aus Sicherheitsgruenden mit einem alias rm="rm -i" automatisch.)

            Hmm.

            Ich werds nachlesen und auch mal ausprobieren - nächste Woche ;-)

            das setzt voraus, dass Du erst einmal Weihnachten ueberlebst. Warst Du denn artig letztes Jahr?

            Gruss,
            Ludger

        2. Hello,

          Mit dem Briefbeschwerer auf der Entertaste...nö. Versuchs mal so:
          rm -r -f .

          wäre da nicht

          rm / -Rf

          viel interessanter?

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  4. Hi,

    Ich bin einer Löschung bei meine Teillöschung geht relativ schnell aber die Volllöschung ist sehr lang.

    was meinst Du bitte? Und Du willst in _diesem Forum_ etwas löschen?

    freundliche Grüße
    Ingo

    1. Hi,

      Ich bin einer Löschung bei meine Teillöschung geht relativ schnell aber die Volllöschung ist sehr lang.
      was meinst Du bitte? Und Du willst in _diesem Forum_ etwas löschen?

      eine klare Korrelation zu https://forum.selfhtml.org/?t=97183&m=591252 scheint mir da vorzuliegen. Trotz "Zu diesem Forum" und so.

      Gruss,
      Ludger

      --
      "Der Tag des besoffenen Weihnachstmanns?"
    2. Ich bin einer Löschung bei meine Teillöschung geht relativ schnell aber die Volllöschung ist sehr lang.
      was meinst Du bitte? Und Du willst in _diesem Forum_ etwas löschen?

      wie immer bin ich etwas hektisch und auf gedreht!

      Denn passieren schon Fehler!!!! ;-) Was nicht mit Absicht war!

      Gruß

      Corinna

      1. Hi,

        Denn passieren schon Fehler!!!! ;-) Was nicht mit Absicht war!

        wobei mich das schon wundert, da dieser Themenbereich erst 5 Einträge später kommt...

        freundliche Grüße
        Ingo

        1. Hi,

          Denn passieren schon Fehler!!!! ;-) Was nicht mit Absicht war!
          wobei mich das schon wundert, da dieser Themenbereich erst 5 Einträge später kommt...

          ich habe dein Beitrag auch nicht gleich gelesen und so schusslich   wie ich bin ist das normal. Leider. Alles auf ein mal machen und denn bekommt man nur die hälfte mit!

          Gruß

          Corinna

  5. Okay, zu mit schreiben.

    Ich habe ein Datenbank und einen Exchange Server. In der Datenbank liegen die ganzen Ansprechpartner mit Firma usw.

    Die Ansprechpartner sollen auf den Exchange Server und sie tauchen nach her in Outlook bei Alle öffentliche Ordner auftaucht.

    Stellt euch vor ihr habt Outlook und geht auf der öffentlich Ordner da stehen alle Ansprechpartner die ihr gerne schreiben möchtet und das sind so ungefähr 7000 an der Zahl aber es kann sich ja was ändern z.B. ein Ansprechpartner stirbt oder er arbeitet nicht mehr in der Firma.

    Und da für schreibe ich ein Script, was in bestimmten Abständen gestartet wir und je nach dem ob das Script schon mal im gleich Monat gelaufen ist wird ein Update gefahren und wurde das Script  noch nicht in diesem Monat gestartet. Soll  einen Volllöschung auf den Exchange Server vorgenommen werden und gleich im anschluss sollen alle Daten neu auf den Exchange Server auf gespielt  werden.

    Und mein Problem ist das die Volle Löschung auf den Exchange Server zu langsam geht!

    Wenn ihr mich immer noch nicht versteht, schaut euch das an!!!!

    strSqlSource = "SELECT * FROM VIEW_EXCHANGE WHERE (FADeaktiv = 'FF')"  'strSQLAditoDeaktiv= "SELECT AID FROM VIEW_EXCHANGE WHERE (FADeaktiv = 'WW' OR FADeaktiv = 'FW' OR FADeaktiv = 'WF' OR FDatumEdit > '"&s(0)&"' OR ADatumEdit > '"&s(0)&"' OR MDatumEdit > '"&s(0)&"' OR FDatumNeu > '"&s(0)&"' OR ADatumNeu > '"&s(0)&"')"  strMSSQL  = "Provider='sqloledb';Data Source='SVR-12';Initial Catalog= 'Inros_Daten';Integrated Security=SSPI"  strURL_Full  = "http://SVR-04/public/Adito-Adressen/"  strSQLLoeschen  = "SELECT * FROM VIEW_EXCHANGE "'WHERE (FADeaktiv = 'WW' OR FADeaktiv = 'FW' OR FADeaktiv = 'WF' OR FADeaktiv = 'FF') "  'Call MsgBox(strSQLLoeschen) '---dynamische Einstellungen

    'Von C# in VB anfang 13.12.04 erstellen  Dim Zaehler 'As Integer = 1  Dim Test 'As Integer

    Zaehler = 1

    'Schaut ob die Datei vorhanden ist wenn Ja öffnet sie die Datei und liest den in halt ein  'wenn nicht erstellt sie die Datei mit einen Start wert und das Aktuelle Datum   If fso.FileExists("Zwischen.txt") Then   Set FileIn = fso.OpenTextFile("Zwischen.txt")   Dim wert   wert = FileIn.ReadAll()   FileIn.Close()

    Dim s   s = Split(wert, ";")   Test = s(0)' Convert.ToInt32(s(0))   Loeschen = Test

    'Überprüft ob Array 0 größer drei ist wenn ja wird der Zähler auf Standart zuzückgestellt   'wenn nicht denn wird das Array hoch gezählt und in der Datei abgespeichert.   Dim Monat   Monat = Month(Date())   'Call MsgBox(Monat)    'Call MsgBox(s(0))

    If Monat <> Month(Test) Then 'If Test > 3 Then    Set FileOut = fso.CreateTextFile("Zwischen.txt")    FileOut.Write Date()&" 23:00:00" '&";"& Month(Date())'Zaehler &";"& Date()& ";" & Month(Date())    FileOut.Close   Else    Set FileOut = fso.CreateTextFile("Zwischen.txt")    FileOut.Write Date()&" 23:00:00" '&";"& Month(Date())    FileOut.Close

    strSqlSource = strSqlSource & " AND FDatumEdit > '"&s(0)&"' OR ADatumEdit > '"&s(0)&"' OR MDatumEdit > '"&s(0)&"' OR FDatumNeu > '"&s(0)&"' OR ADatumNeu > '"&s(0)&"'"

    'Call MsgBox(strSqlSource)   End If  Else   'erstellen einer zwischenspeicherdatei   Set FileOut = fso.CreateTextFile("Zwischen.txt")

    FileOut.Write Date()&" 23:00:00" '&";"& Month(Date())   FileOut.Close

    End If

    strSQLAditoDeaktiv= "SELECT AID FROM VIEW_EXCHANGE WHERE (FADeaktiv = 'WW' OR FADeaktiv = 'FW' OR FADeaktiv = 'WF' OR FDatumEdit > '"&s(0)&"' OR ADatumEdit > '"&s(0)&"' OR MDatumEdit > '"&s(0)&"' OR FDatumNeu > '"&s(0)&"' OR ADatumNeu > '"&s(0)&"')"

    WScript.Echo "Start des VBScripts "&WScript.ScriptName&"!"

    If Err.Number <> 0 Then   Err.Clear  End If

    Set objCnnSource = CreateObject("ADODB.Connection") ' create connection to connect to ODBC datasource  Set objRstSource = CreateObject("ADODB.Recordset") ' create recordset to get data from ODBC datasource  Set objRstAditoDeaktiv = CreateObject("ADODB.Recordset") ' create recordset to get data from ODBC datasource ' Set objRstGanzLoeschen = CreateObject("ADODB.Recordset")

    objCnnSource.ConnectionString = strMSSQL 'User ID='AditoToExchange';Password='ATE';"  objCnnSource.CursorLocation = adUseClient  objCnnSource.Open ' open a connection

    ' Error handler  If Err.Number <> 0 Then   If objCnnSource.State = adStateOpen Then    objCnnSource.Close   End If   Set objCnnSource = Nothing

    WScript.Echo "Cannot connect to the datasource"  Exit Sub  End If

    ' Clear Err object to trap only errors in connecting to recordset  If Err.Number <> 0 Then   Err.Clear  End If

    objRstSource.CursorLocation = adUseClient  objRstSource.Open strSqlSource, objCnnSource, adOpenStatic, adLockReadOnly, adCmdText  objRstAditoDeaktiv.Open strSQLAditoDeaktiv, objCnnSource, adOpenStatic, adLockReadOnly, adCmdText  'objRstGanzLoeschen.Open strSQLLoeschen, objCnnSource, adOpenStatic, adLockReadOnly, adCmdText

    If Err.Number <> 0 Then   If objRstSource.State = adStateOpen Then    objRstSource.Close   End If   If objCnnSource.State = adStateOpen Then    objCnnSource.Close   End If   If objRstAitoDeaktiv.State = adStateOpen Then    objRstAditoDeaktiv.Close   End If   'If objRstGanzLoeschen.State = adStateOpen Then    'objRstGanzLoeschen.Close  ' End If

    Set objRstSource = Nothing   Set objCnnSource = Nothing   Set objRstAditoDeaktiv = Nothing   'Set objRstGanzLoeschen = Nothing

    WScript.Echo "Cannot connect to the datasource"  Exit Sub  End If

    'If Monat <> Month(Loeschen) Then   'variable ja oder nein   'Loesche_ganz = True   'Do While Not objRstGanzLoeschen.EOF    'ZZZ=ZZZ+1    'If WHEREAID1 <> "" Then     'WHEREAID1 = WHEREAID1 & " OR "    'End If    'WHEREAID1 = WHEREAID1 + """urn:schemas:contacts:customerid"" = '"& objRstGanzLoeschen.Fields("AID").Value &"'"    'IDsDeaktiv=IDsDeaktiv&", "&objRstAditoDeaktiv.Fields("AID").Value    'objRstGanzLoeschen.MoveNext   'Loop   'objRstGanzLoeschen.Close  'Else   'variable ja oder nein   Loesche_ganz = False   Do While Not objRstAditoDeaktiv.EOF    'ZZZ=ZZZ+1    If WHEREAID <> "" Then     WHEREAID = WHEREAID & " OR "    End If     WHEREAID = WHEREAID + " ""urn:schemas:contacts:customerid"" = '"& objRstAditoDeaktiv.Fields("AID").Value &"'"     IDsDeaktiv=IDsDeaktiv&", "&objRstAditoDeaktiv.Fields("AID").Value     objRstAditoDeaktiv.MoveNext   Loop   objRstAditoDeaktiv.Close

    '---Finished getting cutomer information, '---Now checking and creating contacts in exchange target

    ' Clear Err object to trap only errors in connecting to public folder  If Err.Number <> 0 Then   Err.Clear  End If

    ' set properties for the connection to the public folder  ' Please consider to change the strURL when change the public folder

    Set objCnnTargetFull = CreateObject("ADODB.Connection")  objCnnTargetFull.Provider = "ExOLEDB.DataSource"  objCnnTargetFull.Mode = adModeReadWrite  objCnnTargetFull.Open strURL_Full 'open a connection to the public folder to create data

    ' Error handler  If Err.Number <> 0 Then   If objRstSource.State = adStateOpen Then    objRstSource.Close   End If   If objCnnSource.State = adStateOpen Then    objCnnSource.Close   End If   Set objRstSource = Nothing   Set objCnnSource = Nothing   Set objCnnTargetFull = Nothing

    WScript.Echo "Cannot connect to public folder"  Exit Sub  End If

    'Von Dirk eingefügte Löschprozedur ...  Set oRec = CreateObject("ADODB.Record")  Set oRst = CreateObject("ADODB.Recordset")

    oRec.Mode = adModeReadWrite  oRec.Open strURL_Full 'geändert 15.12.04

    'erstellt 15.12.04  If Monat <> Month(Loeschen) Then   'Volllöschung 20.12.2004   sSQL="select * from """&strURL_Full&""""   sSQL=sSQL & " WHERE "   sSQL=sSQL & "(""http://schemas.microsoft.com/exchange/outlookmessageclass"" != 'IPM.Microsoft.FolderDesign.FormsDescription')"   'sSQL=sSQL & " AND ( "   'sSQL=sSQL & WHEREAID1   'sSQL=sSQL & " ) "   WScript.StdOut.WriteLine("Abfrage für die Volllöschung!")  Else   'Teillöschung 20.12.2004   sSQL="select * from """&strURL_Full&""""   sSQL=sSQL & " WHERE "   sSQL=sSQL & "(""http://schemas.microsoft.com/exchange/outlookmessageclass"" != 'IPM.Microsoft.FolderDesign.FormsDescription')"   sSQL=sSQL & " AND ( "   sSQL=sSQL & WHEREAID   sSQL=sSQL & " ) "

    WScript.StdOut.WriteLine("Abfrage für die Teillöschung!")  End If

    oRst.Open sSQL, oRec.ActiveConnection

    Merke =0

    Do While Not oRst.EOF

    Merke=Merke+1   Zusatz=Zusatz+1   If Zusatz > 99 Then    'TODO 16.12.04    WScript.StdOut.Write(".") 'bei jeden 100 Datensatz    umbruch=umbruch+1    If umbruch > 49 Then     WScript.StdOut.WriteLine()     umbruch=0    End If    Zusatz=0   End If   oRst.Delete   oRst.MoveNext  Loop   If Merke < 99 Then    WScript.StdOut.WriteLine(".")   End If   WScript.StdOut.WriteLine(Merke&" Datensätze wurden gelöscht!")

    oRst.close

    Hoffenlich habe ich mich jetzt besser ausgedrückt!!!!

    Gruß

    Corinna

    Ps. das ist nur die Löschung

    1. Hello,

      ob das Deine Frage beantwortet weiß ich nicht, aber vielleicht liegt das Problem darin:

      Das DBMS liegt auf dem Fileserver und nutzt in gewissem Umfang dessen Dienste.
      Um den konkurrierenden Betrieb zu ermöglichen, werden vom DBMS bei umfangreichen Anforderungen erst Markierungen gesetzt (Löschmarkierungen, Sperrmarkierungen, etc). Eine markierter Datensatz darf von keinem anderen Prozess mehr benutzt / verändert werden (je nach Markierung). Für diese Markierungen benötigt das DBMS Speicherplatz und ggf. das OS selber auch nochmal (--> *.ldb-Datei).

      Es sind aber nur eine bestimmte Anzahl von Markierungen möglich, bzw der Arbeitsspeicher muss dafür gesondert bereitgestellt werden. Wenn Du nun dieses Limit überschreitest, gibt es entweder gleich einen Fehler, oder das System fängt an zu swappen, also Daten aus dem Hauptspeicher in eine Auslagerungsdatei zu verschieben. Das erhöht den Zeitbedarf um ca. Faktor 1000 (beispielhaft).

      Wenn also in einer Datenbank umfangreiche dedizierte Löschungen (also 'einzelne' Sätze, nicht die ganze Tabelle) vorgenommern werden müssen, wirst Du ggf. nicht um eine Strategie hierfür herumkommen.

      Gut zu beobachten ist dieses Verhalten mit einer (fileserverorientierten) Access-Datenbank. Wenn Du dort mehr als 10.000 Sätze in eine Veränderung einbeziehen willst, musst Du die Fileserver-Parameter entsprehend hoch eingestellt haben. Bei NOVELL heißt die Systemvariable dafü z.B. MAX_RECORD_LOCKS und konnte je nach System ohnehin 'nur' maximal 50.000 Sperren gleichzeitig verwalten.

      Andere Server-Betriebssysteme haben ähnliche Beschränkungen.

      Abhilfe:
      a) Sperr die tabellen exclusiv. Dann sind keine Satzsperren nötig
      b) markiere "soft", also im Satz und nimm Rücksicht darauf in Deiner Applikation
      c) führe eine separate Tabelle mit den IDs der zur Löschung vorgesehenen Sätze

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hi,

        was mir grade einfällt kann es sein wenn ich in der Datenbank einen Ansprechpartner gelöscht habe und wenn ich die Volllöschung vornehme das er in schleudern kommt weil im Exchange Server die Person noch drinnen ist und in der Datenbank nicht mehr? Weil er ja keine ID hat um ihn zu vergleichen und dann zulöschen.

        Was du angesprochen hat’s habe ich nur ganz in betracht gezogen aber so fort wieder vergessen.

        Oder ist jetzt totaler Quark

        Gruß

        Corinna