Announcement

Collapse
No announcement yet.

suspend bei Oracle ???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • suspend bei Oracle ???

    Guten Tag,

    folgendes Problem:

    gibt es einen analogen Befehl zu "Suspend" (in Interbase) in Oracle? Wenn ich in StoredProcedures Daten in Tabellen schreibe sind sie trotz erfolgreichem durchlauf nicht da. Mit einem Commit läuft es, aber ich möchte nicht in der SP mit Commit arbeiten. Benötige dringend Hilfe!!!

    Danke
    Ralf

  • #2
    Allgemein kann man meinem Wissensstand in Oracle Inserts und Updates nur mit einem Commit abschliessen, damit die Daten in die Tabellen eingefügt werden. Vorher werden die Datensätze welche der Änderung unterliegen gelockt, und die geänderten Daten gehen "nur" in die Rollbacksegmenten. Ich denke das ist auch wichtig so, um eben die Möglichkeit eines Rollback zu definierten Savepoints zu haben. Ich denke Du wirst um ein Commit nicht herumkommen. Näheres dazu in Oracle DML und DDL Unterlagen. Falls Du doch eine Möglichkeit findest publiziere diese hier bitte.

    MfG Steve

    Comment


    • #3
      Hallo,

      eine eindeutige Transaktionssteuerung ist für Multiuserdatenbanken unerläßlich.
      Jede DML ist in ORACLE für die aktuelle Session sofort sichtbar. Lediglich andere Sessions "sehen" die Daten erst nach einem Commit. Wenn du in deinen Procedures kein Commit oder Rollback verwenden willst, was durchaus sinnvoll ist (damit sie z.B. in Triggern verwendet werden können), dann muß die aufrufende Umgebung eben die Transaktionssteuerung übernehmen und nach dem Aufruf ein Commit absetzen. Oder du übergibst deiner Procedure einen zusätzlichen Parameter, anhand dem sie selbst entscheiden kann ob ein Commit durchgeführt werden soll oder die Aufrufende Routine das erledigt.

      Gruß Falk

      P.S. In den Rollback-Segmenten landen übrigens nicht die geänderten Daten, sondern die ursprünglichen. Die geänderten Daten landen schon in der DB. ORACLE spiegelt anderen Sessions die alten Daten dann aus den Rollbacksegmenten vor.
      Deshalb heißen die wohl auch Rollback- und nicht Rollforward-Segmente ;-
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Hallo Falk,

        wo Du recht hast hast Du recht. Rollforward, der war gut. ;-)

        Comment


        • #5
          Hallolöchen miteinander,

          Rollback-Segment ist doch nur ein Name. Es beschreibt doch nicht, was darin enthalten ist bzw. wozu sie benötigt werden.

          · Die Struktur von Rollback-Segmenten
          Alle Informationen, die zum Zurückrollen von Transaktionen nötig sind, werden in der Datenbank in Rollback-Segmente abgelegt.

          · Die Funktion von Rollback-Segmenten
          Rollback-Segmente dienen zum Zurückrollen offener Transaktionen im laufenden Betrieb und im Recoveryfall. Zudem gewährleisten sie das Lesen konsistenter Datenbankzustände, d.h. Datenbank und Redo Log Dateien ergeben einen konsistenten Datenzustand.

          · Der Inhalt der Rollback-Segmente
          Jeder Änderungsbefehl der in einer Transktion abgesetzt wird, erzeugt in einem der Transaktion zugewiesenen Rollback-Segmente folgende Informationen:
          - Transaktions-ID: dient der eindeutigen Zuordnung eines Rollback-Eintrages zu einer bestimmten Transaktion
          - Block-Information: identifiziert den Datenblock, der geändert wurde.
          - "Before Image": beinhaltet den Dateninhalt vor der Änderung.
          Es werden nur veränderte Spalteninhalte, nicht komplette Blöcke protokolliert!

          Ein Recovery besteht im einzelnen aus zwei Aktionen,
          - einem rolling forward, wodurch alle Änderungen, die in der Datenbank durchgeführt wurden, nachgefahren werden, und
          - einem anschließenden rolling back, wodurch die offenen Transaktionen zurückgerollt werden und der konsistente Zustand zum Ende des Recovery sichergestellt wird.
          Hierzu werden die Redo Log Dateien benötigt.

          Übrigens, alle Daten der einzelnen Transaktionen landen zunächst einmal in den Redo Log Dateien. Von hier aus werden sie dann in die Datenbank übertragen, d.h. nur die Daten von commiteten Transaktionen.

          Kuemmelche

          Comment

          Working...
          X