PDA

View Full Version : SQL-Verbindungsserver zur iSeries über IBM OLE DB Provider



sieram
18-06-07, 14:05
Hallo zusammen,

ich habe folgendes Problem mit Datenaktualisierungen einer AS400-Tabelle über einen SQL-2005 Verbindungsserver:

Eine einfache Abfrage der Art:

update "ISERIES"."S658E27C"."TESTDT"."KUSTP" set KUPENA = 'X' where KUKNR = 10042

funktioniert einwandfrei.

sobald die Abfrage in Kombination mit einem Join einer SQL-Tabelle aufsgeführt wird:

update "ISERIES"."S658E27C"."TESTDT"."KUSTP" set KUPENA = 'X'
from "ISERIES"."S658E27C"."TESTDT"."KUSTP" A
inner join DWHTrans.dbo.tImport B
on A.KUFA = B.FirmaNr and A.KUKNR = B.KunNr where KUKNR = 10042

kommt folgende Fehlermeldung:

Der OLE DB-Anbieter "IBMDA400" für den Verbindungsserver "ISERIES" hat die Meldung "CPF4328: Teildatei KUSTP nicht in Journal *N aufgezeichnet.
" zurückgeben.

Wird anstelle eines updates ein select geschrieben, funktioniert auch diese Abfrage.

Hat jemand eine Idee ob vielleicht bestimmte Einstellungen im OLE DB-Treiber oder auf der AS400 dieses Problem lösen?

Vielen Dank im Voraus!
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

mwithake
18-06-07, 14:33
Soweit mir bekannt ist unterstützt die AS400 keine JOINS in einem UPDATE oder DELETE Statement.
Du kannst das aber mit einer EXISTS-Abfrage abhandeln.

sieram
18-06-07, 15:20
Vielen Dank für die rasche Antwort.

Die Abfrage

update "ISERIES"."S658E27C"."TESTDT"."KUSTP" set KUPENA = 'X'
from "ISERIES"."S658E27C"."TESTDT"."KUSTP" A
where exists (select 1 from DWHTrans.dbo.tImport B
where A.KUFA = B.FirmaNr and A.KUKNR = B.KunNr and A.KUDKS = B.DebKredKz)

schlägt auch fehl mit:

Der OLE DB-Anbieter "IBMDA400" für den Verbindungsserver "ISERIES" hat die Meldung "CPF4328: Teildatei KUSTP nicht in Journal *N aufgezeichnet.
" zurückgeben.

Sie würde auch nicht sehr weiterhelfen da ich mehrere Felder zu aktualisieren habe:

update AS400.Feld1 = SQL.Feld1, AS400.Feld2 = SQL.Feld2 ....
from AS400 inner join SQL ....

mwithake
18-06-07, 15:27
Ich kenne mich mit OLE DB nicht aus, aber auf der AS400 würde ich folgendes SQL-Statement verwenden:




update "ISERIES"."S658E27C"."TESTDT"."KUSTP" A set KUPENA = 'X'
where exists (select 1 from DWHTrans.dbo.tImport B
where A.KUFA = B.FirmaNr and A.KUKNR = B.KunNr and A.KUDKS = B.DebKredKz)

Fuerchau
18-06-07, 17:53
Die Fehlermeldung ist doch eindeutig:
Fehlendes Journal.

Suche mal die OLEDB-Einstellungen für Commit-Level und setze diese auf *NONE (oder das Äquivalent) da die Dateien wohl nicht aufgezeichnet werden.

Der Update scheint auch für die Dateien, die eigentlich nur gelesen werden, eine Journalaufzeichnung zu benötigen.