Hi hotti,
Weder am Oracle-Server oder am MSSQL-Server noch an den Proceduren wurde etwas geändert (Das letzte Mal vor 7 Jahren).
Ein Überlegung erster Ordnung sagt mir, dass Du das eigentliche Problem seit 7 Jahren mit Dir rumschleppst.
Da liegst Du nicht falsch ;-)) Zu meiner Entschuldigung: Damals gab es noch einen internen DB-Admin, der sich bemühte. Nachdem dieser nicht mehr verfügbar war, ist das Problem geschoben worden. Weil es auch nur selten auftrat. Allerdings hätte man (ich) spätestens aktiv werden müssen, als man per crontab automatisch reagiert hat.
Hab ich auch schon erlebt, dass der Listener stirbt ohne Auauaa zu sagen. Syntax ok, aber es waren einfach zuviele Daten mit Stringoperationen. Da gibts in Oracle eine Begrenzung. Schau Dir die Daten an, die da bewegt werden, meine Lösung (ist schon par Jahre her) bestand darin, die Daten auf mehrere Statements aufzuteilen, was zwar mehr Netzwerktraffic erzeugte aber auf Dauer funktionierte.
Ich weiß nicht, wie ich eine der Update-Aufgaben auf mehrere Statements aufteilen könnte.
Hier exemplarisch ein Beispiel für eine Tabelle (von 36). Der Aufbau ist nahezu identisch bei allen.
if (@tablename = 'T_AI_SPRACHE') and exists (select 1 from oradoc..ORADOC.VIEW_T_AI_SPRACHE)
begin
select @updcount = 0,
@inscount = 0,
@actcount = 0,
@error = 0
select @actcount = count(1)
from oradoc..ORADOC.VIEW_T_AI_SPRACHE
where abs(lngSYNCID) > @syncid_mssql
update firma.myweb.T_AI_SPRACHE
set LNGSYNCID = s.LNGSYNCID,
LNGAUTOID = s.LNGAUTOID,
STRBESCHREIBUNG = s.STRBESCHREIBUNG,
INTREIHENFOLGE = s.INTREIHENFOLGE
from firma.myweb.T_AI_SPRACHE d join oradoc..ORADOC.VIEW_T_AI_SPRACHE s on d.INTAIID = s.INTAIID
and d.INTLANGID = s.INTLANGID
where abs(s.lngSYNCID) between @syncid_mssql+1 and @syncid
select @error = @@error,
@updcount = @@rowcount
If @error <> 0
Begin
Set @errortext = 'Fehler beim Update der Tabelle T_AI_SPRACHE'
exec firma.myoracle.sp_kut_import_error @p_error=@error, @p_errortext=@errortext
End
ELSE
BEGIN
set @updtext = @updtext + cast(@updcount as varchar(5)) + ' DS in T_AI_SPRACHE aktualisiert' + @crlf
insert into firma.myweb.T_AI_SPRACHE (
INTAIID, LNGSYNCID, LNGAUTOID, INTLANGID, STRBESCHREIBUNG, INTREIHENFOLGE)
select INTAIID, LNGSYNCID, LNGAUTOID, INTLANGID, STRBESCHREIBUNG, INTREIHENFOLGE
from oradoc..ORADOC.VIEW_T_AI_SPRACHE s
where not exists (select 1 from firma.myweb.T_AI_SPRACHE d where d.INTAIID = s.INTAIID
and d.INTLANGID = s.INTLANGID)
select @error = @@error,
@inscount = @@rowcount
If @error <> 0
Begin
Set @errortext = 'Fehler bei Import der Tabelle T_AI_SPRACHE'
exec firma.myoracle.sp_kut_import_error @p_error=@error, @p_errortext=@errortext
End
ELSE
BEGIN
set @updtext = @updtext + cast(@inscount as varchar(5)) + ' DS in T_AI_SPRACHE eingefügt' + @crlf
if @updcount + @inscount = @actcount and @testflg = 0
begin
update oradoc..ORADOC.T_SYNCTABELLE set
syncid_mssql = @syncid,
aender_datum_mssql = getdate(),
aender_bediener_mssql = user
where tabellenname = @tablename
end
end
END
end