вы правы, что mnesia: clear_table (names) не очистит всю фрагментированную таблицу.
mnesia: clear_table / 1 уже выполняется внутри транзакции, поэтому его нельзя использовать с mnesia: activity транзакция AccessContext.
вместо этого попробуйте:
mnesia:activity(sync_dirty, fun mnesia:clear_table/1, [names], mnesia_frag).
если вы посмотрите на исходный код в mnesia_frag.erl, вы увидите, что он просто вызывает mnesia: clear_table / 1 для каждой отдельной таблицы. Предполагая 4 фрага, вышеприведенное в основном эквивалентно:
[mnesia:clear_table(T) || T <- [names, names_frag2, names_frag3, names_frag4]].
имена таблиц:
mnesia_frag:frag_names(names).