The server must be started to use ODBC, i.e., it must be multi-user.
Break up your transaction into smaller groups of records. Don't confuse database transaction rules with business transaction rules. There is no database rule that says all large groups of records have to be inserted in a single reversible transaction -- that's a business rule. Using database transaction semantics to enforce business rules leads to these sorts of problems. Instead develop a method to insert the records in smaller chunks and, if need be, remove them in chunks. (If you do this well a nice side effect might be that you can restart a failed load in the middle...)