En otras palabras:
Una transacción esta optimizada para ser CORTA.
Mientras puedes tener la BD abierta por horas ( y eso de estar abriendo/cerrando la BD no necesariamente es lo mejor, A MENOS QUE uses un pool de conexiones) , debes "abrir" BEGIN y "cerrar" COMMIT por cada conjunto atómico de operaciones (ie: Por cada BATCH que debe guardarse en un solo conjunto). Eso significa que tu código debe tener varios encapsulamientos de BEGIN/COMMIT.
P.D: Es un anti-patron tener un el componente de transacciones "global". Eso debes estar creándolo todo el tiempo.
P.D2: Si estas arrancando, intenta siempre usar la ultima version del motor de datos