Jag tror att den bättre frågan är:Vad är det bästa sättet att flytta data från SQL Server till Oracle som raderar varje framgångsrikt levererad rad från MSSS?
Du gör dessa i en slinga för att se till att när du lägger till i den ena, tar du bort från den andra.
Om någon okänd slumpmässig sak händer med fel på infogningen, undviker du att ta bort källposten.
Det är kärnan, eller hur?
Det finns mycket bättre sätt att hantera den här typen av datarörelse än att begå efter varje infoga/ta bort distribuerad transaktionsslinga.
Först av en commit mitt i en loop är bara dålig. I Oracle är det ett bra sätt att få andra sessioner att få ORA-01555-fel. Så det skulle jag undvika om möjligt.
För det andra bör du absolut veta vad som är möjliga orsaker till rimliga fel vid insättningen. Du bryter mot en kolumnlängd, en FK, en UK... det finns en begränsad lista över vad som kan gå sönder vid insättning. Stora håriga dåliga raster som Det går inte att utöka bordsutrymmet SKA få systemet att stanna. Inget behov av att fälla för det. Men programproblem som jag nämnde är lätta att hantera.
Om jag skulle skriva det här, skulle jag infoga alla rader i grupp med Oracles LOGG FEL I för att undvika en fullständig ROLLBACK när endast en/få rad(er) misslyckas.
Nu har du en tabell som innehåller varje misslyckad rad och anledningen till att den misslyckades. Nu kan du på SQL Server-sidan ta bort alla rader INTE I listan över misslyckade ID:n.
Du har åstadkommit samma sak men med Set-baserade operationer istället för LÅNGSAMT FÖR LÅNGSAMT, oj, jag menar rad för rad.