Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sql*Loader: Unique Constraint trotz Sequence

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich importiere über den sql*loader Daten in eine Tabelle, auf der ein PK liegt. Dieser PK wird über eine Sequenz befüllt. Neuerdings läuft mir dieses Script auf "unique constraint"-Fehler - immer bei anderen Datensätzen (wenn ich den Versuch mehrmals starte).

Hat jemand eine Idee woran das liegen kann - der PK wird nur über die Sequenz gefüllt.

Gibt es eine Möglichkeit, mir vom sql*loader das komplette Statement ausgeben zu lassen, welches auf Fehler gelaufen ist?

Über Hilfe (wenn's auch nur Ideen sind) bin ich sehr dankbar.

Hallo zusammen,

ich importiere über den sql*loader Daten in eine Tabelle, auf der ein PK liegt. Dieser PK wird über eine Sequenz befüllt. Neuerdings läuft mir dieses Script auf "unique constraint"-Fehler - immer bei anderen Datensätzen (wenn ich den Versuch mehrmals starte).

Hat jemand eine Idee woran das liegen kann - der PK wird nur über die Sequenz gefüllt.

Gibt es eine Möglichkeit, mir vom sql*loader das komplette Statement ausgeben zu lassen, welches auf Fehler gelaufen ist?

Über Hilfe (wenn's auch nur Ideen sind) bin ich sehr dankbar.

Hallo,

Sind auf der Zieltabelle evtl. Trigger aktiv, welche auch versuchen, eine Sequence zu schreiben. ?

Gruss

Hi dbwizard,

auf der Zieltabelle sind keine Trigger aktiv.

Von 100T zu importierenden Datensätzen, fallen 50 mit diesem Fehler raus. Aber mit jedem Versuch sind es 50 andere. Allerdings entsteht ein Fehler ziemlich regelmäßig, nämlich alle 2T Datensätze (plus/minus Toleranz) - will damit sagen, dass die Fehler nicht erst nach z.B. 50T Datensätzen entstehen.

Hi dbwizard,

auf der Zieltabelle sind keine Trigger aktiv.

Von 100T zu importierenden Datensätzen, fallen 50 mit diesem Fehler raus. Aber mit jedem Versuch sind es 50 andere. Allerdings entsteht ein Fehler ziemlich regelmäßig, nämlich alle 2T Datensätze (plus/minus Toleranz) - will damit sagen, dass die Fehler nicht erst nach z.B. 50T Datensätzen entstehen.

Ist den die Zieltabelle leer, wenn du den Import startest ?

In der Zieltabelle befinden sich ca. 4 Mio. Datensätze.

In der Zieltabelle befinden sich ca. 4 Mio. Datensätze.

Hast du ein BAD-File im SQLLoader Script definiert ? Wenn nicht, dann versuche dies mal, damit solltest du feststellen können, welche Datensätze das Problem verursachen.

Gruss

Ein bad-File wird mir erstellt, allerdings ändern sich die fehlerhaften Datensätze permanent. Also es liegt nicht an den Daten, da beim nächsten Lauf, die Daten vom vorigen vorhanden sind.

Ein bad-File wird mir erstellt, allerdings ändern sich die fehlerhaften Datensätze permanent. Also es liegt nicht an den Daten, da beim nächsten Lauf, die Daten vom vorigen vorhanden sind.

Da bleibt dir nichts anderes übrig, als zu schauen, warum die Datensätz im BAD File nicht reingekommen sind ? Irgendwo wird offensichtlich ein Unique Constraint (Dass muss nicht notwendigerweise der PK sein), verletzt.

- Nimm einen der Row's aus dem BAD File und probiere ein "manuelles" Insert in die Betreffende Tabelle und schaue nach, wo der Fehler steckt

Gruss

Hi,

die Prüfung auf Eindeutigkeit ist nicht ganz trivial, vor allem beim SQL Loader, der ja Blockweise arbeitet bzw. falls Du einen Direct Load machst (Direct=TRUE) noch eine weitere Komponente dazu kommt. Daher sind die Sätze die dir rausfliegen unterschiedlich.

Gibt es neben dem PK noch einen weiteren Unique Constraint auf der Tabelle? Wird die Tabelle parallel geändert während Du Daten lädst? Verwendest Du einen Direct Load?

Dim

Einen Datensatz zu nehmen, der mir rausfliegt nutzt mir nix, da mir nicht der Wert der Sequence ausgegeben wird (der, der den Fehler wohl verursacht) - oder kann ich das komplette sql-statement in einer logfile ausgeben lassen?

Beim Aufruf gebe ich kein DIRECT=TRUE mit, weshalb ich davon ausgehe, dass ich dies nicht benutze.

Es liegt keine weitere PK auf der Tabelle.

Die Tabelle wird nicht parallel verändert.

meinte doch UI statt PK! :upps

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.