sql >> Base de Datos >  >> RDS >> Oracle

Oracle elimina datos de la tabla remota de SQL Server

Creo que la mejor pregunta es:¿Cuál es la mejor manera de mover datos de SQL Server a Oracle, que elimina de MSSS cada fila entregada con éxito?

Haces esto en un ciclo para asegurarte de que cuando agregas a uno, eliminas del otro.

Si ocurre algún error aleatorio desconocido en la inserción, evitará eliminar el registro de origen.

Esa es la esencia, ¿verdad?

Hay formas mucho mejores de manejar este tipo de movimiento de datos que comprometerse después de cada bucle de transacción distribuida de inserción/eliminación.

En primer lugar, una confirmación en medio de un bucle es simplemente mala. En Oracle, es una buena manera de hacer que otras sesiones obtengan errores ORA-01555. Así que lo evitaría si es posible.

En segundo lugar, debe saber absolutamente cuáles son las posibles causas de errores razonables en la inserción. Viola la longitud de una columna, un FK, un Reino Unido... hay una lista finita de lo que podría romperse en la inserción. Las malas rupturas grandes y peludas, como No se puede extender el espacio de tablas, DEBERÍAN hacer que el sistema se detuviera. No hay necesidad de atrapar para eso. Pero los problemas de aplicaciones como los que mencioné son fáciles de manejar.

Si estuviera escribiendo esto, insertaría de forma masiva todas las filas usando el LOG de Oracle ERRORES EN para evitar un ROLLBACK completo cuando solo una o pocas filas fallan.

Ahora tiene una tabla que contiene cada fila fallida y la razón por la que falló. Ahora puede, en el lado del servidor SQL, eliminar todas las filas que NO ESTÁN EN la lista de ID fallidos.

Has logrado lo mismo pero con operaciones basadas en conjuntos en lugar de LENTO A LENTO, ooops, me refiero a fila por fila.