public void restoreAll() {
		debug("starting full restore at " + new Date());
		ZipFile zipFile = null;
		Connection con = null;
		try {
			con = DriverManager.getConnection(jdbcUrl);
			con.setAutoCommit(false);
			zipFile = new ZipFile(file);

			timerStart("schemas");
			restoreSchemasSql(zipFile, con);
			List<String> schemas = schemasInBackup();
			setTotalCount(schemas.size());
			timerEnd("schemas");

			int count = 0;
			for (String schemaName : schemas) {
				restoreSchema(schemaName, schemaName, schemaName, zipFile, con);
				if (++count%100 == 1) con.commit(); // commit every 100 schemas
			}

			con.commit();
			printTimings();
		} catch (Exception e) {
			try {
				if (con != null) con.rollback();
			} catch (SQLException ignore) {}
			throw new RuntimeException(e.getMessage(), e);
		} finally {
			try {
				if (con != null) con.close();
			} catch (SQLException ignore) {}
			try {
				if (zipFile != null) zipFile.close();
			} catch (IOException ignore) {}
		}
		debug("finished full restore at " + new Date());
	}