Announcement

Collapse
No announcement yet.

Pro*C/Pthread Programm verursacht ORA-24550

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

  • Pro*C/Pthread Programm verursacht ORA-24550

    Hallo,
    um mehrere große Tabellen (in unterschiedlichen Schemata auf der gleichen Datenbank) möglichst "rasant" zu befüllen habe ich ein C-Programm geschrieben, das mittels Pro*C auf Oracle zugreift.
    Läuft auch prinzipiell gut (und schnell), nur würde ich die Mehrprozessormaschine gerne besser auslasten und mehrere Tabellen zeitgleich befüllen (wie gesagt, die Zieltabellen sind völlig unahängig voneinander, aber Teile der Daten werden zunächst aus ein und der selben Tabelle gelesen, die folglich parallele Lesezugriffe zulassen muss).
    Wenn ich die einzelnen Füllroutinen von PThreads ausführen lasse, funktioniert zunächst auch noch alles, so lange die Befüllung sequentiell vorgenommen wird (d.h. jeweils ein pthread_join(letzterThread) vor jedem pthread_create(naechsterThread)), sobald die Theads aber parallel laufen (wie sie es sollen), bekomme ich den Fehler: "ORA_24550: signal received: [si_signo=11][si_errno=0][si_code=1][si_addr=0x18] Aborted".
    Woran liegt das? Was mit Zugriffsrechten? Viel ist über den ORA-24550 online nicht zu finden, ausser, dass es "serious" und "internal" ist, und häufiger Leuten passiert, die mit Pro*C arbeiten ... ich bin für jede Hilfe dankbar ...

  • #2
    Wieso schreibst Du da ein Programm? Es gibt den SQLLoader oder externe Tabellen.
    Dazu einen Direct Path Load und PQ. Schneller machst Du das mit keinen C Programm.

    Comment


    • #3
      Originally posted by TomT View Post
      Wieso schreibst Du da ein Programm?
      die Daten werden nach einer komplexen Logik transfomiert sowie mit Daten aus anderen Quellen verknüpft, bevor sie in die neuen Tabellen geschrieben werden.

      Comment


      • #4
        Hallo,

        ich denke Du hast eines oder mehrere von den Problemen:
        Dein Client mag Dich nicht, Dein Server mag Dich nicht oder die beiden können sich gegenseitig nicht leiden.

        Aber als konstruktive Anmerkung:
        Du solltest für jeden Thread eine eigene Connection zur Datenbank machen.

        Wenn das so ist: Verwendest du Shared oder Dedicated Server ? - vielleicht können auf Server-Seite nicht genügend Prozesse gestartet werden.
        Wie viele Sessions können auf der Datenbank gleichzeitig laufen ?
        Welche Oracle-Version verwendest Du überhaupt ?

        Vielleicht helfen Dir auch die Logs auf Serverseite weiter - bei so einem Fehler sollte sich ein Eintrag im udump-Verzeichnis finden lassen.

        Gruß
        Uschi

        Comment

        Working...
        X