Veröffentlicht 28. Januar 200817 j Guten Tag zusammen, ich habe folgendes Problem oder vielmehr Phänomen, was ich mir nicht erklären kann und hoffe, ihr "Profis" habt ne Erklärung dafür oder gar einen Lösungsansatz zum eingrenzen. Folgendes Problem: Ich habe einen Oracle Job, der einmal am Wochenende läuft und dessen Resultat dann weiterverschickt werden muss. In diesem Job, erfolgt eine komplette Löschung einer Tabelle, damit diese mit Hilfe des Jobs mit frischen Daten versorgt werden kann. Lustigerweise, wenn ich den Job über die Datenbank starten lasse Nachts um 1:00 macht er die Löschung nicht. Das Resultat sind dann quasi zweimal Daten (alte und neue) die ich nicht brauche. Setze ich den Job dann hier, wenn ich da bin, auf eine andere Zeit und harre der Dinge, dass er startet, funktioniert die Löschung einwandfrei. :confused: Es ist doch eigentlich nichts anderes, als Nachts um Eins, oder doch? Was könnte die Löschung verhindern, bzw. wie kann ich eventuell der Sache auf den Grund gehen? Grüße Ganymed
28. Januar 200817 j hast du nach dem delete eine abfrage des errorcodes eingebaut? machst du die abfragen immer mit dem gleichen user? Wird ein Backup von dieser DB gemacht? Ist vielleicht ein anderes Skript da, der die alten Daten einfügt? Ich würde mir an deiner Stelle die serverlogs anschauen und mir alle tätigkeiten auf dieser Tabelle herausfiltern
28. Januar 200817 j Autor Der schmeisst keinen Errorcode. Der läuft einfach weiter. Ich mache zwar ein Commit nach der Löschung, aber irgendwie sieht das so aus, als würde das völlig ignoriert... :confused: Nein, von der DB wird kein Backup gemacht und das Skript ist das einizige, was auf diese Tabelle zugrieft, denn das Konstrukt wird für nur diesen einen (wenn auch unschönen) Grund benutzt. Die Abfragen laufen immer von Oracle selbst aus. Also ohne irgend einen angemeldeten Benutzer. Der Benutzer ist DBO. Auf die Serverlogs kann ich leider nicht gucken (bin nur ein armer AE )
28. Januar 200817 j kannst du die relevanten zeilen von dem JOB (bzw. was in job_action aufgerufen wird) hier posten? mich würde interessieren, ob hier mit DELETE FROM oder mit TRUNCATE TABLE gearbeitet wird. mich würde auch interessieren, ob DBMS_SCHEDULER oder noch das alte (pre-10g) DBMS_JOB arbeitet. s'Amstel
28. Januar 200817 j Autor So, habe den Fehler gefunden... Irgendein Yogi hatte das gleiche nochmal angelegt und das hatte zu den Dupletten geführt. Kollegen... @Amstelchen So als Info: Es wäre ein ganz normales DELETE FROM gewesen.
28. Januar 200817 j Hi, wenn Du alle Zeilen der Tabelle löschen möchtest, dann kannst auch einfach ein TRUNCATE TABLE verwenden. In PL/SQL musst es nur als dynamisches SQL einbauen: execute immediate 'TRUNCATE TABLE xyz'; Ein COMMIT danach brauchst auch nicht und "etwas" schneller sollte es auch gehen. Dim
29. Januar 200817 j In diesem Job, erfolgt eine komplette Löschung einer Tabelle, damit diese mit Hilfe des Jobs mit frischen Daten versorgt werden kann. Ok. Dann habe ich das Wort "komplett" wohl falsch verstanden Dim
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.