The tricky part here does not seem to be the insert-records-to-archive, but the delete-from-original-table.

Seems to me that you could run a single direct path (append) insert into the archive table pretty efficiently for all records where timestamp < some date, possibly with NOLOGGING although you'd want to run a backup afterwards. You could then run a simple loop deleting the rows from the original table 1000 at a time (although I expect you could go higher than that) until no rows are deleted.