Если бы у меня была такая ситуация, я бы получил определения столбцов для двух таблиц в самом начале проблемы. Тогда, если бы они были идентичны, я бы начал с простого:
INSERT INTO BACKUP_TABLE
SELECT *
FROM PRIMARY_TABLE
Если бы они отличались, я бы продолжил, только если бы не было критических столбцов, отсутствующих в резервной таблице. В этом случае я бы использовал эту форму для резервной копии:
INSERT INTO BACKUP_TABLE (<list of columns>)
SELECT <list of columns>
FROM PRIMARY_TABLE
Но я бы также беспокоился о том, что произойдет, если я просто остановлю программу с ошибкой, поэтому у меня может даже быть план резервного копирования, где я буду использовать вторую форму для столбцов, которые находятся в обеих таблицах, а также для дампа текстовый файл с PK и столбцами, отсутствующими в резервной копии. Также зарегистрируйте ошибку, даже если кажется, что программа завершилась нормально. Таким образом, вы можете восстановить данные, если произойдет худшее.
Действительно, это признак плохих процессов где-то, которые следует устранить, но защитное программирование может помочь сделать это проблемой кого-то другого, а не вашей. Если они не замечают сообщение об ошибке в журнале, которое сообщает им о дампе текста с отсутствующими столбцами, то это не ваша ошибка.
Но, если вы не защитите код и произойдет худшее, это будет частично ваша вина.